From 9e5c74194111824d4fabc2a311ce1ad91d051ad9 Mon Sep 17 00:00:00 2001 From: Martin Porwoll Date: Sun, 14 Dec 2025 00:58:30 +0000 Subject: [PATCH] feat: add priority collections and advanced content blocks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New Collections: - Events: Veranstaltungen mit Datum, Ort, Registrierung - Jobs: Stellenangebote mit Standort und Bewerbungsfrist - Locations: Standorte mit Adresse, Kontakt, Öffnungszeiten - Partners: Partner/Kunden mit Logo und Beschreibung - Downloads: Dateien mit Kategorisierung und Tracking New Blocks: - EventsBlock: Veranstaltungslisten mit Kalender-Ansicht - JobsBlock: Stellenanzeigen mit Filterfunktion - LocationsBlock: Standort-Karten und Listen - PricingBlock: Preistabellen mit Feature-Vergleich - TabsBlock: Tabbed Content mit verschiedenen Stilen - AccordionBlock: FAQ/Accordion mit Animationen - ComparisonBlock: Vergleichstabellen (Tabelle, Karten, Pro/Contra) - StatsBlock: Statistiken mit Counter-Animation - LogoGridBlock: Logo-Wolken und Partner-Galerien - MapBlock: Interaktive Karten mit Markern - DownloadsBlock: Download-Listen mit Kategorien All collections support multi-tenant isolation and localization. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/blocks/AccordionBlock.ts | 400 + src/blocks/ComparisonBlock.ts | 598 + src/blocks/DownloadsBlock.ts | 457 + src/blocks/EventsBlock.ts | 320 + src/blocks/JobsBlock.ts | 436 + src/blocks/LocationsBlock.ts | 386 + src/blocks/LogoGridBlock.ts | 422 + src/blocks/MapBlock.ts | 588 + src/blocks/PricingBlock.ts | 509 + src/blocks/StatsBlock.ts | 372 + src/blocks/TabsBlock.ts | 381 + src/blocks/index.ts | 15 + src/collections/Downloads.ts | 254 + src/collections/Events.ts | 757 + src/collections/Jobs.ts | 455 + src/collections/Locations.ts | 419 + src/collections/Pages.ts | 26 + src/collections/Partners.ts | 274 + ...0251214_000000_add_priority_collections.ts | 604 + src/migrations/index.ts | 32 +- src/payload-generated-schema.ts | 12306 +++++++++++++++- src/payload-types.ts | 3776 ++++- src/payload.config.ts | 24 +- 23 files changed, 23275 insertions(+), 536 deletions(-) create mode 100644 src/blocks/AccordionBlock.ts create mode 100644 src/blocks/ComparisonBlock.ts create mode 100644 src/blocks/DownloadsBlock.ts create mode 100644 src/blocks/EventsBlock.ts create mode 100644 src/blocks/JobsBlock.ts create mode 100644 src/blocks/LocationsBlock.ts create mode 100644 src/blocks/LogoGridBlock.ts create mode 100644 src/blocks/MapBlock.ts create mode 100644 src/blocks/PricingBlock.ts create mode 100644 src/blocks/StatsBlock.ts create mode 100644 src/blocks/TabsBlock.ts create mode 100644 src/collections/Downloads.ts create mode 100644 src/collections/Events.ts create mode 100644 src/collections/Jobs.ts create mode 100644 src/collections/Locations.ts create mode 100644 src/collections/Partners.ts create mode 100644 src/migrations/20251214_000000_add_priority_collections.ts diff --git a/src/blocks/AccordionBlock.ts b/src/blocks/AccordionBlock.ts new file mode 100644 index 0000000..c7a2d99 --- /dev/null +++ b/src/blocks/AccordionBlock.ts @@ -0,0 +1,400 @@ +import type { Block } from 'payload' + +/** + * Accordion Block + * + * Aufklappbare Inhaltsbereiche für FAQs, Dokumentation, + * Produktdetails etc. Mehr Flexibilität als der FAQ-Block. + */ +export const AccordionBlock: Block = { + slug: 'accordion', + labels: { + singular: 'Accordion', + plural: 'Accordions', + }, + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + }, + // Accordion Items + { + name: 'items', + type: 'array', + label: 'Einträge', + minRows: 1, + fields: [ + { + name: 'title', + type: 'text', + required: true, + label: 'Titel', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + { + name: 'icon', + type: 'select', + label: 'Icon', + options: [ + { label: 'Keines', value: 'none' }, + { label: 'Info', value: 'info' }, + { label: 'Frage', value: 'question' }, + { label: 'Stern', value: 'star' }, + { label: 'Häkchen', value: 'check' }, + { label: 'Warnung', value: 'warning' }, + { label: 'Dokument', value: 'document' }, + { label: 'Benutzer', value: 'user' }, + { label: 'Einstellungen', value: 'settings' }, + { label: 'Code', value: 'code' }, + { label: 'Lampe', value: 'lightbulb' }, + { label: 'Schloss', value: 'lock' }, + ], + }, + { + name: 'customIcon', + type: 'upload', + relationTo: 'media', + label: 'Eigenes Icon', + }, + // Content + { + name: 'contentType', + type: 'select', + defaultValue: 'richtext', + label: 'Content-Typ', + options: [ + { label: 'Rich Text', value: 'richtext' }, + { label: 'Bild & Text', value: 'image-text' }, + { label: 'Liste', value: 'list' }, + { label: 'Tabelle', value: 'table' }, + { label: 'Code', value: 'code' }, + ], + }, + // Rich Text + { + name: 'content', + type: 'richText', + label: 'Inhalt', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'richtext', + }, + }, + // Image & Text + { + name: 'imgTxt', + type: 'group', + label: 'Bild & Text', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'image-text', + }, + fields: [ + { + name: 'img', + type: 'upload', + relationTo: 'media', + label: 'Bild', + }, + { + name: 'imgPos', + type: 'select', + defaultValue: 'left', + label: 'Bild-Position', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Rechts', value: 'right' }, + ], + }, + { + name: 'text', + type: 'richText', + label: 'Text', + localized: true, + }, + ], + }, + // List + { + name: 'listItems', + type: 'array', + label: 'Listen-Einträge', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'list', + }, + fields: [ + { + name: 'text', + type: 'text', + required: true, + label: 'Text', + localized: true, + }, + { + name: 'icon', + type: 'select', + defaultValue: 'check', + label: 'Icon', + options: [ + { label: 'Häkchen', value: 'check' }, + { label: 'Punkt', value: 'dot' }, + { label: 'Pfeil', value: 'arrow' }, + { label: 'Stern', value: 'star' }, + { label: 'X', value: 'x' }, + ], + }, + ], + }, + // Table + { + name: 'tableData', + type: 'group', + label: 'Tabelle', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'table', + }, + fields: [ + { + name: 'headers', + type: 'array', + label: 'Spaltenüberschriften', + fields: [ + { + name: 'text', + type: 'text', + label: 'Text', + localized: true, + }, + ], + }, + { + name: 'rows', + type: 'array', + label: 'Zeilen', + fields: [ + { + name: 'cells', + type: 'array', + label: 'Zellen', + fields: [ + { + name: 'text', + type: 'text', + label: 'Text', + localized: true, + }, + ], + }, + ], + }, + ], + }, + // Code + { + name: 'codeContent', + type: 'group', + label: 'Code', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'code', + }, + fields: [ + { + name: 'language', + type: 'select', + label: 'Sprache', + options: [ + { label: 'JavaScript', value: 'javascript' }, + { label: 'TypeScript', value: 'typescript' }, + { label: 'HTML', value: 'html' }, + { label: 'CSS', value: 'css' }, + { label: 'JSON', value: 'json' }, + { label: 'Python', value: 'python' }, + { label: 'Bash', value: 'bash' }, + ], + }, + { + name: 'code', + type: 'code', + label: 'Code', + }, + ], + }, + // Status/Badge + { + name: 'badge', + type: 'text', + label: 'Badge', + admin: { + description: 'z.B. "Neu", "Wichtig", "Pro"', + }, + }, + { + name: 'badgeColor', + type: 'select', + label: 'Badge-Farbe', + options: [ + { label: 'Grau', value: 'gray' }, + { label: 'Blau', value: 'blue' }, + { label: 'Grün', value: 'green' }, + { label: 'Gelb', value: 'yellow' }, + { label: 'Rot', value: 'red' }, + { label: 'Lila', value: 'purple' }, + ], + admin: { + condition: (data, siblingData) => siblingData?.badge, + }, + }, + // State + { + name: 'defaultOpen', + type: 'checkbox', + defaultValue: false, + label: 'Standardmäßig geöffnet', + }, + { + name: 'disabled', + type: 'checkbox', + defaultValue: false, + label: 'Deaktiviert', + }, + ], + }, + // Verhalten + { + name: 'behavior', + type: 'select', + defaultValue: 'single', + label: 'Verhalten', + options: [ + { label: 'Nur eines offen (klassisch)', value: 'single' }, + { label: 'Mehrere gleichzeitig', value: 'multiple' }, + { label: 'Mindestens eines offen', value: 'at-least-one' }, + ], + }, + { + name: 'expandFirst', + type: 'checkbox', + defaultValue: false, + label: 'Erstes Element standardmäßig öffnen', + }, + { + name: 'animated', + type: 'checkbox', + defaultValue: true, + label: 'Animierter Übergang', + }, + // Stil + { + name: 'style', + type: 'select', + defaultValue: 'default', + label: 'Stil', + options: [ + { label: 'Standard', value: 'default' }, + { label: 'Bordered', value: 'bordered' }, + { label: 'Separated', value: 'separated' }, + { label: 'Flush', value: 'flush' }, + { label: 'Rounded', value: 'rounded' }, + ], + }, + { + name: 'iconPosition', + type: 'select', + defaultValue: 'right', + label: 'Pfeil-Position', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Rechts', value: 'right' }, + ], + }, + { + name: 'iconStyle', + type: 'select', + defaultValue: 'chevron', + label: 'Pfeil-Stil', + options: [ + { label: 'Chevron (>)', value: 'chevron' }, + { label: 'Plus/Minus', value: 'plus-minus' }, + { label: 'Pfeil', value: 'arrow' }, + { label: 'Caret', value: 'caret' }, + ], + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'full', + label: 'Layout', + options: [ + { label: 'Volle Breite', value: 'full' }, + { label: 'Zentriert', value: 'centered' }, + { label: 'Schmal', value: 'narrow' }, + { label: 'Zweispaltig', value: 'two-column' }, + ], + }, + { + name: 'titleSize', + type: 'select', + defaultValue: 'medium', + label: 'Titel-Größe', + options: [ + { label: 'Klein', value: 'small' }, + { label: 'Mittel', value: 'medium' }, + { label: 'Groß', value: 'large' }, + ], + }, + // Styling + { + name: 'backgroundColor', + type: 'select', + defaultValue: 'white', + label: 'Hintergrund', + options: [ + { label: 'Weiß', value: 'white' }, + { label: 'Hell (Grau)', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Transparent', value: 'transparent' }, + ], + }, + { + name: 'headerBackground', + type: 'select', + defaultValue: 'white', + label: 'Header-Hintergrund', + options: [ + { label: 'Weiß', value: 'white' }, + { label: 'Hell (Grau)', value: 'light' }, + { label: 'Transparent', value: 'transparent' }, + ], + }, + // Schema.org + { + name: 'enableSchemaOrg', + type: 'checkbox', + defaultValue: false, + label: 'Schema.org FAQ generieren', + admin: { + description: 'Wenn aktiviert, wird FAQ Structured Data generiert', + }, + }, + ], +} diff --git a/src/blocks/ComparisonBlock.ts b/src/blocks/ComparisonBlock.ts new file mode 100644 index 0000000..2cebfd9 --- /dev/null +++ b/src/blocks/ComparisonBlock.ts @@ -0,0 +1,598 @@ +import type { Block } from 'payload' + +/** + * Comparison Block + * + * Vergleichstabellen für Produkte, Dienstleistungen, Pläne etc. + * Unterstützt verschiedene Layouts und Darstellungsformen. + */ +export const ComparisonBlock: Block = { + slug: 'comparison', + labels: { + singular: 'Vergleich', + plural: 'Vergleiche', + }, + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + }, + // Vergleichstyp + { + name: 'comparisonType', + type: 'select', + defaultValue: 'table', + label: 'Vergleichs-Typ', + options: [ + { label: 'Tabelle', value: 'table' }, + { label: 'Karten nebeneinander', value: 'cards' }, + { label: 'Vorher/Nachher', value: 'before-after' }, + { label: 'Pro/Contra', value: 'pros-cons' }, + { label: 'Feature-Matrix', value: 'feature-matrix' }, + ], + }, + // Tabellen-Vergleich + { + name: 'tbl', + type: 'group', + label: 'Tabellen-Vergleich', + admin: { + condition: (data, siblingData) => + siblingData?.comparisonType === 'table' || + siblingData?.comparisonType === 'feature-matrix', + }, + fields: [ + // Spalten (Produkte/Optionen) + { + name: 'columns', + type: 'array', + label: 'Spalten (Optionen)', + minRows: 2, + maxRows: 6, + fields: [ + { + name: 'name', + type: 'text', + required: true, + label: 'Name', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + { + name: 'image', + type: 'upload', + relationTo: 'media', + label: 'Bild/Logo', + }, + { + name: 'price', + type: 'text', + label: 'Preis', + localized: true, + }, + { + name: 'isHighlighted', + type: 'checkbox', + defaultValue: false, + label: 'Hervorheben', + }, + { + name: 'highlightLabel', + type: 'text', + label: 'Highlight-Label', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.isHighlighted, + description: 'z.B. "Empfohlen", "Bestseller"', + }, + }, + { + name: 'ctaText', + type: 'text', + label: 'Button-Text', + localized: true, + }, + { + name: 'ctaLink', + type: 'text', + label: 'Button-Link', + }, + ], + }, + // Zeilen (Features) + { + name: 'rows', + type: 'array', + label: 'Zeilen (Features)', + fields: [ + { + name: 'feature', + type: 'text', + required: true, + label: 'Feature', + localized: true, + }, + { + name: 'category', + type: 'text', + label: 'Kategorie', + admin: { + description: 'Für Gruppierung', + }, + }, + { + name: 'tooltip', + type: 'text', + label: 'Tooltip', + localized: true, + }, + { + name: 'values', + type: 'array', + label: 'Werte', + fields: [ + { + name: 'columnIndex', + type: 'number', + label: 'Spalten-Index', + admin: { + description: '0 = erste Spalte', + }, + }, + { + name: 'valueType', + type: 'select', + defaultValue: 'text', + label: 'Wert-Typ', + options: [ + { label: 'Text', value: 'text' }, + { label: 'Ja/Nein', value: 'boolean' }, + { label: 'Teilweise', value: 'partial' }, + { label: 'Nicht verfügbar', value: 'na' }, + ], + }, + { + name: 'textValue', + type: 'text', + label: 'Text-Wert', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.valueType === 'text', + }, + }, + { + name: 'booleanValue', + type: 'checkbox', + label: 'Ja/Nein', + admin: { + condition: (data, siblingData) => siblingData?.valueType === 'boolean', + }, + }, + { + name: 'partialNote', + type: 'text', + label: 'Hinweis', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.valueType === 'partial', + description: 'z.B. "Eingeschränkt", "Mit Aufpreis"', + }, + }, + ], + }, + ], + }, + ], + }, + // Karten-Vergleich + { + name: 'crd', + type: 'group', + label: 'Karten-Vergleich', + admin: { + condition: (data, siblingData) => siblingData?.comparisonType === 'cards', + }, + fields: [ + { + name: 'items', + type: 'array', + label: 'Karten', + minRows: 2, + maxRows: 4, + fields: [ + { + name: 'title', + type: 'text', + required: true, + label: 'Titel', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + { + name: 'image', + type: 'upload', + relationTo: 'media', + label: 'Bild', + }, + { + name: 'description', + type: 'richText', + label: 'Beschreibung', + localized: true, + }, + { + name: 'features', + type: 'array', + label: 'Features', + fields: [ + { + name: 'text', + type: 'text', + required: true, + localized: true, + }, + { + name: 'included', + type: 'checkbox', + defaultValue: true, + }, + ], + }, + { + name: 'price', + type: 'text', + label: 'Preis', + localized: true, + }, + { + name: 'ctaText', + type: 'text', + label: 'Button-Text', + localized: true, + }, + { + name: 'ctaLink', + type: 'text', + label: 'Button-Link', + }, + { + name: 'isHighlighted', + type: 'checkbox', + defaultValue: false, + label: 'Hervorheben', + }, + { + name: 'accentColor', + type: 'select', + label: 'Akzentfarbe', + options: [ + { label: 'Standard', value: 'default' }, + { label: 'Primär', value: 'primary' }, + { label: 'Sekundär', value: 'secondary' }, + { label: 'Grün', value: 'green' }, + { label: 'Blau', value: 'blue' }, + ], + }, + ], + }, + ], + }, + // Vorher/Nachher + { + name: 'beforeAfter', + type: 'group', + label: 'Vorher/Nachher', + admin: { + condition: (data, siblingData) => siblingData?.comparisonType === 'before-after', + }, + fields: [ + { + name: 'beforeLabel', + type: 'text', + defaultValue: 'Vorher', + label: 'Vorher-Label', + localized: true, + }, + { + name: 'afterLabel', + type: 'text', + defaultValue: 'Nachher', + label: 'Nachher-Label', + localized: true, + }, + { + name: 'items', + type: 'array', + label: 'Vergleiche', + fields: [ + { + name: 'title', + type: 'text', + label: 'Titel', + localized: true, + }, + { + name: 'beforeImage', + type: 'upload', + relationTo: 'media', + label: 'Vorher-Bild', + }, + { + name: 'afterImage', + type: 'upload', + relationTo: 'media', + label: 'Nachher-Bild', + }, + { + name: 'beforeText', + type: 'textarea', + label: 'Vorher-Text', + localized: true, + }, + { + name: 'afterText', + type: 'textarea', + label: 'Nachher-Text', + localized: true, + }, + ], + }, + { + name: 'displayStyle', + type: 'select', + defaultValue: 'slider', + label: 'Darstellung', + options: [ + { label: 'Slider (Schieberegler)', value: 'slider' }, + { label: 'Nebeneinander', value: 'side-by-side' }, + { label: 'Übereinander', value: 'stacked' }, + { label: 'Flip', value: 'flip' }, + ], + }, + ], + }, + // Pro/Contra + { + name: 'prosCons', + type: 'group', + label: 'Pro/Contra', + admin: { + condition: (data, siblingData) => siblingData?.comparisonType === 'pros-cons', + }, + fields: [ + { + name: 'prosLabel', + type: 'text', + defaultValue: 'Vorteile', + label: 'Vorteile-Label', + localized: true, + }, + { + name: 'consLabel', + type: 'text', + defaultValue: 'Nachteile', + label: 'Nachteile-Label', + localized: true, + }, + { + name: 'items', + type: 'array', + label: 'Einträge', + fields: [ + { + name: 'title', + type: 'text', + label: 'Titel', + localized: true, + }, + { + name: 'image', + type: 'upload', + relationTo: 'media', + label: 'Bild', + }, + { + name: 'pros', + type: 'array', + label: 'Vorteile', + fields: [ + { + name: 'text', + type: 'text', + required: true, + localized: true, + }, + ], + }, + { + name: 'cons', + type: 'array', + label: 'Nachteile', + fields: [ + { + name: 'text', + type: 'text', + required: true, + localized: true, + }, + ], + }, + { + name: 'verdict', + type: 'textarea', + label: 'Fazit', + localized: true, + }, + { + name: 'rating', + type: 'number', + min: 0, + max: 5, + label: 'Bewertung (0-5)', + }, + ], + }, + ], + }, + // Layout-Optionen + { + name: 'stickyHeader', + type: 'checkbox', + defaultValue: true, + label: 'Sticky Header', + admin: { + condition: (data, siblingData) => + siblingData?.comparisonType === 'table' || + siblingData?.comparisonType === 'feature-matrix', + }, + }, + { + name: 'showCategories', + type: 'checkbox', + defaultValue: true, + label: 'Kategorien anzeigen', + admin: { + condition: (data, siblingData) => + siblingData?.comparisonType === 'table' || + siblingData?.comparisonType === 'feature-matrix', + }, + }, + { + name: 'collapsibleCategories', + type: 'checkbox', + defaultValue: false, + label: 'Kategorien einklappbar', + admin: { + condition: (data, siblingData) => + siblingData?.comparisonType === 'table' || + siblingData?.comparisonType === 'feature-matrix', + }, + }, + { + name: 'showRowDividers', + type: 'checkbox', + defaultValue: true, + label: 'Zeilen-Trennlinien', + }, + { + name: 'highlightDifferences', + type: 'checkbox', + defaultValue: false, + label: 'Unterschiede hervorheben', + }, + // Mobile + { + name: 'mobileView', + type: 'select', + defaultValue: 'scroll', + label: 'Mobile-Ansicht', + options: [ + { label: 'Horizontal scrollen', value: 'scroll' }, + { label: 'Karten gestapelt', value: 'stacked' }, + { label: 'Accordion', value: 'accordion' }, + { label: 'Dropdown-Auswahl', value: 'dropdown' }, + ], + }, + // Symbole + { + name: 'symbols', + type: 'group', + label: 'Symbole', + fields: [ + { + name: 'checkSymbol', + type: 'text', + defaultValue: '✓', + label: 'Häkchen-Symbol', + }, + { + name: 'crossSymbol', + type: 'text', + defaultValue: '✗', + label: 'X-Symbol', + }, + { + name: 'partialSymbol', + type: 'text', + defaultValue: '○', + label: 'Teilweise-Symbol', + }, + ], + }, + // Styling + { + name: 'backgroundColor', + type: 'select', + defaultValue: 'white', + label: 'Hintergrund', + options: [ + { label: 'Weiß', value: 'white' }, + { label: 'Hell (Grau)', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + ], + }, + { + name: 'tableStyle', + type: 'select', + defaultValue: 'bordered', + label: 'Tabellen-Stil', + options: [ + { label: 'Umrandet', value: 'bordered' }, + { label: 'Striped', value: 'striped' }, + { label: 'Minimalistisch', value: 'minimal' }, + { label: 'Karten', value: 'cards' }, + ], + admin: { + condition: (data, siblingData) => + siblingData?.comparisonType === 'table' || + siblingData?.comparisonType === 'feature-matrix', + }, + }, + { + name: 'checkColor', + type: 'select', + defaultValue: 'green', + label: 'Häkchen-Farbe', + options: [ + { label: 'Grün', value: 'green' }, + { label: 'Primär', value: 'primary' }, + { label: 'Blau', value: 'blue' }, + ], + }, + { + name: 'crossColor', + type: 'select', + defaultValue: 'red', + label: 'X-Farbe', + options: [ + { label: 'Rot', value: 'red' }, + { label: 'Grau', value: 'gray' }, + { label: 'Transparent', value: 'transparent' }, + ], + }, + ], +} diff --git a/src/blocks/DownloadsBlock.ts b/src/blocks/DownloadsBlock.ts new file mode 100644 index 0000000..dd0b574 --- /dev/null +++ b/src/blocks/DownloadsBlock.ts @@ -0,0 +1,457 @@ +import type { Block } from 'payload' + +/** + * DownloadsBlock + * + * Zeigt Downloads mit Filter- und Suchfunktion. + * Unterstützt verschiedene Layouts und Kategoriefilter. + */ +export const DownloadsBlock: Block = { + slug: 'downloads-block', + labels: { + singular: 'Downloads', + plural: 'Downloads', + }, + imageURL: '/assets/blocks/downloads.png', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + defaultValue: 'Downloads', + }, + { + name: 'subtitle', + type: 'textarea', + label: 'Untertitel', + localized: true, + }, + { + name: 'introduction', + type: 'richText', + label: 'Einleitungstext', + localized: true, + }, + // Datenquelle + { + name: 'source', + type: 'select', + defaultValue: 'all', + label: 'Downloads', + options: [ + { label: 'Alle aktiven', value: 'all' }, + { label: 'Nach Kategorie', value: 'category' }, + { label: 'Nach Tags', value: 'tags' }, + { label: 'Nur hervorgehobene', value: 'featured' }, + { label: 'Zugehörig zu Service', value: 'service' }, + { label: 'Zugehörig zu Produkt', value: 'product' }, + { label: 'Manuell auswählen', value: 'manual' }, + ], + }, + { + name: 'category', + type: 'select', + label: 'Kategorie', + options: [ + { label: 'Broschüre', value: 'brochure' }, + { label: 'Flyer', value: 'flyer' }, + { label: 'Katalog', value: 'catalog' }, + { label: 'Preisliste', value: 'pricelist' }, + { label: 'Formular', value: 'form' }, + { label: 'Anleitung', value: 'manual' }, + { label: 'Datenblatt', value: 'datasheet' }, + { label: 'Zertifikat', value: 'certificate' }, + { label: 'Pressematerial', value: 'press' }, + { label: 'Whitepaper', value: 'whitepaper' }, + { label: 'Präsentation', value: 'presentation' }, + { label: 'Vertrag/AGB', value: 'legal' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.source === 'category', + }, + }, + { + name: 'filterTags', + type: 'text', + label: 'Tags (kommagetrennt)', + admin: { + condition: (_, siblingData) => siblingData?.source === 'tags', + description: 'z.B. "produktinfo, 2024, neu"', + }, + }, + { + name: 'relatedService', + type: 'relationship', + relationTo: 'services', + label: 'Zugehöriger Service', + admin: { + condition: (_, siblingData) => siblingData?.source === 'service', + }, + }, + { + name: 'relatedProduct', + type: 'relationship', + relationTo: 'products', + label: 'Zugehöriges Produkt', + admin: { + condition: (_, siblingData) => siblingData?.source === 'product', + }, + }, + { + name: 'selectedDownloads', + type: 'relationship', + relationTo: 'downloads', + hasMany: true, + label: 'Downloads auswählen', + admin: { + condition: (_, siblingData) => siblingData?.source === 'manual', + }, + }, + { + name: 'limit', + type: 'number', + defaultValue: 20, + min: 1, + max: 100, + label: 'Maximale Anzahl', + }, + // Filter-UI + { + name: 'filters', + type: 'group', + label: 'Filter-Optionen', + fields: [ + { + name: 'showSearch', + type: 'checkbox', + defaultValue: true, + label: 'Suchfeld', + }, + { + name: 'showCategoryFilter', + type: 'checkbox', + defaultValue: true, + label: 'Kategorie-Filter', + }, + { + name: 'showFileTypeFilter', + type: 'checkbox', + defaultValue: false, + label: 'Dateityp-Filter', + }, + { + name: 'filterLayout', + type: 'select', + defaultValue: 'horizontal', + label: 'Filter-Layout', + options: [ + { label: 'Horizontal', value: 'horizontal' }, + { label: 'Sidebar', value: 'sidebar' }, + { label: 'Dropdown', value: 'dropdown' }, + ], + }, + ], + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'list', + label: 'Layout', + options: [ + { label: 'Liste', value: 'list' }, + { label: 'Karten', value: 'cards' }, + { label: 'Kompakt', value: 'compact' }, + { label: 'Tabelle', value: 'table' }, + { label: 'Akkordeon (nach Kategorie)', value: 'accordion' }, + ], + }, + { + name: 'columns', + type: 'select', + defaultValue: '1', + label: 'Spalten', + options: [ + { label: '1 Spalte', value: '1' }, + { label: '2 Spalten', value: '2' }, + { label: '3 Spalten', value: '3' }, + { label: '4 Spalten', value: '4' }, + ], + admin: { + condition: (_, siblingData) => + siblingData?.layout === 'cards' || siblingData?.layout === 'list', + }, + }, + // Anzuzeigende Informationen + { + name: 'show', + type: 'group', + label: 'Anzeigen', + fields: [ + { + name: 'thumbnail', + type: 'checkbox', + defaultValue: true, + label: 'Vorschaubild/Icon', + }, + { + name: 'description', + type: 'checkbox', + defaultValue: true, + label: 'Beschreibung', + }, + { + name: 'fileSize', + type: 'checkbox', + defaultValue: true, + label: 'Dateigröße', + }, + { + name: 'fileType', + type: 'checkbox', + defaultValue: true, + label: 'Dateityp', + }, + { + name: 'category', + type: 'checkbox', + defaultValue: true, + label: 'Kategorie', + }, + { + name: 'downloadCount', + type: 'checkbox', + defaultValue: false, + label: 'Download-Zähler', + }, + { + name: 'version', + type: 'checkbox', + defaultValue: false, + label: 'Version', + }, + { + name: 'lastUpdated', + type: 'checkbox', + defaultValue: false, + label: 'Letztes Update', + }, + ], + }, + // Download-Verhalten + { + name: 'downloadBehavior', + type: 'group', + label: 'Download-Verhalten', + fields: [ + { + name: 'directDownload', + type: 'checkbox', + defaultValue: true, + label: 'Direkter Download', + admin: { + description: 'Datei direkt herunterladen vs. Vorschau öffnen', + }, + }, + { + name: 'trackDownloads', + type: 'checkbox', + defaultValue: true, + label: 'Downloads zählen', + }, + { + name: 'openInNewTab', + type: 'checkbox', + defaultValue: false, + label: 'In neuem Tab öffnen', + }, + ], + }, + // File-Type Icons + { + name: 'fileIcons', + type: 'group', + label: 'Datei-Icons', + fields: [ + { + name: 'showFileTypeIcon', + type: 'checkbox', + defaultValue: true, + label: 'Dateityp-Icon anzeigen', + }, + { + name: 'iconStyle', + type: 'select', + defaultValue: 'colored', + label: 'Icon-Stil', + options: [ + { label: 'Farbig', value: 'colored' }, + { label: 'Monochrom', value: 'mono' }, + { label: 'Outline', value: 'outline' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.showFileTypeIcon, + }, + }, + ], + }, + // Sortierung + { + name: 'sortBy', + type: 'select', + defaultValue: 'order', + label: 'Sortierung', + options: [ + { label: 'Manuelle Reihenfolge', value: 'order' }, + { label: 'Titel (A-Z)', value: 'title_asc' }, + { label: 'Titel (Z-A)', value: 'title_desc' }, + { label: 'Neueste zuerst', value: 'date_desc' }, + { label: 'Älteste zuerst', value: 'date_asc' }, + { label: 'Beliebteste', value: 'downloads_desc' }, + { label: 'Dateigröße', value: 'size' }, + ], + }, + // Gruppierung + { + name: 'groupBy', + type: 'select', + defaultValue: 'none', + label: 'Gruppieren nach', + options: [ + { label: 'Keine Gruppierung', value: 'none' }, + { label: 'Kategorie', value: 'category' }, + { label: 'Dateityp', value: 'fileType' }, + ], + }, + // Pagination + { + name: 'pagination', + type: 'group', + label: 'Pagination', + fields: [ + { + name: 'type', + type: 'select', + defaultValue: 'none', + label: 'Typ', + options: [ + { label: 'Alle anzeigen', value: 'none' }, + { label: '"Mehr laden" Button', value: 'button' }, + { label: 'Pagination', value: 'pagination' }, + ], + }, + { + name: 'perPage', + type: 'number', + defaultValue: 10, + label: 'Pro Seite', + admin: { + condition: (_, siblingData) => + siblingData?.type === 'pagination' || siblingData?.type === 'button', + }, + }, + ], + }, + // Styling + { + name: 'style', + type: 'group', + label: 'Darstellung', + fields: [ + { + name: 'bg', + type: 'select', + defaultValue: 'none', + label: 'Hintergrund', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Hell', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + ], + }, + { + name: 'cardStyle', + type: 'select', + defaultValue: 'bordered', + label: 'Karten-Stil', + options: [ + { label: 'Einfach', value: 'simple' }, + { label: 'Mit Rahmen', value: 'bordered' }, + { label: 'Mit Schatten', value: 'shadow' }, + ], + }, + { + name: 'hoverEffect', + type: 'select', + defaultValue: 'highlight', + label: 'Hover-Effekt', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Hervorheben', value: 'highlight' }, + { label: 'Anheben', value: 'lift' }, + ], + }, + { + name: 'gap', + type: 'select', + defaultValue: '16', + label: 'Abstand', + options: [ + { label: 'Klein (8px)', value: '8' }, + { label: 'Normal (16px)', value: '16' }, + { label: 'Groß (24px)', value: '24' }, + ], + }, + ], + }, + // Empty State + { + name: 'emptyState', + type: 'group', + label: 'Keine Downloads', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + defaultValue: 'Keine Downloads verfügbar', + }, + { + name: 'message', + type: 'textarea', + label: 'Nachricht', + localized: true, + defaultValue: 'Aktuell sind keine Downloads in dieser Kategorie verfügbar.', + }, + ], + }, + // CTA + { + name: 'showAllDownloadsLink', + type: 'checkbox', + defaultValue: false, + label: '"Alle Downloads" Link', + }, + { + name: 'allDownloadsText', + type: 'text', + label: 'Link-Text', + localized: true, + defaultValue: 'Alle Downloads ansehen', + admin: { + condition: (_, siblingData) => siblingData?.showAllDownloadsLink, + }, + }, + { + name: 'allDownloadsUrl', + type: 'text', + label: 'Link-URL', + defaultValue: '/downloads', + admin: { + condition: (_, siblingData) => siblingData?.showAllDownloadsLink, + }, + }, + ], +} diff --git a/src/blocks/EventsBlock.ts b/src/blocks/EventsBlock.ts new file mode 100644 index 0000000..e5c7ded --- /dev/null +++ b/src/blocks/EventsBlock.ts @@ -0,0 +1,320 @@ +import type { Block } from 'payload' + +/** + * Events Block + * + * Zeigt Events aus der Events Collection oder inline-definierte Events. + * Unterstützt verschiedene Layouts (Kalender, Liste, Karten, Timeline) + * und Filter nach Event-Typ, Zeitraum oder Kategorie. + */ +export const EventsBlock: Block = { + slug: 'events', + labels: { + singular: 'Events', + plural: 'Events', + }, + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + // Quelle + { + name: 'sourceMode', + type: 'select', + defaultValue: 'collection', + label: 'Quelle', + options: [ + { label: 'Aus Events Collection', value: 'collection' }, + { label: 'Handverlesene Auswahl', value: 'selected' }, + ], + }, + // Collection Filter + { + name: 'filterMode', + type: 'select', + defaultValue: 'upcoming', + label: 'Filter', + options: [ + { label: 'Kommende Events', value: 'upcoming' }, + { label: 'Vergangene Events', value: 'past' }, + { label: 'Alle Events', value: 'all' }, + { label: 'Nur hervorgehobene', value: 'featured' }, + { label: 'Nach Typ', value: 'type' }, + { label: 'Nach Kategorie', value: 'category' }, + ], + admin: { + condition: (data, siblingData) => siblingData?.sourceMode === 'collection', + }, + }, + { + name: 'eventType', + type: 'select', + label: 'Event-Typ filtern', + options: [ + { label: 'Veranstaltung', value: 'event' }, + { label: 'Workshop', value: 'workshop' }, + { label: 'Seminar', value: 'seminar' }, + { label: 'Webinar', value: 'webinar' }, + { label: 'Konferenz', value: 'conference' }, + { label: 'Messe', value: 'tradeshow' }, + { label: 'Networking', value: 'networking' }, + { label: 'Kurs', value: 'course' }, + { label: 'Vortrag', value: 'talk' }, + ], + admin: { + condition: (data, siblingData) => + siblingData?.sourceMode === 'collection' && siblingData?.filterMode === 'type', + }, + }, + { + name: 'category', + type: 'text', + label: 'Kategorie filtern', + admin: { + condition: (data, siblingData) => + siblingData?.sourceMode === 'collection' && siblingData?.filterMode === 'category', + }, + }, + { + name: 'selectedEvents', + type: 'relationship', + relationTo: 'events' as 'users', + hasMany: true, + label: 'Events auswählen', + admin: { + condition: (data, siblingData) => siblingData?.sourceMode === 'selected', + }, + }, + { + name: 'limit', + type: 'number', + defaultValue: 6, + min: 1, + max: 50, + label: 'Maximale Anzahl', + admin: { + condition: (data, siblingData) => siblingData?.sourceMode === 'collection', + }, + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'cards', + label: 'Layout', + options: [ + { label: 'Karten (Grid)', value: 'cards' }, + { label: 'Liste', value: 'list' }, + { label: 'Kompakte Liste', value: 'compact' }, + { label: 'Timeline', value: 'timeline' }, + { label: 'Kalender', value: 'calendar' }, + { label: 'Agenda', value: 'agenda' }, + ], + }, + { + name: 'columns', + type: 'select', + defaultValue: '3', + label: 'Spalten', + options: [ + { label: '2 Spalten', value: '2' }, + { label: '3 Spalten', value: '3' }, + { label: '4 Spalten', value: '4' }, + ], + admin: { + condition: (data, siblingData) => siblingData?.layout === 'cards', + }, + }, + // Anzeigeoptionen + { + name: 'showImage', + type: 'checkbox', + defaultValue: true, + label: 'Bild anzeigen', + }, + { + name: 'showExcerpt', + type: 'checkbox', + defaultValue: true, + label: 'Beschreibung anzeigen', + }, + { + name: 'showDate', + type: 'checkbox', + defaultValue: true, + label: 'Datum anzeigen', + }, + { + name: 'showTime', + type: 'checkbox', + defaultValue: true, + label: 'Uhrzeit anzeigen', + }, + { + name: 'showLocation', + type: 'checkbox', + defaultValue: true, + label: 'Ort anzeigen', + }, + { + name: 'showPrice', + type: 'checkbox', + defaultValue: false, + label: 'Preis anzeigen', + }, + { + name: 'showEventType', + type: 'checkbox', + defaultValue: false, + label: 'Event-Typ Badge anzeigen', + }, + { + name: 'showRegistrationButton', + type: 'checkbox', + defaultValue: true, + label: 'Anmelde-Button anzeigen', + }, + { + name: 'registrationButtonText', + type: 'text', + defaultValue: 'Jetzt anmelden', + label: 'Button-Text', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.showRegistrationButton, + }, + }, + // Kalender-Optionen + { + name: 'calendarOptions', + type: 'group', + label: 'Kalender-Optionen', + admin: { + condition: (data, siblingData) => siblingData?.layout === 'calendar', + }, + fields: [ + { + name: 'defaultView', + type: 'select', + defaultValue: 'month', + label: 'Standard-Ansicht', + options: [ + { label: 'Monat', value: 'month' }, + { label: 'Woche', value: 'week' }, + { label: 'Tag', value: 'day' }, + ], + }, + { + name: 'showNavigation', + type: 'checkbox', + defaultValue: true, + label: 'Navigation anzeigen', + }, + { + name: 'showViewToggle', + type: 'checkbox', + defaultValue: false, + label: 'Ansichts-Wechsel anzeigen', + }, + ], + }, + // Gruppierung + { + name: 'groupBy', + type: 'select', + defaultValue: 'none', + label: 'Gruppieren nach', + options: [ + { label: 'Keine Gruppierung', value: 'none' }, + { label: 'Monat', value: 'month' }, + { label: 'Event-Typ', value: 'type' }, + { label: 'Kategorie', value: 'category' }, + ], + admin: { + condition: (data, siblingData) => + siblingData?.layout === 'list' || siblingData?.layout === 'compact', + }, + }, + // Sortierung + { + name: 'sortOrder', + type: 'select', + defaultValue: 'asc', + label: 'Sortierung', + options: [ + { label: 'Aufsteigend (älteste zuerst)', value: 'asc' }, + { label: 'Absteigend (neueste zuerst)', value: 'desc' }, + ], + }, + // CTA + { + name: 'showAllLink', + type: 'checkbox', + defaultValue: true, + label: '"Alle Events" Link anzeigen', + }, + { + name: 'allEventsLink', + type: 'text', + defaultValue: '/events', + label: 'Link zu allen Events', + admin: { + condition: (data, siblingData) => siblingData?.showAllLink, + }, + }, + { + name: 'allEventsText', + type: 'text', + defaultValue: 'Alle Veranstaltungen', + label: 'Link-Text', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.showAllLink, + }, + }, + // Leerer Zustand + { + name: 'emptyMessage', + type: 'text', + defaultValue: 'Aktuell sind keine Veranstaltungen geplant.', + label: 'Nachricht wenn keine Events', + localized: true, + }, + // Styling + { + name: 'backgroundColor', + type: 'select', + defaultValue: 'white', + label: 'Hintergrund', + options: [ + { label: 'Weiß', value: 'white' }, + { label: 'Hell (Grau)', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Akzentfarbe', value: 'accent' }, + ], + }, + { + name: 'cardStyle', + type: 'select', + defaultValue: 'elevated', + label: 'Karten-Stil', + options: [ + { label: 'Erhöht (Schatten)', value: 'elevated' }, + { label: 'Umrandet', value: 'bordered' }, + { label: 'Flach', value: 'flat' }, + ], + admin: { + condition: (data, siblingData) => siblingData?.layout === 'cards', + }, + }, + ], +} diff --git a/src/blocks/JobsBlock.ts b/src/blocks/JobsBlock.ts new file mode 100644 index 0000000..4eb7de0 --- /dev/null +++ b/src/blocks/JobsBlock.ts @@ -0,0 +1,436 @@ +import type { Block } from 'payload' + +/** + * JobsBlock + * + * Zeigt Stellenanzeigen mit Filter- und Suchfunktion. + * Unterstützt verschiedene Layouts und Filteroptionen. + */ +export const JobsBlock: Block = { + slug: 'jobs-block', + labels: { + singular: 'Stellenanzeigen', + plural: 'Stellenanzeigen', + }, + imageURL: '/assets/blocks/jobs.png', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + defaultValue: 'Offene Stellen', + }, + { + name: 'subtitle', + type: 'textarea', + label: 'Untertitel', + localized: true, + }, + { + name: 'introduction', + type: 'richText', + label: 'Einleitungstext', + localized: true, + }, + // Datenquelle + { + name: 'source', + type: 'select', + defaultValue: 'all', + label: 'Stellen', + options: [ + { label: 'Alle veröffentlichten', value: 'all' }, + { label: 'Nach Kategorie', value: 'category' }, + { label: 'Nach Abteilung', value: 'department' }, + { label: 'Nach Standort', value: 'location' }, + { label: 'Nur hervorgehobene', value: 'featured' }, + { label: 'Manuell auswählen', value: 'manual' }, + ], + }, + { + name: 'category', + type: 'select', + label: 'Kategorie', + options: [ + { label: 'Pflege & Betreuung', value: 'care' }, + { label: 'Medizin', value: 'medical' }, + { label: 'Verwaltung', value: 'admin' }, + { label: 'IT & Technik', value: 'it' }, + { label: 'Marketing', value: 'marketing' }, + { label: 'Vertrieb', value: 'sales' }, + { label: 'Finanzen', value: 'finance' }, + { label: 'Personal', value: 'hr' }, + { label: 'Produktion', value: 'production' }, + { label: 'Logistik', value: 'logistics' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.source === 'category', + }, + }, + { + name: 'department', + type: 'text', + label: 'Abteilung', + admin: { + condition: (_, siblingData) => siblingData?.source === 'department', + }, + }, + { + name: 'locationFilter', + type: 'relationship', + relationTo: 'locations', + label: 'Standort', + admin: { + condition: (_, siblingData) => siblingData?.source === 'location', + }, + }, + { + name: 'selectedJobs', + type: 'relationship', + relationTo: 'jobs', + hasMany: true, + label: 'Stellen auswählen', + admin: { + condition: (_, siblingData) => siblingData?.source === 'manual', + }, + }, + { + name: 'limit', + type: 'number', + defaultValue: 10, + min: 1, + max: 50, + label: 'Maximale Anzahl', + }, + // Filter-UI + { + name: 'filters', + type: 'group', + label: 'Filter-Optionen', + fields: [ + { + name: 'showSearch', + type: 'checkbox', + defaultValue: true, + label: 'Suchfeld', + }, + { + name: 'showCategoryFilter', + type: 'checkbox', + defaultValue: true, + label: 'Kategorie-Filter', + }, + { + name: 'showTypeFilter', + type: 'checkbox', + defaultValue: true, + label: 'Beschäftigungsart-Filter', + }, + { + name: 'showLocationFilter', + type: 'checkbox', + defaultValue: true, + label: 'Standort-Filter', + }, + { + name: 'showWorkModelFilter', + type: 'checkbox', + defaultValue: false, + label: 'Arbeitsmodell-Filter', + }, + { + name: 'filterLayout', + type: 'select', + defaultValue: 'horizontal', + label: 'Filter-Layout', + options: [ + { label: 'Horizontal', value: 'horizontal' }, + { label: 'Sidebar', value: 'sidebar' }, + { label: 'Dropdown', value: 'dropdown' }, + ], + }, + ], + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'list', + label: 'Layout', + options: [ + { label: 'Liste', value: 'list' }, + { label: 'Karten', value: 'cards' }, + { label: 'Kompakt', value: 'compact' }, + { label: 'Akkordeon', value: 'accordion' }, + ], + }, + { + name: 'columns', + type: 'select', + defaultValue: '1', + label: 'Spalten', + options: [ + { label: '1 Spalte', value: '1' }, + { label: '2 Spalten', value: '2' }, + { label: '3 Spalten', value: '3' }, + ], + admin: { + condition: (_, siblingData) => + siblingData?.layout === 'cards' || siblingData?.layout === 'list', + }, + }, + // Anzuzeigende Informationen + { + name: 'show', + type: 'group', + label: 'Anzeigen', + fields: [ + { + name: 'image', + type: 'checkbox', + defaultValue: false, + label: 'Bild', + }, + { + name: 'department', + type: 'checkbox', + defaultValue: true, + label: 'Abteilung', + }, + { + name: 'type', + type: 'checkbox', + defaultValue: true, + label: 'Beschäftigungsart', + }, + { + name: 'location', + type: 'checkbox', + defaultValue: true, + label: 'Standort', + }, + { + name: 'workModel', + type: 'checkbox', + defaultValue: true, + label: 'Arbeitsmodell', + }, + { + name: 'salary', + type: 'checkbox', + defaultValue: false, + label: 'Gehalt', + }, + { + name: 'summary', + type: 'checkbox', + defaultValue: true, + label: 'Kurzbeschreibung', + }, + { + name: 'deadline', + type: 'checkbox', + defaultValue: false, + label: 'Bewerbungsfrist', + }, + { + name: 'publishDate', + type: 'checkbox', + defaultValue: true, + label: 'Veröffentlichungsdatum', + }, + { + name: 'badges', + type: 'checkbox', + defaultValue: true, + label: 'Badges (Neu, Dringend)', + }, + ], + }, + // Badges + { + name: 'badges', + type: 'group', + label: 'Badge-Einstellungen', + fields: [ + { + name: 'newDays', + type: 'number', + defaultValue: 7, + label: '"Neu" für X Tage', + admin: { + description: 'Wie viele Tage nach Veröffentlichung "Neu" anzeigen', + }, + }, + { + name: 'showUrgent', + type: 'checkbox', + defaultValue: true, + label: '"Dringend" Badge', + }, + { + name: 'showFeatured', + type: 'checkbox', + defaultValue: true, + label: '"Top" Badge für hervorgehobene', + }, + ], + }, + // Pagination + { + name: 'pagination', + type: 'group', + label: 'Pagination', + fields: [ + { + name: 'type', + type: 'select', + defaultValue: 'button', + label: 'Typ', + options: [ + { label: '"Mehr laden" Button', value: 'button' }, + { label: 'Pagination', value: 'pagination' }, + { label: 'Infinite Scroll', value: 'infinite' }, + { label: 'Alle anzeigen', value: 'none' }, + ], + }, + { + name: 'perPage', + type: 'number', + defaultValue: 10, + label: 'Pro Seite', + admin: { + condition: (_, siblingData) => + siblingData?.type === 'pagination' || siblingData?.type === 'button', + }, + }, + ], + }, + // Styling + { + name: 'style', + type: 'group', + label: 'Darstellung', + fields: [ + { + name: 'bg', + type: 'select', + defaultValue: 'none', + label: 'Hintergrund', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Hell', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + ], + }, + { + name: 'cardStyle', + type: 'select', + defaultValue: 'bordered', + label: 'Karten-Stil', + options: [ + { label: 'Einfach', value: 'simple' }, + { label: 'Mit Rahmen', value: 'bordered' }, + { label: 'Mit Schatten', value: 'shadow' }, + ], + }, + { + name: 'hoverEffect', + type: 'select', + defaultValue: 'lift', + label: 'Hover-Effekt', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Anheben', value: 'lift' }, + { label: 'Hervorheben', value: 'highlight' }, + ], + }, + { + name: 'gap', + type: 'select', + defaultValue: '16', + label: 'Abstand', + options: [ + { label: 'Klein (8px)', value: '8' }, + { label: 'Normal (16px)', value: '16' }, + { label: 'Groß (24px)', value: '24' }, + ], + }, + ], + }, + // Empty State + { + name: 'emptyState', + type: 'group', + label: 'Keine Stellen', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + defaultValue: 'Aktuell keine offenen Stellen', + }, + { + name: 'message', + type: 'textarea', + label: 'Nachricht', + localized: true, + defaultValue: 'Schauen Sie später wieder vorbei oder senden Sie uns eine Initiativbewerbung.', + }, + { + name: 'showInitiativeLink', + type: 'checkbox', + defaultValue: true, + label: 'Initiativbewerbungs-Link', + }, + { + name: 'initiativeText', + type: 'text', + label: 'Link-Text', + localized: true, + defaultValue: 'Initiativbewerbung senden', + admin: { + condition: (_, siblingData) => siblingData?.showInitiativeLink, + }, + }, + { + name: 'initiativeUrl', + type: 'text', + label: 'Link-URL', + defaultValue: '/karriere/initiativbewerbung', + admin: { + condition: (_, siblingData) => siblingData?.showInitiativeLink, + }, + }, + ], + }, + // CTA + { + name: 'showAllJobsLink', + type: 'checkbox', + defaultValue: false, + label: '"Alle Stellen" Link', + }, + { + name: 'allJobsText', + type: 'text', + label: 'Link-Text', + localized: true, + defaultValue: 'Alle offenen Stellen', + admin: { + condition: (_, siblingData) => siblingData?.showAllJobsLink, + }, + }, + { + name: 'allJobsUrl', + type: 'text', + label: 'Link-URL', + defaultValue: '/karriere', + admin: { + condition: (_, siblingData) => siblingData?.showAllJobsLink, + }, + }, + ], +} diff --git a/src/blocks/LocationsBlock.ts b/src/blocks/LocationsBlock.ts new file mode 100644 index 0000000..85094b2 --- /dev/null +++ b/src/blocks/LocationsBlock.ts @@ -0,0 +1,386 @@ +import type { Block } from 'payload' + +/** + * LocationsBlock + * + * Zeigt Firmenstandorte mit Karte, Adresse, Öffnungszeiten und Kontaktdaten. + * Unterstützt verschiedene Layouts und Kartenanbieter. + */ +export const LocationsBlock: Block = { + slug: 'locations-block', + labels: { + singular: 'Standorte', + plural: 'Standorte', + }, + imageURL: '/assets/blocks/locations.png', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + defaultValue: 'Unsere Standorte', + }, + { + name: 'subtitle', + type: 'textarea', + label: 'Untertitel', + localized: true, + }, + // Datenquelle + { + name: 'source', + type: 'select', + defaultValue: 'all', + label: 'Standorte', + options: [ + { label: 'Alle aktiven Standorte', value: 'all' }, + { label: 'Nur Hauptstandort', value: 'main' }, + { label: 'Nach Typ', value: 'type' }, + { label: 'Manuell auswählen', value: 'manual' }, + ], + }, + { + name: 'locationType', + type: 'select', + label: 'Standort-Typ', + options: [ + { label: 'Hauptsitz', value: 'headquarters' }, + { label: 'Büro', value: 'office' }, + { label: 'Filiale', value: 'branch' }, + { label: 'Lager', value: 'warehouse' }, + { label: 'Showroom', value: 'showroom' }, + { label: 'Studio', value: 'studio' }, + { label: 'Praxis', value: 'practice' }, + { label: 'Werkstatt', value: 'workshop' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.source === 'type', + }, + }, + { + name: 'selectedLocations', + type: 'relationship', + relationTo: 'locations', + hasMany: true, + label: 'Standorte auswählen', + admin: { + condition: (_, siblingData) => siblingData?.source === 'manual', + }, + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'map-list', + label: 'Layout', + options: [ + { label: 'Karte + Liste', value: 'map-list' }, + { label: 'Nur Karte', value: 'map-only' }, + { label: 'Nur Liste', value: 'list-only' }, + { label: 'Karten-Grid', value: 'cards' }, + { label: 'Akkordeon', value: 'accordion' }, + { label: 'Tabs', value: 'tabs' }, + ], + }, + { + name: 'mapPosition', + type: 'select', + defaultValue: 'left', + label: 'Karten-Position', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Rechts', value: 'right' }, + { label: 'Oben', value: 'top' }, + { label: 'Unten', value: 'bottom' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.layout === 'map-list', + }, + }, + { + name: 'columns', + type: 'select', + defaultValue: '2', + label: 'Spalten', + options: [ + { label: '1 Spalte', value: '1' }, + { label: '2 Spalten', value: '2' }, + { label: '3 Spalten', value: '3' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.layout === 'cards', + }, + }, + // Karten-Einstellungen + { + name: 'map', + type: 'group', + label: 'Karten-Einstellungen', + admin: { + condition: (_, siblingData) => + siblingData?.layout === 'map-list' || siblingData?.layout === 'map-only', + }, + fields: [ + { + name: 'provider', + type: 'select', + defaultValue: 'osm', + label: 'Kartenanbieter', + options: [ + { label: 'OpenStreetMap', value: 'osm' }, + { label: 'Google Maps', value: 'google' }, + { label: 'Mapbox', value: 'mapbox' }, + ], + }, + { + name: 'style', + type: 'select', + defaultValue: 'default', + label: 'Kartenstil', + options: [ + { label: 'Standard', value: 'default' }, + { label: 'Hell', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Satellite', value: 'satellite' }, + ], + }, + { + name: 'height', + type: 'select', + defaultValue: '400', + label: 'Höhe', + options: [ + { label: 'Klein (300px)', value: '300' }, + { label: 'Mittel (400px)', value: '400' }, + { label: 'Groß (500px)', value: '500' }, + { label: 'Sehr groß (600px)', value: '600' }, + ], + }, + { + name: 'defaultZoom', + type: 'number', + defaultValue: 12, + min: 1, + max: 20, + label: 'Standard-Zoom', + }, + { + name: 'fitBounds', + type: 'checkbox', + defaultValue: true, + label: 'Alle Marker zeigen', + admin: { + description: 'Karte automatisch anpassen, um alle Standorte zu zeigen', + }, + }, + { + name: 'markerStyle', + type: 'select', + defaultValue: 'pin', + label: 'Marker-Stil', + options: [ + { label: 'Pin', value: 'pin' }, + { label: 'Punkt', value: 'dot' }, + { label: 'Icon', value: 'icon' }, + { label: 'Custom', value: 'custom' }, + ], + }, + { + name: 'markerColor', + type: 'text', + label: 'Marker-Farbe', + defaultValue: '#e11d48', + admin: { + description: 'Hex-Farbe (z.B. #e11d48)', + }, + }, + { + name: 'clustering', + type: 'checkbox', + defaultValue: true, + label: 'Marker clustern', + admin: { + description: 'Nahe Marker zu Gruppen zusammenfassen', + }, + }, + { + name: 'controls', + type: 'group', + label: 'Steuerung', + fields: [ + { + name: 'zoom', + type: 'checkbox', + defaultValue: true, + label: 'Zoom-Buttons', + }, + { + name: 'fullscreen', + type: 'checkbox', + defaultValue: true, + label: 'Vollbild-Button', + }, + { + name: 'scrollZoom', + type: 'checkbox', + defaultValue: false, + label: 'Scroll-Zoom', + }, + { + name: 'dragging', + type: 'checkbox', + defaultValue: true, + label: 'Verschiebbar', + }, + ], + }, + ], + }, + // Anzuzeigende Informationen + { + name: 'show', + type: 'group', + label: 'Anzeigen', + fields: [ + { + name: 'image', + type: 'checkbox', + defaultValue: true, + label: 'Bild', + }, + { + name: 'type', + type: 'checkbox', + defaultValue: false, + label: 'Standort-Typ', + }, + { + name: 'address', + type: 'checkbox', + defaultValue: true, + label: 'Adresse', + }, + { + name: 'phone', + type: 'checkbox', + defaultValue: true, + label: 'Telefon', + }, + { + name: 'email', + type: 'checkbox', + defaultValue: true, + label: 'E-Mail', + }, + { + name: 'hours', + type: 'checkbox', + defaultValue: true, + label: 'Öffnungszeiten', + }, + { + name: 'directions', + type: 'checkbox', + defaultValue: false, + label: 'Anfahrt', + }, + { + name: 'services', + type: 'checkbox', + defaultValue: false, + label: 'Services', + }, + { + name: 'team', + type: 'checkbox', + defaultValue: false, + label: 'Team-Mitglieder', + }, + ], + }, + // Aktionen + { + name: 'actions', + type: 'group', + label: 'Aktionen', + fields: [ + { + name: 'showDirectionsLink', + type: 'checkbox', + defaultValue: true, + label: '"Route planen" Link', + }, + { + name: 'showCallButton', + type: 'checkbox', + defaultValue: true, + label: 'Anruf-Button (mobil)', + }, + { + name: 'showEmailButton', + type: 'checkbox', + defaultValue: false, + label: 'E-Mail-Button', + }, + { + name: 'showDetailLink', + type: 'checkbox', + defaultValue: false, + label: 'Link zur Detail-Seite', + }, + { + name: 'detailBasePath', + type: 'text', + label: 'Detail-Basis-Pfad', + defaultValue: '/standorte', + admin: { + condition: (_, siblingData) => siblingData?.showDetailLink, + }, + }, + ], + }, + // Styling + { + name: 'style', + type: 'group', + label: 'Darstellung', + fields: [ + { + name: 'bg', + type: 'select', + defaultValue: 'none', + label: 'Hintergrund', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Hell', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + ], + }, + { + name: 'cardStyle', + type: 'select', + defaultValue: 'bordered', + label: 'Karten-Stil', + options: [ + { label: 'Einfach', value: 'simple' }, + { label: 'Mit Rahmen', value: 'bordered' }, + { label: 'Mit Schatten', value: 'shadow' }, + { label: 'Gefüllt', value: 'filled' }, + ], + }, + { + name: 'gap', + type: 'select', + defaultValue: '24', + label: 'Abstand', + options: [ + { label: 'Klein (16px)', value: '16' }, + { label: 'Normal (24px)', value: '24' }, + { label: 'Groß (32px)', value: '32' }, + ], + }, + ], + }, + ], +} diff --git a/src/blocks/LogoGridBlock.ts b/src/blocks/LogoGridBlock.ts new file mode 100644 index 0000000..66baa8b --- /dev/null +++ b/src/blocks/LogoGridBlock.ts @@ -0,0 +1,422 @@ +import type { Block } from 'payload' + +/** + * LogoGridBlock + * + * Zeigt Partner-, Kunden- oder Zertifizierungs-Logos in verschiedenen Layouts. + * Kann als Slider, Grid oder Marquee dargestellt werden. + */ +export const LogoGridBlock: Block = { + slug: 'logo-grid-block', + labels: { + singular: 'Logo-Grid', + plural: 'Logo-Grids', + }, + imageURL: '/assets/blocks/logo-grid.png', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + admin: { + description: 'z.B. "Unsere Partner", "Bekannt aus", "Zertifizierungen"', + }, + }, + { + name: 'subtitle', + type: 'textarea', + label: 'Untertitel', + localized: true, + }, + // Datenquelle + { + name: 'source', + type: 'select', + defaultValue: 'collection', + label: 'Datenquelle', + options: [ + { label: 'Aus Partner-Collection', value: 'collection' }, + { label: 'Manuell hochladen', value: 'manual' }, + ], + }, + // Collection-basiert + { + name: 'partnerType', + type: 'select', + label: 'Partner-Typ', + hasMany: true, + options: [ + { label: 'Alle', value: 'all' }, + { label: 'Partner', value: 'partner' }, + { label: 'Kunden', value: 'client' }, + { label: 'Referenzen', value: 'reference' }, + { label: 'Sponsoren', value: 'sponsor' }, + { label: 'Zertifizierungen', value: 'certification' }, + { label: 'Mitgliedschaften', value: 'membership' }, + { label: 'Auszeichnungen', value: 'award' }, + { label: 'Lieferanten', value: 'supplier' }, + { label: 'Technologien', value: 'technology' }, + ], + defaultValue: ['all'], + admin: { + condition: (_, siblingData) => siblingData?.source === 'collection', + }, + }, + { + name: 'selectedPartners', + type: 'relationship', + relationTo: 'partners', + hasMany: true, + label: 'Partner auswählen', + admin: { + condition: (_, siblingData) => siblingData?.source === 'collection', + description: 'Optional: Bestimmte Partner auswählen (sonst alle vom gewählten Typ)', + }, + }, + { + name: 'featuredOnly', + type: 'checkbox', + defaultValue: false, + label: 'Nur hervorgehobene', + admin: { + condition: (_, siblingData) => siblingData?.source === 'collection', + }, + }, + { + name: 'limit', + type: 'number', + defaultValue: 12, + min: 1, + max: 50, + label: 'Maximale Anzahl', + admin: { + condition: (_, siblingData) => siblingData?.source === 'collection', + }, + }, + // Manuell + { + name: 'logos', + type: 'array', + label: 'Logos', + admin: { + condition: (_, siblingData) => siblingData?.source === 'manual', + }, + fields: [ + { + name: 'logo', + type: 'upload', + relationTo: 'media', + required: true, + label: 'Logo', + }, + { + name: 'name', + type: 'text', + label: 'Name', + admin: { + description: 'Für Alt-Text und Tooltip', + }, + }, + { + name: 'link', + type: 'text', + label: 'Link', + }, + ], + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'grid', + label: 'Layout', + options: [ + { label: 'Grid', value: 'grid' }, + { label: 'Slider', value: 'slider' }, + { label: 'Marquee (endlos)', value: 'marquee' }, + { label: 'Inline (flexibel)', value: 'inline' }, + { label: 'Masonry', value: 'masonry' }, + ], + }, + { + name: 'columns', + type: 'select', + defaultValue: '4', + label: 'Spalten', + options: [ + { label: '3 Spalten', value: '3' }, + { label: '4 Spalten', value: '4' }, + { label: '5 Spalten', value: '5' }, + { label: '6 Spalten', value: '6' }, + { label: '8 Spalten', value: '8' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.layout === 'grid', + }, + }, + // Slider-Optionen + { + name: 'slider', + type: 'group', + label: 'Slider-Einstellungen', + admin: { + condition: (_, siblingData) => + siblingData?.layout === 'slider' || siblingData?.layout === 'marquee', + }, + fields: [ + { + name: 'perView', + type: 'select', + defaultValue: '4', + label: 'Sichtbare Logos', + options: [ + { label: '3', value: '3' }, + { label: '4', value: '4' }, + { label: '5', value: '5' }, + { label: '6', value: '6' }, + { label: 'Auto', value: 'auto' }, + ], + }, + { + name: 'autoplay', + type: 'checkbox', + defaultValue: true, + label: 'Autoplay', + }, + { + name: 'speed', + type: 'select', + defaultValue: '3000', + label: 'Geschwindigkeit', + options: [ + { label: 'Langsam', value: '5000' }, + { label: 'Normal', value: '3000' }, + { label: 'Schnell', value: '2000' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.autoplay, + }, + }, + { + name: 'pauseOnHover', + type: 'checkbox', + defaultValue: true, + label: 'Bei Hover pausieren', + }, + { + name: 'showArrows', + type: 'checkbox', + defaultValue: false, + label: 'Pfeile anzeigen', + }, + { + name: 'showDots', + type: 'checkbox', + defaultValue: false, + label: 'Punkte anzeigen', + }, + ], + }, + // Logo-Darstellung + { + name: 'logoStyle', + type: 'group', + label: 'Logo-Darstellung', + fields: [ + { + name: 'size', + type: 'select', + defaultValue: 'md', + label: 'Größe', + options: [ + { label: 'Klein', value: 'sm' }, + { label: 'Mittel', value: 'md' }, + { label: 'Groß', value: 'lg' }, + ], + }, + { + name: 'maxHeight', + type: 'select', + defaultValue: '60', + label: 'Max. Höhe', + options: [ + { label: '40px', value: '40' }, + { label: '50px', value: '50' }, + { label: '60px', value: '60' }, + { label: '80px', value: '80' }, + { label: '100px', value: '100' }, + ], + }, + { + name: 'grayscale', + type: 'checkbox', + defaultValue: true, + label: 'Graustufen', + admin: { + description: 'Logos in Graustufen anzeigen', + }, + }, + { + name: 'colorOnHover', + type: 'checkbox', + defaultValue: true, + label: 'Farbe bei Hover', + admin: { + condition: (_, siblingData) => siblingData?.grayscale, + }, + }, + { + name: 'opacity', + type: 'select', + defaultValue: '70', + label: 'Deckkraft', + options: [ + { label: '50%', value: '50' }, + { label: '70%', value: '70' }, + { label: '100%', value: '100' }, + ], + }, + { + name: 'hoverEffect', + type: 'select', + defaultValue: 'scale', + label: 'Hover-Effekt', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Vergrößern', value: 'scale' }, + { label: 'Aufhellen', value: 'brighten' }, + { label: 'Schatten', value: 'shadow' }, + ], + }, + ], + }, + // Verhalten + { + name: 'behavior', + type: 'group', + label: 'Verhalten', + fields: [ + { + name: 'linkToWebsite', + type: 'checkbox', + defaultValue: false, + label: 'Zur Partner-Website verlinken', + }, + { + name: 'openInNewTab', + type: 'checkbox', + defaultValue: true, + label: 'In neuem Tab öffnen', + admin: { + condition: (_, siblingData) => siblingData?.linkToWebsite, + }, + }, + { + name: 'showTooltip', + type: 'checkbox', + defaultValue: true, + label: 'Tooltip mit Namen', + }, + { + name: 'showName', + type: 'checkbox', + defaultValue: false, + label: 'Namen unter Logo anzeigen', + }, + ], + }, + // Styling + { + name: 'style', + type: 'group', + label: 'Darstellung', + fields: [ + { + name: 'bg', + type: 'select', + defaultValue: 'none', + label: 'Hintergrund', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Hell', value: 'light' }, + { label: 'Weiß', value: 'white' }, + { label: 'Dunkel', value: 'dark' }, + ], + }, + { + name: 'logoBg', + type: 'select', + defaultValue: 'none', + label: 'Logo-Hintergrund', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Weiß', value: 'white' }, + { label: 'Hell', value: 'light' }, + ], + }, + { + name: 'logoPadding', + type: 'checkbox', + defaultValue: true, + label: 'Logo-Padding', + }, + { + name: 'gap', + type: 'select', + defaultValue: '32', + label: 'Abstand', + options: [ + { label: 'Klein (16px)', value: '16' }, + { label: 'Normal (24px)', value: '24' }, + { label: 'Groß (32px)', value: '32' }, + { label: 'Sehr groß (48px)', value: '48' }, + ], + }, + { + name: 'alignment', + type: 'select', + defaultValue: 'center', + label: 'Ausrichtung', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Mitte', value: 'center' }, + { label: 'Rechts', value: 'right' }, + ], + }, + { + name: 'divider', + type: 'checkbox', + defaultValue: false, + label: 'Trennlinien zwischen Logos', + }, + ], + }, + // CTA + { + name: 'showCTA', + type: 'checkbox', + defaultValue: false, + label: 'CTA anzeigen', + }, + { + name: 'ctaText', + type: 'text', + label: 'CTA-Text', + localized: true, + defaultValue: 'Alle Partner ansehen', + admin: { + condition: (_, siblingData) => siblingData?.showCTA, + }, + }, + { + name: 'ctaLink', + type: 'text', + label: 'CTA-Link', + defaultValue: '/partner', + admin: { + condition: (_, siblingData) => siblingData?.showCTA, + }, + }, + ], +} diff --git a/src/blocks/MapBlock.ts b/src/blocks/MapBlock.ts new file mode 100644 index 0000000..f1266dd --- /dev/null +++ b/src/blocks/MapBlock.ts @@ -0,0 +1,588 @@ +import type { Block } from 'payload' + +/** + * MapBlock + * + * Zeigt eine interaktive Karte mit konfigurierbaren Markern. + * Unterstützt verschiedene Map-Provider und Marker-Typen. + */ +export const MapBlock: Block = { + slug: 'map-block', + labels: { + singular: 'Karte', + plural: 'Karten', + }, + imageURL: '/assets/blocks/map.png', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + }, + { + name: 'subtitle', + type: 'textarea', + label: 'Untertitel', + localized: true, + }, + // Datenquelle + { + name: 'source', + type: 'select', + defaultValue: 'locations', + label: 'Marker-Quelle', + options: [ + { label: 'Aus Locations Collection', value: 'locations' }, + { label: 'Manuell definieren', value: 'manual' }, + { label: 'Einzelne Adresse', value: 'single' }, + ], + }, + // Locations-basiert + { + name: 'locationType', + type: 'select', + label: 'Standort-Typ', + hasMany: true, + options: [ + { label: 'Alle', value: 'all' }, + { label: 'Hauptsitz', value: 'headquarters' }, + { label: 'Filiale', value: 'branch' }, + { label: 'Niederlassung', value: 'office' }, + { label: 'Lager/Logistik', value: 'warehouse' }, + { label: 'Produktion', value: 'production' }, + { label: 'Showroom', value: 'showroom' }, + { label: 'Service-Center', value: 'service' }, + { label: 'Partner', value: 'partner' }, + ], + defaultValue: ['all'], + admin: { + condition: (_, siblingData) => siblingData?.source === 'locations', + }, + }, + { + name: 'selectedLocations', + type: 'relationship', + relationTo: 'locations', + hasMany: true, + label: 'Standorte auswählen', + admin: { + condition: (_, siblingData) => siblingData?.source === 'locations', + description: 'Optional: Bestimmte Standorte auswählen (sonst alle vom gewählten Typ)', + }, + }, + // Manuelle Marker + { + name: 'markers', + type: 'array', + label: 'Marker', + admin: { + condition: (_, siblingData) => siblingData?.source === 'manual', + }, + fields: [ + { + name: 'name', + type: 'text', + required: true, + label: 'Name', + localized: true, + }, + { + name: 'address', + type: 'textarea', + label: 'Adresse', + localized: true, + }, + { + name: 'lat', + type: 'number', + required: true, + label: 'Breitengrad', + admin: { + step: 0.000001, + }, + }, + { + name: 'lng', + type: 'number', + required: true, + label: 'Längengrad', + admin: { + step: 0.000001, + }, + }, + { + name: 'markerType', + type: 'select', + label: 'Marker-Typ', + options: [ + { label: 'Standard', value: 'default' }, + { label: 'Hauptstandort', value: 'main' }, + { label: 'Highlight', value: 'highlight' }, + { label: 'Custom', value: 'custom' }, + ], + }, + { + name: 'customIcon', + type: 'upload', + relationTo: 'media', + label: 'Custom Icon', + admin: { + condition: (_, siblingData) => siblingData?.markerType === 'custom', + }, + }, + { + name: 'popupContent', + type: 'richText', + label: 'Popup-Inhalt', + localized: true, + }, + { + name: 'link', + type: 'text', + label: 'Link', + }, + ], + }, + // Einzelne Adresse + { + name: 'singleAddress', + type: 'group', + label: 'Adresse', + admin: { + condition: (_, siblingData) => siblingData?.source === 'single', + }, + fields: [ + { + name: 'name', + type: 'text', + label: 'Name/Titel', + localized: true, + }, + { + name: 'street', + type: 'text', + label: 'Straße', + }, + { + name: 'zip', + type: 'text', + label: 'PLZ', + }, + { + name: 'city', + type: 'text', + label: 'Stadt', + }, + { + name: 'country', + type: 'text', + defaultValue: 'Deutschland', + label: 'Land', + }, + { + name: 'lat', + type: 'number', + label: 'Breitengrad', + admin: { + step: 0.000001, + description: 'Optional - wird sonst per Geocoding ermittelt', + }, + }, + { + name: 'lng', + type: 'number', + label: 'Längengrad', + admin: { + step: 0.000001, + }, + }, + ], + }, + // Map Provider + { + name: 'provider', + type: 'select', + defaultValue: 'osm', + label: 'Karten-Anbieter', + options: [ + { label: 'OpenStreetMap', value: 'osm' }, + { label: 'Google Maps', value: 'google' }, + { label: 'Mapbox', value: 'mapbox' }, + { label: 'Leaflet (Custom Tiles)', value: 'leaflet' }, + ], + }, + { + name: 'mapStyle', + type: 'select', + defaultValue: 'default', + label: 'Karten-Stil', + options: [ + { label: 'Standard', value: 'default' }, + { label: 'Hell', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Satellite', value: 'satellite' }, + { label: 'Hybrid', value: 'hybrid' }, + { label: 'Terrain', value: 'terrain' }, + ], + }, + // Karten-Einstellungen + { + name: 'mapSettings', + type: 'group', + label: 'Karten-Einstellungen', + fields: [ + { + name: 'height', + type: 'select', + defaultValue: '400', + label: 'Höhe', + options: [ + { label: 'Klein (300px)', value: '300' }, + { label: 'Normal (400px)', value: '400' }, + { label: 'Groß (500px)', value: '500' }, + { label: 'Sehr groß (600px)', value: '600' }, + { label: 'Vollbild-Höhe', value: 'fullscreen' }, + ], + }, + { + name: 'zoom', + type: 'number', + defaultValue: 12, + min: 1, + max: 20, + label: 'Zoom-Level', + admin: { + description: '1 = Welt, 20 = Gebäude-Details', + }, + }, + { + name: 'autoFit', + type: 'checkbox', + defaultValue: true, + label: 'Zoom automatisch anpassen', + admin: { + description: 'Zoom so anpassen, dass alle Marker sichtbar sind', + }, + }, + { + name: 'centerLat', + type: 'number', + label: 'Mittelpunkt Breitengrad', + admin: { + step: 0.000001, + description: 'Optional - wird automatisch berechnet wenn leer', + }, + }, + { + name: 'centerLng', + type: 'number', + label: 'Mittelpunkt Längengrad', + admin: { + step: 0.000001, + }, + }, + ], + }, + // Interaktion + { + name: 'interaction', + type: 'group', + label: 'Interaktion', + fields: [ + { + name: 'scrollZoom', + type: 'checkbox', + defaultValue: false, + label: 'Zoom mit Mausrad', + }, + { + name: 'dragging', + type: 'checkbox', + defaultValue: true, + label: 'Verschieben erlauben', + }, + { + name: 'zoomControl', + type: 'checkbox', + defaultValue: true, + label: 'Zoom-Buttons', + }, + { + name: 'fullscreenControl', + type: 'checkbox', + defaultValue: false, + label: 'Vollbild-Button', + }, + { + name: 'locateControl', + type: 'checkbox', + defaultValue: false, + label: 'Standort-Button', + admin: { + description: 'User-Standort ermitteln', + }, + }, + ], + }, + // Marker-Darstellung + { + name: 'markerStyle', + type: 'group', + label: 'Marker-Darstellung', + fields: [ + { + name: 'type', + type: 'select', + defaultValue: 'pin', + label: 'Marker-Typ', + options: [ + { label: 'Pin', value: 'pin' }, + { label: 'Punkt', value: 'dot' }, + { label: 'Icon', value: 'icon' }, + { label: 'Custom', value: 'custom' }, + ], + }, + { + name: 'color', + type: 'text', + defaultValue: '#3B82F6', + label: 'Marker-Farbe', + admin: { + description: 'HEX-Farbcode, z.B. #3B82F6', + }, + }, + { + name: 'size', + type: 'select', + defaultValue: 'md', + label: 'Größe', + options: [ + { label: 'Klein', value: 'sm' }, + { label: 'Mittel', value: 'md' }, + { label: 'Groß', value: 'lg' }, + ], + }, + { + name: 'clustering', + type: 'checkbox', + defaultValue: true, + label: 'Marker clustern', + admin: { + description: 'Nahe beieinander liegende Marker gruppieren', + }, + }, + { + name: 'clusterRadius', + type: 'number', + defaultValue: 50, + label: 'Cluster-Radius', + admin: { + condition: (_, siblingData) => siblingData?.clustering, + }, + }, + ], + }, + // Popup-Einstellungen + { + name: 'popup', + type: 'group', + label: 'Popup-Einstellungen', + fields: [ + { + name: 'show', + type: 'checkbox', + defaultValue: true, + label: 'Popups anzeigen', + }, + { + name: 'trigger', + type: 'select', + defaultValue: 'click', + label: 'Öffnen bei', + options: [ + { label: 'Klick', value: 'click' }, + { label: 'Hover', value: 'hover' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'showAddress', + type: 'checkbox', + defaultValue: true, + label: 'Adresse anzeigen', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'showDirectionsLink', + type: 'checkbox', + defaultValue: true, + label: 'Routenplaner-Link', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'showPhone', + type: 'checkbox', + defaultValue: true, + label: 'Telefon anzeigen', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'showOpeningHours', + type: 'checkbox', + defaultValue: false, + label: 'Öffnungszeiten anzeigen', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'showDetailLink', + type: 'checkbox', + defaultValue: true, + label: 'Detail-Link anzeigen', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + ], + }, + // Sidebar/Liste + { + name: 'sidebar', + type: 'group', + label: 'Standort-Liste', + fields: [ + { + name: 'show', + type: 'checkbox', + defaultValue: false, + label: 'Liste neben Karte', + }, + { + name: 'position', + type: 'select', + defaultValue: 'right', + label: 'Position', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Rechts', value: 'right' }, + { label: 'Unten', value: 'bottom' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'width', + type: 'select', + defaultValue: '300', + label: 'Breite', + options: [ + { label: 'Schmal (250px)', value: '250' }, + { label: 'Normal (300px)', value: '300' }, + { label: 'Breit (400px)', value: '400' }, + ], + admin: { + condition: (_, siblingData) => + siblingData?.show && siblingData?.position !== 'bottom', + }, + }, + { + name: 'searchable', + type: 'checkbox', + defaultValue: true, + label: 'Suchfeld in Liste', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'clickToCenter', + type: 'checkbox', + defaultValue: true, + label: 'Klick zentriert Karte', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + ], + }, + // Styling + { + name: 'style', + type: 'group', + label: 'Darstellung', + fields: [ + { + name: 'rounded', + type: 'checkbox', + defaultValue: true, + label: 'Abgerundete Ecken', + }, + { + name: 'shadow', + type: 'checkbox', + defaultValue: true, + label: 'Schatten', + }, + { + name: 'border', + type: 'checkbox', + defaultValue: false, + label: 'Rahmen', + }, + { + name: 'padding', + type: 'select', + defaultValue: 'none', + label: 'Außenabstand', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Klein', value: 'sm' }, + { label: 'Normal', value: 'md' }, + { label: 'Groß', value: 'lg' }, + ], + }, + ], + }, + // Fallback + { + name: 'fallback', + type: 'group', + label: 'Fallback', + fields: [ + { + name: 'showStaticImage', + type: 'checkbox', + defaultValue: false, + label: 'Statisches Bild als Fallback', + }, + { + name: 'staticImage', + type: 'upload', + relationTo: 'media', + label: 'Fallback-Bild', + admin: { + condition: (_, siblingData) => siblingData?.showStaticImage, + }, + }, + { + name: 'noJsMessage', + type: 'text', + label: 'Nachricht ohne JavaScript', + localized: true, + defaultValue: 'Bitte aktivieren Sie JavaScript, um die Karte anzuzeigen.', + }, + ], + }, + ], +} diff --git a/src/blocks/PricingBlock.ts b/src/blocks/PricingBlock.ts new file mode 100644 index 0000000..423b3a9 --- /dev/null +++ b/src/blocks/PricingBlock.ts @@ -0,0 +1,509 @@ +import type { Block } from 'payload' + +/** + * Pricing Block + * + * Preistabellen für Produkte, Dienstleistungen oder Abonnements. + * Unterstützt verschiedene Layouts, Vergleichstabellen und + * Highlight-Features für empfohlene Pläne. + */ +export const PricingBlock: Block = { + slug: 'pricing', + labels: { + singular: 'Preistabelle', + plural: 'Preistabellen', + }, + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + }, + // Preismodell + { + name: 'pricingType', + type: 'select', + defaultValue: 'one-time', + label: 'Preismodell', + options: [ + { label: 'Einmalig', value: 'one-time' }, + { label: 'Monatlich', value: 'monthly' }, + { label: 'Jährlich', value: 'yearly' }, + { label: 'Monatlich/Jährlich Toggle', value: 'toggle' }, + { label: 'Individuell', value: 'custom' }, + ], + }, + { + name: 'currency', + type: 'text', + defaultValue: '€', + label: 'Währung', + }, + { + name: 'showCurrencyBefore', + type: 'checkbox', + defaultValue: true, + label: 'Währung vor dem Preis', + }, + // Toggle-Optionen für Monatlich/Jährlich + { + name: 'toggleOptions', + type: 'group', + label: 'Toggle-Optionen', + admin: { + condition: (data, siblingData) => siblingData?.pricingType === 'toggle', + }, + fields: [ + { + name: 'monthlyLabel', + type: 'text', + defaultValue: 'Monatlich', + label: 'Monatlich Label', + localized: true, + }, + { + name: 'yearlyLabel', + type: 'text', + defaultValue: 'Jährlich', + label: 'Jährlich Label', + localized: true, + }, + { + name: 'yearlyDiscount', + type: 'text', + label: 'Rabatt-Badge', + localized: true, + admin: { + description: 'z.B. "2 Monate gratis"', + }, + }, + { + name: 'defaultToYearly', + type: 'checkbox', + defaultValue: true, + label: 'Standard: Jährlich', + }, + ], + }, + // Preispläne + { + name: 'plans', + type: 'array', + label: 'Preispläne', + minRows: 1, + maxRows: 6, + fields: [ + { + name: 'name', + type: 'text', + required: true, + label: 'Plan-Name', + localized: true, + admin: { + description: 'z.B. "Basic", "Pro", "Enterprise"', + }, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + admin: { + description: 'z.B. "Für Einsteiger"', + }, + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + }, + // Preis + { + type: 'row', + fields: [ + { + name: 'price', + type: 'number', + label: 'Preis', + admin: { + width: '25%', + }, + }, + { + name: 'priceMonthly', + type: 'number', + label: 'Preis Monatlich', + admin: { + width: '25%', + condition: (data, siblingData, { blockData }) => + blockData?.pricingType === 'toggle', + }, + }, + { + name: 'priceYearly', + type: 'number', + label: 'Preis Jährlich', + admin: { + width: '25%', + condition: (data, siblingData, { blockData }) => + blockData?.pricingType === 'toggle', + }, + }, + { + name: 'priceSuffix', + type: 'text', + label: 'Preis-Suffix', + localized: true, + admin: { + width: '25%', + description: 'z.B. "/Monat", "/Nutzer"', + }, + }, + ], + }, + { + name: 'originalPrice', + type: 'number', + label: 'Originalpreis (durchgestrichen)', + admin: { + description: 'Für Rabatt-Darstellung', + }, + }, + { + name: 'priceNote', + type: 'text', + label: 'Preis-Hinweis', + localized: true, + admin: { + description: 'z.B. "zzgl. MwSt.", "Bei jährlicher Zahlung"', + }, + }, + { + name: 'customPriceText', + type: 'text', + label: 'Individueller Preis-Text', + localized: true, + admin: { + description: 'z.B. "Auf Anfrage", "Individuell"', + condition: (data, siblingData, { blockData }) => + blockData?.pricingType === 'custom', + }, + }, + // Features + { + name: 'features', + type: 'array', + label: 'Features', + fields: [ + { + name: 'text', + type: 'text', + required: true, + label: 'Feature', + localized: true, + }, + { + name: 'included', + type: 'checkbox', + defaultValue: true, + label: 'Enthalten', + }, + { + name: 'highlight', + type: 'checkbox', + defaultValue: false, + label: 'Hervorheben', + }, + { + name: 'tooltip', + type: 'text', + label: 'Tooltip', + localized: true, + }, + ], + }, + // CTA + { + name: 'ctaText', + type: 'text', + defaultValue: 'Jetzt starten', + label: 'Button-Text', + localized: true, + }, + { + name: 'ctaLink', + type: 'text', + label: 'Button-Link', + }, + { + name: 'ctaStyle', + type: 'select', + defaultValue: 'primary', + label: 'Button-Stil', + options: [ + { label: 'Primär', value: 'primary' }, + { label: 'Sekundär', value: 'secondary' }, + { label: 'Outline', value: 'outline' }, + ], + }, + // Hervorhebung + { + name: 'isPopular', + type: 'checkbox', + defaultValue: false, + label: 'Als "Beliebt" markieren', + }, + { + name: 'popularLabel', + type: 'text', + defaultValue: 'Beliebt', + label: 'Beliebt-Label', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.isPopular, + }, + }, + { + name: 'isRecommended', + type: 'checkbox', + defaultValue: false, + label: 'Als "Empfohlen" markieren', + }, + { + name: 'recommendedLabel', + type: 'text', + defaultValue: 'Empfohlen', + label: 'Empfohlen-Label', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.isRecommended, + }, + }, + // Styling + { + name: 'accentColor', + type: 'select', + label: 'Akzentfarbe', + options: [ + { label: 'Standard', value: 'default' }, + { label: 'Primär', value: 'primary' }, + { label: 'Sekundär', value: 'secondary' }, + { label: 'Grün', value: 'green' }, + { label: 'Blau', value: 'blue' }, + { label: 'Lila', value: 'purple' }, + ], + }, + { + name: 'icon', + type: 'upload', + relationTo: 'media', + label: 'Icon/Logo', + }, + ], + }, + // Vergleichstabelle + { + name: 'showComparison', + type: 'checkbox', + defaultValue: false, + label: 'Vergleichstabelle anzeigen', + }, + { + name: 'comparisonFeatures', + type: 'array', + label: 'Vergleichs-Features', + admin: { + condition: (data, siblingData) => siblingData?.showComparison, + }, + fields: [ + { + name: 'category', + type: 'text', + label: 'Kategorie', + localized: true, + }, + { + name: 'feature', + type: 'text', + required: true, + label: 'Feature', + localized: true, + }, + { + name: 'tooltip', + type: 'text', + label: 'Tooltip', + localized: true, + }, + { + name: 'values', + type: 'array', + label: 'Werte pro Plan', + fields: [ + { + name: 'planIndex', + type: 'number', + label: 'Plan-Index (0-basiert)', + }, + { + name: 'value', + type: 'text', + label: 'Wert', + localized: true, + admin: { + description: '✓, ✗, oder Text wie "10 GB", "Unbegrenzt"', + }, + }, + ], + }, + ], + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'cards', + label: 'Layout', + options: [ + { label: 'Karten', value: 'cards' }, + { label: 'Tabelle', value: 'table' }, + { label: 'Kompakt', value: 'compact' }, + ], + }, + { + name: 'alignment', + type: 'select', + defaultValue: 'center', + label: 'Ausrichtung', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Zentriert', value: 'center' }, + { label: 'Rechts', value: 'right' }, + ], + }, + { + name: 'highlightPopular', + type: 'checkbox', + defaultValue: true, + label: 'Beliebten Plan hervorheben', + }, + // Geld-zurück-Garantie etc. + { + name: 'guarantee', + type: 'group', + label: 'Garantie/Trust-Elemente', + fields: [ + { + name: 'show', + type: 'checkbox', + defaultValue: false, + label: 'Garantie anzeigen', + }, + { + name: 'text', + type: 'text', + defaultValue: '30 Tage Geld-zurück-Garantie', + label: 'Garantie-Text', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.show, + }, + }, + { + name: 'icon', + type: 'select', + label: 'Icon', + options: [ + { label: 'Schild', value: 'shield' }, + { label: 'Häkchen', value: 'check' }, + { label: 'Stern', value: 'star' }, + { label: 'Schloss', value: 'lock' }, + ], + admin: { + condition: (data, siblingData) => siblingData?.show, + }, + }, + ], + }, + // FAQ + { + name: 'showFAQ', + type: 'checkbox', + defaultValue: false, + label: 'FAQ anzeigen', + }, + { + name: 'faqTitle', + type: 'text', + defaultValue: 'Häufig gestellte Fragen', + label: 'FAQ-Überschrift', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.showFAQ, + }, + }, + { + name: 'faqItems', + type: 'array', + label: 'FAQ-Einträge', + admin: { + condition: (data, siblingData) => siblingData?.showFAQ, + }, + fields: [ + { + name: 'question', + type: 'text', + required: true, + label: 'Frage', + localized: true, + }, + { + name: 'answer', + type: 'richText', + required: true, + label: 'Antwort', + localized: true, + }, + ], + }, + // Styling + { + name: 'backgroundColor', + type: 'select', + defaultValue: 'white', + label: 'Hintergrund', + options: [ + { label: 'Weiß', value: 'white' }, + { label: 'Hell (Grau)', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Gradient', value: 'gradient' }, + ], + }, + { + name: 'cardStyle', + type: 'select', + defaultValue: 'elevated', + label: 'Karten-Stil', + options: [ + { label: 'Erhöht (Schatten)', value: 'elevated' }, + { label: 'Umrandet', value: 'bordered' }, + { label: 'Flach', value: 'flat' }, + { label: 'Glass', value: 'glass' }, + ], + }, + ], +} diff --git a/src/blocks/StatsBlock.ts b/src/blocks/StatsBlock.ts new file mode 100644 index 0000000..1ecb52c --- /dev/null +++ b/src/blocks/StatsBlock.ts @@ -0,0 +1,372 @@ +import type { Block } from 'payload' + +/** + * StatsBlock + * + * Zeigt Kennzahlen und Statistiken in verschiedenen Layouts. + * Unterstützt Animationen und verschiedene Darstellungsformen. + */ +export const StatsBlock: Block = { + slug: 'stats-block', + labels: { + singular: 'Statistiken', + plural: 'Statistiken', + }, + imageURL: '/assets/blocks/stats.png', + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + }, + { + name: 'subtitle', + type: 'textarea', + label: 'Untertitel', + localized: true, + }, + // Statistiken + { + name: 'stats', + type: 'array', + required: true, + minRows: 1, + maxRows: 8, + label: 'Statistiken', + fields: [ + { + name: 'value', + type: 'text', + required: true, + label: 'Wert', + admin: { + description: 'z.B. "500+", "99%", "24/7", "10.000"', + }, + }, + { + name: 'numericValue', + type: 'number', + label: 'Numerischer Wert', + admin: { + description: 'Für Zähl-Animation (z.B. 500 für "500+")', + }, + }, + { + name: 'prefix', + type: 'text', + label: 'Präfix', + admin: { + description: 'z.B. "€", "+"', + }, + }, + { + name: 'suffix', + type: 'text', + label: 'Suffix', + admin: { + description: 'z.B. "+", "%", "k", "Mio."', + }, + }, + { + name: 'label', + type: 'text', + required: true, + label: 'Beschreibung', + localized: true, + admin: { + description: 'z.B. "Zufriedene Kunden", "Erfolgsquote"', + }, + }, + { + name: 'description', + type: 'textarea', + label: 'Zusatztext', + localized: true, + admin: { + description: 'Optionaler erklärender Text', + }, + }, + { + name: 'icon', + type: 'select', + label: 'Icon', + options: [ + { label: 'Keins', value: 'none' }, + { label: 'Nutzer', value: 'users' }, + { label: 'Stern', value: 'star' }, + { label: 'Herz', value: 'heart' }, + { label: 'Check', value: 'check' }, + { label: 'Trophäe', value: 'trophy' }, + { label: 'Chart', value: 'chart' }, + { label: 'Uhr', value: 'clock' }, + { label: 'Kalender', value: 'calendar' }, + { label: 'Globus', value: 'globe' }, + { label: 'Gebäude', value: 'building' }, + { label: 'Dokument', value: 'document' }, + { label: 'Ziel', value: 'target' }, + { label: 'Rakete', value: 'rocket' }, + { label: 'Handshake', value: 'handshake' }, + ], + }, + { + name: 'color', + type: 'select', + label: 'Akzentfarbe', + options: [ + { label: 'Standard', value: 'default' }, + { label: 'Primary', value: 'primary' }, + { label: 'Grün', value: 'green' }, + { label: 'Blau', value: 'blue' }, + { label: 'Orange', value: 'orange' }, + { label: 'Rot', value: 'red' }, + ], + }, + ], + }, + // Layout + { + name: 'layout', + type: 'select', + defaultValue: 'row', + label: 'Layout', + options: [ + { label: 'Horizontal', value: 'row' }, + { label: 'Grid', value: 'grid' }, + { label: 'Karten', value: 'cards' }, + { label: 'Vertikal', value: 'column' }, + { label: 'Inline (kompakt)', value: 'inline' }, + { label: 'Feature (groß)', value: 'feature' }, + ], + }, + { + name: 'columns', + type: 'select', + defaultValue: '4', + label: 'Spalten', + options: [ + { label: '2 Spalten', value: '2' }, + { label: '3 Spalten', value: '3' }, + { label: '4 Spalten', value: '4' }, + { label: 'Auto', value: 'auto' }, + ], + admin: { + condition: (_, siblingData) => + siblingData?.layout === 'grid' || siblingData?.layout === 'cards', + }, + }, + { + name: 'alignment', + type: 'select', + defaultValue: 'center', + label: 'Ausrichtung', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Mitte', value: 'center' }, + { label: 'Rechts', value: 'right' }, + ], + }, + // Animation + { + name: 'animation', + type: 'group', + label: 'Animation', + fields: [ + { + name: 'countUp', + type: 'checkbox', + defaultValue: true, + label: 'Zähl-Animation', + admin: { + description: 'Zahlen hochzählen (benötigt numericValue)', + }, + }, + { + name: 'duration', + type: 'select', + defaultValue: '2000', + label: 'Dauer', + options: [ + { label: 'Schnell (1s)', value: '1000' }, + { label: 'Normal (2s)', value: '2000' }, + { label: 'Langsam (3s)', value: '3000' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.countUp, + }, + }, + { + name: 'trigger', + type: 'select', + defaultValue: 'viewport', + label: 'Trigger', + options: [ + { label: 'Beim Scrollen sichtbar', value: 'viewport' }, + { label: 'Sofort', value: 'immediate' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.countUp, + }, + }, + { + name: 'stagger', + type: 'checkbox', + defaultValue: true, + label: 'Versetzt animieren', + admin: { + description: 'Statistiken nacheinander einblenden', + condition: (_, siblingData) => siblingData?.countUp, + }, + }, + ], + }, + // Styling + { + name: 'style', + type: 'group', + label: 'Darstellung', + fields: [ + { + name: 'bg', + type: 'select', + defaultValue: 'none', + label: 'Hintergrund', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Hell', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Primary', value: 'primary' }, + { label: 'Gradient', value: 'gradient' }, + ], + }, + { + name: 'bgImage', + type: 'upload', + relationTo: 'media', + label: 'Hintergrundbild', + admin: { + condition: (_, siblingData) => siblingData?.bg === 'none', + }, + }, + { + name: 'bgOverlay', + type: 'select', + defaultValue: 'dark', + label: 'Overlay', + options: [ + { label: 'Keins', value: 'none' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Hell', value: 'light' }, + { label: 'Primary', value: 'primary' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.bgImage, + }, + }, + { + name: 'textColor', + type: 'select', + defaultValue: 'auto', + label: 'Textfarbe', + options: [ + { label: 'Auto', value: 'auto' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Hell', value: 'light' }, + ], + }, + { + name: 'valueSize', + type: 'select', + defaultValue: 'xl', + label: 'Zahlen-Größe', + options: [ + { label: 'Normal', value: 'base' }, + { label: 'Groß', value: 'lg' }, + { label: 'Sehr groß', value: 'xl' }, + { label: 'Riesig', value: '2xl' }, + ], + }, + { + name: 'valueWeight', + type: 'select', + defaultValue: 'bold', + label: 'Zahlen-Gewicht', + options: [ + { label: 'Normal', value: 'normal' }, + { label: 'Medium', value: 'medium' }, + { label: 'Bold', value: 'bold' }, + { label: 'Extra Bold', value: 'extrabold' }, + ], + }, + { + name: 'showIcon', + type: 'checkbox', + defaultValue: true, + label: 'Icons anzeigen', + }, + { + name: 'iconPosition', + type: 'select', + defaultValue: 'top', + label: 'Icon-Position', + options: [ + { label: 'Oben', value: 'top' }, + { label: 'Links', value: 'left' }, + { label: 'In Zahl', value: 'inline' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.showIcon, + }, + }, + { + name: 'dividers', + type: 'checkbox', + defaultValue: false, + label: 'Trennlinien', + }, + { + name: 'cardBorder', + type: 'checkbox', + defaultValue: false, + label: 'Karten-Rahmen', + admin: { + condition: (_, siblingData) => siblingData?.layout === 'cards', + }, + }, + { + name: 'cardShadow', + type: 'checkbox', + defaultValue: true, + label: 'Karten-Schatten', + admin: { + condition: (_, siblingData) => siblingData?.layout === 'cards', + }, + }, + { + name: 'gap', + type: 'select', + defaultValue: '32', + label: 'Abstand', + options: [ + { label: 'Klein (16px)', value: '16' }, + { label: 'Normal (24px)', value: '24' }, + { label: 'Groß (32px)', value: '32' }, + { label: 'Sehr groß (48px)', value: '48' }, + ], + }, + { + name: 'padding', + type: 'select', + defaultValue: 'md', + label: 'Innenabstand', + options: [ + { label: 'Keiner', value: 'none' }, + { label: 'Klein', value: 'sm' }, + { label: 'Normal', value: 'md' }, + { label: 'Groß', value: 'lg' }, + ], + }, + ], + }, + ], +} diff --git a/src/blocks/TabsBlock.ts b/src/blocks/TabsBlock.ts new file mode 100644 index 0000000..3c87ba9 --- /dev/null +++ b/src/blocks/TabsBlock.ts @@ -0,0 +1,381 @@ +import type { Block } from 'payload' + +/** + * Tabs Block + * + * Tabbed Content für organisierte Informationen. + * Unterstützt verschiedene Tab-Stile, Icons und + * kann andere Blocks als Content enthalten. + */ +export const TabsBlock: Block = { + slug: 'tabs', + labels: { + singular: 'Tabs', + plural: 'Tabs', + }, + fields: [ + { + name: 'title', + type: 'text', + label: 'Überschrift', + localized: true, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + // Tabs + { + name: 'tabs', + type: 'array', + label: 'Tabs', + minRows: 2, + maxRows: 10, + fields: [ + { + name: 'label', + type: 'text', + required: true, + label: 'Tab-Titel', + localized: true, + }, + { + name: 'icon', + type: 'select', + label: 'Icon', + options: [ + { label: 'Keines', value: 'none' }, + { label: 'Info', value: 'info' }, + { label: 'Stern', value: 'star' }, + { label: 'Herz', value: 'heart' }, + { label: 'Häkchen', value: 'check' }, + { label: 'Einstellungen', value: 'settings' }, + { label: 'Benutzer', value: 'user' }, + { label: 'Dokument', value: 'document' }, + { label: 'Bild', value: 'image' }, + { label: 'Video', value: 'video' }, + { label: 'Code', value: 'code' }, + { label: 'Chart', value: 'chart' }, + { label: 'Kalender', value: 'calendar' }, + { label: 'Standort', value: 'location' }, + { label: 'E-Mail', value: 'email' }, + { label: 'Telefon', value: 'phone' }, + ], + }, + { + name: 'customIcon', + type: 'upload', + relationTo: 'media', + label: 'Eigenes Icon', + admin: { + description: 'Überschreibt das ausgewählte Icon', + }, + }, + { + name: 'badge', + type: 'text', + label: 'Badge', + admin: { + description: 'z.B. "Neu", "3", "Beta"', + }, + }, + // Content + { + name: 'contentType', + type: 'select', + defaultValue: 'richtext', + label: 'Content-Typ', + options: [ + { label: 'Rich Text', value: 'richtext' }, + { label: 'Bild & Text', value: 'image-text' }, + { label: 'Feature-Liste', value: 'features' }, + { label: 'Code', value: 'code' }, + { label: 'Embed', value: 'embed' }, + ], + }, + // Rich Text Content + { + name: 'content', + type: 'richText', + label: 'Inhalt', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'richtext', + }, + }, + // Image & Text Content + { + name: 'imgTxt', + type: 'group', + label: 'Bild & Text', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'image-text', + }, + fields: [ + { + name: 'img', + type: 'upload', + relationTo: 'media', + label: 'Bild', + }, + { + name: 'imgPos', + type: 'select', + defaultValue: 'left', + label: 'Bild-Position', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Rechts', value: 'right' }, + { label: 'Oben', value: 'top' }, + ], + }, + { + name: 'text', + type: 'richText', + label: 'Text', + localized: true, + }, + ], + }, + // Features List + { + name: 'features', + type: 'array', + label: 'Features', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'features', + }, + fields: [ + { + name: 'title', + type: 'text', + required: true, + label: 'Titel', + localized: true, + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + }, + { + name: 'icon', + type: 'select', + label: 'Icon', + options: [ + { label: 'Häkchen', value: 'check' }, + { label: 'Stern', value: 'star' }, + { label: 'Pfeil', value: 'arrow' }, + { label: 'Punkt', value: 'dot' }, + { label: 'Nummer', value: 'number' }, + ], + }, + ], + }, + // Code Content + { + name: 'code', + type: 'group', + label: 'Code', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'code', + }, + fields: [ + { + name: 'language', + type: 'select', + label: 'Sprache', + options: [ + { label: 'JavaScript', value: 'javascript' }, + { label: 'TypeScript', value: 'typescript' }, + { label: 'HTML', value: 'html' }, + { label: 'CSS', value: 'css' }, + { label: 'JSON', value: 'json' }, + { label: 'Python', value: 'python' }, + { label: 'Bash', value: 'bash' }, + { label: 'SQL', value: 'sql' }, + ], + }, + { + name: 'code', + type: 'code', + label: 'Code', + }, + { + name: 'showLineNumbers', + type: 'checkbox', + defaultValue: true, + label: 'Zeilennummern anzeigen', + }, + ], + }, + // Embed Content + { + name: 'embed', + type: 'group', + label: 'Embed', + admin: { + condition: (data, siblingData) => siblingData?.contentType === 'embed', + }, + fields: [ + { + name: 'type', + type: 'select', + label: 'Typ', + options: [ + { label: 'YouTube', value: 'youtube' }, + { label: 'Vimeo', value: 'vimeo' }, + { label: 'iFrame', value: 'iframe' }, + ], + }, + { + name: 'url', + type: 'text', + label: 'URL', + }, + { + name: 'aspectRatio', + type: 'select', + defaultValue: '16:9', + label: 'Seitenverhältnis', + options: [ + { label: '16:9', value: '16:9' }, + { label: '4:3', value: '4:3' }, + { label: '1:1', value: '1:1' }, + ], + }, + ], + }, + ], + }, + // Tab Style + { + name: 'tabStyle', + type: 'select', + defaultValue: 'underline', + label: 'Tab-Stil', + options: [ + { label: 'Unterstrichen', value: 'underline' }, + { label: 'Boxed', value: 'boxed' }, + { label: 'Pills', value: 'pills' }, + { label: 'Buttons', value: 'buttons' }, + { label: 'Vertikal', value: 'vertical' }, + ], + }, + { + name: 'tabPosition', + type: 'select', + defaultValue: 'top', + label: 'Tab-Position', + options: [ + { label: 'Oben', value: 'top' }, + { label: 'Links', value: 'left' }, + { label: 'Rechts', value: 'right' }, + { label: 'Unten', value: 'bottom' }, + ], + admin: { + condition: (data, siblingData) => siblingData?.tabStyle !== 'vertical', + }, + }, + { + name: 'tabAlignment', + type: 'select', + defaultValue: 'left', + label: 'Tab-Ausrichtung', + options: [ + { label: 'Links', value: 'left' }, + { label: 'Zentriert', value: 'center' }, + { label: 'Rechts', value: 'right' }, + { label: 'Gleichmäßig verteilt', value: 'stretch' }, + ], + admin: { + condition: (data, siblingData) => + siblingData?.tabPosition === 'top' || siblingData?.tabPosition === 'bottom', + }, + }, + // Verhalten + { + name: 'defaultTab', + type: 'number', + defaultValue: 0, + min: 0, + label: 'Standard-Tab (Index)', + admin: { + description: '0 = erster Tab', + }, + }, + { + name: 'allowKeyboardNavigation', + type: 'checkbox', + defaultValue: true, + label: 'Tastatur-Navigation', + }, + { + name: 'animated', + type: 'checkbox', + defaultValue: true, + label: 'Animierter Übergang', + }, + { + name: 'lazy', + type: 'checkbox', + defaultValue: false, + label: 'Lazy Loading', + admin: { + description: 'Tab-Inhalte erst bei Aktivierung laden', + }, + }, + // Mobile + { + name: 'mobileStyle', + type: 'select', + defaultValue: 'scroll', + label: 'Mobile-Ansicht', + options: [ + { label: 'Scrollbar', value: 'scroll' }, + { label: 'Dropdown', value: 'dropdown' }, + { label: 'Accordion', value: 'accordion' }, + { label: 'Gestapelt', value: 'stacked' }, + ], + }, + // Styling + { + name: 'backgroundColor', + type: 'select', + defaultValue: 'white', + label: 'Hintergrund', + options: [ + { label: 'Weiß', value: 'white' }, + { label: 'Hell (Grau)', value: 'light' }, + { label: 'Dunkel', value: 'dark' }, + { label: 'Transparent', value: 'transparent' }, + ], + }, + { + name: 'contentBackground', + type: 'select', + defaultValue: 'white', + label: 'Content-Hintergrund', + options: [ + { label: 'Weiß', value: 'white' }, + { label: 'Hell (Grau)', value: 'light' }, + { label: 'Transparent', value: 'transparent' }, + ], + }, + { + name: 'showBorder', + type: 'checkbox', + defaultValue: true, + label: 'Rahmen anzeigen', + }, + { + name: 'fullWidth', + type: 'checkbox', + defaultValue: false, + label: 'Volle Breite', + }, + ], +} diff --git a/src/blocks/index.ts b/src/blocks/index.ts index b6977ae..e2ffc76 100644 --- a/src/blocks/index.ts +++ b/src/blocks/index.ts @@ -29,3 +29,18 @@ export { TableOfContentsBlock } from './TableOfContentsBlock' // Team Blocks export { TeamFilterBlock } from './TeamFilterBlock' export { OrgChartBlock } from './OrgChartBlock' + +// New Feature Blocks +export { LocationsBlock } from './LocationsBlock' +export { LogoGridBlock } from './LogoGridBlock' +export { StatsBlock } from './StatsBlock' +export { JobsBlock } from './JobsBlock' +export { DownloadsBlock } from './DownloadsBlock' +export { MapBlock } from './MapBlock' + +// Events & Interactive Blocks +export { EventsBlock } from './EventsBlock' +export { PricingBlock } from './PricingBlock' +export { TabsBlock } from './TabsBlock' +export { AccordionBlock } from './AccordionBlock' +export { ComparisonBlock } from './ComparisonBlock' diff --git a/src/collections/Downloads.ts b/src/collections/Downloads.ts new file mode 100644 index 0000000..bf9d2cb --- /dev/null +++ b/src/collections/Downloads.ts @@ -0,0 +1,254 @@ +import type { CollectionConfig } from 'payload' +import { authenticatedOnly, tenantScopedPublicRead } from '../lib/tenantAccess' + +/** + * Downloads Collection + * + * Downloadbare Dateien wie PDFs, Broschüren, Formulare, etc. + * Mit Kategorisierung, Tracking und Zugriffskontrolle. + */ +export const Downloads: CollectionConfig = { + slug: 'downloads', + labels: { + singular: 'Download', + plural: 'Downloads', + }, + admin: { + useAsTitle: 'title', + group: 'Content', + defaultColumns: ['title', 'category', 'fileType', 'downloadCount', 'isActive'], + description: 'Downloadbare Dateien und Dokumente', + }, + access: { + read: tenantScopedPublicRead, + create: authenticatedOnly, + update: authenticatedOnly, + delete: authenticatedOnly, + }, + fields: [ + { + name: 'title', + type: 'text', + required: true, + label: 'Titel', + localized: true, + }, + { + name: 'slug', + type: 'text', + required: true, + unique: true, + label: 'Slug', + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + }, + { + name: 'file', + type: 'upload', + relationTo: 'media', + required: true, + label: 'Datei', + }, + { + name: 'fileType', + type: 'select', + label: 'Dateityp', + options: [ + { label: 'PDF', value: 'pdf' }, + { label: 'Word', value: 'doc' }, + { label: 'Excel', value: 'xls' }, + { label: 'PowerPoint', value: 'ppt' }, + { label: 'Bild', value: 'image' }, + { label: 'Video', value: 'video' }, + { label: 'Audio', value: 'audio' }, + { label: 'ZIP/Archiv', value: 'archive' }, + { label: 'Sonstiges', value: 'other' }, + ], + admin: { + position: 'sidebar', + description: 'Wird automatisch erkannt, kann überschrieben werden', + }, + }, + { + name: 'fileSize', + type: 'text', + label: 'Dateigröße', + admin: { + position: 'sidebar', + description: 'z.B. "2.5 MB" - wird automatisch berechnet', + readOnly: true, + }, + }, + // Kategorisierung + { + name: 'category', + type: 'select', + label: 'Kategorie', + options: [ + { label: 'Broschüre', value: 'brochure' }, + { label: 'Flyer', value: 'flyer' }, + { label: 'Katalog', value: 'catalog' }, + { label: 'Preisliste', value: 'pricelist' }, + { label: 'Formular', value: 'form' }, + { label: 'Anleitung', value: 'manual' }, + { label: 'Datenblatt', value: 'datasheet' }, + { label: 'Zertifikat', value: 'certificate' }, + { label: 'Pressematerial', value: 'press' }, + { label: 'Whitepaper', value: 'whitepaper' }, + { label: 'Präsentation', value: 'presentation' }, + { label: 'Vertrag/AGB', value: 'legal' }, + { label: 'Sonstiges', value: 'other' }, + ], + }, + { + name: 'tags', + type: 'array', + label: 'Tags', + fields: [ + { + name: 'tag', + type: 'text', + required: true, + }, + ], + }, + // Vorschau + { + name: 'thumbnail', + type: 'upload', + relationTo: 'media', + label: 'Vorschaubild', + admin: { + description: 'Optionales Thumbnail (sonst wird Standard-Icon verwendet)', + }, + }, + // Verknüpfungen + { + name: 'relatedServices', + type: 'relationship', + relationTo: 'services', + hasMany: true, + label: 'Zugehörige Services', + }, + { + name: 'relatedProducts', + type: 'relationship', + relationTo: 'products', + hasMany: true, + label: 'Zugehörige Produkte', + }, + // Zugriff + { + name: 'access', + type: 'group', + label: 'Zugriff', + fields: [ + { + name: 'requireLogin', + type: 'checkbox', + defaultValue: false, + label: 'Login erforderlich', + }, + { + name: 'requireForm', + type: 'checkbox', + defaultValue: false, + label: 'Formular vor Download', + admin: { + description: 'User müssen Kontaktdaten eingeben', + }, + }, + { + name: 'formFields', + type: 'select', + hasMany: true, + label: 'Formular-Felder', + options: [ + { label: 'Name', value: 'name' }, + { label: 'E-Mail', value: 'email' }, + { label: 'Firma', value: 'company' }, + { label: 'Telefon', value: 'phone' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.requireForm, + }, + }, + ], + }, + // Tracking + { + name: 'downloadCount', + type: 'number', + defaultValue: 0, + label: 'Downloads', + admin: { + position: 'sidebar', + readOnly: true, + }, + }, + // Version + { + name: 'version', + type: 'text', + label: 'Version', + admin: { + description: 'z.B. "2024-01", "v2.0"', + }, + }, + { + name: 'lastUpdated', + type: 'date', + label: 'Letzte Aktualisierung', + }, + // Status + { + name: 'isActive', + type: 'checkbox', + defaultValue: true, + label: 'Aktiv', + admin: { + position: 'sidebar', + }, + }, + { + name: 'isFeatured', + type: 'checkbox', + defaultValue: false, + label: 'Hervorgehoben', + admin: { + position: 'sidebar', + }, + }, + { + name: 'order', + type: 'number', + defaultValue: 0, + label: 'Sortierung', + admin: { + position: 'sidebar', + }, + }, + ], + hooks: { + beforeChange: [ + ({ data }) => { + if (data && !data.slug && data.title) { + const titleStr = typeof data.title === 'string' ? data.title : '' + data.slug = titleStr + .toLowerCase() + .replace(/[äöüß]/g, (match: string) => { + const map: Record = { ä: 'ae', ö: 'oe', ü: 'ue', ß: 'ss' } + return map[match] || match + }) + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-|-$/g, '') + } + return data + }, + ], + }, +} diff --git a/src/collections/Events.ts b/src/collections/Events.ts new file mode 100644 index 0000000..6d21e0c --- /dev/null +++ b/src/collections/Events.ts @@ -0,0 +1,757 @@ +import type { CollectionConfig } from 'payload' +import { authenticatedOnly, tenantScopedPublicRead } from '../lib/tenantAccess' + +/** + * Events Collection + * + * Veranstaltungen, Workshops, Seminare, Messen etc. + * Unterstützt einmalige und wiederkehrende Events, Online/Offline, + * Ticketing und Anmeldungen. + */ +export const Events: CollectionConfig = { + slug: 'events', + labels: { + singular: 'Veranstaltung', + plural: 'Veranstaltungen', + }, + admin: { + useAsTitle: 'title', + group: 'Content', + defaultColumns: ['title', 'eventType', 'startDate', 'location', 'status'], + description: 'Veranstaltungen und Events', + }, + access: { + read: tenantScopedPublicRead, + create: authenticatedOnly, + update: authenticatedOnly, + delete: authenticatedOnly, + }, + fields: [ + // Basis-Informationen + { + name: 'title', + type: 'text', + required: true, + label: 'Titel', + localized: true, + }, + { + name: 'slug', + type: 'text', + required: true, + unique: true, + label: 'Slug', + admin: { + description: 'URL-Pfad für das Event', + }, + }, + { + name: 'subtitle', + type: 'text', + label: 'Untertitel', + localized: true, + }, + { + name: 'description', + type: 'richText', + label: 'Beschreibung', + localized: true, + }, + { + name: 'excerpt', + type: 'textarea', + label: 'Kurzbeschreibung', + localized: true, + admin: { + description: 'Für Übersichtsseiten und SEO', + }, + }, + // Event-Typ + { + name: 'eventType', + type: 'select', + required: true, + defaultValue: 'event', + label: 'Event-Typ', + options: [ + { label: 'Veranstaltung', value: 'event' }, + { label: 'Workshop', value: 'workshop' }, + { label: 'Seminar', value: 'seminar' }, + { label: 'Webinar', value: 'webinar' }, + { label: 'Konferenz', value: 'conference' }, + { label: 'Messe', value: 'tradeshow' }, + { label: 'Networking', value: 'networking' }, + { label: 'Kurs', value: 'course' }, + { label: 'Vortrag', value: 'talk' }, + { label: 'Sonstiges', value: 'other' }, + ], + }, + { + name: 'category', + type: 'text', + label: 'Kategorie', + admin: { + description: 'Freies Textfeld für Kategorisierung', + }, + }, + // Format + { + name: 'format', + type: 'select', + required: true, + defaultValue: 'onsite', + label: 'Format', + options: [ + { label: 'Vor Ort', value: 'onsite' }, + { label: 'Online', value: 'online' }, + { label: 'Hybrid', value: 'hybrid' }, + ], + }, + // Datum & Zeit + { + type: 'row', + fields: [ + { + name: 'startDate', + type: 'date', + required: true, + label: 'Startdatum', + admin: { + date: { + pickerAppearance: 'dayAndTime', + }, + width: '50%', + }, + }, + { + name: 'endDate', + type: 'date', + label: 'Enddatum', + admin: { + date: { + pickerAppearance: 'dayAndTime', + }, + width: '50%', + description: 'Leer lassen für eintägige Events', + }, + }, + ], + }, + { + name: 'isAllDay', + type: 'checkbox', + defaultValue: false, + label: 'Ganztägig', + }, + { + name: 'timezone', + type: 'text', + defaultValue: 'Europe/Berlin', + label: 'Zeitzone', + admin: { + description: 'z.B. Europe/Berlin, America/New_York', + }, + }, + // Wiederkehrende Events + { + name: 'isRecurring', + type: 'checkbox', + defaultValue: false, + label: 'Wiederkehrendes Event', + }, + { + name: 'recurrence', + type: 'group', + label: 'Wiederholung', + admin: { + condition: (data, siblingData) => siblingData?.isRecurring, + }, + fields: [ + { + name: 'frequency', + type: 'select', + label: 'Häufigkeit', + options: [ + { label: 'Täglich', value: 'daily' }, + { label: 'Wöchentlich', value: 'weekly' }, + { label: 'Monatlich', value: 'monthly' }, + { label: 'Jährlich', value: 'yearly' }, + ], + }, + { + name: 'interval', + type: 'number', + min: 1, + defaultValue: 1, + label: 'Intervall', + admin: { + description: 'Alle X Tage/Wochen/Monate/Jahre', + }, + }, + { + name: 'endRecurrence', + type: 'date', + label: 'Ende der Wiederholung', + }, + { + name: 'description', + type: 'text', + label: 'Wiederholungs-Beschreibung', + localized: true, + admin: { + description: 'z.B. "Jeden ersten Montag im Monat"', + }, + }, + ], + }, + // Ort (für Vor-Ort Events) + { + name: 'location', + type: 'group', + label: 'Veranstaltungsort', + admin: { + condition: (data, siblingData) => + siblingData?.format === 'onsite' || siblingData?.format === 'hybrid', + }, + fields: [ + { + name: 'locationRef', + type: 'relationship', + relationTo: 'locations' as 'users', + label: 'Standort auswählen', + admin: { + description: 'Aus bestehenden Standorten wählen', + }, + }, + { + name: 'customLocation', + type: 'checkbox', + defaultValue: false, + label: 'Eigene Adresse angeben', + }, + { + name: 'venueName', + type: 'text', + label: 'Veranstaltungsort Name', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.customLocation, + }, + }, + { + name: 'street', + type: 'text', + label: 'Straße', + admin: { + condition: (data, siblingData) => siblingData?.customLocation, + }, + }, + { + name: 'zip', + type: 'text', + label: 'PLZ', + admin: { + condition: (data, siblingData) => siblingData?.customLocation, + }, + }, + { + name: 'city', + type: 'text', + label: 'Stadt', + admin: { + condition: (data, siblingData) => siblingData?.customLocation, + }, + }, + { + name: 'country', + type: 'text', + defaultValue: 'Deutschland', + label: 'Land', + admin: { + condition: (data, siblingData) => siblingData?.customLocation, + }, + }, + { + name: 'room', + type: 'text', + label: 'Raum/Saal', + localized: true, + }, + { + name: 'directions', + type: 'textarea', + label: 'Anfahrt', + localized: true, + }, + ], + }, + // Online-Details + { + name: 'online', + type: 'group', + label: 'Online-Details', + admin: { + condition: (data, siblingData) => + siblingData?.format === 'online' || siblingData?.format === 'hybrid', + }, + fields: [ + { + name: 'platform', + type: 'select', + label: 'Plattform', + options: [ + { label: 'Zoom', value: 'zoom' }, + { label: 'Microsoft Teams', value: 'teams' }, + { label: 'Google Meet', value: 'google-meet' }, + { label: 'Webex', value: 'webex' }, + { label: 'GoToWebinar', value: 'gotowebinar' }, + { label: 'Livestream', value: 'livestream' }, + { label: 'Sonstiges', value: 'other' }, + ], + }, + { + name: 'accessLink', + type: 'text', + label: 'Zugangslink', + admin: { + description: 'Wird nur angemeldeten Teilnehmern angezeigt', + }, + }, + { + name: 'accessInfo', + type: 'textarea', + label: 'Zugangsinformationen', + localized: true, + admin: { + description: 'z.B. Meeting-ID, Passwort', + }, + }, + ], + }, + // Medien + { + name: 'image', + type: 'upload', + relationTo: 'media', + label: 'Event-Bild', + }, + { + name: 'gallery', + type: 'array', + label: 'Galerie', + fields: [ + { + name: 'image', + type: 'upload', + relationTo: 'media', + required: true, + }, + { + name: 'caption', + type: 'text', + localized: true, + }, + ], + }, + // Anmeldung & Tickets + { + name: 'registration', + type: 'group', + label: 'Anmeldung', + fields: [ + { + name: 'required', + type: 'checkbox', + defaultValue: false, + label: 'Anmeldung erforderlich', + }, + { + name: 'method', + type: 'select', + label: 'Anmeldemethode', + defaultValue: 'form', + options: [ + { label: 'Internes Formular', value: 'form' }, + { label: 'E-Mail', value: 'email' }, + { label: 'Externer Link', value: 'external' }, + { label: 'Telefon', value: 'phone' }, + ], + admin: { + condition: (data, siblingData) => siblingData?.required, + }, + }, + { + name: 'formId', + type: 'relationship', + relationTo: 'forms', + label: 'Anmeldeformular', + admin: { + condition: (data, siblingData) => siblingData?.required && siblingData?.method === 'form', + }, + }, + { + name: 'email', + type: 'email', + label: 'Anmelde-E-Mail', + admin: { + condition: (data, siblingData) => siblingData?.required && siblingData?.method === 'email', + }, + }, + { + name: 'externalUrl', + type: 'text', + label: 'Externer Anmeldelink', + admin: { + condition: (data, siblingData) => siblingData?.required && siblingData?.method === 'external', + }, + }, + { + name: 'phone', + type: 'text', + label: 'Telefonnummer', + admin: { + condition: (data, siblingData) => siblingData?.required && siblingData?.method === 'phone', + }, + }, + { + name: 'deadline', + type: 'date', + label: 'Anmeldeschluss', + admin: { + condition: (data, siblingData) => siblingData?.required, + date: { + pickerAppearance: 'dayAndTime', + }, + }, + }, + { + name: 'maxParticipants', + type: 'number', + min: 0, + label: 'Maximale Teilnehmer', + admin: { + condition: (data, siblingData) => siblingData?.required, + description: '0 = unbegrenzt', + }, + }, + { + name: 'currentParticipants', + type: 'number', + defaultValue: 0, + label: 'Aktuelle Anmeldungen', + admin: { + condition: (data, siblingData) => siblingData?.required, + readOnly: true, + }, + }, + { + name: 'waitlistEnabled', + type: 'checkbox', + defaultValue: false, + label: 'Warteliste aktivieren', + admin: { + condition: (data, siblingData) => siblingData?.required && siblingData?.maxParticipants > 0, + }, + }, + ], + }, + // Preise + { + name: 'pricing', + type: 'group', + label: 'Preise', + fields: [ + { + name: 'isFree', + type: 'checkbox', + defaultValue: true, + label: 'Kostenlos', + }, + { + name: 'prices', + type: 'array', + label: 'Preisoptionen', + admin: { + condition: (data, siblingData) => !siblingData?.isFree, + }, + fields: [ + { + name: 'name', + type: 'text', + required: true, + label: 'Bezeichnung', + localized: true, + admin: { + description: 'z.B. "Standard", "Frühbucher", "Ermäßigt"', + }, + }, + { + name: 'price', + type: 'number', + required: true, + min: 0, + label: 'Preis', + }, + { + name: 'currency', + type: 'text', + defaultValue: 'EUR', + label: 'Währung', + }, + { + name: 'description', + type: 'text', + label: 'Beschreibung', + localized: true, + }, + { + name: 'validUntil', + type: 'date', + label: 'Gültig bis', + admin: { + description: 'Für Frühbucher-Preise', + }, + }, + ], + }, + { + name: 'priceNote', + type: 'text', + label: 'Preis-Hinweis', + localized: true, + admin: { + description: 'z.B. "zzgl. MwSt.", "inkl. Verpflegung"', + }, + }, + ], + }, + // Sprecher/Referenten + { + name: 'speakers', + type: 'array', + label: 'Referenten', + fields: [ + { + name: 'teamMember', + type: 'relationship', + relationTo: 'team' as 'users', + label: 'Aus Team wählen', + }, + { + name: 'isExternal', + type: 'checkbox', + defaultValue: false, + label: 'Externer Referent', + }, + { + name: 'name', + type: 'text', + label: 'Name', + admin: { + condition: (data, siblingData) => siblingData?.isExternal, + }, + }, + { + name: 'title', + type: 'text', + label: 'Titel/Position', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.isExternal, + }, + }, + { + name: 'company', + type: 'text', + label: 'Unternehmen', + admin: { + condition: (data, siblingData) => siblingData?.isExternal, + }, + }, + { + name: 'photo', + type: 'upload', + relationTo: 'media', + label: 'Foto', + admin: { + condition: (data, siblingData) => siblingData?.isExternal, + }, + }, + { + name: 'bio', + type: 'textarea', + label: 'Kurz-Bio', + localized: true, + admin: { + condition: (data, siblingData) => siblingData?.isExternal, + }, + }, + { + name: 'role', + type: 'text', + label: 'Rolle beim Event', + localized: true, + admin: { + description: 'z.B. "Hauptredner", "Workshop-Leiter"', + }, + }, + ], + }, + // Agenda/Programm + { + name: 'agenda', + type: 'array', + label: 'Programm', + fields: [ + { + name: 'time', + type: 'text', + label: 'Uhrzeit', + admin: { + description: 'z.B. "09:00 - 10:30"', + }, + }, + { + name: 'title', + type: 'text', + required: true, + label: 'Titel', + localized: true, + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + }, + { + name: 'speaker', + type: 'text', + label: 'Referent', + }, + { + name: 'type', + type: 'select', + label: 'Typ', + options: [ + { label: 'Vortrag', value: 'talk' }, + { label: 'Workshop', value: 'workshop' }, + { label: 'Pause', value: 'break' }, + { label: 'Networking', value: 'networking' }, + { label: 'Panel', value: 'panel' }, + { label: 'Q&A', value: 'qa' }, + ], + }, + ], + }, + // Kontakt + { + name: 'contact', + type: 'group', + label: 'Ansprechpartner', + fields: [ + { + name: 'teamMember', + type: 'relationship', + relationTo: 'team' as 'users', + label: 'Aus Team wählen', + }, + { + name: 'name', + type: 'text', + label: 'Name', + }, + { + name: 'email', + type: 'email', + label: 'E-Mail', + }, + { + name: 'phone', + type: 'text', + label: 'Telefon', + }, + ], + }, + // Verknüpfungen + { + name: 'relatedServices', + type: 'relationship', + relationTo: 'services' as 'users', + hasMany: true, + label: 'Verwandte Leistungen', + }, + { + name: 'relatedEvents', + type: 'relationship', + relationTo: 'events' as 'users', + hasMany: true, + label: 'Verwandte Events', + }, + // SEO + { + name: 'seo', + type: 'group', + label: 'SEO', + fields: [ + { + name: 'metaTitle', + type: 'text', + label: 'Meta-Titel', + localized: true, + }, + { + name: 'metaDescription', + type: 'textarea', + label: 'Meta-Beschreibung', + localized: true, + }, + { + name: 'ogImage', + type: 'upload', + relationTo: 'media', + label: 'Social Media Bild', + }, + ], + }, + // Status + { + name: 'status', + type: 'select', + required: true, + defaultValue: 'draft', + label: 'Status', + options: [ + { label: 'Entwurf', value: 'draft' }, + { label: 'Veröffentlicht', value: 'published' }, + { label: 'Ausgebucht', value: 'soldout' }, + { label: 'Abgesagt', value: 'cancelled' }, + { label: 'Verschoben', value: 'postponed' }, + { label: 'Beendet', value: 'past' }, + ], + admin: { + position: 'sidebar', + }, + }, + { + name: 'isFeatured', + type: 'checkbox', + defaultValue: false, + label: 'Hervorgehoben', + admin: { + position: 'sidebar', + }, + }, + { + name: 'publishedAt', + type: 'date', + label: 'Veröffentlichungsdatum', + admin: { + position: 'sidebar', + date: { + pickerAppearance: 'dayAndTime', + }, + }, + }, + ], +} diff --git a/src/collections/Jobs.ts b/src/collections/Jobs.ts new file mode 100644 index 0000000..d2a0fe9 --- /dev/null +++ b/src/collections/Jobs.ts @@ -0,0 +1,455 @@ +import type { CollectionConfig } from 'payload' +import { authenticatedOnly, tenantScopedPublicRead } from '../lib/tenantAccess' + +/** + * Jobs Collection + * + * Stellenanzeigen und Karriere-Seite. + * Unterstützt verschiedene Beschäftigungsarten, Standorte und Bewerbungsoptionen. + */ +export const Jobs: CollectionConfig = { + slug: 'jobs', + labels: { + singular: 'Stellenanzeige', + plural: 'Stellenanzeigen', + }, + admin: { + useAsTitle: 'title', + group: 'Content', + defaultColumns: ['title', 'department', 'type', 'location', 'status', 'publishedAt'], + description: 'Stellenanzeigen und Karriere', + }, + access: { + read: tenantScopedPublicRead, + create: authenticatedOnly, + update: authenticatedOnly, + delete: authenticatedOnly, + }, + fields: [ + // Basis-Informationen + { + name: 'title', + type: 'text', + required: true, + label: 'Stellentitel', + localized: true, + admin: { + description: 'z.B. "Pflegefachkraft (m/w/d)", "Senior Developer"', + }, + }, + { + name: 'slug', + type: 'text', + required: true, + unique: true, + label: 'Slug', + }, + { + name: 'reference', + type: 'text', + label: 'Referenznummer', + admin: { + description: 'Interne Stellennummer', + }, + }, + // Kategorisierung + { + name: 'department', + type: 'text', + label: 'Abteilung', + localized: true, + admin: { + description: 'z.B. "Pflege", "IT", "Marketing"', + }, + }, + { + name: 'category', + type: 'select', + label: 'Kategorie', + options: [ + { label: 'Pflege & Betreuung', value: 'care' }, + { label: 'Medizin', value: 'medical' }, + { label: 'Verwaltung', value: 'admin' }, + { label: 'IT & Technik', value: 'it' }, + { label: 'Marketing', value: 'marketing' }, + { label: 'Vertrieb', value: 'sales' }, + { label: 'Finanzen', value: 'finance' }, + { label: 'Personal', value: 'hr' }, + { label: 'Produktion', value: 'production' }, + { label: 'Logistik', value: 'logistics' }, + { label: 'Sonstiges', value: 'other' }, + ], + }, + { + name: 'type', + type: 'select', + required: true, + defaultValue: 'fulltime', + label: 'Beschäftigungsart', + options: [ + { label: 'Vollzeit', value: 'fulltime' }, + { label: 'Teilzeit', value: 'parttime' }, + { label: 'Minijob', value: 'minijob' }, + { label: 'Werkstudent', value: 'working_student' }, + { label: 'Praktikum', value: 'internship' }, + { label: 'Ausbildung', value: 'apprenticeship' }, + { label: 'Duales Studium', value: 'dual_study' }, + { label: 'Freelance', value: 'freelance' }, + { label: 'Befristet', value: 'temporary' }, + ], + admin: { + position: 'sidebar', + }, + }, + { + name: 'workModel', + type: 'select', + label: 'Arbeitsmodell', + options: [ + { label: 'Vor Ort', value: 'onsite' }, + { label: 'Remote', value: 'remote' }, + { label: 'Hybrid', value: 'hybrid' }, + ], + admin: { + position: 'sidebar', + }, + }, + { + name: 'experienceLevel', + type: 'select', + label: 'Erfahrungslevel', + options: [ + { label: 'Berufseinsteiger', value: 'entry' }, + { label: 'Mit Berufserfahrung', value: 'experienced' }, + { label: 'Senior', value: 'senior' }, + { label: 'Führungskraft', value: 'management' }, + ], + }, + // Standort + { + name: 'location', + type: 'group', + label: 'Standort', + fields: [ + { + name: 'locationRef', + type: 'relationship', + relationTo: 'locations', + label: 'Standort (aus Collection)', + }, + { + name: 'city', + type: 'text', + label: 'Stadt', + admin: { + description: 'Falls kein Standort aus Collection', + }, + }, + { + name: 'region', + type: 'text', + label: 'Region/Bundesland', + }, + { + name: 'country', + type: 'text', + defaultValue: 'Deutschland', + label: 'Land', + }, + ], + }, + // Beschreibung + { + name: 'summary', + type: 'textarea', + label: 'Kurzbeschreibung', + localized: true, + maxLength: 300, + admin: { + description: 'Für Übersichten und SEO (max. 300 Zeichen)', + }, + }, + { + name: 'description', + type: 'richText', + label: 'Beschreibung', + localized: true, + }, + // Strukturierte Abschnitte + { + name: 'responsibilities', + type: 'richText', + label: 'Aufgaben', + localized: true, + }, + { + name: 'requirements', + type: 'richText', + label: 'Anforderungen', + localized: true, + }, + { + name: 'qualifications', + type: 'richText', + label: 'Wünschenswerte Qualifikationen', + localized: true, + }, + { + name: 'benefits', + type: 'richText', + label: 'Was wir bieten', + localized: true, + }, + // Benefits als Liste + { + name: 'benefitsList', + type: 'array', + label: 'Benefits (Stichpunkte)', + admin: { + description: 'Für visuelle Darstellung mit Icons', + }, + fields: [ + { + name: 'benefit', + type: 'text', + required: true, + label: 'Benefit', + localized: true, + }, + { + name: 'icon', + type: 'select', + label: 'Icon', + options: [ + { label: 'Gehalt', value: 'money' }, + { label: 'Urlaub', value: 'vacation' }, + { label: 'Homeoffice', value: 'home' }, + { label: 'Weiterbildung', value: 'education' }, + { label: 'Gesundheit', value: 'health' }, + { label: 'Team', value: 'team' }, + { label: 'Flexibel', value: 'flexible' }, + { label: 'Jobticket', value: 'transport' }, + { label: 'Essen', value: 'food' }, + { label: 'Kinderbetreuung', value: 'childcare' }, + { label: 'Fitness', value: 'fitness' }, + { label: 'Parkplatz', value: 'parking' }, + ], + }, + ], + }, + // Gehalt + { + name: 'salary', + type: 'group', + label: 'Gehalt', + fields: [ + { + name: 'show', + type: 'checkbox', + defaultValue: false, + label: 'Gehalt anzeigen', + }, + { + name: 'type', + type: 'select', + label: 'Typ', + options: [ + { label: 'Jahresgehalt', value: 'yearly' }, + { label: 'Monatsgehalt', value: 'monthly' }, + { label: 'Stundenlohn', value: 'hourly' }, + ], + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'min', + type: 'number', + label: 'Von', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'max', + type: 'number', + label: 'Bis', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'currency', + type: 'text', + defaultValue: 'EUR', + label: 'Währung', + admin: { + condition: (_, siblingData) => siblingData?.show, + }, + }, + { + name: 'note', + type: 'text', + label: 'Hinweis', + localized: true, + admin: { + condition: (_, siblingData) => siblingData?.show, + description: 'z.B. "je nach Qualifikation"', + }, + }, + ], + }, + // Bewerbung + { + name: 'application', + type: 'group', + label: 'Bewerbung', + fields: [ + { + name: 'method', + type: 'select', + defaultValue: 'email', + label: 'Bewerbungsweg', + options: [ + { label: 'Per E-Mail', value: 'email' }, + { label: 'Online-Formular', value: 'form' }, + { label: 'Externes Portal', value: 'external' }, + { label: 'Per Post', value: 'mail' }, + ], + }, + { + name: 'email', + type: 'email', + label: 'Bewerbungs-E-Mail', + admin: { + condition: (_, siblingData) => siblingData?.method === 'email', + }, + }, + { + name: 'formId', + type: 'relationship', + relationTo: 'forms', + label: 'Bewerbungsformular', + admin: { + condition: (_, siblingData) => siblingData?.method === 'form', + }, + }, + { + name: 'externalUrl', + type: 'text', + label: 'Externes Portal (URL)', + admin: { + condition: (_, siblingData) => siblingData?.method === 'external', + }, + }, + { + name: 'contact', + type: 'relationship', + relationTo: 'team', + label: 'Ansprechpartner', + }, + { + name: 'deadline', + type: 'date', + label: 'Bewerbungsfrist', + }, + ], + }, + // Media + { + name: 'image', + type: 'upload', + relationTo: 'media', + label: 'Bild', + admin: { + description: 'Bild für die Stellenanzeige', + }, + }, + // Datum & Status + { + name: 'status', + type: 'select', + required: true, + defaultValue: 'draft', + label: 'Status', + options: [ + { label: 'Entwurf', value: 'draft' }, + { label: 'Veröffentlicht', value: 'published' }, + { label: 'Besetzt', value: 'filled' }, + { label: 'Archiviert', value: 'archived' }, + ], + admin: { + position: 'sidebar', + }, + }, + { + name: 'publishedAt', + type: 'date', + label: 'Veröffentlicht am', + admin: { + position: 'sidebar', + date: { + pickerAppearance: 'dayOnly', + }, + }, + }, + { + name: 'isFeatured', + type: 'checkbox', + defaultValue: false, + label: 'Hervorgehoben', + admin: { + position: 'sidebar', + }, + }, + { + name: 'isUrgent', + type: 'checkbox', + defaultValue: false, + label: 'Dringend zu besetzen', + admin: { + position: 'sidebar', + }, + }, + // SEO + { + name: 'seo', + type: 'group', + label: 'SEO', + fields: [ + { + name: 'metaTitle', + type: 'text', + label: 'Meta-Titel', + localized: true, + }, + { + name: 'metaDescription', + type: 'textarea', + label: 'Meta-Beschreibung', + localized: true, + maxLength: 160, + }, + ], + }, + ], + hooks: { + beforeChange: [ + ({ data }) => { + if (data && !data.slug && data.title) { + const titleStr = typeof data.title === 'string' ? data.title : '' + data.slug = titleStr + .toLowerCase() + .replace(/[äöüß]/g, (match: string) => { + const map: Record = { ä: 'ae', ö: 'oe', ü: 'ue', ß: 'ss' } + return map[match] || match + }) + .replace(/\(m\/w\/d\)/gi, '') + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-|-$/g, '') + } + return data + }, + ], + }, +} diff --git a/src/collections/Locations.ts b/src/collections/Locations.ts new file mode 100644 index 0000000..c1ab40b --- /dev/null +++ b/src/collections/Locations.ts @@ -0,0 +1,419 @@ +import type { CollectionConfig } from 'payload' +import { authenticatedOnly, tenantScopedPublicRead } from '../lib/tenantAccess' + +/** + * Locations Collection + * + * Firmenstandorte mit Adresse, Öffnungszeiten, Kontaktdaten und Kartenposition. + * Tenant-scoped für Multi-Tenant-Betrieb. + */ +export const Locations: CollectionConfig = { + slug: 'locations', + labels: { + singular: 'Standort', + plural: 'Standorte', + }, + admin: { + useAsTitle: 'name', + group: 'Content', + defaultColumns: ['name', 'city', 'type', 'isMain', 'isActive'], + description: 'Firmenstandorte und Niederlassungen', + }, + access: { + read: tenantScopedPublicRead, + create: authenticatedOnly, + update: authenticatedOnly, + delete: authenticatedOnly, + }, + fields: [ + // Basis-Informationen + { + name: 'name', + type: 'text', + required: true, + label: 'Name', + localized: true, + admin: { + description: 'z.B. "Hauptsitz München", "Filiale Hamburg"', + }, + }, + { + name: 'slug', + type: 'text', + required: true, + unique: true, + label: 'Slug', + admin: { + description: 'URL-freundlicher Identifier', + }, + }, + { + name: 'type', + type: 'select', + defaultValue: 'office', + label: 'Typ', + options: [ + { label: 'Hauptsitz', value: 'headquarters' }, + { label: 'Büro', value: 'office' }, + { label: 'Filiale', value: 'branch' }, + { label: 'Lager', value: 'warehouse' }, + { label: 'Showroom', value: 'showroom' }, + { label: 'Studio', value: 'studio' }, + { label: 'Praxis', value: 'practice' }, + { label: 'Werkstatt', value: 'workshop' }, + ], + }, + { + name: 'description', + type: 'richText', + label: 'Beschreibung', + localized: true, + admin: { + description: 'Optionale Beschreibung des Standorts', + }, + }, + { + name: 'image', + type: 'upload', + relationTo: 'media', + label: 'Bild', + admin: { + description: 'Foto des Gebäudes oder Standorts', + }, + }, + // Adresse + { + name: 'address', + type: 'group', + label: 'Adresse', + fields: [ + { + name: 'street', + type: 'text', + required: true, + label: 'Straße & Hausnummer', + }, + { + name: 'additionalLine', + type: 'text', + label: 'Adresszusatz', + admin: { + description: 'z.B. "Gebäude B, 3. Stock"', + }, + }, + { + name: 'zip', + type: 'text', + required: true, + label: 'PLZ', + }, + { + name: 'city', + type: 'text', + required: true, + label: 'Stadt', + }, + { + name: 'state', + type: 'text', + label: 'Bundesland/Region', + }, + { + name: 'country', + type: 'text', + defaultValue: 'Deutschland', + label: 'Land', + }, + ], + }, + // Geo-Koordinaten + { + name: 'geo', + type: 'group', + label: 'Geo-Koordinaten', + admin: { + description: 'Für Kartenanzeige', + }, + fields: [ + { + name: 'lat', + type: 'number', + label: 'Breitengrad (Latitude)', + admin: { + step: 0.000001, + description: 'z.B. 48.137154', + }, + }, + { + name: 'lng', + type: 'number', + label: 'Längengrad (Longitude)', + admin: { + step: 0.000001, + description: 'z.B. 11.576124', + }, + }, + { + name: 'zoom', + type: 'number', + defaultValue: 15, + min: 1, + max: 20, + label: 'Zoom-Level', + }, + ], + }, + // Kontaktdaten + { + name: 'contact', + type: 'group', + label: 'Kontaktdaten', + fields: [ + { + name: 'phone', + type: 'text', + label: 'Telefon', + }, + { + name: 'fax', + type: 'text', + label: 'Fax', + }, + { + name: 'email', + type: 'email', + label: 'E-Mail', + }, + { + name: 'website', + type: 'text', + label: 'Website', + admin: { + description: 'Falls abweichend von Hauptwebsite', + }, + }, + ], + }, + // Öffnungszeiten + { + name: 'hours', + type: 'group', + label: 'Öffnungszeiten', + fields: [ + { + name: 'display', + type: 'textarea', + label: 'Freitext-Anzeige', + localized: true, + admin: { + description: 'z.B. "Mo-Fr: 9-18 Uhr, Sa: 10-14 Uhr"', + }, + }, + { + name: 'structured', + type: 'array', + label: 'Strukturierte Zeiten', + admin: { + description: 'Detaillierte Öffnungszeiten pro Tag', + initCollapsed: true, + }, + fields: [ + { + name: 'day', + type: 'select', + required: true, + label: 'Tag', + options: [ + { label: 'Montag', value: 'monday' }, + { label: 'Dienstag', value: 'tuesday' }, + { label: 'Mittwoch', value: 'wednesday' }, + { label: 'Donnerstag', value: 'thursday' }, + { label: 'Freitag', value: 'friday' }, + { label: 'Samstag', value: 'saturday' }, + { label: 'Sonntag', value: 'sunday' }, + ], + }, + { + name: 'closed', + type: 'checkbox', + defaultValue: false, + label: 'Geschlossen', + }, + { + name: 'open', + type: 'text', + label: 'Öffnet', + admin: { + condition: (_, siblingData) => !siblingData?.closed, + description: 'z.B. "09:00"', + }, + }, + { + name: 'close', + type: 'text', + label: 'Schließt', + admin: { + condition: (_, siblingData) => !siblingData?.closed, + description: 'z.B. "18:00"', + }, + }, + { + name: 'break', + type: 'group', + label: 'Mittagspause', + admin: { + condition: (_, siblingData) => !siblingData?.closed, + }, + fields: [ + { + name: 'hasBreak', + type: 'checkbox', + defaultValue: false, + label: 'Mittagspause', + }, + { + name: 'start', + type: 'text', + label: 'Von', + admin: { + condition: (_, siblingData) => siblingData?.hasBreak, + }, + }, + { + name: 'end', + type: 'text', + label: 'Bis', + admin: { + condition: (_, siblingData) => siblingData?.hasBreak, + }, + }, + ], + }, + ], + }, + { + name: 'note', + type: 'text', + label: 'Hinweis', + localized: true, + admin: { + description: 'z.B. "Termine nach Vereinbarung"', + }, + }, + ], + }, + // Anfahrt + { + name: 'directions', + type: 'group', + label: 'Anfahrt', + fields: [ + { + name: 'text', + type: 'richText', + label: 'Anfahrtsbeschreibung', + localized: true, + }, + { + name: 'parking', + type: 'text', + label: 'Parkmöglichkeiten', + localized: true, + }, + { + name: 'publicTransport', + type: 'text', + label: 'Öffentliche Verkehrsmittel', + localized: true, + admin: { + description: 'z.B. "U-Bahn U3 Haltestelle Münchner Freiheit"', + }, + }, + { + name: 'accessibility', + type: 'text', + label: 'Barrierefreiheit', + localized: true, + }, + ], + }, + // Services an diesem Standort + { + name: 'services', + type: 'relationship', + relationTo: 'services', + hasMany: true, + label: 'Services an diesem Standort', + admin: { + description: 'Welche Dienstleistungen werden hier angeboten?', + }, + }, + // Team an diesem Standort + { + name: 'teamMembers', + type: 'relationship', + relationTo: 'team', + hasMany: true, + label: 'Team-Mitglieder', + admin: { + description: 'Mitarbeiter an diesem Standort', + }, + }, + // Status & Sortierung + { + name: 'isMain', + type: 'checkbox', + defaultValue: false, + label: 'Hauptstandort', + admin: { + position: 'sidebar', + description: 'Als primärer Standort markieren', + }, + }, + { + name: 'isActive', + type: 'checkbox', + defaultValue: true, + label: 'Aktiv', + admin: { + position: 'sidebar', + }, + }, + { + name: 'showInFooter', + type: 'checkbox', + defaultValue: false, + label: 'Im Footer anzeigen', + admin: { + position: 'sidebar', + }, + }, + { + name: 'order', + type: 'number', + defaultValue: 0, + label: 'Sortierung', + admin: { + position: 'sidebar', + }, + }, + ], + hooks: { + beforeChange: [ + ({ data }) => { + // Auto-generate slug from name if not provided + if (data && !data.slug && data.name) { + data.slug = data.name + .toLowerCase() + .replace(/[äöüß]/g, (match: string) => { + const map: Record = { ä: 'ae', ö: 'oe', ü: 'ue', ß: 'ss' } + return map[match] || match + }) + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-|-$/g, '') + } + return data + }, + ], + }, +} diff --git a/src/collections/Pages.ts b/src/collections/Pages.ts index 7f1669c..adb9ab9 100644 --- a/src/collections/Pages.ts +++ b/src/collections/Pages.ts @@ -28,6 +28,19 @@ import { // Team Blocks TeamFilterBlock, OrgChartBlock, + // New Feature Blocks + LocationsBlock, + LogoGridBlock, + StatsBlock, + JobsBlock, + DownloadsBlock, + MapBlock, + // Events & Interactive Blocks + EventsBlock, + PricingBlock, + TabsBlock, + AccordionBlock, + ComparisonBlock, } from '../blocks' import { pagesAccess } from '../lib/access' @@ -110,6 +123,19 @@ export const Pages: CollectionConfig = { // Team Blocks TeamFilterBlock, OrgChartBlock, + // New Feature Blocks + LocationsBlock, + LogoGridBlock, + StatsBlock, + JobsBlock, + DownloadsBlock, + MapBlock, + // Events & Interactive Blocks + EventsBlock, + PricingBlock, + TabsBlock, + AccordionBlock, + ComparisonBlock, ], }, { diff --git a/src/collections/Partners.ts b/src/collections/Partners.ts new file mode 100644 index 0000000..b31964e --- /dev/null +++ b/src/collections/Partners.ts @@ -0,0 +1,274 @@ +import type { CollectionConfig } from 'payload' +import { authenticatedOnly, tenantScopedPublicRead } from '../lib/tenantAccess' + +/** + * Partners Collection + * + * Partner, Kunden, Zertifizierungen und Referenzen mit Logos. + * Vielseitig einsetzbar für Logo-Walls, Referenzen, Zertifikate. + */ +export const Partners: CollectionConfig = { + slug: 'partners', + labels: { + singular: 'Partner', + plural: 'Partner', + }, + admin: { + useAsTitle: 'name', + group: 'Content', + defaultColumns: ['name', 'type', 'isFeatured', 'isActive', 'order'], + description: 'Partner, Kunden, Referenzen und Zertifizierungen', + }, + access: { + read: tenantScopedPublicRead, + create: authenticatedOnly, + update: authenticatedOnly, + delete: authenticatedOnly, + }, + fields: [ + { + name: 'name', + type: 'text', + required: true, + label: 'Name', + admin: { + description: 'Firmen-/Partnername', + }, + }, + { + name: 'slug', + type: 'text', + required: true, + unique: true, + label: 'Slug', + }, + { + name: 'type', + type: 'select', + required: true, + defaultValue: 'partner', + label: 'Typ', + options: [ + { label: 'Partner', value: 'partner' }, + { label: 'Kunde', value: 'client' }, + { label: 'Referenz', value: 'reference' }, + { label: 'Sponsor', value: 'sponsor' }, + { label: 'Zertifizierung', value: 'certification' }, + { label: 'Mitgliedschaft', value: 'membership' }, + { label: 'Auszeichnung', value: 'award' }, + { label: 'Lieferant', value: 'supplier' }, + { label: 'Technologie', value: 'technology' }, + ], + admin: { + position: 'sidebar', + }, + }, + { + name: 'logo', + type: 'upload', + relationTo: 'media', + required: true, + label: 'Logo', + admin: { + description: 'Logo (empfohlen: SVG oder PNG mit transparentem Hintergrund)', + }, + }, + { + name: 'logoLight', + type: 'upload', + relationTo: 'media', + label: 'Logo (Hell)', + admin: { + description: 'Alternative Version für dunkle Hintergründe', + }, + }, + { + name: 'description', + type: 'textarea', + label: 'Beschreibung', + localized: true, + admin: { + description: 'Kurze Beschreibung der Partnerschaft', + }, + }, + { + name: 'website', + type: 'text', + label: 'Website', + }, + // Für Referenzen/Case Studies + { + name: 'caseStudy', + type: 'group', + label: 'Case Study / Referenz', + admin: { + condition: (_, siblingData) => + siblingData?.type === 'client' || siblingData?.type === 'reference', + }, + fields: [ + { + name: 'quote', + type: 'textarea', + label: 'Zitat', + localized: true, + }, + { + name: 'quotePerson', + type: 'text', + label: 'Zitatgeber', + }, + { + name: 'quoteRole', + type: 'text', + label: 'Position', + }, + { + name: 'projectDescription', + type: 'richText', + label: 'Projektbeschreibung', + localized: true, + }, + { + name: 'results', + type: 'array', + label: 'Ergebnisse/Kennzahlen', + fields: [ + { + name: 'metric', + type: 'text', + required: true, + label: 'Kennzahl', + admin: { + description: 'z.B. "+50%", "10.000+"', + }, + }, + { + name: 'label', + type: 'text', + required: true, + label: 'Beschreibung', + localized: true, + admin: { + description: 'z.B. "Umsatzsteigerung", "Neue Kunden"', + }, + }, + ], + }, + ], + }, + // Für Zertifizierungen + { + name: 'certification', + type: 'group', + label: 'Zertifizierungs-Details', + admin: { + condition: (_, siblingData) => + siblingData?.type === 'certification' || + siblingData?.type === 'membership' || + siblingData?.type === 'award', + }, + fields: [ + { + name: 'issuer', + type: 'text', + label: 'Aussteller', + }, + { + name: 'validFrom', + type: 'date', + label: 'Gültig ab', + }, + { + name: 'validUntil', + type: 'date', + label: 'Gültig bis', + }, + { + name: 'certNumber', + type: 'text', + label: 'Zertifikatsnummer', + }, + { + name: 'document', + type: 'upload', + relationTo: 'media', + label: 'Zertifikat (PDF)', + }, + ], + }, + // Kategorisierung + { + name: 'category', + type: 'text', + label: 'Kategorie', + admin: { + description: 'z.B. "Technologie", "Finanzen", "Pflege"', + }, + }, + { + name: 'tags', + type: 'array', + label: 'Tags', + fields: [ + { + name: 'tag', + type: 'text', + required: true, + }, + ], + }, + // Status + { + name: 'isFeatured', + type: 'checkbox', + defaultValue: false, + label: 'Hervorgehoben', + admin: { + position: 'sidebar', + }, + }, + { + name: 'isActive', + type: 'checkbox', + defaultValue: true, + label: 'Aktiv', + admin: { + position: 'sidebar', + }, + }, + { + name: 'order', + type: 'number', + defaultValue: 0, + label: 'Sortierung', + admin: { + position: 'sidebar', + }, + }, + { + name: 'since', + type: 'date', + label: 'Partner seit', + admin: { + position: 'sidebar', + }, + }, + ], + hooks: { + beforeChange: [ + ({ data }) => { + if (data && !data.slug && data.name) { + data.slug = data.name + .toLowerCase() + .replace(/[äöüß]/g, (match: string) => { + const map: Record = { ä: 'ae', ö: 'oe', ü: 'ue', ß: 'ss' } + return map[match] || match + }) + .replace(/[^a-z0-9]+/g, '-') + .replace(/^-|-$/g, '') + } + return data + }, + ], + }, +} diff --git a/src/migrations/20251214_000000_add_priority_collections.ts b/src/migrations/20251214_000000_add_priority_collections.ts new file mode 100644 index 0000000..2468b28 --- /dev/null +++ b/src/migrations/20251214_000000_add_priority_collections.ts @@ -0,0 +1,604 @@ +import { MigrateUpArgs, MigrateDownArgs, sql } from '@payloadcms/db-postgres' + +export async function up({ db, payload, req }: MigrateUpArgs): Promise { + // Create enums for locations + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_locations_hours_structured_day" AS ENUM('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_locations_type" AS ENUM('headquarters', 'office', 'branch', 'warehouse', 'showroom', 'studio', 'practice', 'workshop'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + // Create enums for partners + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_partners_type" AS ENUM('partner', 'client', 'reference', 'sponsor', 'certification', 'membership', 'award', 'supplier', 'technology'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + // Create enums for jobs + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_benefits_list_icon" AS ENUM('money', 'vacation', 'home', 'education', 'health', 'team', 'flexible', 'transport', 'food', 'childcare', 'fitness', 'parking'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_category" AS ENUM('care', 'medical', 'admin', 'it', 'marketing', 'sales', 'finance', 'hr', 'production', 'logistics', 'other'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_type" AS ENUM('fulltime', 'parttime', 'minijob', 'working_student', 'internship', 'apprenticeship', 'dual_study', 'freelance', 'temporary'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_work_model" AS ENUM('onsite', 'remote', 'hybrid'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_experience_level" AS ENUM('entry', 'experienced', 'senior', 'management'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_salary_type" AS ENUM('yearly', 'monthly', 'hourly'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_application_method" AS ENUM('email', 'form', 'external', 'mail'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_jobs_status" AS ENUM('draft', 'published', 'filled', 'archived'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + // Create enums for downloads + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_downloads_access_form_fields" AS ENUM('name', 'email', 'company', 'phone'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_downloads_file_type" AS ENUM('pdf', 'doc', 'xls', 'ppt', 'image', 'video', 'audio', 'archive', 'other'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + await db.execute(sql` + DO $$ BEGIN + CREATE TYPE "public"."enum_downloads_category" AS ENUM('brochure', 'flyer', 'catalog', 'pricelist', 'form', 'manual', 'datasheet', 'certificate', 'press', 'whitepaper', 'presentation', 'legal', 'other'); + EXCEPTION + WHEN duplicate_object THEN null; + END $$; + `) + + // Create locations table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "locations" ( + "id" serial PRIMARY KEY NOT NULL, + "tenant_id" integer REFERENCES "tenants"("id") ON DELETE SET NULL, + "slug" varchar NOT NULL, + "type" "enum_locations_type" DEFAULT 'office', + "image_id" integer REFERENCES "media"("id") ON DELETE SET NULL, + "address_street" varchar NOT NULL, + "address_additional_line" varchar, + "address_zip" varchar NOT NULL, + "address_city" varchar NOT NULL, + "address_state" varchar, + "address_country" varchar DEFAULT 'Deutschland', + "geo_lat" numeric, + "geo_lng" numeric, + "geo_zoom" numeric DEFAULT 15, + "contact_phone" varchar, + "contact_fax" varchar, + "contact_email" varchar, + "contact_website" varchar, + "is_main" boolean DEFAULT false, + "is_active" boolean DEFAULT true, + "show_in_footer" boolean DEFAULT false, + "order" numeric DEFAULT 0, + "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, + "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_tenant_idx" ON "locations" USING btree ("tenant_id"); + `) + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "locations_slug_idx" ON "locations" USING btree ("slug"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_image_idx" ON "locations" USING btree ("image_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_updated_at_idx" ON "locations" USING btree ("updated_at"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_created_at_idx" ON "locations" USING btree ("created_at"); + `) + + // Create locations_locales table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "locations_locales" ( + "name" varchar NOT NULL, + "description" jsonb, + "hours_display" varchar, + "hours_note" varchar, + "directions_text" jsonb, + "directions_parking" varchar, + "directions_public_transport" varchar, + "directions_accessibility" varchar, + "id" serial PRIMARY KEY NOT NULL, + "_locale" "_locales" NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "locations"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "locations_locales_locale_parent_id_unique" ON "locations_locales" USING btree ("_locale", "_parent_id"); + `) + + // Create locations_rels table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "locations_rels" ( + "id" serial PRIMARY KEY NOT NULL, + "order" integer, + "parent_id" integer NOT NULL REFERENCES "locations"("id") ON DELETE CASCADE, + "path" varchar NOT NULL, + "services_id" integer REFERENCES "services"("id") ON DELETE CASCADE, + "team_id" integer REFERENCES "team"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_rels_order_idx" ON "locations_rels" USING btree ("order"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_rels_parent_idx" ON "locations_rels" USING btree ("parent_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_rels_path_idx" ON "locations_rels" USING btree ("path"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_rels_services_id_idx" ON "locations_rels" USING btree ("services_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "locations_rels_team_id_idx" ON "locations_rels" USING btree ("team_id"); + `) + + // Create partners table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "partners" ( + "id" serial PRIMARY KEY NOT NULL, + "tenant_id" integer REFERENCES "tenants"("id") ON DELETE SET NULL, + "name" varchar NOT NULL, + "slug" varchar NOT NULL, + "type" "enum_partners_type" NOT NULL DEFAULT 'partner', + "logo_id" integer NOT NULL REFERENCES "media"("id") ON DELETE SET NULL, + "logo_light_id" integer REFERENCES "media"("id") ON DELETE SET NULL, + "website" varchar, + "case_study_quote_person" varchar, + "case_study_quote_role" varchar, + "certification_issuer" varchar, + "certification_valid_from" timestamp(3) with time zone, + "certification_valid_until" timestamp(3) with time zone, + "certification_cert_number" varchar, + "certification_document_id" integer REFERENCES "media"("id") ON DELETE SET NULL, + "category" varchar, + "is_featured" boolean DEFAULT false, + "is_active" boolean DEFAULT true, + "order" numeric DEFAULT 0, + "since" timestamp(3) with time zone, + "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, + "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_tenant_idx" ON "partners" USING btree ("tenant_id"); + `) + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "partners_slug_idx" ON "partners" USING btree ("slug"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_logo_idx" ON "partners" USING btree ("logo_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_logo_light_idx" ON "partners" USING btree ("logo_light_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_certification_certification_document_idx" ON "partners" USING btree ("certification_document_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_updated_at_idx" ON "partners" USING btree ("updated_at"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_created_at_idx" ON "partners" USING btree ("created_at"); + `) + + // Create partners_locales table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "partners_locales" ( + "description" varchar, + "case_study_quote" varchar, + "case_study_project_description" jsonb, + "id" serial PRIMARY KEY NOT NULL, + "_locale" "_locales" NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "partners"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "partners_locales_locale_parent_id_unique" ON "partners_locales" USING btree ("_locale", "_parent_id"); + `) + + // Create partners_case_study_results table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "partners_case_study_results" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "partners"("id") ON DELETE CASCADE, + "id" varchar PRIMARY KEY NOT NULL, + "metric" varchar + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_case_study_results_order_idx" ON "partners_case_study_results" USING btree ("_order"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_case_study_results_parent_id_idx" ON "partners_case_study_results" USING btree ("_parent_id"); + `) + + // Create partners_case_study_results_locales table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "partners_case_study_results_locales" ( + "label" varchar, + "id" serial PRIMARY KEY NOT NULL, + "_locale" "_locales" NOT NULL, + "_parent_id" varchar NOT NULL REFERENCES "partners_case_study_results"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "partners_case_study_results_locales_locale_parent_id_unique" ON "partners_case_study_results_locales" USING btree ("_locale", "_parent_id"); + `) + + // Create partners_tags table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "partners_tags" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "partners"("id") ON DELETE CASCADE, + "id" varchar PRIMARY KEY NOT NULL, + "tag" varchar NOT NULL + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_tags_order_idx" ON "partners_tags" USING btree ("_order"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "partners_tags_parent_id_idx" ON "partners_tags" USING btree ("_parent_id"); + `) + + // Create jobs table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "jobs" ( + "id" serial PRIMARY KEY NOT NULL, + "tenant_id" integer REFERENCES "tenants"("id") ON DELETE SET NULL, + "slug" varchar NOT NULL, + "reference" varchar, + "category" "enum_jobs_category", + "type" "enum_jobs_type" NOT NULL DEFAULT 'fulltime', + "work_model" "enum_jobs_work_model", + "experience_level" "enum_jobs_experience_level", + "location_location_ref_id" integer REFERENCES "locations"("id") ON DELETE SET NULL, + "location_city" varchar, + "location_region" varchar, + "location_country" varchar DEFAULT 'Deutschland', + "salary_show" boolean DEFAULT false, + "salary_type" "enum_jobs_salary_type", + "salary_min" numeric, + "salary_max" numeric, + "salary_currency" varchar DEFAULT 'EUR', + "application_method" "enum_jobs_application_method" DEFAULT 'email', + "application_email" varchar, + "application_form_id_id" integer REFERENCES "forms"("id") ON DELETE SET NULL, + "application_external_url" varchar, + "application_contact_id" integer REFERENCES "team"("id") ON DELETE SET NULL, + "application_deadline" timestamp(3) with time zone, + "image_id" integer REFERENCES "media"("id") ON DELETE SET NULL, + "status" "enum_jobs_status" NOT NULL DEFAULT 'draft', + "published_at" timestamp(3) with time zone, + "is_featured" boolean DEFAULT false, + "is_urgent" boolean DEFAULT false, + "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, + "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_tenant_idx" ON "jobs" USING btree ("tenant_id"); + `) + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "jobs_slug_idx" ON "jobs" USING btree ("slug"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_location_location_location_ref_idx" ON "jobs" USING btree ("location_location_ref_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_application_application_form_id_idx" ON "jobs" USING btree ("application_form_id_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_application_application_contact_idx" ON "jobs" USING btree ("application_contact_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_image_idx" ON "jobs" USING btree ("image_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_updated_at_idx" ON "jobs" USING btree ("updated_at"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_created_at_idx" ON "jobs" USING btree ("created_at"); + `) + + // Create jobs_locales table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "jobs_locales" ( + "title" varchar NOT NULL, + "department" varchar, + "summary" varchar, + "description" jsonb, + "responsibilities" jsonb, + "requirements" jsonb, + "qualifications" jsonb, + "benefits" jsonb, + "salary_note" varchar, + "seo_meta_title" varchar, + "seo_meta_description" varchar, + "id" serial PRIMARY KEY NOT NULL, + "_locale" "_locales" NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "jobs"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "jobs_locales_locale_parent_id_unique" ON "jobs_locales" USING btree ("_locale", "_parent_id"); + `) + + // Create jobs_benefits_list table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "jobs_benefits_list" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "jobs"("id") ON DELETE CASCADE, + "id" varchar PRIMARY KEY NOT NULL, + "icon" "enum_jobs_benefits_list_icon" + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_benefits_list_order_idx" ON "jobs_benefits_list" USING btree ("_order"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "jobs_benefits_list_parent_id_idx" ON "jobs_benefits_list" USING btree ("_parent_id"); + `) + + // Create jobs_benefits_list_locales table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "jobs_benefits_list_locales" ( + "benefit" varchar NOT NULL, + "id" serial PRIMARY KEY NOT NULL, + "_locale" "_locales" NOT NULL, + "_parent_id" varchar NOT NULL REFERENCES "jobs_benefits_list"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "jobs_benefits_list_locales_locale_parent_id_unique" ON "jobs_benefits_list_locales" USING btree ("_locale", "_parent_id"); + `) + + // Create downloads table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "downloads" ( + "id" serial PRIMARY KEY NOT NULL, + "tenant_id" integer REFERENCES "tenants"("id") ON DELETE SET NULL, + "slug" varchar NOT NULL, + "file_id" integer NOT NULL REFERENCES "media"("id") ON DELETE SET NULL, + "file_type" "enum_downloads_file_type", + "file_size" varchar, + "category" "enum_downloads_category", + "thumbnail_id" integer REFERENCES "media"("id") ON DELETE SET NULL, + "access_require_login" boolean DEFAULT false, + "access_require_form" boolean DEFAULT false, + "download_count" numeric DEFAULT 0, + "version" varchar, + "last_updated" timestamp(3) with time zone, + "is_active" boolean DEFAULT true, + "is_featured" boolean DEFAULT false, + "order" numeric DEFAULT 0, + "updated_at" timestamp(3) with time zone DEFAULT now() NOT NULL, + "created_at" timestamp(3) with time zone DEFAULT now() NOT NULL + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_tenant_idx" ON "downloads" USING btree ("tenant_id"); + `) + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "downloads_slug_idx" ON "downloads" USING btree ("slug"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_file_idx" ON "downloads" USING btree ("file_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_thumbnail_idx" ON "downloads" USING btree ("thumbnail_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_updated_at_idx" ON "downloads" USING btree ("updated_at"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_created_at_idx" ON "downloads" USING btree ("created_at"); + `) + + // Create downloads_locales table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "downloads_locales" ( + "title" varchar NOT NULL, + "description" varchar, + "id" serial PRIMARY KEY NOT NULL, + "_locale" "_locales" NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "downloads"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE UNIQUE INDEX IF NOT EXISTS "downloads_locales_locale_parent_id_unique" ON "downloads_locales" USING btree ("_locale", "_parent_id"); + `) + + // Create downloads_tags table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "downloads_tags" ( + "_order" integer NOT NULL, + "_parent_id" integer NOT NULL REFERENCES "downloads"("id") ON DELETE CASCADE, + "id" varchar PRIMARY KEY NOT NULL, + "tag" varchar NOT NULL + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_tags_order_idx" ON "downloads_tags" USING btree ("_order"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_tags_parent_id_idx" ON "downloads_tags" USING btree ("_parent_id"); + `) + + // Create downloads_access_form_fields table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "downloads_access_form_fields" ( + "order" integer NOT NULL, + "parent_id" integer NOT NULL REFERENCES "downloads"("id") ON DELETE CASCADE, + "value" "enum_downloads_access_form_fields", + "id" serial PRIMARY KEY NOT NULL + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_access_form_fields_order_idx" ON "downloads_access_form_fields" USING btree ("order"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_access_form_fields_parent_idx" ON "downloads_access_form_fields" USING btree ("parent_id"); + `) + + // Create downloads_rels table + await db.execute(sql` + CREATE TABLE IF NOT EXISTS "downloads_rels" ( + "id" serial PRIMARY KEY NOT NULL, + "order" integer, + "parent_id" integer NOT NULL REFERENCES "downloads"("id") ON DELETE CASCADE, + "path" varchar NOT NULL, + "services_id" integer REFERENCES "services"("id") ON DELETE CASCADE, + "products_id" integer REFERENCES "products"("id") ON DELETE CASCADE + ); + `) + + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_rels_order_idx" ON "downloads_rels" USING btree ("order"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_rels_parent_idx" ON "downloads_rels" USING btree ("parent_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_rels_path_idx" ON "downloads_rels" USING btree ("path"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_rels_services_id_idx" ON "downloads_rels" USING btree ("services_id"); + `) + await db.execute(sql` + CREATE INDEX IF NOT EXISTS "downloads_rels_products_id_idx" ON "downloads_rels" USING btree ("products_id"); + `) +} + +export async function down({ db, payload, req }: MigrateDownArgs): Promise { + // Drop tables in reverse order (respecting foreign key constraints) + await db.execute(sql`DROP TABLE IF EXISTS "downloads_rels" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "downloads_access_form_fields" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "downloads_tags" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "downloads_locales" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "downloads" CASCADE;`) + + await db.execute(sql`DROP TABLE IF EXISTS "jobs_benefits_list_locales" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "jobs_benefits_list" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "jobs_locales" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "jobs" CASCADE;`) + + await db.execute(sql`DROP TABLE IF EXISTS "partners_tags" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "partners_case_study_results_locales" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "partners_case_study_results" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "partners_locales" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "partners" CASCADE;`) + + await db.execute(sql`DROP TABLE IF EXISTS "locations_rels" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "locations_locales" CASCADE;`) + await db.execute(sql`DROP TABLE IF EXISTS "locations" CASCADE;`) + + // Drop enums + await db.execute(sql`DROP TYPE IF EXISTS "enum_downloads_category" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_downloads_file_type" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_downloads_access_form_fields" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_status" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_application_method" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_salary_type" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_experience_level" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_work_model" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_type" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_category" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_jobs_benefits_list_icon" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_partners_type" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_locations_type" CASCADE;`) + await db.execute(sql`DROP TYPE IF EXISTS "enum_locations_hours_structured_day" CASCADE;`) +} diff --git a/src/migrations/index.ts b/src/migrations/index.ts index a825c43..e547ec9 100644 --- a/src/migrations/index.ts +++ b/src/migrations/index.ts @@ -12,6 +12,11 @@ import * as migration_20251212_211506_add_products_collections from './20251212_ import * as migration_20251213_100753_add_timelines_collection from './20251213_100753_add_timelines_collection'; import * as migration_20251213_104523_add_workflows_and_timeline_process_fields from './20251213_104523_add_workflows_and_timeline_process_fields'; import * as migration_20251213_145438_hero_slider_block from './20251213_145438_hero_slider_block'; +import * as migration_20251213_160000_testimonials_slider_v2 from './20251213_160000_testimonials_slider_v2'; +import * as migration_20251213_210000_image_slider_block from './20251213_210000_image_slider_block'; +import * as migration_20251213_220000_blogging_collections from './20251213_220000_blogging_collections'; +import * as migration_20251213_230000_team_extensions from './20251213_230000_team_extensions'; +import * as migration_20251214_000000_add_priority_collections from './20251214_000000_add_priority_collections'; export const migrations = [ { @@ -82,6 +87,31 @@ export const migrations = [ { up: migration_20251213_145438_hero_slider_block.up, down: migration_20251213_145438_hero_slider_block.down, - name: '20251213_145438_hero_slider_block' + name: '20251213_145438_hero_slider_block', + }, + { + up: migration_20251213_160000_testimonials_slider_v2.up, + down: migration_20251213_160000_testimonials_slider_v2.down, + name: '20251213_160000_testimonials_slider_v2', + }, + { + up: migration_20251213_210000_image_slider_block.up, + down: migration_20251213_210000_image_slider_block.down, + name: '20251213_210000_image_slider_block', + }, + { + up: migration_20251213_220000_blogging_collections.up, + down: migration_20251213_220000_blogging_collections.down, + name: '20251213_220000_blogging_collections', + }, + { + up: migration_20251213_230000_team_extensions.up, + down: migration_20251213_230000_team_extensions.down, + name: '20251213_230000_team_extensions', + }, + { + up: migration_20251214_000000_add_priority_collections.up, + down: migration_20251214_000000_add_priority_collections.down, + name: '20251214_000000_add_priority_collections', }, ]; diff --git a/src/payload-generated-schema.ts b/src/payload-generated-schema.ts index 0fd684e..9b1d809 100644 --- a/src/payload-generated-schema.ts +++ b/src/payload-generated-schema.ts @@ -16,13 +16,15 @@ import { varchar, timestamp, serial, + boolean, numeric, text, - boolean, jsonb, + type AnyPgColumn, pgEnum, } from "@payloadcms/db-postgres/drizzle/pg-core"; import { sql, relations } from "@payloadcms/db-postgres/drizzle"; +export const enum__locales = pgEnum("enum__locales", ["de", "en"]); export const enum_pages_blocks_hero_block_alignment = pgEnum("enum_pages_blocks_hero_block_alignment", [ "left", "center", @@ -33,6 +35,166 @@ export const enum_pages_blocks_hero_block_cta_style = pgEnum("enum_pages_blocks_ "secondary", "outline", ]); +export const enum_pages_blocks_hero_slider_block_slides_text_alignment = pgEnum( + "enum_pages_blocks_hero_slider_block_slides_text_alignment", + ["left", "center", "right"], +); +export const enum_pages_blocks_hero_slider_block_slides_vertical_position = pgEnum( + "enum_pages_blocks_hero_slider_block_slides_vertical_position", + ["top", "center", "bottom"], +); +export const enum_pages_blocks_hero_slider_block_slides_overlay_color = pgEnum( + "enum_pages_blocks_hero_slider_block_slides_overlay_color", + ["dark", "light", "primary", "gradient-bottom", "gradient-top"], +); +export const enum_pages_blocks_hero_slider_block_slides_overlay_opacity = pgEnum( + "enum_pages_blocks_hero_slider_block_slides_overlay_opacity", + ["20", "30", "40", "50", "60", "70", "80"], +); +export const enum_pages_blocks_hero_slider_block_slides_primary_cta_style = pgEnum( + "enum_pages_blocks_hero_slider_block_slides_primary_cta_style", + ["primary", "secondary", "outline-white", "outline-dark"], +); +export const enum_pages_blocks_hero_slider_block_slides_secondary_cta_style = pgEnum( + "enum_pages_blocks_hero_slider_block_slides_secondary_cta_style", + ["primary", "secondary", "outline-white", "outline-dark", "text"], +); +export const enum_pages_blocks_hero_slider_block_slides_text_color = pgEnum( + "enum_pages_blocks_hero_slider_block_slides_text_color", + ["white", "dark", "primary"], +); +export const enum_pages_blocks_hero_slider_block_settings_animation = pgEnum( + "enum_pages_blocks_hero_slider_block_settings_animation", + ["fade", "slide", "zoom", "flip", "none"], +); +export const enum_pages_blocks_hero_slider_block_settings_animation_duration = pgEnum( + "enum_pages_blocks_hero_slider_block_settings_animation_duration", + ["300", "500", "800", "1200"], +); +export const enum_pages_blocks_hero_slider_block_settings_autoplay_interval = pgEnum( + "enum_pages_blocks_hero_slider_block_settings_autoplay_interval", + ["3000", "4000", "5000", "6000", "7000", "8000", "10000"], +); +export const enum_pages_blocks_hero_slider_block_navigation_arrows_style = pgEnum( + "enum_pages_blocks_hero_slider_block_navigation_arrows_style", + ["default", "minimal", "square", "hover-only"], +); +export const enum_pages_blocks_hero_slider_block_navigation_arrows_position = pgEnum( + "enum_pages_blocks_hero_slider_block_navigation_arrows_position", + ["sides", "bottom-left", "bottom-right", "bottom-center"], +); +export const enum_pages_blocks_hero_slider_block_navigation_dots_style = pgEnum( + "enum_pages_blocks_hero_slider_block_navigation_dots_style", + ["dots", "lines", "numbers", "thumbnails", "progress"], +); +export const enum_pages_blocks_hero_slider_block_navigation_dots_position = pgEnum( + "enum_pages_blocks_hero_slider_block_navigation_dots_position", + ["bottom-center", "bottom-left", "bottom-right", "left", "right"], +); +export const enum_pages_blocks_hero_slider_block_navigation_dots_color = pgEnum( + "enum_pages_blocks_hero_slider_block_navigation_dots_color", + ["white", "dark", "primary"], +); +export const enum_pages_blocks_hero_slider_block_layout_height = pgEnum( + "enum_pages_blocks_hero_slider_block_layout_height", + ["viewport", "large", "medium", "small", "compact", "auto"], +); +export const enum_pages_blocks_hero_slider_block_layout_mobile_height = pgEnum( + "enum_pages_blocks_hero_slider_block_layout_mobile_height", + ["same", "viewport", "large", "medium", "small", "compact"], +); +export const enum_pages_blocks_hero_slider_block_layout_content_width = pgEnum( + "enum_pages_blocks_hero_slider_block_layout_content_width", + ["container", "narrow", "wide", "full"], +); +export const enum_pages_blocks_image_slider_block_layout = pgEnum("enum_pages_blocks_image_slider_block_layout", [ + "slider", + "grid", + "masonry", + "single", + "thumbs", + "filmstrip", +]); +export const enum_pages_blocks_image_slider_block_grid_cols = pgEnum("enum_pages_blocks_image_slider_block_grid_cols", [ + "2", + "3", + "4", + "5", + "6", +]); +export const enum_pages_blocks_image_slider_block_grid_gap = pgEnum("enum_pages_blocks_image_slider_block_grid_gap", [ + "0", + "8", + "16", + "24", + "32", +]); +export const enum_pages_blocks_image_slider_block_grid_aspect_ratio = pgEnum( + "enum_pages_blocks_image_slider_block_grid_aspect_ratio", + ["square", "4-3", "16-9", "3-4", "auto"], +); +export const enum_pages_blocks_image_slider_block_slider_effect = pgEnum( + "enum_pages_blocks_image_slider_block_slider_effect", + ["slide", "fade", "zoom", "flip", "coverflow", "cube"], +); +export const enum_pages_blocks_image_slider_block_slider_speed = pgEnum( + "enum_pages_blocks_image_slider_block_slider_speed", + ["300", "500", "800"], +); +export const enum_pages_blocks_image_slider_block_slider_per_view = pgEnum( + "enum_pages_blocks_image_slider_block_slider_per_view", + ["1", "2", "3", "4", "auto"], +); +export const enum_pages_blocks_image_slider_block_slider_gap = pgEnum( + "enum_pages_blocks_image_slider_block_slider_gap", + ["0", "8", "16", "24"], +); +export const enum_pages_blocks_image_slider_block_slider_delay = pgEnum( + "enum_pages_blocks_image_slider_block_slider_delay", + ["3000", "4000", "5000", "6000", "8000"], +); +export const enum_pages_blocks_image_slider_block_nav_arrow_style = pgEnum( + "enum_pages_blocks_image_slider_block_nav_arrow_style", + ["default", "minimal", "square", "hover"], +); +export const enum_pages_blocks_image_slider_block_nav_dot_style = pgEnum( + "enum_pages_blocks_image_slider_block_nav_dot_style", + ["dots", "lines", "numbers", "progress"], +); +export const enum_pages_blocks_image_slider_block_lightbox_bg = pgEnum( + "enum_pages_blocks_image_slider_block_lightbox_bg", + ["dark", "light", "blur"], +); +export const enum_pages_blocks_image_slider_block_style_height = pgEnum( + "enum_pages_blocks_image_slider_block_style_height", + ["auto", "300", "400", "500", "600", "full"], +); +export const enum_pages_blocks_image_slider_block_style_img_fit = pgEnum( + "enum_pages_blocks_image_slider_block_style_img_fit", + ["cover", "contain", "fill"], +); +export const enum_pages_blocks_image_slider_block_style_rounded = pgEnum( + "enum_pages_blocks_image_slider_block_style_rounded", + ["none", "sm", "md", "lg", "full"], +); +export const enum_pages_blocks_image_slider_block_style_hover_effect = pgEnum( + "enum_pages_blocks_image_slider_block_style_hover_effect", + ["none", "zoom", "brighten", "darken", "overlay"], +); +export const enum_pages_blocks_image_slider_block_style_caption_pos = pgEnum( + "enum_pages_blocks_image_slider_block_style_caption_pos", + ["below", "overlay", "hover", "hidden"], +); +export const enum_pages_blocks_image_slider_block_style_bg = pgEnum("enum_pages_blocks_image_slider_block_style_bg", [ + "none", + "white", + "light", + "dark", +]); +export const enum_pages_blocks_image_slider_block_style_padding = pgEnum( + "enum_pages_blocks_image_slider_block_style_padding", + ["none", "sm", "md", "lg"], +); export const enum_pages_blocks_text_block_width = pgEnum("enum_pages_blocks_text_block_width", [ "narrow", "medium", @@ -131,9 +293,72 @@ export const enum_pages_blocks_testimonials_block_display_mode = pgEnum( "enum_pages_blocks_testimonials_block_display_mode", ["all", "selected"], ); -export const enum_pages_blocks_testimonials_block_background_color = pgEnum( - "enum_pages_blocks_testimonials_block_background_color", - ["white", "light", "dark", "accent"], +export const enum_pages_blocks_testimonials_block_slider_effect = pgEnum( + "enum_pages_blocks_testimonials_block_slider_effect", + ["slide", "fade", "cards", "coverflow", "none"], +); +export const enum_pages_blocks_testimonials_block_slider_speed = pgEnum( + "enum_pages_blocks_testimonials_block_slider_speed", + ["300", "500", "800"], +); +export const enum_pages_blocks_testimonials_block_slider_per_view = pgEnum( + "enum_pages_blocks_testimonials_block_slider_per_view", + ["1", "2", "3", "auto"], +); +export const enum_pages_blocks_testimonials_block_slider_gap = pgEnum( + "enum_pages_blocks_testimonials_block_slider_gap", + ["0", "16", "24", "32", "48"], +); +export const enum_pages_blocks_testimonials_block_slider_delay = pgEnum( + "enum_pages_blocks_testimonials_block_slider_delay", + ["3000", "4000", "5000", "6000", "8000", "10000"], +); +export const enum_pages_blocks_testimonials_block_nav_arrow_style = pgEnum( + "enum_pages_blocks_testimonials_block_nav_arrow_style", + ["default", "minimal", "square", "hover", "outside"], +); +export const enum_pages_blocks_testimonials_block_nav_arrow_pos = pgEnum( + "enum_pages_blocks_testimonials_block_nav_arrow_pos", + ["sides", "bl", "br", "bc"], +); +export const enum_pages_blocks_testimonials_block_nav_dot_style = pgEnum( + "enum_pages_blocks_testimonials_block_nav_dot_style", + ["dots", "lines", "numbers", "progress", "fraction"], +); +export const enum_pages_blocks_testimonials_block_nav_dot_pos = pgEnum( + "enum_pages_blocks_testimonials_block_nav_dot_pos", + ["bottom", "bl", "br"], +); +export const enum_pages_blocks_testimonials_block_style_bg = pgEnum("enum_pages_blocks_testimonials_block_style_bg", [ + "white", + "light", + "dark", + "accent", + "none", +]); +export const enum_pages_blocks_testimonials_block_style_card = pgEnum( + "enum_pages_blocks_testimonials_block_style_card", + ["shadow", "border", "flat", "glass"], +); +export const enum_pages_blocks_testimonials_block_style_quote = pgEnum( + "enum_pages_blocks_testimonials_block_style_quote", + ["icon", "quotes", "none", "large"], +); +export const enum_pages_blocks_testimonials_block_style_img_pos = pgEnum( + "enum_pages_blocks_testimonials_block_style_img_pos", + ["top", "left", "bottom", "bg"], +); +export const enum_pages_blocks_testimonials_block_style_img_size = pgEnum( + "enum_pages_blocks_testimonials_block_style_img_size", + ["sm", "md", "lg", "xl"], +); +export const enum_pages_blocks_testimonials_block_style_align = pgEnum( + "enum_pages_blocks_testimonials_block_style_align", + ["left", "center", "right"], +); +export const enum_pages_blocks_testimonials_block_style_spacing = pgEnum( + "enum_pages_blocks_testimonials_block_style_spacing", + ["sm", "normal", "lg"], ); export const enum_pages_blocks_newsletter_block_available_interests = pgEnum( "enum_pages_blocks_newsletter_block_available_interests", @@ -169,6 +394,1121 @@ export const enum_pages_blocks_process_steps_block_background_color = pgEnum( "enum_pages_blocks_process_steps_block_background_color", ["white", "light", "dark"], ); +export const enum_pages_blocks_faq_block_source_mode = pgEnum("enum_pages_blocks_faq_block_source_mode", [ + "collection", + "inline", +]); +export const enum_pages_blocks_faq_block_display_mode = pgEnum("enum_pages_blocks_faq_block_display_mode", [ + "all", + "featured", + "category", + "selected", +]); +export const enum_pages_blocks_faq_block_layout = pgEnum("enum_pages_blocks_faq_block_layout", [ + "accordion", + "grid", + "list", + "two-column", +]); +export const enum_pages_blocks_faq_block_columns = pgEnum("enum_pages_blocks_faq_block_columns", ["2", "3"]); +export const enum_pages_blocks_faq_block_background_color = pgEnum("enum_pages_blocks_faq_block_background_color", [ + "white", + "light", + "dark", + "accent", +]); +export const enum_pages_blocks_team_block_display_mode = pgEnum("enum_pages_blocks_team_block_display_mode", [ + "all", + "featured", + "department", + "selected", +]); +export const enum_pages_blocks_team_block_layout = pgEnum("enum_pages_blocks_team_block_layout", [ + "grid", + "list", + "slider", + "compact", + "detailed", +]); +export const enum_pages_blocks_team_block_columns = pgEnum("enum_pages_blocks_team_block_columns", ["2", "3", "4"]); +export const enum_pages_blocks_team_block_image_style = pgEnum("enum_pages_blocks_team_block_image_style", [ + "circle", + "rounded", + "square", +]); +export const enum_pages_blocks_team_block_background_color = pgEnum("enum_pages_blocks_team_block_background_color", [ + "white", + "light", + "dark", + "accent", +]); +export const enum_pages_blocks_services_block_display_mode = pgEnum("enum_pages_blocks_services_block_display_mode", [ + "all", + "featured", + "category", + "selected", +]); +export const enum_pages_blocks_services_block_layout = pgEnum("enum_pages_blocks_services_block_layout", [ + "grid", + "list", + "tabs", + "accordion", + "featured-grid", + "slider", + "compact", + "masonry", +]); +export const enum_pages_blocks_services_block_columns = pgEnum("enum_pages_blocks_services_block_columns", [ + "2", + "3", + "4", +]); +export const enum_pages_blocks_services_block_tabs_style = pgEnum("enum_pages_blocks_services_block_tabs_style", [ + "horizontal", + "vertical", + "pills", +]); +export const enum_pages_blocks_services_block_slides_per_view = pgEnum( + "enum_pages_blocks_services_block_slides_per_view", + ["1", "2", "3", "4"], +); +export const enum_pages_blocks_services_block_card_style = pgEnum("enum_pages_blocks_services_block_card_style", [ + "elevated", + "bordered", + "flat", + "filled", +]); +export const enum_pages_blocks_services_block_background_color = pgEnum( + "enum_pages_blocks_services_block_background_color", + ["white", "light", "dark", "accent"], +); +export const enum_pages_blocks_author_bio_block_source = pgEnum("enum_pages_blocks_author_bio_block_source", [ + "post", + "manual", +]); +export const enum_pages_blocks_author_bio_block_layout = pgEnum("enum_pages_blocks_author_bio_block_layout", [ + "card", + "inline", + "compact", + "feature", +]); +export const enum_pages_blocks_author_bio_block_show_bio = pgEnum("enum_pages_blocks_author_bio_block_show_bio", [ + "none", + "short", + "full", +]); +export const enum_pages_blocks_author_bio_block_style_avatar_size = pgEnum( + "enum_pages_blocks_author_bio_block_style_avatar_size", + ["sm", "md", "lg"], +); +export const enum_pages_blocks_author_bio_block_style_avatar_shape = pgEnum( + "enum_pages_blocks_author_bio_block_style_avatar_shape", + ["circle", "square", "rounded"], +); +export const enum_pages_blocks_author_bio_block_style_bg = pgEnum("enum_pages_blocks_author_bio_block_style_bg", [ + "none", + "light", + "dark", + "accent", +]); +export const enum_pages_blocks_related_posts_block_source = pgEnum("enum_pages_blocks_related_posts_block_source", [ + "auto", + "manual", + "category", + "tag", + "latest", + "popular", + "author", +]); +export const enum_pages_blocks_related_posts_block_layout = pgEnum("enum_pages_blocks_related_posts_block_layout", [ + "grid", + "list", + "slider", + "compact", + "cards", +]); +export const enum_pages_blocks_related_posts_block_cols = pgEnum("enum_pages_blocks_related_posts_block_cols", [ + "2", + "3", + "4", +]); +export const enum_pages_blocks_related_posts_block_style_img_ratio = pgEnum( + "enum_pages_blocks_related_posts_block_style_img_ratio", + ["square", "4-3", "16-9", "3-4"], +); +export const enum_pages_blocks_related_posts_block_style_rounded = pgEnum( + "enum_pages_blocks_related_posts_block_style_rounded", + ["none", "sm", "md", "lg"], +); +export const enum_pages_blocks_related_posts_block_style_hover = pgEnum( + "enum_pages_blocks_related_posts_block_style_hover", + ["none", "lift", "zoom", "overlay"], +); +export const enum_pages_blocks_related_posts_block_style_bg = pgEnum("enum_pages_blocks_related_posts_block_style_bg", [ + "none", + "light", + "dark", +]); +export const enum_pages_blocks_related_posts_block_style_gap = pgEnum( + "enum_pages_blocks_related_posts_block_style_gap", + ["16", "24", "32"], +); +export const enum_pages_blocks_share_buttons_block_layout = pgEnum("enum_pages_blocks_share_buttons_block_layout", [ + "horizontal", + "vertical", + "floating", + "sticky", +]); +export const enum_pages_blocks_share_buttons_block_align = pgEnum("enum_pages_blocks_share_buttons_block_align", [ + "left", + "center", + "right", +]); +export const enum_pages_blocks_share_buttons_block_float_side = pgEnum( + "enum_pages_blocks_share_buttons_block_float_side", + ["left", "right"], +); +export const enum_pages_blocks_share_buttons_block_style_variant = pgEnum( + "enum_pages_blocks_share_buttons_block_style_variant", + ["filled", "outline", "icon", "minimal"], +); +export const enum_pages_blocks_share_buttons_block_style_size = pgEnum( + "enum_pages_blocks_share_buttons_block_style_size", + ["sm", "md", "lg"], +); +export const enum_pages_blocks_share_buttons_block_style_shape = pgEnum( + "enum_pages_blocks_share_buttons_block_style_shape", + ["square", "rounded", "circle", "pill"], +); +export const enum_pages_blocks_share_buttons_block_style_color_scheme = pgEnum( + "enum_pages_blocks_share_buttons_block_style_color_scheme", + ["brand", "gray", "dark", "light", "accent"], +); +export const enum_pages_blocks_share_buttons_block_style_gap = pgEnum( + "enum_pages_blocks_share_buttons_block_style_gap", + ["0", "4", "8", "12"], +); +export const enum_pages_blocks_toc_block_layout = pgEnum("enum_pages_blocks_toc_block_layout", [ + "list", + "numbered", + "inline", + "sidebar", + "dropdown", +]); +export const enum_pages_blocks_toc_block_sidebar_pos = pgEnum("enum_pages_blocks_toc_block_sidebar_pos", [ + "left", + "right", +]); +export const enum_pages_blocks_toc_block_behavior_progress_style = pgEnum( + "enum_pages_blocks_toc_block_behavior_progress_style", + ["bar", "percent", "circle"], +); +export const enum_pages_blocks_toc_block_style_bg = pgEnum("enum_pages_blocks_toc_block_style_bg", [ + "none", + "light", + "dark", + "accent", +]); +export const enum_pages_blocks_toc_block_style_border_side = pgEnum("enum_pages_blocks_toc_block_style_border_side", [ + "all", + "left", + "top", +]); +export const enum_pages_blocks_toc_block_style_rounded = pgEnum("enum_pages_blocks_toc_block_style_rounded", [ + "none", + "sm", + "md", + "lg", +]); +export const enum_pages_blocks_toc_block_style_font_size = pgEnum("enum_pages_blocks_toc_block_style_font_size", [ + "sm", + "base", + "lg", +]); +export const enum_pages_blocks_toc_block_style_line_height = pgEnum("enum_pages_blocks_toc_block_style_line_height", [ + "tight", + "normal", + "relaxed", +]); +export const enum_pages_blocks_team_filter_block_filters_filter_layout = pgEnum( + "enum_pages_blocks_team_filter_block_filters_filter_layout", + ["horizontal", "sidebar", "dropdown", "tabs"], +); +export const enum_pages_blocks_team_filter_block_filters_filter_style = pgEnum( + "enum_pages_blocks_team_filter_block_filters_filter_style", + ["buttons", "select", "checkbox"], +); +export const enum_pages_blocks_team_filter_block_display_layout = pgEnum( + "enum_pages_blocks_team_filter_block_display_layout", + ["grid", "list", "compact"], +); +export const enum_pages_blocks_team_filter_block_display_columns = pgEnum( + "enum_pages_blocks_team_filter_block_display_columns", + ["2", "3", "4"], +); +export const enum_pages_blocks_team_filter_block_display_load_more = pgEnum( + "enum_pages_blocks_team_filter_block_display_load_more", + ["button", "infinite", "pagination", "all"], +); +export const enum_pages_blocks_team_filter_block_card_image_style = pgEnum( + "enum_pages_blocks_team_filter_block_card_image_style", + ["circle", "rounded", "square"], +); +export const enum_pages_blocks_team_filter_block_style_bg = pgEnum("enum_pages_blocks_team_filter_block_style_bg", [ + "none", + "light", + "dark", +]); +export const enum_pages_blocks_team_filter_block_style_card_bg = pgEnum( + "enum_pages_blocks_team_filter_block_style_card_bg", + ["white", "transparent", "light"], +); +export const enum_pages_blocks_team_filter_block_style_card_hover = pgEnum( + "enum_pages_blocks_team_filter_block_style_card_hover", + ["none", "lift", "shadow", "border"], +); +export const enum_pages_blocks_team_filter_block_style_gap = pgEnum("enum_pages_blocks_team_filter_block_style_gap", [ + "16", + "24", + "32", +]); +export const enum_pages_blocks_team_filter_block_style_animation = pgEnum( + "enum_pages_blocks_team_filter_block_style_animation", + ["none", "fade", "slide", "scale"], +); +export const enum_pages_blocks_org_chart_block_source = pgEnum("enum_pages_blocks_org_chart_block_source", [ + "auto", + "department", + "manual", +]); +export const enum_pages_blocks_org_chart_block_layout = pgEnum("enum_pages_blocks_org_chart_block_layout", [ + "tree", + "tree-horizontal", + "org", + "radial", + "layers", +]); +export const enum_pages_blocks_org_chart_block_direction = pgEnum("enum_pages_blocks_org_chart_block_direction", [ + "top", + "bottom", + "left", + "right", +]); +export const enum_pages_blocks_org_chart_block_node_style = pgEnum("enum_pages_blocks_org_chart_block_node_style", [ + "card", + "compact", + "avatar", + "text", +]); +export const enum_pages_blocks_org_chart_block_node_image_size = pgEnum( + "enum_pages_blocks_org_chart_block_node_image_size", + ["sm", "md", "lg"], +); +export const enum_pages_blocks_org_chart_block_node_image_shape = pgEnum( + "enum_pages_blocks_org_chart_block_node_image_shape", + ["circle", "rounded", "square"], +); +export const enum_pages_blocks_org_chart_block_node_click_action = pgEnum( + "enum_pages_blocks_org_chart_block_node_click_action", + ["none", "modal", "link", "expand"], +); +export const enum_pages_blocks_org_chart_block_connectors_style = pgEnum( + "enum_pages_blocks_org_chart_block_connectors_style", + ["straight", "angular", "curved", "dashed"], +); +export const enum_pages_blocks_org_chart_block_connectors_color = pgEnum( + "enum_pages_blocks_org_chart_block_connectors_color", + ["gray", "dark", "accent", "gradient"], +); +export const enum_pages_blocks_org_chart_block_connectors_thickness = pgEnum( + "enum_pages_blocks_org_chart_block_connectors_thickness", + ["1", "2", "3"], +); +export const enum_pages_blocks_org_chart_block_style_bg = pgEnum("enum_pages_blocks_org_chart_block_style_bg", [ + "none", + "light", + "white", + "dark", + "gradient", +]); +export const enum_pages_blocks_org_chart_block_style_node_bg = pgEnum( + "enum_pages_blocks_org_chart_block_style_node_bg", + ["white", "light", "transparent", "accent"], +); +export const enum_pages_blocks_org_chart_block_style_spacing = pgEnum( + "enum_pages_blocks_org_chart_block_style_spacing", + ["sm", "md", "lg"], +); +export const enum_pages_blocks_org_chart_block_style_min_height = pgEnum( + "enum_pages_blocks_org_chart_block_style_min_height", + ["auto", "300", "400", "500", "600", "full"], +); +export const enum_pages_blocks_locations_block_source = pgEnum("enum_pages_blocks_locations_block_source", [ + "all", + "main", + "type", + "manual", +]); +export const enum_pages_blocks_locations_block_location_type = pgEnum( + "enum_pages_blocks_locations_block_location_type", + ["headquarters", "office", "branch", "warehouse", "showroom", "studio", "practice", "workshop"], +); +export const enum_pages_blocks_locations_block_layout = pgEnum("enum_pages_blocks_locations_block_layout", [ + "map-list", + "map-only", + "list-only", + "cards", + "accordion", + "tabs", +]); +export const enum_pages_blocks_locations_block_map_position = pgEnum("enum_pages_blocks_locations_block_map_position", [ + "left", + "right", + "top", + "bottom", +]); +export const enum_pages_blocks_locations_block_columns = pgEnum("enum_pages_blocks_locations_block_columns", [ + "1", + "2", + "3", +]); +export const enum_pages_blocks_locations_block_map_provider = pgEnum("enum_pages_blocks_locations_block_map_provider", [ + "osm", + "google", + "mapbox", +]); +export const enum_pages_blocks_locations_block_map_style = pgEnum("enum_pages_blocks_locations_block_map_style", [ + "default", + "light", + "dark", + "satellite", +]); +export const enum_pages_blocks_locations_block_map_height = pgEnum("enum_pages_blocks_locations_block_map_height", [ + "300", + "400", + "500", + "600", +]); +export const enum_pages_blocks_locations_block_map_marker_style = pgEnum( + "enum_pages_blocks_locations_block_map_marker_style", + ["pin", "dot", "icon", "custom"], +); +export const enum_pages_blocks_locations_block_style_bg = pgEnum("enum_pages_blocks_locations_block_style_bg", [ + "none", + "light", + "dark", +]); +export const enum_pages_blocks_locations_block_style_card_style = pgEnum( + "enum_pages_blocks_locations_block_style_card_style", + ["simple", "bordered", "shadow", "filled"], +); +export const enum_pages_blocks_locations_block_style_gap = pgEnum("enum_pages_blocks_locations_block_style_gap", [ + "16", + "24", + "32", +]); +export const enum_pages_blocks_logo_grid_block_partner_type = pgEnum("enum_pages_blocks_logo_grid_block_partner_type", [ + "all", + "partner", + "client", + "reference", + "sponsor", + "certification", + "membership", + "award", + "supplier", + "technology", +]); +export const enum_pages_blocks_logo_grid_block_source = pgEnum("enum_pages_blocks_logo_grid_block_source", [ + "collection", + "manual", +]); +export const enum_pages_blocks_logo_grid_block_layout = pgEnum("enum_pages_blocks_logo_grid_block_layout", [ + "grid", + "slider", + "marquee", + "inline", + "masonry", +]); +export const enum_pages_blocks_logo_grid_block_columns = pgEnum("enum_pages_blocks_logo_grid_block_columns", [ + "3", + "4", + "5", + "6", + "8", +]); +export const enum_pages_blocks_logo_grid_block_slider_per_view = pgEnum( + "enum_pages_blocks_logo_grid_block_slider_per_view", + ["3", "4", "5", "6", "auto"], +); +export const enum_pages_blocks_logo_grid_block_slider_speed = pgEnum("enum_pages_blocks_logo_grid_block_slider_speed", [ + "5000", + "3000", + "2000", +]); +export const enum_pages_blocks_logo_grid_block_logo_style_size = pgEnum( + "enum_pages_blocks_logo_grid_block_logo_style_size", + ["sm", "md", "lg"], +); +export const enum_pages_blocks_logo_grid_block_logo_style_max_height = pgEnum( + "enum_pages_blocks_logo_grid_block_logo_style_max_height", + ["40", "50", "60", "80", "100"], +); +export const enum_pages_blocks_logo_grid_block_logo_style_opacity = pgEnum( + "enum_pages_blocks_logo_grid_block_logo_style_opacity", + ["50", "70", "100"], +); +export const enum_pages_blocks_logo_grid_block_logo_style_hover_effect = pgEnum( + "enum_pages_blocks_logo_grid_block_logo_style_hover_effect", + ["none", "scale", "brighten", "shadow"], +); +export const enum_pages_blocks_logo_grid_block_style_bg = pgEnum("enum_pages_blocks_logo_grid_block_style_bg", [ + "none", + "light", + "white", + "dark", +]); +export const enum_pages_blocks_logo_grid_block_style_logo_bg = pgEnum( + "enum_pages_blocks_logo_grid_block_style_logo_bg", + ["none", "white", "light"], +); +export const enum_pages_blocks_logo_grid_block_style_gap = pgEnum("enum_pages_blocks_logo_grid_block_style_gap", [ + "16", + "24", + "32", + "48", +]); +export const enum_pages_blocks_logo_grid_block_style_alignment = pgEnum( + "enum_pages_blocks_logo_grid_block_style_alignment", + ["left", "center", "right"], +); +export const enum_pages_blocks_stats_block_stats_icon = pgEnum("enum_pages_blocks_stats_block_stats_icon", [ + "none", + "users", + "star", + "heart", + "check", + "trophy", + "chart", + "clock", + "calendar", + "globe", + "building", + "document", + "target", + "rocket", + "handshake", +]); +export const enum_pages_blocks_stats_block_stats_color = pgEnum("enum_pages_blocks_stats_block_stats_color", [ + "default", + "primary", + "green", + "blue", + "orange", + "red", +]); +export const enum_pages_blocks_stats_block_layout = pgEnum("enum_pages_blocks_stats_block_layout", [ + "row", + "grid", + "cards", + "column", + "inline", + "feature", +]); +export const enum_pages_blocks_stats_block_columns = pgEnum("enum_pages_blocks_stats_block_columns", [ + "2", + "3", + "4", + "auto", +]); +export const enum_pages_blocks_stats_block_alignment = pgEnum("enum_pages_blocks_stats_block_alignment", [ + "left", + "center", + "right", +]); +export const enum_pages_blocks_stats_block_animation_duration = pgEnum( + "enum_pages_blocks_stats_block_animation_duration", + ["1000", "2000", "3000"], +); +export const enum_pages_blocks_stats_block_animation_trigger = pgEnum( + "enum_pages_blocks_stats_block_animation_trigger", + ["viewport", "immediate"], +); +export const enum_pages_blocks_stats_block_style_bg = pgEnum("enum_pages_blocks_stats_block_style_bg", [ + "none", + "light", + "dark", + "primary", + "gradient", +]); +export const enum_pages_blocks_stats_block_style_bg_overlay = pgEnum("enum_pages_blocks_stats_block_style_bg_overlay", [ + "none", + "dark", + "light", + "primary", +]); +export const enum_pages_blocks_stats_block_style_text_color = pgEnum("enum_pages_blocks_stats_block_style_text_color", [ + "auto", + "dark", + "light", +]); +export const enum_pages_blocks_stats_block_style_value_size = pgEnum("enum_pages_blocks_stats_block_style_value_size", [ + "base", + "lg", + "xl", + "2xl", +]); +export const enum_pages_blocks_stats_block_style_value_weight = pgEnum( + "enum_pages_blocks_stats_block_style_value_weight", + ["normal", "medium", "bold", "extrabold"], +); +export const enum_pages_blocks_stats_block_style_icon_position = pgEnum( + "enum_pages_blocks_stats_block_style_icon_position", + ["top", "left", "inline"], +); +export const enum_pages_blocks_stats_block_style_gap = pgEnum("enum_pages_blocks_stats_block_style_gap", [ + "16", + "24", + "32", + "48", +]); +export const enum_pages_blocks_stats_block_style_padding = pgEnum("enum_pages_blocks_stats_block_style_padding", [ + "none", + "sm", + "md", + "lg", +]); +export const enum_pages_blocks_jobs_block_source = pgEnum("enum_pages_blocks_jobs_block_source", [ + "all", + "category", + "department", + "location", + "featured", + "manual", +]); +export const enum_pages_blocks_jobs_block_category = pgEnum("enum_pages_blocks_jobs_block_category", [ + "care", + "medical", + "admin", + "it", + "marketing", + "sales", + "finance", + "hr", + "production", + "logistics", +]); +export const enum_pages_blocks_jobs_block_filters_filter_layout = pgEnum( + "enum_pages_blocks_jobs_block_filters_filter_layout", + ["horizontal", "sidebar", "dropdown"], +); +export const enum_pages_blocks_jobs_block_layout = pgEnum("enum_pages_blocks_jobs_block_layout", [ + "list", + "cards", + "compact", + "accordion", +]); +export const enum_pages_blocks_jobs_block_columns = pgEnum("enum_pages_blocks_jobs_block_columns", ["1", "2", "3"]); +export const enum_pages_blocks_jobs_block_pagination_type = pgEnum("enum_pages_blocks_jobs_block_pagination_type", [ + "button", + "pagination", + "infinite", + "none", +]); +export const enum_pages_blocks_jobs_block_style_bg = pgEnum("enum_pages_blocks_jobs_block_style_bg", [ + "none", + "light", + "dark", +]); +export const enum_pages_blocks_jobs_block_style_card_style = pgEnum("enum_pages_blocks_jobs_block_style_card_style", [ + "simple", + "bordered", + "shadow", +]); +export const enum_pages_blocks_jobs_block_style_hover_effect = pgEnum( + "enum_pages_blocks_jobs_block_style_hover_effect", + ["none", "lift", "highlight"], +); +export const enum_pages_blocks_jobs_block_style_gap = pgEnum("enum_pages_blocks_jobs_block_style_gap", [ + "8", + "16", + "24", +]); +export const enum_pages_blocks_downloads_block_source = pgEnum("enum_pages_blocks_downloads_block_source", [ + "all", + "category", + "tags", + "featured", + "service", + "product", + "manual", +]); +export const enum_pages_blocks_downloads_block_category = pgEnum("enum_pages_blocks_downloads_block_category", [ + "brochure", + "flyer", + "catalog", + "pricelist", + "form", + "manual", + "datasheet", + "certificate", + "press", + "whitepaper", + "presentation", + "legal", +]); +export const enum_pages_blocks_downloads_block_filters_filter_layout = pgEnum( + "enum_pages_blocks_downloads_block_filters_filter_layout", + ["horizontal", "sidebar", "dropdown"], +); +export const enum_pages_blocks_downloads_block_layout = pgEnum("enum_pages_blocks_downloads_block_layout", [ + "list", + "cards", + "compact", + "table", + "accordion", +]); +export const enum_pages_blocks_downloads_block_columns = pgEnum("enum_pages_blocks_downloads_block_columns", [ + "1", + "2", + "3", + "4", +]); +export const enum_pages_blocks_downloads_block_file_icons_icon_style = pgEnum( + "enum_pages_blocks_downloads_block_file_icons_icon_style", + ["colored", "mono", "outline"], +); +export const enum_pages_blocks_downloads_block_sort_by = pgEnum("enum_pages_blocks_downloads_block_sort_by", [ + "order", + "title_asc", + "title_desc", + "date_desc", + "date_asc", + "downloads_desc", + "size", +]); +export const enum_pages_blocks_downloads_block_group_by = pgEnum("enum_pages_blocks_downloads_block_group_by", [ + "none", + "category", + "fileType", +]); +export const enum_pages_blocks_downloads_block_pagination_type = pgEnum( + "enum_pages_blocks_downloads_block_pagination_type", + ["none", "button", "pagination"], +); +export const enum_pages_blocks_downloads_block_style_bg = pgEnum("enum_pages_blocks_downloads_block_style_bg", [ + "none", + "light", + "dark", +]); +export const enum_pages_blocks_downloads_block_style_card_style = pgEnum( + "enum_pages_blocks_downloads_block_style_card_style", + ["simple", "bordered", "shadow"], +); +export const enum_pages_blocks_downloads_block_style_hover_effect = pgEnum( + "enum_pages_blocks_downloads_block_style_hover_effect", + ["none", "highlight", "lift"], +); +export const enum_pages_blocks_downloads_block_style_gap = pgEnum("enum_pages_blocks_downloads_block_style_gap", [ + "8", + "16", + "24", +]); +export const enum_pages_blocks_map_block_location_type = pgEnum("enum_pages_blocks_map_block_location_type", [ + "all", + "headquarters", + "branch", + "office", + "warehouse", + "production", + "showroom", + "service", + "partner", +]); +export const enum_pages_blocks_map_block_markers_marker_type = pgEnum( + "enum_pages_blocks_map_block_markers_marker_type", + ["default", "main", "highlight", "custom"], +); +export const enum_pages_blocks_map_block_source = pgEnum("enum_pages_blocks_map_block_source", [ + "locations", + "manual", + "single", +]); +export const enum_pages_blocks_map_block_provider = pgEnum("enum_pages_blocks_map_block_provider", [ + "osm", + "google", + "mapbox", + "leaflet", +]); +export const enum_pages_blocks_map_block_map_style = pgEnum("enum_pages_blocks_map_block_map_style", [ + "default", + "light", + "dark", + "satellite", + "hybrid", + "terrain", +]); +export const enum_pages_blocks_map_block_map_settings_height = pgEnum( + "enum_pages_blocks_map_block_map_settings_height", + ["300", "400", "500", "600", "fullscreen"], +); +export const enum_pages_blocks_map_block_marker_style_type = pgEnum("enum_pages_blocks_map_block_marker_style_type", [ + "pin", + "dot", + "icon", + "custom", +]); +export const enum_pages_blocks_map_block_marker_style_size = pgEnum("enum_pages_blocks_map_block_marker_style_size", [ + "sm", + "md", + "lg", +]); +export const enum_pages_blocks_map_block_popup_trigger = pgEnum("enum_pages_blocks_map_block_popup_trigger", [ + "click", + "hover", +]); +export const enum_pages_blocks_map_block_sidebar_position = pgEnum("enum_pages_blocks_map_block_sidebar_position", [ + "left", + "right", + "bottom", +]); +export const enum_pages_blocks_map_block_sidebar_width = pgEnum("enum_pages_blocks_map_block_sidebar_width", [ + "250", + "300", + "400", +]); +export const enum_pages_blocks_map_block_style_padding = pgEnum("enum_pages_blocks_map_block_style_padding", [ + "none", + "sm", + "md", + "lg", +]); +export const enum_pages_blocks_events_source_mode = pgEnum("enum_pages_blocks_events_source_mode", [ + "collection", + "selected", +]); +export const enum_pages_blocks_events_filter_mode = pgEnum("enum_pages_blocks_events_filter_mode", [ + "upcoming", + "past", + "all", + "featured", + "type", + "category", +]); +export const enum_pages_blocks_events_event_type = pgEnum("enum_pages_blocks_events_event_type", [ + "event", + "workshop", + "seminar", + "webinar", + "conference", + "tradeshow", + "networking", + "course", + "talk", +]); +export const enum_pages_blocks_events_layout = pgEnum("enum_pages_blocks_events_layout", [ + "cards", + "list", + "compact", + "timeline", + "calendar", + "agenda", +]); +export const enum_pages_blocks_events_columns = pgEnum("enum_pages_blocks_events_columns", ["2", "3", "4"]); +export const enum_pages_blocks_events_calendar_options_default_view = pgEnum( + "enum_pages_blocks_events_calendar_options_default_view", + ["month", "week", "day"], +); +export const enum_pages_blocks_events_group_by = pgEnum("enum_pages_blocks_events_group_by", [ + "none", + "month", + "type", + "category", +]); +export const enum_pages_blocks_events_sort_order = pgEnum("enum_pages_blocks_events_sort_order", ["asc", "desc"]); +export const enum_pages_blocks_events_background_color = pgEnum("enum_pages_blocks_events_background_color", [ + "white", + "light", + "dark", + "accent", +]); +export const enum_pages_blocks_events_card_style = pgEnum("enum_pages_blocks_events_card_style", [ + "elevated", + "bordered", + "flat", +]); +export const enum_pages_blocks_pricing_plans_cta_style = pgEnum("enum_pages_blocks_pricing_plans_cta_style", [ + "primary", + "secondary", + "outline", +]); +export const enum_pages_blocks_pricing_plans_accent_color = pgEnum("enum_pages_blocks_pricing_plans_accent_color", [ + "default", + "primary", + "secondary", + "green", + "blue", + "purple", +]); +export const enum_pages_blocks_pricing_pricing_type = pgEnum("enum_pages_blocks_pricing_pricing_type", [ + "one-time", + "monthly", + "yearly", + "toggle", + "custom", +]); +export const enum_pages_blocks_pricing_layout = pgEnum("enum_pages_blocks_pricing_layout", [ + "cards", + "table", + "compact", +]); +export const enum_pages_blocks_pricing_alignment = pgEnum("enum_pages_blocks_pricing_alignment", [ + "left", + "center", + "right", +]); +export const enum_pages_blocks_pricing_guarantee_icon = pgEnum("enum_pages_blocks_pricing_guarantee_icon", [ + "shield", + "check", + "star", + "lock", +]); +export const enum_pages_blocks_pricing_background_color = pgEnum("enum_pages_blocks_pricing_background_color", [ + "white", + "light", + "dark", + "gradient", +]); +export const enum_pages_blocks_pricing_card_style = pgEnum("enum_pages_blocks_pricing_card_style", [ + "elevated", + "bordered", + "flat", + "glass", +]); +export const enum_pages_blocks_tabs_tabs_features_icon = pgEnum("enum_pages_blocks_tabs_tabs_features_icon", [ + "check", + "star", + "arrow", + "dot", + "number", +]); +export const enum_pages_blocks_tabs_tabs_icon = pgEnum("enum_pages_blocks_tabs_tabs_icon", [ + "none", + "info", + "star", + "heart", + "check", + "settings", + "user", + "document", + "image", + "video", + "code", + "chart", + "calendar", + "location", + "email", + "phone", +]); +export const enum_pages_blocks_tabs_tabs_content_type = pgEnum("enum_pages_blocks_tabs_tabs_content_type", [ + "richtext", + "image-text", + "features", + "code", + "embed", +]); +export const enum_pages_blocks_tabs_tabs_img_txt_img_pos = pgEnum("enum_pages_blocks_tabs_tabs_img_txt_img_pos", [ + "left", + "right", + "top", +]); +export const enum_pages_blocks_tabs_tabs_code_language = pgEnum("enum_pages_blocks_tabs_tabs_code_language", [ + "javascript", + "typescript", + "html", + "css", + "json", + "python", + "bash", + "sql", +]); +export const enum_pages_blocks_tabs_tabs_embed_type = pgEnum("enum_pages_blocks_tabs_tabs_embed_type", [ + "youtube", + "vimeo", + "iframe", +]); +export const enum_pages_blocks_tabs_tabs_embed_aspect_ratio = pgEnum("enum_pages_blocks_tabs_tabs_embed_aspect_ratio", [ + "16:9", + "4:3", + "1:1", +]); +export const enum_pages_blocks_tabs_tab_style = pgEnum("enum_pages_blocks_tabs_tab_style", [ + "underline", + "boxed", + "pills", + "buttons", + "vertical", +]); +export const enum_pages_blocks_tabs_tab_position = pgEnum("enum_pages_blocks_tabs_tab_position", [ + "top", + "left", + "right", + "bottom", +]); +export const enum_pages_blocks_tabs_tab_alignment = pgEnum("enum_pages_blocks_tabs_tab_alignment", [ + "left", + "center", + "right", + "stretch", +]); +export const enum_pages_blocks_tabs_mobile_style = pgEnum("enum_pages_blocks_tabs_mobile_style", [ + "scroll", + "dropdown", + "accordion", + "stacked", +]); +export const enum_pages_blocks_tabs_background_color = pgEnum("enum_pages_blocks_tabs_background_color", [ + "white", + "light", + "dark", + "transparent", +]); +export const enum_pages_blocks_tabs_content_background = pgEnum("enum_pages_blocks_tabs_content_background", [ + "white", + "light", + "transparent", +]); +export const enum_pages_blocks_accordion_items_list_items_icon = pgEnum( + "enum_pages_blocks_accordion_items_list_items_icon", + ["check", "dot", "arrow", "star", "x"], +); +export const enum_pages_blocks_accordion_items_icon = pgEnum("enum_pages_blocks_accordion_items_icon", [ + "none", + "info", + "question", + "star", + "check", + "warning", + "document", + "user", + "settings", + "code", + "lightbulb", + "lock", +]); +export const enum_pages_blocks_accordion_items_content_type = pgEnum("enum_pages_blocks_accordion_items_content_type", [ + "richtext", + "image-text", + "list", + "table", + "code", +]); +export const enum_pages_blocks_accordion_items_img_txt_img_pos = pgEnum( + "enum_pages_blocks_accordion_items_img_txt_img_pos", + ["left", "right"], +); +export const enum_pages_blocks_accordion_items_code_content_language = pgEnum( + "enum_pages_blocks_accordion_items_code_content_language", + ["javascript", "typescript", "html", "css", "json", "python", "bash"], +); +export const enum_pages_blocks_accordion_items_badge_color = pgEnum("enum_pages_blocks_accordion_items_badge_color", [ + "gray", + "blue", + "green", + "yellow", + "red", + "purple", +]); +export const enum_pages_blocks_accordion_behavior = pgEnum("enum_pages_blocks_accordion_behavior", [ + "single", + "multiple", + "at-least-one", +]); +export const enum_pages_blocks_accordion_style = pgEnum("enum_pages_blocks_accordion_style", [ + "default", + "bordered", + "separated", + "flush", + "rounded", +]); +export const enum_pages_blocks_accordion_icon_position = pgEnum("enum_pages_blocks_accordion_icon_position", [ + "left", + "right", +]); +export const enum_pages_blocks_accordion_icon_style = pgEnum("enum_pages_blocks_accordion_icon_style", [ + "chevron", + "plus-minus", + "arrow", + "caret", +]); +export const enum_pages_blocks_accordion_layout = pgEnum("enum_pages_blocks_accordion_layout", [ + "full", + "centered", + "narrow", + "two-column", +]); +export const enum_pages_blocks_accordion_title_size = pgEnum("enum_pages_blocks_accordion_title_size", [ + "small", + "medium", + "large", +]); +export const enum_pages_blocks_accordion_background_color = pgEnum("enum_pages_blocks_accordion_background_color", [ + "white", + "light", + "dark", + "transparent", +]); +export const enum_pages_blocks_accordion_header_background = pgEnum("enum_pages_blocks_accordion_header_background", [ + "white", + "light", + "transparent", +]); +export const enum_pages_blocks_comparison_tbl_rows_values_value_type = pgEnum( + "enum_pages_blocks_comparison_tbl_rows_values_value_type", + ["text", "boolean", "partial", "na"], +); +export const enum_pages_blocks_comparison_crd_items_accent_color = pgEnum( + "enum_pages_blocks_comparison_crd_items_accent_color", + ["default", "primary", "secondary", "green", "blue"], +); +export const enum_pages_blocks_comparison_comparison_type = pgEnum("enum_pages_blocks_comparison_comparison_type", [ + "table", + "cards", + "before-after", + "pros-cons", + "feature-matrix", +]); +export const enum_pages_blocks_comparison_before_after_display_style = pgEnum( + "enum_pages_blocks_comparison_before_after_display_style", + ["slider", "side-by-side", "stacked", "flip"], +); +export const enum_pages_blocks_comparison_mobile_view = pgEnum("enum_pages_blocks_comparison_mobile_view", [ + "scroll", + "stacked", + "accordion", + "dropdown", +]); +export const enum_pages_blocks_comparison_background_color = pgEnum("enum_pages_blocks_comparison_background_color", [ + "white", + "light", + "dark", +]); +export const enum_pages_blocks_comparison_table_style = pgEnum("enum_pages_blocks_comparison_table_style", [ + "bordered", + "striped", + "minimal", + "cards", +]); +export const enum_pages_blocks_comparison_check_color = pgEnum("enum_pages_blocks_comparison_check_color", [ + "green", + "primary", + "blue", +]); +export const enum_pages_blocks_comparison_cross_color = pgEnum("enum_pages_blocks_comparison_cross_color", [ + "red", + "gray", + "transparent", +]); export const enum_pages_status = pgEnum("enum_pages_status", ["draft", "published"]); export const enum_posts_type = pgEnum("enum_posts_type", ["blog", "news", "press", "announcement"]); export const enum_posts_status = pgEnum("enum_posts_status", ["draft", "published", "archived"]); @@ -180,6 +1520,33 @@ export const enum_social_links_platform = pgEnum("enum_social_links_platform", [ "linkedin", "xing", ]); +export const enum_team_social_links_platform = pgEnum("enum_team_social_links_platform", [ + "linkedin", + "xing", + "twitter", + "instagram", + "facebook", + "website", + "github", +]); +export const enum_team_languages_level = pgEnum("enum_team_languages_level", ["native", "fluent", "good", "basic"]); +export const enum_team_hierarchy_level = pgEnum("enum_team_hierarchy_level", [ + "executive", + "department_head", + "team_lead", + "employee", + "trainee", +]); +export const enum_services_pricing_type = pgEnum("enum_services_pricing_type", [ + "on-request", + "fixed", + "from", + "range", + "hourly", + "monthly", + "free", +]); +export const enum_services_cta_style = pgEnum("enum_services_cta_style", ["primary", "secondary", "outline"]); export const enum_newsletter_subscribers_interests = pgEnum("enum_newsletter_subscribers_interests", [ "general", "blog", @@ -193,6 +1560,351 @@ export const enum_newsletter_subscribers_status = pgEnum("enum_newsletter_subscr "unsubscribed", "bounced", ]); +export const enum_portfolios_status = pgEnum("enum_portfolios_status", ["draft", "published", "archived"]); +export const enum_products_pricing_currency = pgEnum("enum_products_pricing_currency", ["EUR", "USD", "CHF"]); +export const enum_products_pricing_price_type = pgEnum("enum_products_pricing_price_type", [ + "fixed", + "from", + "on_request", + "free", +]); +export const enum_products_inventory_stock_status = pgEnum("enum_products_inventory_stock_status", [ + "in_stock", + "low_stock", + "out_of_stock", + "on_order", + "preorder", +]); +export const enum_products_cta_type = pgEnum("enum_products_cta_type", [ + "contact", + "quote", + "cart", + "external", + "download", +]); +export const enum_products_status = pgEnum("enum_products_status", ["draft", "published", "archived"]); +export const enum_timelines_events_deliverables_type = pgEnum("enum_timelines_events_deliverables_type", [ + "output", + "input", + "document", +]); +export const enum_timelines_events_links_type = pgEnum("enum_timelines_events_links_type", [ + "internal", + "external", + "download", +]); +export const enum_timelines_events_date_type = pgEnum("enum_timelines_events_date_type", [ + "year", + "monthYear", + "fullDate", + "range", + "custom", +]); +export const enum_timelines_events_month = pgEnum("enum_timelines_events_month", [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", +]); +export const enum_timelines_events_end_month = pgEnum("enum_timelines_events_end_month", [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", +]); +export const enum_timelines_events_category = pgEnum("enum_timelines_events_category", [ + "milestone", + "founding", + "product", + "team", + "award", + "partnership", + "expansion", + "technology", + "other", +]); +export const enum_timelines_events_importance = pgEnum("enum_timelines_events_importance", [ + "highlight", + "normal", + "minor", +]); +export const enum_timelines_events_action_required = pgEnum("enum_timelines_events_action_required", [ + "customer", + "internal", + "both", + "automatic", +]); +export const enum_timelines_type = pgEnum("enum_timelines_type", [ + "history", + "milestones", + "releases", + "career", + "events", + "process", +]); +export const enum_timelines_status = pgEnum("enum_timelines_status", ["draft", "published", "archived"]); +export const enum_timelines_display_options_layout = pgEnum("enum_timelines_display_options_layout", [ + "vertical", + "alternating", + "horizontal", + "compact", +]); +export const enum_timelines_display_options_sort_order = pgEnum("enum_timelines_display_options_sort_order", [ + "desc", + "asc", +]); +export const enum_timelines_display_options_marker_style = pgEnum("enum_timelines_display_options_marker_style", [ + "dot", + "number", + "icon", + "date", +]); +export const enum_timelines_display_options_color_scheme = pgEnum("enum_timelines_display_options_color_scheme", [ + "primary", + "secondary", + "neutral", + "colorful", +]); +export const enum_workflows_phases_steps_resources_type = pgEnum("enum_workflows_phases_steps_resources_type", [ + "document", + "template", + "link", + "tool", + "video", +]); +export const enum_workflows_phases_steps_step_type = pgEnum("enum_workflows_phases_steps_step_type", [ + "task", + "decision", + "milestone", + "approval", + "wait", + "automatic", +]); +export const enum_workflows_phases_steps_priority = pgEnum("enum_workflows_phases_steps_priority", [ + "critical", + "high", + "normal", + "low", + "optional", +]); +export const enum_workflows_global_resources_type = pgEnum("enum_workflows_global_resources_type", [ + "document", + "template", + "checklist", + "link", + "tool", +]); +export const enum_workflows_type = pgEnum("enum_workflows_type", [ + "project", + "business", + "approval", + "onboarding", + "support", + "development", + "marketing", + "other", +]); +export const enum_workflows_status = pgEnum("enum_workflows_status", ["draft", "published", "archived"]); +export const enum_workflows_properties_complexity = pgEnum("enum_workflows_properties_complexity", [ + "simple", + "medium", + "complex", + "very_complex", +]); +export const enum_workflows_display_options_layout = pgEnum("enum_workflows_display_options_layout", [ + "vertical", + "horizontal", + "flowchart", + "kanban", + "gantt", +]); +export const enum_workflows_display_options_color_scheme = pgEnum("enum_workflows_display_options_color_scheme", [ + "phase", + "status", + "priority", + "brand", +]); +export const enum_locations_hours_structured_day = pgEnum("enum_locations_hours_structured_day", [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday", +]); +export const enum_locations_type = pgEnum("enum_locations_type", [ + "headquarters", + "office", + "branch", + "warehouse", + "showroom", + "studio", + "practice", + "workshop", +]); +export const enum_partners_type = pgEnum("enum_partners_type", [ + "partner", + "client", + "reference", + "sponsor", + "certification", + "membership", + "award", + "supplier", + "technology", +]); +export const enum_jobs_benefits_list_icon = pgEnum("enum_jobs_benefits_list_icon", [ + "money", + "vacation", + "home", + "education", + "health", + "team", + "flexible", + "transport", + "food", + "childcare", + "fitness", + "parking", +]); +export const enum_jobs_category = pgEnum("enum_jobs_category", [ + "care", + "medical", + "admin", + "it", + "marketing", + "sales", + "finance", + "hr", + "production", + "logistics", + "other", +]); +export const enum_jobs_type = pgEnum("enum_jobs_type", [ + "fulltime", + "parttime", + "minijob", + "working_student", + "internship", + "apprenticeship", + "dual_study", + "freelance", + "temporary", +]); +export const enum_jobs_work_model = pgEnum("enum_jobs_work_model", ["onsite", "remote", "hybrid"]); +export const enum_jobs_experience_level = pgEnum("enum_jobs_experience_level", [ + "entry", + "experienced", + "senior", + "management", +]); +export const enum_jobs_salary_type = pgEnum("enum_jobs_salary_type", ["yearly", "monthly", "hourly"]); +export const enum_jobs_application_method = pgEnum("enum_jobs_application_method", [ + "email", + "form", + "external", + "mail", +]); +export const enum_jobs_status = pgEnum("enum_jobs_status", ["draft", "published", "filled", "archived"]); +export const enum_downloads_access_form_fields = pgEnum("enum_downloads_access_form_fields", [ + "name", + "email", + "company", + "phone", +]); +export const enum_downloads_file_type = pgEnum("enum_downloads_file_type", [ + "pdf", + "doc", + "xls", + "ppt", + "image", + "video", + "audio", + "archive", + "other", +]); +export const enum_downloads_category = pgEnum("enum_downloads_category", [ + "brochure", + "flyer", + "catalog", + "pricelist", + "form", + "manual", + "datasheet", + "certificate", + "press", + "whitepaper", + "presentation", + "legal", + "other", +]); +export const enum_events_agenda_type = pgEnum("enum_events_agenda_type", [ + "talk", + "workshop", + "break", + "networking", + "panel", + "qa", +]); +export const enum_events_event_type = pgEnum("enum_events_event_type", [ + "event", + "workshop", + "seminar", + "webinar", + "conference", + "tradeshow", + "networking", + "course", + "talk", + "other", +]); +export const enum_events_format = pgEnum("enum_events_format", ["onsite", "online", "hybrid"]); +export const enum_events_recurrence_frequency = pgEnum("enum_events_recurrence_frequency", [ + "daily", + "weekly", + "monthly", + "yearly", +]); +export const enum_events_online_platform = pgEnum("enum_events_online_platform", [ + "zoom", + "teams", + "google-meet", + "webex", + "gotowebinar", + "livestream", + "other", +]); +export const enum_events_registration_method = pgEnum("enum_events_registration_method", [ + "form", + "email", + "external", + "phone", +]); +export const enum_events_status = pgEnum("enum_events_status", [ + "draft", + "published", + "soldout", + "cancelled", + "postponed", + "past", +]); export const enum_cookie_configurations_enabled_categories = pgEnum("enum_cookie_configurations_enabled_categories", [ "necessary", "functional", @@ -226,7 +1938,36 @@ export const enum_privacy_policy_settings_alfright_language = pgEnum("enum_priva "en-gb", "en-us", ]); +export const enum_email_logs_status = pgEnum("enum_email_logs_status", ["pending", "sent", "failed"]); +export const enum_email_logs_source = pgEnum("enum_email_logs_source", ["manual", "form", "system", "newsletter"]); +export const enum_audit_logs_action = pgEnum("enum_audit_logs_action", [ + "login_success", + "login_failed", + "logout", + "password_changed", + "password_reset", + "create", + "update", + "delete", + "config_changed", + "email_failed", + "access_denied", + "rate_limit", +]); +export const enum_audit_logs_severity = pgEnum("enum_audit_logs_severity", ["info", "warning", "error", "critical"]); +export const enum_audit_logs_entity_type = pgEnum("enum_audit_logs_entity_type", [ + "users", + "tenants", + "pages", + "posts", + "media", + "forms", + "email", + "global", + "system", +]); export const enum_forms_confirmation_type = pgEnum("enum_forms_confirmation_type", ["message", "redirect"]); +export const enum_forms_redirect_type = pgEnum("enum_forms_redirect_type", ["reference", "custom"]); export const enum_redirects_to_type = pgEnum("enum_redirects_to_type", ["reference", "custom"]); export const enum_navigation_main_menu_submenu_link_type = pgEnum("enum_navigation_main_menu_submenu_link_type", [ "page", @@ -319,6 +2060,7 @@ export const users = pgTable( "users", { id: serial("id").primaryKey(), + isSuperAdmin: boolean("is_super_admin").default(false), updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), email: varchar("email").notNull(), @@ -484,6 +2226,15 @@ export const tenants = pgTable( id: serial("id").primaryKey(), name: varchar("name").notNull(), slug: varchar("slug").notNull(), + email_fromAddress: varchar("email_from_address"), + email_fromName: varchar("email_from_name"), + email_replyTo: varchar("email_reply_to"), + email_useCustomSmtp: boolean("email_use_custom_smtp").default(false), + email_smtp_host: varchar("email_smtp_host"), + email_smtp_port: numeric("email_smtp_port", { mode: "number" }).default(587), + email_smtp_secure: boolean("email_smtp_secure").default(false), + email_smtp_user: varchar("email_smtp_user"), + email_smtp_pass: varchar("email_smtp_pass"), updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), }, @@ -504,11 +2255,8 @@ export const pages_blocks_hero_block = pgTable( backgroundImage: integer("background_image_id").references(() => media.id, { onDelete: "set null", }), - headline: varchar("headline").notNull(), - subline: varchar("subline"), alignment: enum_pages_blocks_hero_block_alignment("alignment").default("center"), overlay: boolean("overlay").default(true), - cta_text: varchar("cta_text"), cta_link: varchar("cta_link"), cta_style: enum_pages_blocks_hero_block_cta_style("cta_style").default("primary"), blockName: varchar("block_name"), @@ -526,6 +2274,284 @@ export const pages_blocks_hero_block = pgTable( ], ); +export const pages_blocks_hero_block_locales = pgTable( + "pages_blocks_hero_block_locales", + { + headline: varchar("headline").notNull(), + subline: varchar("subline"), + cta_text: varchar("cta_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_hero_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_hero_block.id], + name: "pages_blocks_hero_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_hero_slider_block_slides = pgTable( + "pages_blocks_hero_slider_block_slides", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + backgroundImage: integer("background_image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + mobileBackgroundImage: integer("mobile_background_image_id").references(() => media.id, { + onDelete: "set null", + }), + textAlignment: enum_pages_blocks_hero_slider_block_slides_text_alignment("text_alignment").default("center"), + verticalPosition: + enum_pages_blocks_hero_slider_block_slides_vertical_position("vertical_position").default("center"), + overlay_enabled: boolean("overlay_enabled").default(true), + overlay_color: enum_pages_blocks_hero_slider_block_slides_overlay_color("overlay_color").default("dark"), + overlay_opacity: enum_pages_blocks_hero_slider_block_slides_overlay_opacity("overlay_opacity").default("50"), + primaryCta_enabled: boolean("primary_cta_enabled").default(true), + primaryCta_link: varchar("primary_cta_link"), + primaryCta_style: + enum_pages_blocks_hero_slider_block_slides_primary_cta_style("primary_cta_style").default("primary"), + primaryCta_openInNewTab: boolean("primary_cta_open_in_new_tab").default(false), + secondaryCta_enabled: boolean("secondary_cta_enabled").default(false), + secondaryCta_link: varchar("secondary_cta_link"), + secondaryCta_style: + enum_pages_blocks_hero_slider_block_slides_secondary_cta_style("secondary_cta_style").default("outline-white"), + secondaryCta_openInNewTab: boolean("secondary_cta_open_in_new_tab").default(false), + textColor: enum_pages_blocks_hero_slider_block_slides_text_color("text_color").default("white"), + }, + (columns) => [ + index("pages_blocks_hero_slider_block_slides_order_idx").on(columns._order), + index("pages_blocks_hero_slider_block_slides_parent_id_idx").on(columns._parentID), + index("pages_blocks_hero_slider_block_slides_background_image_idx").on(columns.backgroundImage), + index("pages_blocks_hero_slider_block_slides_mobile_background__idx").on(columns.mobileBackgroundImage), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_hero_slider_block.id], + name: "pages_blocks_hero_slider_block_slides_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_hero_slider_block_slides_locales = pgTable( + "pages_blocks_hero_slider_block_slides_locales", + { + headline: varchar("headline").notNull(), + subline: varchar("subline"), + primaryCta_text: varchar("primary_cta_text"), + secondaryCta_text: varchar("secondary_cta_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_hero_slider_block_slides_locales_locale_parent_").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_hero_slider_block_slides.id], + name: "pages_blocks_hero_slider_block_slides_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_hero_slider_block = pgTable( + "pages_blocks_hero_slider_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + settings_animation: enum_pages_blocks_hero_slider_block_settings_animation("settings_animation").default("fade"), + settings_animationDuration: + enum_pages_blocks_hero_slider_block_settings_animation_duration("settings_animation_duration").default("500"), + settings_autoplay_enabled: boolean("settings_autoplay_enabled").default(true), + settings_autoplay_interval: + enum_pages_blocks_hero_slider_block_settings_autoplay_interval("settings_autoplay_interval").default("5000"), + settings_autoplay_pauseOnHover: boolean("settings_autoplay_pause_on_hover").default(true), + settings_autoplay_pauseOnInteraction: boolean("settings_autoplay_pause_on_interaction").default(true), + settings_loop: boolean("settings_loop").default(true), + navigation_arrows_enabled: boolean("navigation_arrows_enabled").default(true), + navigation_arrows_style: + enum_pages_blocks_hero_slider_block_navigation_arrows_style("navigation_arrows_style").default("default"), + navigation_arrows_position: + enum_pages_blocks_hero_slider_block_navigation_arrows_position("navigation_arrows_position").default("sides"), + navigation_arrows_hideOnMobile: boolean("navigation_arrows_hide_on_mobile").default(false), + navigation_dots_enabled: boolean("navigation_dots_enabled").default(true), + navigation_dots_style: + enum_pages_blocks_hero_slider_block_navigation_dots_style("navigation_dots_style").default("dots"), + navigation_dots_position: + enum_pages_blocks_hero_slider_block_navigation_dots_position("navigation_dots_position").default("bottom-center"), + navigation_dots_color: + enum_pages_blocks_hero_slider_block_navigation_dots_color("navigation_dots_color").default("white"), + navigation_swipe: boolean("navigation_swipe").default(true), + navigation_keyboard: boolean("navigation_keyboard").default(true), + layout_height: enum_pages_blocks_hero_slider_block_layout_height("layout_height").default("viewport"), + layout_mobileHeight: + enum_pages_blocks_hero_slider_block_layout_mobile_height("layout_mobile_height").default("viewport"), + layout_contentWidth: + enum_pages_blocks_hero_slider_block_layout_content_width("layout_content_width").default("container"), + layout_fullWidth: boolean("layout_full_width").default(true), + accessibility_reducedMotion: boolean("accessibility_reduced_motion").default(true), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_hero_slider_block_order_idx").on(columns._order), + index("pages_blocks_hero_slider_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_hero_slider_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_hero_slider_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_hero_slider_block_locales = pgTable( + "pages_blocks_hero_slider_block_locales", + { + accessibility_ariaLabel: varchar("accessibility_aria_label").default("Hero Slider"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_hero_slider_block_locales_locale_parent_id_uniq").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_hero_slider_block.id], + name: "pages_blocks_hero_slider_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_image_slider_block_images = pgTable( + "pages_blocks_image_slider_block_images", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + link: varchar("link"), + }, + (columns) => [ + index("pages_blocks_image_slider_block_images_order_idx").on(columns._order), + index("pages_blocks_image_slider_block_images_parent_id_idx").on(columns._parentID), + index("pages_blocks_image_slider_block_images_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_image_slider_block.id], + name: "pages_blocks_image_slider_block_images_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_image_slider_block_images_locales = pgTable( + "pages_blocks_image_slider_block_images_locales", + { + caption: varchar("caption"), + alt: varchar("alt"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_image_slider_block_images_locales_locale_parent").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_image_slider_block_images.id], + name: "pages_blocks_image_slider_block_images_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_image_slider_block = pgTable( + "pages_blocks_image_slider_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + layout: enum_pages_blocks_image_slider_block_layout("layout").default("slider"), + grid_cols: enum_pages_blocks_image_slider_block_grid_cols("grid_cols").default("3"), + grid_gap: enum_pages_blocks_image_slider_block_grid_gap("grid_gap").default("16"), + grid_aspectRatio: enum_pages_blocks_image_slider_block_grid_aspect_ratio("grid_aspect_ratio").default("square"), + slider_effect: enum_pages_blocks_image_slider_block_slider_effect("slider_effect").default("slide"), + slider_speed: enum_pages_blocks_image_slider_block_slider_speed("slider_speed").default("500"), + slider_perView: enum_pages_blocks_image_slider_block_slider_per_view("slider_per_view").default("1"), + slider_gap: enum_pages_blocks_image_slider_block_slider_gap("slider_gap").default("0"), + slider_auto: boolean("slider_auto").default(false), + slider_delay: enum_pages_blocks_image_slider_block_slider_delay("slider_delay").default("4000"), + slider_pauseHover: boolean("slider_pause_hover").default(true), + slider_loop: boolean("slider_loop").default(true), + slider_centered: boolean("slider_centered").default(false), + nav_arrows: boolean("nav_arrows").default(true), + nav_arrowStyle: enum_pages_blocks_image_slider_block_nav_arrow_style("nav_arrow_style").default("default"), + nav_dots: boolean("nav_dots").default(true), + nav_dotStyle: enum_pages_blocks_image_slider_block_nav_dot_style("nav_dot_style").default("dots"), + nav_counter: boolean("nav_counter").default(false), + nav_swipe: boolean("nav_swipe").default(true), + nav_keys: boolean("nav_keys").default(true), + lightbox_enabled: boolean("lightbox_enabled").default(true), + lightbox_zoom: boolean("lightbox_zoom").default(true), + lightbox_download: boolean("lightbox_download").default(false), + lightbox_share: boolean("lightbox_share").default(false), + lightbox_captions: boolean("lightbox_captions").default(true), + lightbox_thumbs: boolean("lightbox_thumbs").default(true), + lightbox_bg: enum_pages_blocks_image_slider_block_lightbox_bg("lightbox_bg").default("dark"), + style_height: enum_pages_blocks_image_slider_block_style_height("style_height").default("auto"), + style_imgFit: enum_pages_blocks_image_slider_block_style_img_fit("style_img_fit").default("cover"), + style_rounded: enum_pages_blocks_image_slider_block_style_rounded("style_rounded").default("none"), + style_shadow: boolean("style_shadow").default(false), + style_border: boolean("style_border").default(false), + style_hoverEffect: enum_pages_blocks_image_slider_block_style_hover_effect("style_hover_effect").default("none"), + style_captionPos: enum_pages_blocks_image_slider_block_style_caption_pos("style_caption_pos").default("below"), + style_bg: enum_pages_blocks_image_slider_block_style_bg("style_bg").default("none"), + style_padding: enum_pages_blocks_image_slider_block_style_padding("style_padding").default("none"), + a11y_reducedMotion: boolean("a11y_reduced_motion").default(true), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_image_slider_block_order_idx").on(columns._order), + index("pages_blocks_image_slider_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_image_slider_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_image_slider_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_image_slider_block_locales = pgTable( + "pages_blocks_image_slider_block_locales", + { + title: varchar("title"), + description: varchar("description"), + a11y_label: varchar("a11y_label").default("Bildergalerie"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_image_slider_block_locales_locale_parent_id_uni").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_image_slider_block.id], + name: "pages_blocks_image_slider_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_text_block = pgTable( "pages_blocks_text_block", { @@ -533,7 +2559,6 @@ export const pages_blocks_text_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - content: jsonb("content").notNull(), width: enum_pages_blocks_text_block_width("width").default("medium"), blockName: varchar("block_name"), }, @@ -549,6 +2574,24 @@ export const pages_blocks_text_block = pgTable( ], ); +export const pages_blocks_text_block_locales = pgTable( + "pages_blocks_text_block_locales", + { + content: jsonb("content").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_text_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_text_block.id], + name: "pages_blocks_text_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_image_text_block = pgTable( "pages_blocks_image_text_block", { @@ -562,9 +2605,6 @@ export const pages_blocks_image_text_block = pgTable( onDelete: "set null", }), imagePosition: enum_pages_blocks_image_text_block_image_position("image_position").default("left"), - headline: varchar("headline"), - content: jsonb("content"), - cta_text: varchar("cta_text"), cta_link: varchar("cta_link"), blockName: varchar("block_name"), }, @@ -581,6 +2621,26 @@ export const pages_blocks_image_text_block = pgTable( ], ); +export const pages_blocks_image_text_block_locales = pgTable( + "pages_blocks_image_text_block_locales", + { + headline: varchar("headline"), + content: jsonb("content"), + cta_text: varchar("cta_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_image_text_block_locales_locale_parent_id_uniqu").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_image_text_block.id], + name: "pages_blocks_image_text_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_card_grid_block_cards = pgTable( "pages_blocks_card_grid_block_cards", { @@ -590,10 +2650,7 @@ export const pages_blocks_card_grid_block_cards = pgTable( image: integer("image_id").references(() => media.id, { onDelete: "set null", }), - title: varchar("title").notNull(), - description: varchar("description"), link: varchar("link"), - linkText: varchar("link_text").default("mehr"), }, (columns) => [ index("pages_blocks_card_grid_block_cards_order_idx").on(columns._order), @@ -607,6 +2664,26 @@ export const pages_blocks_card_grid_block_cards = pgTable( ], ); +export const pages_blocks_card_grid_block_cards_locales = pgTable( + "pages_blocks_card_grid_block_cards_locales", + { + title: varchar("title").notNull(), + description: varchar("description"), + linkText: varchar("link_text").default("mehr"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_card_grid_block_cards_locales_locale_parent_id_").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_card_grid_block_cards.id], + name: "pages_blocks_card_grid_block_cards_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_card_grid_block = pgTable( "pages_blocks_card_grid_block", { @@ -614,7 +2691,6 @@ export const pages_blocks_card_grid_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - headline: varchar("headline"), columns: enum_pages_blocks_card_grid_block_columns("columns").default("3"), blockName: varchar("block_name"), }, @@ -630,6 +2706,24 @@ export const pages_blocks_card_grid_block = pgTable( ], ); +export const pages_blocks_card_grid_block_locales = pgTable( + "pages_blocks_card_grid_block_locales", + { + headline: varchar("headline"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_card_grid_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_card_grid_block.id], + name: "pages_blocks_card_grid_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_quote_block = pgTable( "pages_blocks_quote_block", { @@ -637,9 +2731,7 @@ export const pages_blocks_quote_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - quote: varchar("quote").notNull(), author: varchar("author"), - role: varchar("role"), image: integer("image_id").references(() => media.id, { onDelete: "set null", }), @@ -659,13 +2751,31 @@ export const pages_blocks_quote_block = pgTable( ], ); +export const pages_blocks_quote_block_locales = pgTable( + "pages_blocks_quote_block_locales", + { + quote: varchar("quote").notNull(), + role: varchar("role"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_quote_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_quote_block.id], + name: "pages_blocks_quote_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_cta_block_buttons = pgTable( "pages_blocks_cta_block_buttons", { _order: integer("_order").notNull(), _parentID: varchar("_parent_id").notNull(), id: varchar("id").primaryKey(), - text: varchar("text").notNull(), link: varchar("link").notNull(), style: enum_pages_blocks_cta_block_buttons_style("style").default("primary"), }, @@ -680,6 +2790,24 @@ export const pages_blocks_cta_block_buttons = pgTable( ], ); +export const pages_blocks_cta_block_buttons_locales = pgTable( + "pages_blocks_cta_block_buttons_locales", + { + text: varchar("text").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_cta_block_buttons_locales_locale_parent_id_uniq").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_cta_block_buttons.id], + name: "pages_blocks_cta_block_buttons_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_cta_block = pgTable( "pages_blocks_cta_block", { @@ -687,8 +2815,6 @@ export const pages_blocks_cta_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - headline: varchar("headline").notNull(), - description: varchar("description"), backgroundColor: enum_pages_blocks_cta_block_background_color("background_color").default("dark"), blockName: varchar("block_name"), }, @@ -704,6 +2830,25 @@ export const pages_blocks_cta_block = pgTable( ], ); +export const pages_blocks_cta_block_locales = pgTable( + "pages_blocks_cta_block_locales", + { + headline: varchar("headline").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_cta_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_cta_block.id], + name: "pages_blocks_cta_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_contact_form_block = pgTable( "pages_blocks_contact_form_block", { @@ -711,8 +2856,6 @@ export const pages_blocks_contact_form_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - headline: varchar("headline").default("Kontakt"), - description: varchar("description"), recipientEmail: varchar("recipient_email").default("info@porwoll.de"), showPhone: boolean("show_phone").default(true), showAddress: boolean("show_address").default(true), @@ -731,6 +2874,25 @@ export const pages_blocks_contact_form_block = pgTable( ], ); +export const pages_blocks_contact_form_block_locales = pgTable( + "pages_blocks_contact_form_block_locales", + { + headline: varchar("headline").default("Kontakt"), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_contact_form_block_locales_locale_parent_id_uni").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_contact_form_block.id], + name: "pages_blocks_contact_form_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_timeline_block_items = pgTable( "pages_blocks_timeline_block_items", { @@ -738,13 +2900,10 @@ export const pages_blocks_timeline_block_items = pgTable( _parentID: varchar("_parent_id").notNull(), id: varchar("id").primaryKey(), year: varchar("year"), - title: varchar("title").notNull(), - description: varchar("description"), icon: varchar("icon"), image: integer("image_id").references(() => media.id, { onDelete: "set null", }), - link_label: varchar("link_label"), link_href: varchar("link_href"), }, (columns) => [ @@ -759,6 +2918,26 @@ export const pages_blocks_timeline_block_items = pgTable( ], ); +export const pages_blocks_timeline_block_items_locales = pgTable( + "pages_blocks_timeline_block_items_locales", + { + title: varchar("title").notNull(), + description: varchar("description"), + link_label: varchar("link_label"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_timeline_block_items_locales_locale_parent_id_u").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_timeline_block_items.id], + name: "pages_blocks_timeline_block_items_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_timeline_block = pgTable( "pages_blocks_timeline_block", { @@ -766,8 +2945,6 @@ export const pages_blocks_timeline_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - title: varchar("title"), - subtitle: varchar("subtitle"), layout: enum_pages_blocks_timeline_block_layout("layout").default("vertical"), showConnector: boolean("show_connector").default(true), markerStyle: enum_pages_blocks_timeline_block_marker_style("marker_style").default("dot"), @@ -786,6 +2963,25 @@ export const pages_blocks_timeline_block = pgTable( ], ); +export const pages_blocks_timeline_block_locales = pgTable( + "pages_blocks_timeline_block_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_timeline_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_timeline_block.id], + name: "pages_blocks_timeline_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_divider_block = pgTable( "pages_blocks_divider_block", { @@ -817,7 +3013,6 @@ export const pages_blocks_video_block = pgTable( _path: text("_path").notNull(), id: varchar("id").primaryKey(), videoUrl: varchar("video_url").notNull(), - caption: varchar("caption"), aspectRatio: enum_pages_blocks_video_block_aspect_ratio("aspect_ratio").default("16:9"), blockName: varchar("block_name"), }, @@ -833,6 +3028,24 @@ export const pages_blocks_video_block = pgTable( ], ); +export const pages_blocks_video_block_locales = pgTable( + "pages_blocks_video_block_locales", + { + caption: varchar("caption"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_video_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_video_block.id], + name: "pages_blocks_video_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_posts_list_block = pgTable( "pages_blocks_posts_list_block", { @@ -840,8 +3053,6 @@ export const pages_blocks_posts_list_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - title: varchar("title"), - subtitle: varchar("subtitle"), postType: enum_pages_blocks_posts_list_block_post_type("post_type").notNull().default("blog"), layout: enum_pages_blocks_posts_list_block_layout("layout").default("grid"), columns: enum_pages_blocks_posts_list_block_columns("columns").default("3"), @@ -853,7 +3064,6 @@ export const pages_blocks_posts_list_block = pgTable( showCategory: boolean("show_category").default(true), showPagination: boolean("show_pagination").default(false), showReadMore: boolean("show_read_more").default(true), - readMoreLabel: varchar("read_more_label").default("Alle Beiträge anzeigen"), readMoreLink: varchar("read_more_link").default("/blog"), backgroundColor: enum_pages_blocks_posts_list_block_background_color("background_color").default("white"), blockName: varchar("block_name"), @@ -870,6 +3080,26 @@ export const pages_blocks_posts_list_block = pgTable( ], ); +export const pages_blocks_posts_list_block_locales = pgTable( + "pages_blocks_posts_list_block_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + readMoreLabel: varchar("read_more_label").default("Alle Beiträge anzeigen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_posts_list_block_locales_locale_parent_id_uniqu").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_posts_list_block.id], + name: "pages_blocks_posts_list_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_testimonials_block = pgTable( "pages_blocks_testimonials_block", { @@ -877,19 +3107,42 @@ export const pages_blocks_testimonials_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - title: varchar("title").default("Das sagen unsere Kunden"), - subtitle: varchar("subtitle"), layout: enum_pages_blocks_testimonials_block_layout("layout").default("slider"), columns: enum_pages_blocks_testimonials_block_columns("columns").default("3"), displayMode: enum_pages_blocks_testimonials_block_display_mode("display_mode").default("all"), limit: numeric("limit", { mode: "number" }).default(6), - showRating: boolean("show_rating").default(true), - showImage: boolean("show_image").default(true), - showCompany: boolean("show_company").default(true), - showSource: boolean("show_source").default(false), - autoplay: boolean("autoplay").default(true), - autoplaySpeed: numeric("autoplay_speed", { mode: "number" }).default(5000), - backgroundColor: enum_pages_blocks_testimonials_block_background_color("background_color").default("light"), + displayOptions_showRating: boolean("display_options_show_rating").default(true), + displayOptions_showImage: boolean("display_options_show_image").default(true), + displayOptions_showCompany: boolean("display_options_show_company").default(true), + displayOptions_showSource: boolean("display_options_show_source").default(false), + displayOptions_showDate: boolean("display_options_show_date").default(false), + displayOptions_truncateText: boolean("display_options_truncate_text").default(false), + displayOptions_maxLength: numeric("display_options_max_length", { mode: "number" }).default(200), + slider_effect: enum_pages_blocks_testimonials_block_slider_effect("slider_effect").default("slide"), + slider_speed: enum_pages_blocks_testimonials_block_slider_speed("slider_speed").default("500"), + slider_perView: enum_pages_blocks_testimonials_block_slider_per_view("slider_per_view").default("1"), + slider_gap: enum_pages_blocks_testimonials_block_slider_gap("slider_gap").default("24"), + slider_auto: boolean("slider_auto").default(true), + slider_delay: enum_pages_blocks_testimonials_block_slider_delay("slider_delay").default("5000"), + slider_hoverPause: boolean("slider_hover_pause").default(true), + slider_loop: boolean("slider_loop").default(true), + slider_centered: boolean("slider_centered").default(false), + nav_arrows: boolean("nav_arrows").default(true), + nav_arrowStyle: enum_pages_blocks_testimonials_block_nav_arrow_style("nav_arrow_style").default("default"), + nav_arrowPos: enum_pages_blocks_testimonials_block_nav_arrow_pos("nav_arrow_pos").default("sides"), + nav_dots: boolean("nav_dots").default(true), + nav_dotStyle: enum_pages_blocks_testimonials_block_nav_dot_style("nav_dot_style").default("dots"), + nav_dotPos: enum_pages_blocks_testimonials_block_nav_dot_pos("nav_dot_pos").default("bottom"), + nav_swipe: boolean("nav_swipe").default(true), + nav_keys: boolean("nav_keys").default(true), + style_bg: enum_pages_blocks_testimonials_block_style_bg("style_bg").default("light"), + style_card: enum_pages_blocks_testimonials_block_style_card("style_card").default("shadow"), + style_quote: enum_pages_blocks_testimonials_block_style_quote("style_quote").default("icon"), + style_imgPos: enum_pages_blocks_testimonials_block_style_img_pos("style_img_pos").default("top"), + style_imgSize: enum_pages_blocks_testimonials_block_style_img_size("style_img_size").default("md"), + style_align: enum_pages_blocks_testimonials_block_style_align("style_align").default("center"), + style_spacing: enum_pages_blocks_testimonials_block_style_spacing("style_spacing").default("normal"), + a11y_reducedMotion: boolean("a11y_reduced_motion").default(true), blockName: varchar("block_name"), }, (columns) => [ @@ -904,6 +3157,26 @@ export const pages_blocks_testimonials_block = pgTable( ], ); +export const pages_blocks_testimonials_block_locales = pgTable( + "pages_blocks_testimonials_block_locales", + { + title: varchar("title").default("Das sagen unsere Kunden"), + subtitle: varchar("subtitle"), + a11y_label: varchar("a11y_label").default("Kundenstimmen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_testimonials_block_locales_locale_parent_id_uni").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_testimonials_block.id], + name: "pages_blocks_testimonials_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_newsletter_block_available_interests = pgTable( "pages_blocks_newsletter_block_available_interests", { @@ -930,8 +3203,6 @@ export const pages_blocks_newsletter_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - title: varchar("title").default("Newsletter abonnieren"), - subtitle: varchar("subtitle").default("Erhalten Sie regelmäßig Updates und Neuigkeiten direkt in Ihr Postfach."), layout: enum_pages_blocks_newsletter_block_layout("layout").default("inline"), image: integer("image_id").references(() => media.id, { onDelete: "set null", @@ -939,17 +3210,6 @@ export const pages_blocks_newsletter_block = pgTable( imagePosition: enum_pages_blocks_newsletter_block_image_position("image_position").default("left"), collectName: boolean("collect_name").default(false), showInterests: boolean("show_interests").default(false), - buttonText: varchar("button_text").default("Anmelden"), - placeholderEmail: varchar("placeholder_email").default("Ihre E-Mail-Adresse"), - successMessage: varchar("success_message").default( - "Vielen Dank! Bitte bestätigen Sie Ihre E-Mail-Adresse über den Link in der Bestätigungsmail.", - ), - errorMessage: varchar("error_message").default( - "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", - ), - privacyText: varchar("privacy_text").default( - "Mit der Anmeldung akzeptieren Sie unsere Datenschutzerklärung. Sie können sich jederzeit abmelden.", - ), privacyLink: varchar("privacy_link").default("/datenschutz"), source: varchar("source").default("website"), backgroundColor: enum_pages_blocks_newsletter_block_background_color("background_color").default("accent"), @@ -968,14 +3228,42 @@ export const pages_blocks_newsletter_block = pgTable( ], ); +export const pages_blocks_newsletter_block_locales = pgTable( + "pages_blocks_newsletter_block_locales", + { + title: varchar("title").default("Newsletter abonnieren"), + subtitle: varchar("subtitle").default("Erhalten Sie regelmäßig Updates und Neuigkeiten direkt in Ihr Postfach."), + buttonText: varchar("button_text").default("Anmelden"), + placeholderEmail: varchar("placeholder_email").default("Ihre E-Mail-Adresse"), + successMessage: varchar("success_message").default( + "Vielen Dank! Bitte bestätigen Sie Ihre E-Mail-Adresse über den Link in der Bestätigungsmail.", + ), + errorMessage: varchar("error_message").default( + "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut.", + ), + privacyText: varchar("privacy_text").default( + "Mit der Anmeldung akzeptieren Sie unsere Datenschutzerklärung. Sie können sich jederzeit abmelden.", + ), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_newsletter_block_locales_locale_parent_id_uniqu").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_newsletter_block.id], + name: "pages_blocks_newsletter_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_process_steps_block_steps = pgTable( "pages_blocks_process_steps_block_steps", { _order: integer("_order").notNull(), _parentID: varchar("_parent_id").notNull(), id: varchar("id").primaryKey(), - title: varchar("title").notNull(), - description: varchar("description"), icon: varchar("icon"), image: integer("image_id").references(() => media.id, { onDelete: "set null", @@ -993,6 +3281,25 @@ export const pages_blocks_process_steps_block_steps = pgTable( ], ); +export const pages_blocks_process_steps_block_steps_locales = pgTable( + "pages_blocks_process_steps_block_steps_locales", + { + title: varchar("title").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_process_steps_block_steps_locales_locale_parent").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_process_steps_block_steps.id], + name: "pages_blocks_process_steps_block_steps_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_blocks_process_steps_block = pgTable( "pages_blocks_process_steps_block", { @@ -1000,13 +3307,10 @@ export const pages_blocks_process_steps_block = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - title: varchar("title").default("So funktioniert es"), - subtitle: varchar("subtitle"), layout: enum_pages_blocks_process_steps_block_layout("layout").default("horizontal"), showNumbers: boolean("show_numbers").default(true), showIcons: boolean("show_icons").default(true), cta_show: boolean("cta_show").default(false), - cta_label: varchar("cta_label").default("Jetzt starten"), cta_href: varchar("cta_href"), cta_variant: enum_pages_blocks_process_steps_block_cta_variant("cta_variant").default("default"), backgroundColor: enum_pages_blocks_process_steps_block_background_color("background_color").default("white"), @@ -1024,6 +3328,2448 @@ export const pages_blocks_process_steps_block = pgTable( ], ); +export const pages_blocks_process_steps_block_locales = pgTable( + "pages_blocks_process_steps_block_locales", + { + title: varchar("title").default("So funktioniert es"), + subtitle: varchar("subtitle"), + cta_label: varchar("cta_label").default("Jetzt starten"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_process_steps_block_locales_locale_parent_id_un").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_process_steps_block.id], + name: "pages_blocks_process_steps_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_faq_block_inline_f_a_qs = pgTable( + "pages_blocks_faq_block_inline_f_a_qs", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_faq_block_inline_f_a_qs_order_idx").on(columns._order), + index("pages_blocks_faq_block_inline_f_a_qs_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_faq_block.id], + name: "pages_blocks_faq_block_inline_f_a_qs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_faq_block_inline_f_a_qs_locales = pgTable( + "pages_blocks_faq_block_inline_f_a_qs_locales", + { + question: varchar("question"), + answer: jsonb("answer"), + answerPlainText: varchar("answer_plain_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_faq_block_inline_f_a_qs_locales_locale_parent_i").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_faq_block_inline_f_a_qs.id], + name: "pages_blocks_faq_block_inline_f_a_qs_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_faq_block = pgTable( + "pages_blocks_faq_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + sourceMode: enum_pages_blocks_faq_block_source_mode("source_mode").default("collection"), + displayMode: enum_pages_blocks_faq_block_display_mode("display_mode").default("all"), + category: varchar("category"), + limit: numeric("limit", { mode: "number" }).default(10), + layout: enum_pages_blocks_faq_block_layout("layout").default("accordion"), + columns: enum_pages_blocks_faq_block_columns("columns").default("2"), + expandFirst: boolean("expand_first").default(true), + allowMultipleOpen: boolean("allow_multiple_open").default(false), + showCategory: boolean("show_category").default(false), + showIcon: boolean("show_icon").default(false), + groupByCategory: boolean("group_by_category").default(false), + enableSchemaOrg: boolean("enable_schema_org").default(true), + backgroundColor: enum_pages_blocks_faq_block_background_color("background_color").default("white"), + showContactCTA: boolean("show_contact_c_t_a").default(false), + contactCTALink: varchar("contact_c_t_a_link").default("/kontakt"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_faq_block_order_idx").on(columns._order), + index("pages_blocks_faq_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_faq_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_faq_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_faq_block_locales = pgTable( + "pages_blocks_faq_block_locales", + { + title: varchar("title").default("Häufig gestellte Fragen"), + subtitle: varchar("subtitle"), + contactCTAText: varchar("contact_c_t_a_text").default("Ihre Frage war nicht dabei?"), + contactCTAButtonText: varchar("contact_c_t_a_button_text").default("Kontaktieren Sie uns"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_faq_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_faq_block.id], + name: "pages_blocks_faq_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_team_block = pgTable( + "pages_blocks_team_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + displayMode: enum_pages_blocks_team_block_display_mode("display_mode").default("all"), + department: varchar("department"), + limit: numeric("limit", { mode: "number" }).default(12), + layout: enum_pages_blocks_team_block_layout("layout").default("grid"), + columns: enum_pages_blocks_team_block_columns("columns").default("3"), + showRole: boolean("show_role").default(true), + showDepartment: boolean("show_department").default(false), + showBio: boolean("show_bio").default(true), + showContact: boolean("show_contact").default(false), + showSocialLinks: boolean("show_social_links").default(true), + showQualifications: boolean("show_qualifications").default(false), + showSpecializations: boolean("show_specializations").default(false), + showLanguages: boolean("show_languages").default(false), + groupByDepartment: boolean("group_by_department").default(false), + autoplay: boolean("autoplay").default(true), + autoplaySpeed: numeric("autoplay_speed", { mode: "number" }).default(5000), + enableDetailView: boolean("enable_detail_view").default(false), + imageStyle: enum_pages_blocks_team_block_image_style("image_style").default("rounded"), + backgroundColor: enum_pages_blocks_team_block_background_color("background_color").default("white"), + showCTA: boolean("show_c_t_a").default(false), + ctaLink: varchar("cta_link").default("/karriere"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_team_block_order_idx").on(columns._order), + index("pages_blocks_team_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_team_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_team_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_team_block_locales = pgTable( + "pages_blocks_team_block_locales", + { + title: varchar("title").default("Unser Team"), + subtitle: varchar("subtitle"), + introduction: jsonb("introduction"), + ctaText: varchar("cta_text").default("Jetzt bewerben"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_team_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_team_block.id], + name: "pages_blocks_team_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_services_block = pgTable( + "pages_blocks_services_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + displayMode: enum_pages_blocks_services_block_display_mode("display_mode").default("all"), + category: integer("category_id").references(() => service_categories.id, { + onDelete: "set null", + }), + limit: numeric("limit", { mode: "number" }).default(12), + layout: enum_pages_blocks_services_block_layout("layout").default("grid"), + columns: enum_pages_blocks_services_block_columns("columns").default("3"), + featuredCount: numeric("featured_count", { mode: "number" }).default(1), + tabsStyle: enum_pages_blocks_services_block_tabs_style("tabs_style").default("horizontal"), + showAllTab: boolean("show_all_tab").default(true), + expandFirst: boolean("expand_first").default(true), + allowMultipleOpen: boolean("allow_multiple_open").default(false), + autoplay: boolean("autoplay").default(true), + autoplaySpeed: numeric("autoplay_speed", { mode: "number" }).default(5000), + slidesPerView: enum_pages_blocks_services_block_slides_per_view("slides_per_view").default("3"), + showImage: boolean("show_image").default(true), + showIcon: boolean("show_icon").default(true), + showDescription: boolean("show_description").default(true), + showCategory: boolean("show_category").default(false), + showPricing: boolean("show_pricing").default(true), + showFeatures: boolean("show_features").default(false), + featuresLimit: numeric("features_limit", { mode: "number" }).default(3), + showCTA: boolean("show_c_t_a").default(true), + showNewBadge: boolean("show_new_badge").default(true), + groupByCategory: boolean("group_by_category").default(false), + linkToDetail: boolean("link_to_detail").default(true), + servicesBasePath: varchar("services_base_path").default("/leistungen"), + cardStyle: enum_pages_blocks_services_block_card_style("card_style").default("elevated"), + backgroundColor: enum_pages_blocks_services_block_background_color("background_color").default("white"), + showSectionCTA: boolean("show_section_c_t_a").default(false), + sectionCTALink: varchar("section_c_t_a_link").default("/leistungen"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_services_block_order_idx").on(columns._order), + index("pages_blocks_services_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_services_block_path_idx").on(columns._path), + index("pages_blocks_services_block_category_idx").on(columns.category), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_services_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_services_block_locales = pgTable( + "pages_blocks_services_block_locales", + { + title: varchar("title").default("Unsere Leistungen"), + subtitle: varchar("subtitle"), + introduction: jsonb("introduction"), + detailLinkText: varchar("detail_link_text").default("Mehr erfahren"), + sectionCTAText: varchar("section_c_t_a_text").default("Alle Leistungen ansehen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_services_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_services_block.id], + name: "pages_blocks_services_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_author_bio_block = pgTable( + "pages_blocks_author_bio_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_author_bio_block_source("source").default("post"), + showCoAuthors: boolean("show_co_authors").default(true), + layout: enum_pages_blocks_author_bio_block_layout("layout").default("card"), + show_avatar: boolean("show_avatar").default(true), + show_name: boolean("show_name").default(true), + show_title: boolean("show_title").default(true), + show_bio: enum_pages_blocks_author_bio_block_show_bio("show_bio").default("short"), + show_social: boolean("show_social").default(true), + show_email: boolean("show_email").default(false), + show_website: boolean("show_website").default(false), + show_postCount: boolean("show_post_count").default(false), + style_avatarSize: enum_pages_blocks_author_bio_block_style_avatar_size("style_avatar_size").default("md"), + style_avatarShape: enum_pages_blocks_author_bio_block_style_avatar_shape("style_avatar_shape").default("circle"), + style_bg: enum_pages_blocks_author_bio_block_style_bg("style_bg").default("light"), + style_border: boolean("style_border").default(false), + style_shadow: boolean("style_shadow").default(false), + style_divider: boolean("style_divider").default(true), + linkToProfile: boolean("link_to_profile").default(true), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_author_bio_block_order_idx").on(columns._order), + index("pages_blocks_author_bio_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_author_bio_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_author_bio_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_author_bio_block_locales = pgTable( + "pages_blocks_author_bio_block_locales", + { + label: varchar("label"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_author_bio_block_locales_locale_parent_id_uniqu").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_author_bio_block.id], + name: "pages_blocks_author_bio_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_related_posts_block = pgTable( + "pages_blocks_related_posts_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_related_posts_block_source("source").default("auto"), + category: integer("category_id").references(() => categories.id, { + onDelete: "set null", + }), + tag: integer("tag_id").references(() => tags.id, { + onDelete: "set null", + }), + limit: numeric("limit", { mode: "number" }).default(3), + excludeCurrent: boolean("exclude_current").default(true), + layout: enum_pages_blocks_related_posts_block_layout("layout").default("grid"), + cols: enum_pages_blocks_related_posts_block_cols("cols").default("3"), + show_image: boolean("show_image").default(true), + show_date: boolean("show_date").default(true), + show_author: boolean("show_author").default(false), + show_category: boolean("show_category").default(true), + show_excerpt: boolean("show_excerpt").default(true), + show_readingTime: boolean("show_reading_time").default(false), + show_tags: boolean("show_tags").default(false), + style_imgRatio: enum_pages_blocks_related_posts_block_style_img_ratio("style_img_ratio").default("16-9"), + style_rounded: enum_pages_blocks_related_posts_block_style_rounded("style_rounded").default("md"), + style_shadow: boolean("style_shadow").default(false), + style_hover: enum_pages_blocks_related_posts_block_style_hover("style_hover").default("lift"), + style_bg: enum_pages_blocks_related_posts_block_style_bg("style_bg").default("none"), + style_gap: enum_pages_blocks_related_posts_block_style_gap("style_gap").default("24"), + showAllLink: boolean("show_all_link").default(false), + allLinkUrl: varchar("all_link_url"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_related_posts_block_order_idx").on(columns._order), + index("pages_blocks_related_posts_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_related_posts_block_path_idx").on(columns._path), + index("pages_blocks_related_posts_block_category_idx").on(columns.category), + index("pages_blocks_related_posts_block_tag_idx").on(columns.tag), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_related_posts_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_related_posts_block_locales = pgTable( + "pages_blocks_related_posts_block_locales", + { + title: varchar("title").default("Das könnte Sie auch interessieren"), + allLinkText: varchar("all_link_text").default("Alle Artikel anzeigen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_related_posts_block_locales_locale_parent_id_un").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_related_posts_block.id], + name: "pages_blocks_related_posts_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_share_buttons_block = pgTable( + "pages_blocks_share_buttons_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + platforms_facebook: boolean("platforms_facebook").default(true), + platforms_twitter: boolean("platforms_twitter").default(true), + platforms_linkedin: boolean("platforms_linkedin").default(true), + platforms_xing: boolean("platforms_xing").default(false), + platforms_whatsapp: boolean("platforms_whatsapp").default(true), + platforms_telegram: boolean("platforms_telegram").default(false), + platforms_email: boolean("platforms_email").default(true), + platforms_copy: boolean("platforms_copy").default(true), + platforms_print: boolean("platforms_print").default(false), + platforms_pinterest: boolean("platforms_pinterest").default(false), + platforms_reddit: boolean("platforms_reddit").default(false), + layout: enum_pages_blocks_share_buttons_block_layout("layout").default("horizontal"), + align: enum_pages_blocks_share_buttons_block_align("align").default("left"), + floatSide: enum_pages_blocks_share_buttons_block_float_side("float_side").default("left"), + style_variant: enum_pages_blocks_share_buttons_block_style_variant("style_variant").default("filled"), + style_size: enum_pages_blocks_share_buttons_block_style_size("style_size").default("md"), + style_shape: enum_pages_blocks_share_buttons_block_style_shape("style_shape").default("rounded"), + style_colorScheme: enum_pages_blocks_share_buttons_block_style_color_scheme("style_color_scheme").default("brand"), + style_gap: enum_pages_blocks_share_buttons_block_style_gap("style_gap").default("8"), + style_showLabel: boolean("style_show_label").default(false), + style_showCount: boolean("style_show_count").default(false), + behavior_openInPopup: boolean("behavior_open_in_popup").default(true), + behavior_useNativeShare: boolean("behavior_use_native_share").default(true), + content_hashtags: varchar("content_hashtags"), + content_via: varchar("content_via"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_share_buttons_block_order_idx").on(columns._order), + index("pages_blocks_share_buttons_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_share_buttons_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_share_buttons_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_share_buttons_block_locales = pgTable( + "pages_blocks_share_buttons_block_locales", + { + label: varchar("label"), + behavior_copyFeedback: varchar("behavior_copy_feedback").default("Link kopiert!"), + content_customTitle: varchar("content_custom_title"), + content_customDescription: varchar("content_custom_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_share_buttons_block_locales_locale_parent_id_un").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_share_buttons_block.id], + name: "pages_blocks_share_buttons_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_toc_block = pgTable( + "pages_blocks_toc_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + levels_h2: boolean("levels_h2").default(true), + levels_h3: boolean("levels_h3").default(true), + levels_h4: boolean("levels_h4").default(false), + levels_h5: boolean("levels_h5").default(false), + levels_h6: boolean("levels_h6").default(false), + layout: enum_pages_blocks_toc_block_layout("layout").default("list"), + sidebarPos: enum_pages_blocks_toc_block_sidebar_pos("sidebar_pos").default("right"), + behavior_smoothScroll: boolean("behavior_smooth_scroll").default(true), + behavior_highlightActive: boolean("behavior_highlight_active").default(true), + behavior_scrollOffset: numeric("behavior_scroll_offset", { mode: "number" }).default(80), + behavior_collapsible: boolean("behavior_collapsible").default(false), + behavior_startCollapsed: boolean("behavior_start_collapsed").default(false), + behavior_showProgress: boolean("behavior_show_progress").default(false), + behavior_progressStyle: + enum_pages_blocks_toc_block_behavior_progress_style("behavior_progress_style").default("bar"), + style_bg: enum_pages_blocks_toc_block_style_bg("style_bg").default("light"), + style_border: boolean("style_border").default(true), + style_borderSide: enum_pages_blocks_toc_block_style_border_side("style_border_side").default("left"), + style_rounded: enum_pages_blocks_toc_block_style_rounded("style_rounded").default("md"), + style_shadow: boolean("style_shadow").default(false), + style_indent: boolean("style_indent").default(true), + style_showIcon: boolean("style_show_icon").default(false), + style_fontSize: enum_pages_blocks_toc_block_style_font_size("style_font_size").default("sm"), + style_lineHeight: enum_pages_blocks_toc_block_style_line_height("style_line_height").default("relaxed"), + minItems: numeric("min_items", { mode: "number" }).default(3), + maxItems: numeric("max_items", { mode: "number" }), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_toc_block_order_idx").on(columns._order), + index("pages_blocks_toc_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_toc_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_toc_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_toc_block_locales = pgTable( + "pages_blocks_toc_block_locales", + { + title: varchar("title").default("Inhaltsverzeichnis"), + a11yLabel: varchar("a11y_label").default("Inhaltsverzeichnis"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_toc_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_toc_block.id], + name: "pages_blocks_toc_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_team_filter_block = pgTable( + "pages_blocks_team_filter_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + filters_showSearch: boolean("filters_show_search").default(true), + filters_showDepartment: boolean("filters_show_department").default(true), + filters_showSpecialization: boolean("filters_show_specialization").default(false), + filters_showLanguage: boolean("filters_show_language").default(false), + filters_showHierarchy: boolean("filters_show_hierarchy").default(false), + filters_filterLayout: + enum_pages_blocks_team_filter_block_filters_filter_layout("filters_filter_layout").default("horizontal"), + filters_filterStyle: + enum_pages_blocks_team_filter_block_filters_filter_style("filters_filter_style").default("buttons"), + filters_showResultCount: boolean("filters_show_result_count").default(true), + filters_showResetButton: boolean("filters_show_reset_button").default(true), + display_layout: enum_pages_blocks_team_filter_block_display_layout("display_layout").default("grid"), + display_columns: enum_pages_blocks_team_filter_block_display_columns("display_columns").default("3"), + display_initialLimit: numeric("display_initial_limit", { mode: "number" }).default(12), + display_loadMore: enum_pages_blocks_team_filter_block_display_load_more("display_load_more").default("button"), + card_showImage: boolean("card_show_image").default(true), + card_imageStyle: enum_pages_blocks_team_filter_block_card_image_style("card_image_style").default("circle"), + card_showRole: boolean("card_show_role").default(true), + card_showDepartment: boolean("card_show_department").default(true), + card_showBio: boolean("card_show_bio").default(false), + card_showContact: boolean("card_show_contact").default(false), + card_showSocial: boolean("card_show_social").default(true), + card_showSpecializations: boolean("card_show_specializations").default(false), + card_showLanguages: boolean("card_show_languages").default(false), + card_showVCard: boolean("card_show_v_card").default(false), + card_linkToProfile: boolean("card_link_to_profile").default(true), + card_profileBasePath: varchar("card_profile_base_path").default("/team"), + card_enableModal: boolean("card_enable_modal").default(false), + style_bg: enum_pages_blocks_team_filter_block_style_bg("style_bg").default("none"), + style_cardBg: enum_pages_blocks_team_filter_block_style_card_bg("style_card_bg").default("white"), + style_cardShadow: boolean("style_card_shadow").default(true), + style_cardHover: enum_pages_blocks_team_filter_block_style_card_hover("style_card_hover").default("lift"), + style_gap: enum_pages_blocks_team_filter_block_style_gap("style_gap").default("24"), + style_animation: enum_pages_blocks_team_filter_block_style_animation("style_animation").default("fade"), + emptyState_showResetButton: boolean("empty_state_show_reset_button").default(true), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_team_filter_block_order_idx").on(columns._order), + index("pages_blocks_team_filter_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_team_filter_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_team_filter_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_team_filter_block_locales = pgTable( + "pages_blocks_team_filter_block_locales", + { + title: varchar("title").default("Unser Team"), + subtitle: varchar("subtitle"), + filters_searchPlaceholder: varchar("filters_search_placeholder").default("Team durchsuchen..."), + display_loadMoreText: varchar("display_load_more_text").default("Mehr anzeigen"), + emptyState_title: varchar("empty_state_title").default("Keine Mitarbeiter gefunden"), + emptyState_message: varchar("empty_state_message").default("Versuchen Sie andere Filterkriterien."), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_team_filter_block_locales_locale_parent_id_uniq").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_team_filter_block.id], + name: "pages_blocks_team_filter_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_org_chart_block = pgTable( + "pages_blocks_org_chart_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_org_chart_block_source("source").default("auto"), + rootMember: integer("root_member_id").references(() => team.id, { + onDelete: "set null", + }), + department: varchar("department"), + maxDepth: numeric("max_depth", { mode: "number" }).default(5), + layout: enum_pages_blocks_org_chart_block_layout("layout").default("tree"), + direction: enum_pages_blocks_org_chart_block_direction("direction").default("top"), + node_style: enum_pages_blocks_org_chart_block_node_style("node_style").default("card"), + node_showImage: boolean("node_show_image").default(true), + node_imageSize: enum_pages_blocks_org_chart_block_node_image_size("node_image_size").default("md"), + node_imageShape: enum_pages_blocks_org_chart_block_node_image_shape("node_image_shape").default("circle"), + node_showName: boolean("node_show_name").default(true), + node_showRole: boolean("node_show_role").default(true), + node_showDepartment: boolean("node_show_department").default(false), + node_showContact: boolean("node_show_contact").default(false), + node_clickAction: enum_pages_blocks_org_chart_block_node_click_action("node_click_action").default("modal"), + node_profileBasePath: varchar("node_profile_base_path").default("/team"), + connectors_style: enum_pages_blocks_org_chart_block_connectors_style("connectors_style").default("straight"), + connectors_color: enum_pages_blocks_org_chart_block_connectors_color("connectors_color").default("gray"), + connectors_thickness: enum_pages_blocks_org_chart_block_connectors_thickness("connectors_thickness").default("2"), + connectors_animated: boolean("connectors_animated").default(false), + levels_colorByLevel: boolean("levels_color_by_level").default(true), + levels_sizeByLevel: boolean("levels_size_by_level").default(true), + levels_collapsible: boolean("levels_collapsible").default(true), + levels_initiallyExpanded: numeric("levels_initially_expanded", { mode: "number" }).default(2), + interaction_zoomable: boolean("interaction_zoomable").default(true), + interaction_pannable: boolean("interaction_pannable").default(true), + interaction_minimap: boolean("interaction_minimap").default(false), + interaction_search: boolean("interaction_search").default(false), + interaction_highlight: boolean("interaction_highlight").default(true), + interaction_fullscreen: boolean("interaction_fullscreen").default(true), + interaction_export: boolean("interaction_export").default(false), + style_bg: enum_pages_blocks_org_chart_block_style_bg("style_bg").default("light"), + style_nodeBg: enum_pages_blocks_org_chart_block_style_node_bg("style_node_bg").default("white"), + style_nodeShadow: boolean("style_node_shadow").default(true), + style_nodeBorder: boolean("style_node_border").default(false), + style_spacing: enum_pages_blocks_org_chart_block_style_spacing("style_spacing").default("md"), + style_minHeight: enum_pages_blocks_org_chart_block_style_min_height("style_min_height").default("400"), + showLegend: boolean("show_legend").default(false), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_org_chart_block_order_idx").on(columns._order), + index("pages_blocks_org_chart_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_org_chart_block_path_idx").on(columns._path), + index("pages_blocks_org_chart_block_root_member_idx").on(columns.rootMember), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_org_chart_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_org_chart_block_locales = pgTable( + "pages_blocks_org_chart_block_locales", + { + title: varchar("title").default("Unsere Struktur"), + subtitle: varchar("subtitle"), + a11yLabel: varchar("a11y_label").default("Organigramm der Unternehmensstruktur"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_org_chart_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_org_chart_block.id], + name: "pages_blocks_org_chart_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_locations_block = pgTable( + "pages_blocks_locations_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_locations_block_source("source").default("all"), + locationType: enum_pages_blocks_locations_block_location_type("location_type"), + layout: enum_pages_blocks_locations_block_layout("layout").default("map-list"), + mapPosition: enum_pages_blocks_locations_block_map_position("map_position").default("left"), + columns: enum_pages_blocks_locations_block_columns("columns").default("2"), + map_provider: enum_pages_blocks_locations_block_map_provider("map_provider").default("osm"), + map_style: enum_pages_blocks_locations_block_map_style("map_style").default("default"), + map_height: enum_pages_blocks_locations_block_map_height("map_height").default("400"), + map_defaultZoom: numeric("map_default_zoom", { mode: "number" }).default(12), + map_fitBounds: boolean("map_fit_bounds").default(true), + map_markerStyle: enum_pages_blocks_locations_block_map_marker_style("map_marker_style").default("pin"), + map_markerColor: varchar("map_marker_color").default("#e11d48"), + map_clustering: boolean("map_clustering").default(true), + map_controls_zoom: boolean("map_controls_zoom").default(true), + map_controls_fullscreen: boolean("map_controls_fullscreen").default(true), + map_controls_scrollZoom: boolean("map_controls_scroll_zoom").default(false), + map_controls_dragging: boolean("map_controls_dragging").default(true), + show_image: boolean("show_image").default(true), + show_type: boolean("show_type").default(false), + show_address: boolean("show_address").default(true), + show_phone: boolean("show_phone").default(true), + show_email: boolean("show_email").default(true), + show_hours: boolean("show_hours").default(true), + show_directions: boolean("show_directions").default(false), + show_services: boolean("show_services").default(false), + show_team: boolean("show_team").default(false), + actions_showDirectionsLink: boolean("actions_show_directions_link").default(true), + actions_showCallButton: boolean("actions_show_call_button").default(true), + actions_showEmailButton: boolean("actions_show_email_button").default(false), + actions_showDetailLink: boolean("actions_show_detail_link").default(false), + actions_detailBasePath: varchar("actions_detail_base_path").default("/standorte"), + style_bg: enum_pages_blocks_locations_block_style_bg("style_bg").default("none"), + style_cardStyle: enum_pages_blocks_locations_block_style_card_style("style_card_style").default("bordered"), + style_gap: enum_pages_blocks_locations_block_style_gap("style_gap").default("24"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_locations_block_order_idx").on(columns._order), + index("pages_blocks_locations_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_locations_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_locations_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_locations_block_locales = pgTable( + "pages_blocks_locations_block_locales", + { + title: varchar("title").default("Unsere Standorte"), + subtitle: varchar("subtitle"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_locations_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_locations_block.id], + name: "pages_blocks_locations_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_logo_grid_block_partner_type = pgTable( + "pages_blocks_logo_grid_block_partner_type", + { + order: integer("order").notNull(), + parent: varchar("parent_id").notNull(), + value: enum_pages_blocks_logo_grid_block_partner_type("value"), + id: serial("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_logo_grid_block_partner_type_order_idx").on(columns.order), + index("pages_blocks_logo_grid_block_partner_type_parent_idx").on(columns.parent), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [pages_blocks_logo_grid_block.id], + name: "pages_blocks_logo_grid_block_partner_type_parent_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_logo_grid_block_logos = pgTable( + "pages_blocks_logo_grid_block_logos", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + logo: integer("logo_id").references(() => media.id, { + onDelete: "set null", + }), + name: varchar("name"), + link: varchar("link"), + }, + (columns) => [ + index("pages_blocks_logo_grid_block_logos_order_idx").on(columns._order), + index("pages_blocks_logo_grid_block_logos_parent_id_idx").on(columns._parentID), + index("pages_blocks_logo_grid_block_logos_logo_idx").on(columns.logo), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_logo_grid_block.id], + name: "pages_blocks_logo_grid_block_logos_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_logo_grid_block = pgTable( + "pages_blocks_logo_grid_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_logo_grid_block_source("source").default("collection"), + featuredOnly: boolean("featured_only").default(false), + limit: numeric("limit", { mode: "number" }).default(12), + layout: enum_pages_blocks_logo_grid_block_layout("layout").default("grid"), + columns: enum_pages_blocks_logo_grid_block_columns("columns").default("4"), + slider_perView: enum_pages_blocks_logo_grid_block_slider_per_view("slider_per_view").default("4"), + slider_autoplay: boolean("slider_autoplay").default(true), + slider_speed: enum_pages_blocks_logo_grid_block_slider_speed("slider_speed").default("3000"), + slider_pauseOnHover: boolean("slider_pause_on_hover").default(true), + slider_showArrows: boolean("slider_show_arrows").default(false), + slider_showDots: boolean("slider_show_dots").default(false), + logoStyle_size: enum_pages_blocks_logo_grid_block_logo_style_size("logo_style_size").default("md"), + logoStyle_maxHeight: enum_pages_blocks_logo_grid_block_logo_style_max_height("logo_style_max_height").default("60"), + logoStyle_grayscale: boolean("logo_style_grayscale").default(true), + logoStyle_colorOnHover: boolean("logo_style_color_on_hover").default(true), + logoStyle_opacity: enum_pages_blocks_logo_grid_block_logo_style_opacity("logo_style_opacity").default("70"), + logoStyle_hoverEffect: + enum_pages_blocks_logo_grid_block_logo_style_hover_effect("logo_style_hover_effect").default("scale"), + behavior_linkToWebsite: boolean("behavior_link_to_website").default(false), + behavior_openInNewTab: boolean("behavior_open_in_new_tab").default(true), + behavior_showTooltip: boolean("behavior_show_tooltip").default(true), + behavior_showName: boolean("behavior_show_name").default(false), + style_bg: enum_pages_blocks_logo_grid_block_style_bg("style_bg").default("none"), + style_logoBg: enum_pages_blocks_logo_grid_block_style_logo_bg("style_logo_bg").default("none"), + style_logoPadding: boolean("style_logo_padding").default(true), + style_gap: enum_pages_blocks_logo_grid_block_style_gap("style_gap").default("32"), + style_alignment: enum_pages_blocks_logo_grid_block_style_alignment("style_alignment").default("center"), + style_divider: boolean("style_divider").default(false), + showCTA: boolean("show_c_t_a").default(false), + ctaLink: varchar("cta_link").default("/partner"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_logo_grid_block_order_idx").on(columns._order), + index("pages_blocks_logo_grid_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_logo_grid_block_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_logo_grid_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_logo_grid_block_locales = pgTable( + "pages_blocks_logo_grid_block_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + ctaText: varchar("cta_text").default("Alle Partner ansehen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_logo_grid_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_logo_grid_block.id], + name: "pages_blocks_logo_grid_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_stats_block_stats = pgTable( + "pages_blocks_stats_block_stats", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + value: varchar("value").notNull(), + numericValue: numeric("numeric_value", { mode: "number" }), + prefix: varchar("prefix"), + suffix: varchar("suffix"), + icon: enum_pages_blocks_stats_block_stats_icon("icon"), + color: enum_pages_blocks_stats_block_stats_color("color"), + }, + (columns) => [ + index("pages_blocks_stats_block_stats_order_idx").on(columns._order), + index("pages_blocks_stats_block_stats_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_stats_block.id], + name: "pages_blocks_stats_block_stats_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_stats_block_stats_locales = pgTable( + "pages_blocks_stats_block_stats_locales", + { + label: varchar("label").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_stats_block_stats_locales_locale_parent_id_uniq").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_stats_block_stats.id], + name: "pages_blocks_stats_block_stats_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_stats_block = pgTable( + "pages_blocks_stats_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + layout: enum_pages_blocks_stats_block_layout("layout").default("row"), + columns: enum_pages_blocks_stats_block_columns("columns").default("4"), + alignment: enum_pages_blocks_stats_block_alignment("alignment").default("center"), + animation_countUp: boolean("animation_count_up").default(true), + animation_duration: enum_pages_blocks_stats_block_animation_duration("animation_duration").default("2000"), + animation_trigger: enum_pages_blocks_stats_block_animation_trigger("animation_trigger").default("viewport"), + animation_stagger: boolean("animation_stagger").default(true), + style_bg: enum_pages_blocks_stats_block_style_bg("style_bg").default("none"), + style_bgImage: integer("style_bg_image_id").references(() => media.id, { + onDelete: "set null", + }), + style_bgOverlay: enum_pages_blocks_stats_block_style_bg_overlay("style_bg_overlay").default("dark"), + style_textColor: enum_pages_blocks_stats_block_style_text_color("style_text_color").default("auto"), + style_valueSize: enum_pages_blocks_stats_block_style_value_size("style_value_size").default("xl"), + style_valueWeight: enum_pages_blocks_stats_block_style_value_weight("style_value_weight").default("bold"), + style_showIcon: boolean("style_show_icon").default(true), + style_iconPosition: enum_pages_blocks_stats_block_style_icon_position("style_icon_position").default("top"), + style_dividers: boolean("style_dividers").default(false), + style_cardBorder: boolean("style_card_border").default(false), + style_cardShadow: boolean("style_card_shadow").default(true), + style_gap: enum_pages_blocks_stats_block_style_gap("style_gap").default("32"), + style_padding: enum_pages_blocks_stats_block_style_padding("style_padding").default("md"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_stats_block_order_idx").on(columns._order), + index("pages_blocks_stats_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_stats_block_path_idx").on(columns._path), + index("pages_blocks_stats_block_style_style_bg_image_idx").on(columns.style_bgImage), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_stats_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_stats_block_locales = pgTable( + "pages_blocks_stats_block_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_stats_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_stats_block.id], + name: "pages_blocks_stats_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_jobs_block = pgTable( + "pages_blocks_jobs_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_jobs_block_source("source").default("all"), + category: enum_pages_blocks_jobs_block_category("category"), + department: varchar("department"), + locationFilter: integer("location_filter_id").references(() => locations.id, { + onDelete: "set null", + }), + limit: numeric("limit", { mode: "number" }).default(10), + filters_showSearch: boolean("filters_show_search").default(true), + filters_showCategoryFilter: boolean("filters_show_category_filter").default(true), + filters_showTypeFilter: boolean("filters_show_type_filter").default(true), + filters_showLocationFilter: boolean("filters_show_location_filter").default(true), + filters_showWorkModelFilter: boolean("filters_show_work_model_filter").default(false), + filters_filterLayout: + enum_pages_blocks_jobs_block_filters_filter_layout("filters_filter_layout").default("horizontal"), + layout: enum_pages_blocks_jobs_block_layout("layout").default("list"), + columns: enum_pages_blocks_jobs_block_columns("columns").default("1"), + show_image: boolean("show_image").default(false), + show_department: boolean("show_department").default(true), + show_type: boolean("show_type").default(true), + show_location: boolean("show_location").default(true), + show_workModel: boolean("show_work_model").default(true), + show_salary: boolean("show_salary").default(false), + show_summary: boolean("show_summary").default(true), + show_deadline: boolean("show_deadline").default(false), + show_publishDate: boolean("show_publish_date").default(true), + show_badges: boolean("show_badges").default(true), + badges_newDays: numeric("badges_new_days", { mode: "number" }).default(7), + badges_showUrgent: boolean("badges_show_urgent").default(true), + badges_showFeatured: boolean("badges_show_featured").default(true), + pagination_type: enum_pages_blocks_jobs_block_pagination_type("pagination_type").default("button"), + pagination_perPage: numeric("pagination_per_page", { mode: "number" }).default(10), + style_bg: enum_pages_blocks_jobs_block_style_bg("style_bg").default("none"), + style_cardStyle: enum_pages_blocks_jobs_block_style_card_style("style_card_style").default("bordered"), + style_hoverEffect: enum_pages_blocks_jobs_block_style_hover_effect("style_hover_effect").default("lift"), + style_gap: enum_pages_blocks_jobs_block_style_gap("style_gap").default("16"), + emptyState_showInitiativeLink: boolean("empty_state_show_initiative_link").default(true), + emptyState_initiativeUrl: varchar("empty_state_initiative_url").default("/karriere/initiativbewerbung"), + showAllJobsLink: boolean("show_all_jobs_link").default(false), + allJobsUrl: varchar("all_jobs_url").default("/karriere"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_jobs_block_order_idx").on(columns._order), + index("pages_blocks_jobs_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_jobs_block_path_idx").on(columns._path), + index("pages_blocks_jobs_block_location_filter_idx").on(columns.locationFilter), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_jobs_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_jobs_block_locales = pgTable( + "pages_blocks_jobs_block_locales", + { + title: varchar("title").default("Offene Stellen"), + subtitle: varchar("subtitle"), + introduction: jsonb("introduction"), + emptyState_title: varchar("empty_state_title").default("Aktuell keine offenen Stellen"), + emptyState_message: varchar("empty_state_message").default( + "Schauen Sie später wieder vorbei oder senden Sie uns eine Initiativbewerbung.", + ), + emptyState_initiativeText: varchar("empty_state_initiative_text").default("Initiativbewerbung senden"), + allJobsText: varchar("all_jobs_text").default("Alle offenen Stellen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_jobs_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_jobs_block.id], + name: "pages_blocks_jobs_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_downloads_block = pgTable( + "pages_blocks_downloads_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_downloads_block_source("source").default("all"), + category: enum_pages_blocks_downloads_block_category("category"), + filterTags: varchar("filter_tags"), + relatedService: integer("related_service_id").references(() => services.id, { + onDelete: "set null", + }), + relatedProduct: integer("related_product_id").references(() => products.id, { + onDelete: "set null", + }), + limit: numeric("limit", { mode: "number" }).default(20), + filters_showSearch: boolean("filters_show_search").default(true), + filters_showCategoryFilter: boolean("filters_show_category_filter").default(true), + filters_showFileTypeFilter: boolean("filters_show_file_type_filter").default(false), + filters_filterLayout: + enum_pages_blocks_downloads_block_filters_filter_layout("filters_filter_layout").default("horizontal"), + layout: enum_pages_blocks_downloads_block_layout("layout").default("list"), + columns: enum_pages_blocks_downloads_block_columns("columns").default("1"), + show_thumbnail: boolean("show_thumbnail").default(true), + show_description: boolean("show_description").default(true), + show_fileSize: boolean("show_file_size").default(true), + show_fileType: boolean("show_file_type").default(true), + show_category: boolean("show_category").default(true), + show_downloadCount: boolean("show_download_count").default(false), + show_version: boolean("show_version").default(false), + show_lastUpdated: boolean("show_last_updated").default(false), + downloadBehavior_directDownload: boolean("download_behavior_direct_download").default(true), + downloadBehavior_trackDownloads: boolean("download_behavior_track_downloads").default(true), + downloadBehavior_openInNewTab: boolean("download_behavior_open_in_new_tab").default(false), + fileIcons_showFileTypeIcon: boolean("file_icons_show_file_type_icon").default(true), + fileIcons_iconStyle: + enum_pages_blocks_downloads_block_file_icons_icon_style("file_icons_icon_style").default("colored"), + sortBy: enum_pages_blocks_downloads_block_sort_by("sort_by").default("order"), + groupBy: enum_pages_blocks_downloads_block_group_by("group_by").default("none"), + pagination_type: enum_pages_blocks_downloads_block_pagination_type("pagination_type").default("none"), + pagination_perPage: numeric("pagination_per_page", { mode: "number" }).default(10), + style_bg: enum_pages_blocks_downloads_block_style_bg("style_bg").default("none"), + style_cardStyle: enum_pages_blocks_downloads_block_style_card_style("style_card_style").default("bordered"), + style_hoverEffect: enum_pages_blocks_downloads_block_style_hover_effect("style_hover_effect").default("highlight"), + style_gap: enum_pages_blocks_downloads_block_style_gap("style_gap").default("16"), + showAllDownloadsLink: boolean("show_all_downloads_link").default(false), + allDownloadsUrl: varchar("all_downloads_url").default("/downloads"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_downloads_block_order_idx").on(columns._order), + index("pages_blocks_downloads_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_downloads_block_path_idx").on(columns._path), + index("pages_blocks_downloads_block_related_service_idx").on(columns.relatedService), + index("pages_blocks_downloads_block_related_product_idx").on(columns.relatedProduct), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_downloads_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_downloads_block_locales = pgTable( + "pages_blocks_downloads_block_locales", + { + title: varchar("title").default("Downloads"), + subtitle: varchar("subtitle"), + introduction: jsonb("introduction"), + emptyState_title: varchar("empty_state_title").default("Keine Downloads verfügbar"), + emptyState_message: varchar("empty_state_message").default( + "Aktuell sind keine Downloads in dieser Kategorie verfügbar.", + ), + allDownloadsText: varchar("all_downloads_text").default("Alle Downloads ansehen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_downloads_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_downloads_block.id], + name: "pages_blocks_downloads_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_map_block_location_type = pgTable( + "pages_blocks_map_block_location_type", + { + order: integer("order").notNull(), + parent: varchar("parent_id").notNull(), + value: enum_pages_blocks_map_block_location_type("value"), + id: serial("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_map_block_location_type_order_idx").on(columns.order), + index("pages_blocks_map_block_location_type_parent_idx").on(columns.parent), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [pages_blocks_map_block.id], + name: "pages_blocks_map_block_location_type_parent_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_map_block_markers = pgTable( + "pages_blocks_map_block_markers", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + lat: numeric("lat", { mode: "number" }), + lng: numeric("lng", { mode: "number" }), + markerType: enum_pages_blocks_map_block_markers_marker_type("marker_type"), + customIcon: integer("custom_icon_id").references(() => media.id, { + onDelete: "set null", + }), + link: varchar("link"), + }, + (columns) => [ + index("pages_blocks_map_block_markers_order_idx").on(columns._order), + index("pages_blocks_map_block_markers_parent_id_idx").on(columns._parentID), + index("pages_blocks_map_block_markers_custom_icon_idx").on(columns.customIcon), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_map_block.id], + name: "pages_blocks_map_block_markers_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_map_block_markers_locales = pgTable( + "pages_blocks_map_block_markers_locales", + { + name: varchar("name"), + address: varchar("address"), + popupContent: jsonb("popup_content"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_map_block_markers_locales_locale_parent_id_uniq").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_map_block_markers.id], + name: "pages_blocks_map_block_markers_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_map_block = pgTable( + "pages_blocks_map_block", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + source: enum_pages_blocks_map_block_source("source").default("locations"), + singleAddress_street: varchar("single_address_street"), + singleAddress_zip: varchar("single_address_zip"), + singleAddress_city: varchar("single_address_city"), + singleAddress_country: varchar("single_address_country").default("Deutschland"), + singleAddress_lat: numeric("single_address_lat", { mode: "number" }), + singleAddress_lng: numeric("single_address_lng", { mode: "number" }), + provider: enum_pages_blocks_map_block_provider("provider").default("osm"), + mapStyle: enum_pages_blocks_map_block_map_style("map_style").default("default"), + mapSettings_height: enum_pages_blocks_map_block_map_settings_height("map_settings_height").default("400"), + mapSettings_zoom: numeric("map_settings_zoom", { mode: "number" }).default(12), + mapSettings_autoFit: boolean("map_settings_auto_fit").default(true), + mapSettings_centerLat: numeric("map_settings_center_lat", { mode: "number" }), + mapSettings_centerLng: numeric("map_settings_center_lng", { mode: "number" }), + interaction_scrollZoom: boolean("interaction_scroll_zoom").default(false), + interaction_dragging: boolean("interaction_dragging").default(true), + interaction_zoomControl: boolean("interaction_zoom_control").default(true), + interaction_fullscreenControl: boolean("interaction_fullscreen_control").default(false), + interaction_locateControl: boolean("interaction_locate_control").default(false), + markerStyle_type: enum_pages_blocks_map_block_marker_style_type("marker_style_type").default("pin"), + markerStyle_color: varchar("marker_style_color").default("#3B82F6"), + markerStyle_size: enum_pages_blocks_map_block_marker_style_size("marker_style_size").default("md"), + markerStyle_clustering: boolean("marker_style_clustering").default(true), + markerStyle_clusterRadius: numeric("marker_style_cluster_radius", { mode: "number" }).default(50), + popup_show: boolean("popup_show").default(true), + popup_trigger: enum_pages_blocks_map_block_popup_trigger("popup_trigger").default("click"), + popup_showAddress: boolean("popup_show_address").default(true), + popup_showDirectionsLink: boolean("popup_show_directions_link").default(true), + popup_showPhone: boolean("popup_show_phone").default(true), + popup_showOpeningHours: boolean("popup_show_opening_hours").default(false), + popup_showDetailLink: boolean("popup_show_detail_link").default(true), + sidebar_show: boolean("sidebar_show").default(false), + sidebar_position: enum_pages_blocks_map_block_sidebar_position("sidebar_position").default("right"), + sidebar_width: enum_pages_blocks_map_block_sidebar_width("sidebar_width").default("300"), + sidebar_searchable: boolean("sidebar_searchable").default(true), + sidebar_clickToCenter: boolean("sidebar_click_to_center").default(true), + style_rounded: boolean("style_rounded").default(true), + style_shadow: boolean("style_shadow").default(true), + style_border: boolean("style_border").default(false), + style_padding: enum_pages_blocks_map_block_style_padding("style_padding").default("none"), + fallback_showStaticImage: boolean("fallback_show_static_image").default(false), + fallback_staticImage: integer("fallback_static_image_id").references(() => media.id, { + onDelete: "set null", + }), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_map_block_order_idx").on(columns._order), + index("pages_blocks_map_block_parent_id_idx").on(columns._parentID), + index("pages_blocks_map_block_path_idx").on(columns._path), + index("pages_blocks_map_block_fallback_fallback_static_image_idx").on(columns.fallback_staticImage), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_map_block_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_map_block_locales = pgTable( + "pages_blocks_map_block_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + singleAddress_name: varchar("single_address_name"), + fallback_noJsMessage: varchar("fallback_no_js_message").default( + "Bitte aktivieren Sie JavaScript, um die Karte anzuzeigen.", + ), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_map_block_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_map_block.id], + name: "pages_blocks_map_block_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_events = pgTable( + "pages_blocks_events", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + sourceMode: enum_pages_blocks_events_source_mode("source_mode").default("collection"), + filterMode: enum_pages_blocks_events_filter_mode("filter_mode").default("upcoming"), + eventType: enum_pages_blocks_events_event_type("event_type"), + category: varchar("category"), + limit: numeric("limit", { mode: "number" }).default(6), + layout: enum_pages_blocks_events_layout("layout").default("cards"), + columns: enum_pages_blocks_events_columns("columns").default("3"), + showImage: boolean("show_image").default(true), + showExcerpt: boolean("show_excerpt").default(true), + showDate: boolean("show_date").default(true), + showTime: boolean("show_time").default(true), + showLocation: boolean("show_location").default(true), + showPrice: boolean("show_price").default(false), + showEventType: boolean("show_event_type").default(false), + showRegistrationButton: boolean("show_registration_button").default(true), + calendarOptions_defaultView: enum_pages_blocks_events_calendar_options_default_view( + "calendar_options_default_view", + ).default("month"), + calendarOptions_showNavigation: boolean("calendar_options_show_navigation").default(true), + calendarOptions_showViewToggle: boolean("calendar_options_show_view_toggle").default(false), + groupBy: enum_pages_blocks_events_group_by("group_by").default("none"), + sortOrder: enum_pages_blocks_events_sort_order("sort_order").default("asc"), + showAllLink: boolean("show_all_link").default(true), + allEventsLink: varchar("all_events_link").default("/events"), + backgroundColor: enum_pages_blocks_events_background_color("background_color").default("white"), + cardStyle: enum_pages_blocks_events_card_style("card_style").default("elevated"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_events_order_idx").on(columns._order), + index("pages_blocks_events_parent_id_idx").on(columns._parentID), + index("pages_blocks_events_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_events_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_events_locales = pgTable( + "pages_blocks_events_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + registrationButtonText: varchar("registration_button_text").default("Jetzt anmelden"), + allEventsText: varchar("all_events_text").default("Alle Veranstaltungen"), + emptyMessage: varchar("empty_message").default("Aktuell sind keine Veranstaltungen geplant."), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_events_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_events.id], + name: "pages_blocks_events_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_plans_features = pgTable( + "pages_blocks_pricing_plans_features", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + included: boolean("included").default(true), + highlight: boolean("highlight").default(false), + }, + (columns) => [ + index("pages_blocks_pricing_plans_features_order_idx").on(columns._order), + index("pages_blocks_pricing_plans_features_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing_plans.id], + name: "pages_blocks_pricing_plans_features_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_plans_features_locales = pgTable( + "pages_blocks_pricing_plans_features_locales", + { + text: varchar("text").notNull(), + tooltip: varchar("tooltip"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_pricing_plans_features_locales_locale_parent_id").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing_plans_features.id], + name: "pages_blocks_pricing_plans_features_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_plans = pgTable( + "pages_blocks_pricing_plans", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + price: numeric("price", { mode: "number" }), + priceMonthly: numeric("price_monthly", { mode: "number" }), + priceYearly: numeric("price_yearly", { mode: "number" }), + originalPrice: numeric("original_price", { mode: "number" }), + ctaLink: varchar("cta_link"), + ctaStyle: enum_pages_blocks_pricing_plans_cta_style("cta_style").default("primary"), + isPopular: boolean("is_popular").default(false), + isRecommended: boolean("is_recommended").default(false), + accentColor: enum_pages_blocks_pricing_plans_accent_color("accent_color"), + icon: integer("icon_id").references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("pages_blocks_pricing_plans_order_idx").on(columns._order), + index("pages_blocks_pricing_plans_parent_id_idx").on(columns._parentID), + index("pages_blocks_pricing_plans_icon_idx").on(columns.icon), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing.id], + name: "pages_blocks_pricing_plans_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_plans_locales = pgTable( + "pages_blocks_pricing_plans_locales", + { + name: varchar("name").notNull(), + subtitle: varchar("subtitle"), + description: varchar("description"), + priceSuffix: varchar("price_suffix"), + priceNote: varchar("price_note"), + customPriceText: varchar("custom_price_text"), + ctaText: varchar("cta_text").default("Jetzt starten"), + popularLabel: varchar("popular_label").default("Beliebt"), + recommendedLabel: varchar("recommended_label").default("Empfohlen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_pricing_plans_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing_plans.id], + name: "pages_blocks_pricing_plans_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_comparison_features_values = pgTable( + "pages_blocks_pricing_comparison_features_values", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + planIndex: numeric("plan_index", { mode: "number" }), + }, + (columns) => [ + index("pages_blocks_pricing_comparison_features_values_order_idx").on(columns._order), + index("pages_blocks_pricing_comparison_features_values_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing_comparison_features.id], + name: "pages_blocks_pricing_comparison_features_values_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_comparison_features_values_locales = pgTable( + "pages_blocks_pricing_comparison_features_values_locales", + { + value: varchar("value"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_pricing_comparison_features_values_locales_loca").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing_comparison_features_values.id], + name: "pages_blocks_pricing_comparison_features_values_locales_p_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_comparison_features = pgTable( + "pages_blocks_pricing_comparison_features", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_pricing_comparison_features_order_idx").on(columns._order), + index("pages_blocks_pricing_comparison_features_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing.id], + name: "pages_blocks_pricing_comparison_features_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_comparison_features_locales = pgTable( + "pages_blocks_pricing_comparison_features_locales", + { + category: varchar("category"), + feature: varchar("feature"), + tooltip: varchar("tooltip"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_pricing_comparison_features_locales_locale_pare").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing_comparison_features.id], + name: "pages_blocks_pricing_comparison_features_locales_parent_i_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_faq_items = pgTable( + "pages_blocks_pricing_faq_items", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_pricing_faq_items_order_idx").on(columns._order), + index("pages_blocks_pricing_faq_items_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing.id], + name: "pages_blocks_pricing_faq_items_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_faq_items_locales = pgTable( + "pages_blocks_pricing_faq_items_locales", + { + question: varchar("question"), + answer: jsonb("answer"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_pricing_faq_items_locales_locale_parent_id_uniq").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing_faq_items.id], + name: "pages_blocks_pricing_faq_items_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing = pgTable( + "pages_blocks_pricing", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + pricingType: enum_pages_blocks_pricing_pricing_type("pricing_type").default("one-time"), + currency: varchar("currency").default("€"), + showCurrencyBefore: boolean("show_currency_before").default(true), + toggleOptions_defaultToYearly: boolean("toggle_options_default_to_yearly").default(true), + showComparison: boolean("show_comparison").default(false), + layout: enum_pages_blocks_pricing_layout("layout").default("cards"), + alignment: enum_pages_blocks_pricing_alignment("alignment").default("center"), + highlightPopular: boolean("highlight_popular").default(true), + guarantee_show: boolean("guarantee_show").default(false), + guarantee_icon: enum_pages_blocks_pricing_guarantee_icon("guarantee_icon"), + showFAQ: boolean("show_f_a_q").default(false), + backgroundColor: enum_pages_blocks_pricing_background_color("background_color").default("white"), + cardStyle: enum_pages_blocks_pricing_card_style("card_style").default("elevated"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_pricing_order_idx").on(columns._order), + index("pages_blocks_pricing_parent_id_idx").on(columns._parentID), + index("pages_blocks_pricing_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_pricing_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_pricing_locales = pgTable( + "pages_blocks_pricing_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + description: varchar("description"), + toggleOptions_monthlyLabel: varchar("toggle_options_monthly_label").default("Monatlich"), + toggleOptions_yearlyLabel: varchar("toggle_options_yearly_label").default("Jährlich"), + toggleOptions_yearlyDiscount: varchar("toggle_options_yearly_discount"), + guarantee_text: varchar("guarantee_text").default("30 Tage Geld-zurück-Garantie"), + faqTitle: varchar("faq_title").default("Häufig gestellte Fragen"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_pricing_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_pricing.id], + name: "pages_blocks_pricing_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_tabs_tabs_features = pgTable( + "pages_blocks_tabs_tabs_features", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: enum_pages_blocks_tabs_tabs_features_icon("icon"), + }, + (columns) => [ + index("pages_blocks_tabs_tabs_features_order_idx").on(columns._order), + index("pages_blocks_tabs_tabs_features_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_tabs_tabs.id], + name: "pages_blocks_tabs_tabs_features_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_tabs_tabs_features_locales = pgTable( + "pages_blocks_tabs_tabs_features_locales", + { + title: varchar("title"), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_tabs_tabs_features_locales_locale_parent_id_uni").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_tabs_tabs_features.id], + name: "pages_blocks_tabs_tabs_features_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_tabs_tabs = pgTable( + "pages_blocks_tabs_tabs", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: enum_pages_blocks_tabs_tabs_icon("icon"), + customIcon: integer("custom_icon_id").references(() => media.id, { + onDelete: "set null", + }), + badge: varchar("badge"), + contentType: enum_pages_blocks_tabs_tabs_content_type("content_type").default("richtext"), + imgTxt_img: integer("img_txt_img_id").references(() => media.id, { + onDelete: "set null", + }), + imgTxt_imgPos: enum_pages_blocks_tabs_tabs_img_txt_img_pos("img_txt_img_pos").default("left"), + code_language: enum_pages_blocks_tabs_tabs_code_language("code_language"), + code_code: varchar("code_code"), + code_showLineNumbers: boolean("code_show_line_numbers").default(true), + embed_type: enum_pages_blocks_tabs_tabs_embed_type("embed_type"), + embed_url: varchar("embed_url"), + embed_aspectRatio: enum_pages_blocks_tabs_tabs_embed_aspect_ratio("embed_aspect_ratio").default("16:9"), + }, + (columns) => [ + index("pages_blocks_tabs_tabs_order_idx").on(columns._order), + index("pages_blocks_tabs_tabs_parent_id_idx").on(columns._parentID), + index("pages_blocks_tabs_tabs_custom_icon_idx").on(columns.customIcon), + index("pages_blocks_tabs_tabs_img_txt_img_txt_img_idx").on(columns.imgTxt_img), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_tabs.id], + name: "pages_blocks_tabs_tabs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_tabs_tabs_locales = pgTable( + "pages_blocks_tabs_tabs_locales", + { + label: varchar("label").notNull(), + content: jsonb("content"), + imgTxt_text: jsonb("img_txt_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_tabs_tabs_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_tabs_tabs.id], + name: "pages_blocks_tabs_tabs_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_tabs = pgTable( + "pages_blocks_tabs", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + tabStyle: enum_pages_blocks_tabs_tab_style("tab_style").default("underline"), + tabPosition: enum_pages_blocks_tabs_tab_position("tab_position").default("top"), + tabAlignment: enum_pages_blocks_tabs_tab_alignment("tab_alignment").default("left"), + defaultTab: numeric("default_tab", { mode: "number" }).default(0), + allowKeyboardNavigation: boolean("allow_keyboard_navigation").default(true), + animated: boolean("animated").default(true), + lazy: boolean("lazy").default(false), + mobileStyle: enum_pages_blocks_tabs_mobile_style("mobile_style").default("scroll"), + backgroundColor: enum_pages_blocks_tabs_background_color("background_color").default("white"), + contentBackground: enum_pages_blocks_tabs_content_background("content_background").default("white"), + showBorder: boolean("show_border").default(true), + fullWidth: boolean("full_width").default(false), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_tabs_order_idx").on(columns._order), + index("pages_blocks_tabs_parent_id_idx").on(columns._parentID), + index("pages_blocks_tabs_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_tabs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_tabs_locales = pgTable( + "pages_blocks_tabs_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_tabs_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_tabs.id], + name: "pages_blocks_tabs_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_list_items = pgTable( + "pages_blocks_accordion_items_list_items", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: enum_pages_blocks_accordion_items_list_items_icon("icon").default("check"), + }, + (columns) => [ + index("pages_blocks_accordion_items_list_items_order_idx").on(columns._order), + index("pages_blocks_accordion_items_list_items_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items.id], + name: "pages_blocks_accordion_items_list_items_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_list_items_locales = pgTable( + "pages_blocks_accordion_items_list_items_locales", + { + text: varchar("text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_accordion_items_list_items_locales_locale_paren").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items_list_items.id], + name: "pages_blocks_accordion_items_list_items_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_table_data_headers = pgTable( + "pages_blocks_accordion_items_table_data_headers", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_accordion_items_table_data_headers_order_idx").on(columns._order), + index("pages_blocks_accordion_items_table_data_headers_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items.id], + name: "pages_blocks_accordion_items_table_data_headers_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_table_data_headers_locales = pgTable( + "pages_blocks_accordion_items_table_data_headers_locales", + { + text: varchar("text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_accordion_items_table_data_headers_locales_loca").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items_table_data_headers.id], + name: "pages_blocks_accordion_items_table_data_headers_locales_p_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_table_data_rows_cells = pgTable( + "pages_blocks_accordion_items_table_data_rows_cells", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_accordion_items_table_data_rows_cells_order_idx").on(columns._order), + index("pages_blocks_accordion_items_table_data_rows_cells_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items_table_data_rows.id], + name: "pages_blocks_accordion_items_table_data_rows_cells_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_table_data_rows_cells_locales = pgTable( + "pages_blocks_accordion_items_table_data_rows_cells_locales", + { + text: varchar("text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_accordion_items_table_data_rows_cells_locales_l").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items_table_data_rows_cells.id], + name: "pages_blocks_accordion_items_table_data_rows_cells_locale_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_table_data_rows = pgTable( + "pages_blocks_accordion_items_table_data_rows", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_accordion_items_table_data_rows_order_idx").on(columns._order), + index("pages_blocks_accordion_items_table_data_rows_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items.id], + name: "pages_blocks_accordion_items_table_data_rows_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items = pgTable( + "pages_blocks_accordion_items", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: enum_pages_blocks_accordion_items_icon("icon"), + customIcon: integer("custom_icon_id").references(() => media.id, { + onDelete: "set null", + }), + contentType: enum_pages_blocks_accordion_items_content_type("content_type").default("richtext"), + imgTxt_img: integer("img_txt_img_id").references(() => media.id, { + onDelete: "set null", + }), + imgTxt_imgPos: enum_pages_blocks_accordion_items_img_txt_img_pos("img_txt_img_pos").default("left"), + codeContent_language: enum_pages_blocks_accordion_items_code_content_language("code_content_language"), + codeContent_code: varchar("code_content_code"), + badge: varchar("badge"), + badgeColor: enum_pages_blocks_accordion_items_badge_color("badge_color"), + defaultOpen: boolean("default_open").default(false), + disabled: boolean("disabled").default(false), + }, + (columns) => [ + index("pages_blocks_accordion_items_order_idx").on(columns._order), + index("pages_blocks_accordion_items_parent_id_idx").on(columns._parentID), + index("pages_blocks_accordion_items_custom_icon_idx").on(columns.customIcon), + index("pages_blocks_accordion_items_img_txt_img_txt_img_idx").on(columns.imgTxt_img), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion.id], + name: "pages_blocks_accordion_items_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_items_locales = pgTable( + "pages_blocks_accordion_items_locales", + { + title: varchar("title").notNull(), + subtitle: varchar("subtitle"), + content: jsonb("content"), + imgTxt_text: jsonb("img_txt_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_accordion_items_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion_items.id], + name: "pages_blocks_accordion_items_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion = pgTable( + "pages_blocks_accordion", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + behavior: enum_pages_blocks_accordion_behavior("behavior").default("single"), + expandFirst: boolean("expand_first").default(false), + animated: boolean("animated").default(true), + style: enum_pages_blocks_accordion_style("style").default("default"), + iconPosition: enum_pages_blocks_accordion_icon_position("icon_position").default("right"), + iconStyle: enum_pages_blocks_accordion_icon_style("icon_style").default("chevron"), + layout: enum_pages_blocks_accordion_layout("layout").default("full"), + titleSize: enum_pages_blocks_accordion_title_size("title_size").default("medium"), + backgroundColor: enum_pages_blocks_accordion_background_color("background_color").default("white"), + headerBackground: enum_pages_blocks_accordion_header_background("header_background").default("white"), + enableSchemaOrg: boolean("enable_schema_org").default(false), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_accordion_order_idx").on(columns._order), + index("pages_blocks_accordion_parent_id_idx").on(columns._parentID), + index("pages_blocks_accordion_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_accordion_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_accordion_locales = pgTable( + "pages_blocks_accordion_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_accordion_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_accordion.id], + name: "pages_blocks_accordion_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_tbl_columns = pgTable( + "pages_blocks_comparison_tbl_columns", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + isHighlighted: boolean("is_highlighted").default(false), + ctaLink: varchar("cta_link"), + }, + (columns) => [ + index("pages_blocks_comparison_tbl_columns_order_idx").on(columns._order), + index("pages_blocks_comparison_tbl_columns_parent_id_idx").on(columns._parentID), + index("pages_blocks_comparison_tbl_columns_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison.id], + name: "pages_blocks_comparison_tbl_columns_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_tbl_columns_locales = pgTable( + "pages_blocks_comparison_tbl_columns_locales", + { + name: varchar("name"), + subtitle: varchar("subtitle"), + price: varchar("price"), + highlightLabel: varchar("highlight_label"), + ctaText: varchar("cta_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_tbl_columns_locales_locale_parent_id").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_tbl_columns.id], + name: "pages_blocks_comparison_tbl_columns_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_tbl_rows_values = pgTable( + "pages_blocks_comparison_tbl_rows_values", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + columnIndex: numeric("column_index", { mode: "number" }), + valueType: enum_pages_blocks_comparison_tbl_rows_values_value_type("value_type").default("text"), + booleanValue: boolean("boolean_value"), + }, + (columns) => [ + index("pages_blocks_comparison_tbl_rows_values_order_idx").on(columns._order), + index("pages_blocks_comparison_tbl_rows_values_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_tbl_rows.id], + name: "pages_blocks_comparison_tbl_rows_values_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_tbl_rows_values_locales = pgTable( + "pages_blocks_comparison_tbl_rows_values_locales", + { + textValue: varchar("text_value"), + partialNote: varchar("partial_note"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_tbl_rows_values_locales_locale_paren").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_tbl_rows_values.id], + name: "pages_blocks_comparison_tbl_rows_values_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_tbl_rows = pgTable( + "pages_blocks_comparison_tbl_rows", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + category: varchar("category"), + }, + (columns) => [ + index("pages_blocks_comparison_tbl_rows_order_idx").on(columns._order), + index("pages_blocks_comparison_tbl_rows_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison.id], + name: "pages_blocks_comparison_tbl_rows_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_tbl_rows_locales = pgTable( + "pages_blocks_comparison_tbl_rows_locales", + { + feature: varchar("feature"), + tooltip: varchar("tooltip"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_tbl_rows_locales_locale_parent_id_un").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_tbl_rows.id], + name: "pages_blocks_comparison_tbl_rows_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_crd_items_features = pgTable( + "pages_blocks_comparison_crd_items_features", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + included: boolean("included").default(true), + }, + (columns) => [ + index("pages_blocks_comparison_crd_items_features_order_idx").on(columns._order), + index("pages_blocks_comparison_crd_items_features_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_crd_items.id], + name: "pages_blocks_comparison_crd_items_features_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_crd_items_features_locales = pgTable( + "pages_blocks_comparison_crd_items_features_locales", + { + text: varchar("text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_crd_items_features_locales_locale_pa").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_crd_items_features.id], + name: "pages_blocks_comparison_crd_items_features_locales_parent_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_crd_items = pgTable( + "pages_blocks_comparison_crd_items", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + ctaLink: varchar("cta_link"), + isHighlighted: boolean("is_highlighted").default(false), + accentColor: enum_pages_blocks_comparison_crd_items_accent_color("accent_color"), + }, + (columns) => [ + index("pages_blocks_comparison_crd_items_order_idx").on(columns._order), + index("pages_blocks_comparison_crd_items_parent_id_idx").on(columns._parentID), + index("pages_blocks_comparison_crd_items_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison.id], + name: "pages_blocks_comparison_crd_items_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_crd_items_locales = pgTable( + "pages_blocks_comparison_crd_items_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + description: jsonb("description"), + price: varchar("price"), + ctaText: varchar("cta_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_crd_items_locales_locale_parent_id_u").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_crd_items.id], + name: "pages_blocks_comparison_crd_items_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_before_after_items = pgTable( + "pages_blocks_comparison_before_after_items", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + beforeImage: integer("before_image_id").references(() => media.id, { + onDelete: "set null", + }), + afterImage: integer("after_image_id").references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("pages_blocks_comparison_before_after_items_order_idx").on(columns._order), + index("pages_blocks_comparison_before_after_items_parent_id_idx").on(columns._parentID), + index("pages_blocks_comparison_before_after_items_before_image_idx").on(columns.beforeImage), + index("pages_blocks_comparison_before_after_items_after_image_idx").on(columns.afterImage), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison.id], + name: "pages_blocks_comparison_before_after_items_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_before_after_items_locales = pgTable( + "pages_blocks_comparison_before_after_items_locales", + { + title: varchar("title"), + beforeText: varchar("before_text"), + afterText: varchar("after_text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_before_after_items_locales_locale_pa").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_before_after_items.id], + name: "pages_blocks_comparison_before_after_items_locales_parent_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_pros_cons_items_pros = pgTable( + "pages_blocks_comparison_pros_cons_items_pros", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_comparison_pros_cons_items_pros_order_idx").on(columns._order), + index("pages_blocks_comparison_pros_cons_items_pros_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_pros_cons_items.id], + name: "pages_blocks_comparison_pros_cons_items_pros_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_pros_cons_items_pros_locales = pgTable( + "pages_blocks_comparison_pros_cons_items_pros_locales", + { + text: varchar("text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_pros_cons_items_pros_locales_locale_").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_pros_cons_items_pros.id], + name: "pages_blocks_comparison_pros_cons_items_pros_locales_pare_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_pros_cons_items_cons = pgTable( + "pages_blocks_comparison_pros_cons_items_cons", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("pages_blocks_comparison_pros_cons_items_cons_order_idx").on(columns._order), + index("pages_blocks_comparison_pros_cons_items_cons_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_pros_cons_items.id], + name: "pages_blocks_comparison_pros_cons_items_cons_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_pros_cons_items_cons_locales = pgTable( + "pages_blocks_comparison_pros_cons_items_cons_locales", + { + text: varchar("text"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_pros_cons_items_cons_locales_locale_").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_pros_cons_items_cons.id], + name: "pages_blocks_comparison_pros_cons_items_cons_locales_pare_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_pros_cons_items = pgTable( + "pages_blocks_comparison_pros_cons_items", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + rating: numeric("rating", { mode: "number" }), + }, + (columns) => [ + index("pages_blocks_comparison_pros_cons_items_order_idx").on(columns._order), + index("pages_blocks_comparison_pros_cons_items_parent_id_idx").on(columns._parentID), + index("pages_blocks_comparison_pros_cons_items_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison.id], + name: "pages_blocks_comparison_pros_cons_items_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_pros_cons_items_locales = pgTable( + "pages_blocks_comparison_pros_cons_items_locales", + { + title: varchar("title"), + verdict: varchar("verdict"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_pros_cons_items_locales_locale_paren").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison_pros_cons_items.id], + name: "pages_blocks_comparison_pros_cons_items_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison = pgTable( + "pages_blocks_comparison", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + _path: text("_path").notNull(), + id: varchar("id").primaryKey(), + comparisonType: enum_pages_blocks_comparison_comparison_type("comparison_type").default("table"), + beforeAfter_displayStyle: + enum_pages_blocks_comparison_before_after_display_style("before_after_display_style").default("slider"), + stickyHeader: boolean("sticky_header").default(true), + showCategories: boolean("show_categories").default(true), + collapsibleCategories: boolean("collapsible_categories").default(false), + showRowDividers: boolean("show_row_dividers").default(true), + highlightDifferences: boolean("highlight_differences").default(false), + mobileView: enum_pages_blocks_comparison_mobile_view("mobile_view").default("scroll"), + symbols_checkSymbol: varchar("symbols_check_symbol").default("✓"), + symbols_crossSymbol: varchar("symbols_cross_symbol").default("✗"), + symbols_partialSymbol: varchar("symbols_partial_symbol").default("○"), + backgroundColor: enum_pages_blocks_comparison_background_color("background_color").default("white"), + tableStyle: enum_pages_blocks_comparison_table_style("table_style").default("bordered"), + checkColor: enum_pages_blocks_comparison_check_color("check_color").default("green"), + crossColor: enum_pages_blocks_comparison_cross_color("cross_color").default("red"), + blockName: varchar("block_name"), + }, + (columns) => [ + index("pages_blocks_comparison_order_idx").on(columns._order), + index("pages_blocks_comparison_parent_id_idx").on(columns._parentID), + index("pages_blocks_comparison_path_idx").on(columns._path), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_blocks_comparison_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const pages_blocks_comparison_locales = pgTable( + "pages_blocks_comparison_locales", + { + title: varchar("title"), + subtitle: varchar("subtitle"), + description: varchar("description"), + beforeAfter_beforeLabel: varchar("before_after_before_label").default("Vorher"), + beforeAfter_afterLabel: varchar("before_after_after_label").default("Nachher"), + prosCons_prosLabel: varchar("pros_cons_pros_label").default("Vorteile"), + prosCons_consLabel: varchar("pros_cons_cons_label").default("Nachteile"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_blocks_comparison_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages_blocks_comparison.id], + name: "pages_blocks_comparison_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages = pgTable( "pages", { @@ -1031,15 +5777,9 @@ export const pages = pgTable( tenant: integer("tenant_id").references(() => tenants.id, { onDelete: "set null", }), - title: varchar("title").notNull(), - slug: varchar("slug").notNull(), hero_image: integer("hero_image_id").references(() => media.id, { onDelete: "set null", }), - hero_headline: varchar("hero_headline"), - hero_subline: varchar("hero_subline"), - seo_metaTitle: varchar("seo_meta_title"), - seo_metaDescription: varchar("seo_meta_description"), seo_ogImage: integer("seo_og_image_id").references(() => media.id, { onDelete: "set null", }), @@ -1050,7 +5790,6 @@ export const pages = pgTable( }, (columns) => [ index("pages_tenant_idx").on(columns.tenant), - uniqueIndex("pages_slug_idx").on(columns.slug), index("pages_hero_hero_image_idx").on(columns.hero_image), index("pages_seo_seo_og_image_idx").on(columns.seo_ogImage), index("pages_updated_at_idx").on(columns.updatedAt), @@ -1058,6 +5797,29 @@ export const pages = pgTable( ], ); +export const pages_locales = pgTable( + "pages_locales", + { + title: varchar("title").notNull(), + slug: varchar("slug").notNull(), + hero_headline: varchar("hero_headline"), + hero_subline: varchar("hero_subline"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("pages_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [pages.id], + name: "pages_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const pages_rels = pgTable( "pages_rels", { @@ -1067,6 +5829,16 @@ export const pages_rels = pgTable( path: varchar("path").notNull(), categoriesID: integer("categories_id"), testimonialsID: integer("testimonials_id"), + faqsID: integer("faqs_id"), + teamID: integer("team_id"), + servicesID: integer("services_id"), + authorsID: integer("authors_id"), + postsID: integer("posts_id"), + locationsID: integer("locations_id"), + partnersID: integer("partners_id"), + jobsID: integer("jobs_id"), + downloadsID: integer("downloads_id"), + eventsID: integer("events_id"), }, (columns) => [ index("pages_rels_order_idx").on(columns.order), @@ -1074,6 +5846,16 @@ export const pages_rels = pgTable( index("pages_rels_path_idx").on(columns.path), index("pages_rels_categories_id_idx").on(columns.categoriesID), index("pages_rels_testimonials_id_idx").on(columns.testimonialsID), + index("pages_rels_faqs_id_idx").on(columns.faqsID), + index("pages_rels_team_id_idx").on(columns.teamID), + index("pages_rels_services_id_idx").on(columns.servicesID), + index("pages_rels_authors_id_idx").on(columns.authorsID), + index("pages_rels_posts_id_idx").on(columns.postsID), + index("pages_rels_locations_id_idx").on(columns.locationsID), + index("pages_rels_partners_id_idx").on(columns.partnersID), + index("pages_rels_jobs_id_idx").on(columns.jobsID), + index("pages_rels_downloads_id_idx").on(columns.downloadsID), + index("pages_rels_events_id_idx").on(columns.eventsID), foreignKey({ columns: [columns["parent"]], foreignColumns: [pages.id], @@ -1089,6 +5871,56 @@ export const pages_rels = pgTable( foreignColumns: [testimonials.id], name: "pages_rels_testimonials_fk", }).onDelete("cascade"), + foreignKey({ + columns: [columns["faqsID"]], + foreignColumns: [faqs.id], + name: "pages_rels_faqs_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["teamID"]], + foreignColumns: [team.id], + name: "pages_rels_team_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["servicesID"]], + foreignColumns: [services.id], + name: "pages_rels_services_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["authorsID"]], + foreignColumns: [authors.id], + name: "pages_rels_authors_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["postsID"]], + foreignColumns: [posts.id], + name: "pages_rels_posts_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["locationsID"]], + foreignColumns: [locations.id], + name: "pages_rels_locations_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["partnersID"]], + foreignColumns: [partners.id], + name: "pages_rels_partners_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["jobsID"]], + foreignColumns: [jobs.id], + name: "pages_rels_jobs_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["downloadsID"]], + foreignColumns: [downloads.id], + name: "pages_rels_downloads_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["eventsID"]], + foreignColumns: [events.id], + name: "pages_rels_events_fk", + }).onDelete("cascade"), ], ); @@ -1099,20 +5931,18 @@ export const posts = pgTable( tenant: integer("tenant_id").references(() => tenants.id, { onDelete: "set null", }), - title: varchar("title").notNull(), - slug: varchar("slug").notNull(), type: enum_posts_type("type").notNull().default("blog"), isFeatured: boolean("is_featured").default(false), - excerpt: varchar("excerpt"), featuredImage: integer("featured_image_id").references(() => media.id, { onDelete: "set null", }), - content: jsonb("content").notNull(), - author: varchar("author"), + author: integer("author_id").references(() => authors.id, { + onDelete: "set null", + }), + authorLegacy: varchar("author_legacy"), + readingTime: numeric("reading_time", { mode: "number" }), status: enum_posts_status("status").default("draft"), publishedAt: timestamp("published_at", { mode: "string", withTimezone: true, precision: 3 }), - seo_metaTitle: varchar("seo_meta_title"), - seo_metaDescription: varchar("seo_meta_description"), seo_ogImage: integer("seo_og_image_id").references(() => media.id, { onDelete: "set null", }), @@ -1121,14 +5951,37 @@ export const posts = pgTable( }, (columns) => [ index("posts_tenant_idx").on(columns.tenant), - uniqueIndex("posts_slug_idx").on(columns.slug), index("posts_featured_image_idx").on(columns.featuredImage), + index("posts_author_idx").on(columns.author), index("posts_seo_seo_og_image_idx").on(columns.seo_ogImage), index("posts_updated_at_idx").on(columns.updatedAt), index("posts_created_at_idx").on(columns.createdAt), ], ); +export const posts_locales = pgTable( + "posts_locales", + { + title: varchar("title").notNull(), + slug: varchar("slug").notNull(), + excerpt: varchar("excerpt"), + content: jsonb("content").notNull(), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("posts_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [posts.id], + name: "posts_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const posts_rels = pgTable( "posts_rels", { @@ -1137,12 +5990,16 @@ export const posts_rels = pgTable( parent: integer("parent_id").notNull(), path: varchar("path").notNull(), categoriesID: integer("categories_id"), + tagsID: integer("tags_id"), + authorsID: integer("authors_id"), }, (columns) => [ index("posts_rels_order_idx").on(columns.order), index("posts_rels_parent_idx").on(columns.parent), index("posts_rels_path_idx").on(columns.path), index("posts_rels_categories_id_idx").on(columns.categoriesID), + index("posts_rels_tags_id_idx").on(columns.tagsID), + index("posts_rels_authors_id_idx").on(columns.authorsID), foreignKey({ columns: [columns["parent"]], foreignColumns: [posts.id], @@ -1153,6 +6010,16 @@ export const posts_rels = pgTable( foreignColumns: [categories.id], name: "posts_rels_categories_fk", }).onDelete("cascade"), + foreignKey({ + columns: [columns["tagsID"]], + foreignColumns: [tags.id], + name: "posts_rels_tags_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["authorsID"]], + foreignColumns: [authors.id], + name: "posts_rels_authors_fk", + }).onDelete("cascade"), ], ); @@ -1163,20 +6030,36 @@ export const categories = pgTable( tenant: integer("tenant_id").references(() => tenants.id, { onDelete: "set null", }), - name: varchar("name").notNull(), - slug: varchar("slug").notNull(), - description: varchar("description"), updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), }, (columns) => [ index("categories_tenant_idx").on(columns.tenant), - uniqueIndex("categories_slug_idx").on(columns.slug), index("categories_updated_at_idx").on(columns.updatedAt), index("categories_created_at_idx").on(columns.createdAt), ], ); +export const categories_locales = pgTable( + "categories_locales", + { + name: varchar("name").notNull(), + slug: varchar("slug").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("categories_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [categories.id], + name: "categories_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const social_links = pgTable( "social_links", { @@ -1204,9 +6087,7 @@ export const testimonials = pgTable( tenant: integer("tenant_id").references(() => tenants.id, { onDelete: "set null", }), - quote: varchar("quote").notNull(), author: varchar("author").notNull(), - role: varchar("role"), company: varchar("company"), image: integer("image_id").references(() => media.id, { onDelete: "set null", @@ -1228,6 +6109,567 @@ export const testimonials = pgTable( ], ); +export const testimonials_locales = pgTable( + "testimonials_locales", + { + quote: varchar("quote").notNull(), + role: varchar("role"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("testimonials_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [testimonials.id], + name: "testimonials_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const faqs = pgTable( + "faqs", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + icon: varchar("icon"), + isActive: boolean("is_active").default(true), + isFeatured: boolean("is_featured").default(false), + order: numeric("order", { mode: "number" }).default(0), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("faqs_tenant_idx").on(columns.tenant), + index("faqs_updated_at_idx").on(columns.updatedAt), + index("faqs_created_at_idx").on(columns.createdAt), + ], +); + +export const faqs_locales = pgTable( + "faqs_locales", + { + question: varchar("question").notNull(), + answer: jsonb("answer").notNull(), + answerPlainText: varchar("answer_plain_text"), + category: varchar("category"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("faqs_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [faqs.id], + name: "faqs_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const faqs_rels = pgTable( + "faqs_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + faqsID: integer("faqs_id"), + }, + (columns) => [ + index("faqs_rels_order_idx").on(columns.order), + index("faqs_rels_parent_idx").on(columns.parent), + index("faqs_rels_path_idx").on(columns.path), + index("faqs_rels_faqs_id_idx").on(columns.faqsID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [faqs.id], + name: "faqs_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["faqsID"]], + foreignColumns: [faqs.id], + name: "faqs_rels_faqs_fk", + }).onDelete("cascade"), + ], +); + +export const team_social_links = pgTable( + "team_social_links", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + platform: enum_team_social_links_platform("platform").notNull(), + url: varchar("url").notNull(), + }, + (columns) => [ + index("team_social_links_order_idx").on(columns._order), + index("team_social_links_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team.id], + name: "team_social_links_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const team_qualifications = pgTable( + "team_qualifications", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + year: numeric("year", { mode: "number" }), + institution: varchar("institution"), + }, + (columns) => [ + index("team_qualifications_order_idx").on(columns._order), + index("team_qualifications_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team.id], + name: "team_qualifications_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const team_qualifications_locales = pgTable( + "team_qualifications_locales", + { + title: varchar("title").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("team_qualifications_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team_qualifications.id], + name: "team_qualifications_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const team_specializations = pgTable( + "team_specializations", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("team_specializations_order_idx").on(columns._order), + index("team_specializations_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team.id], + name: "team_specializations_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const team_specializations_locales = pgTable( + "team_specializations_locales", + { + title: varchar("title").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("team_specializations_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team_specializations.id], + name: "team_specializations_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const team_languages = pgTable( + "team_languages", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + level: enum_team_languages_level("level"), + }, + (columns) => [ + index("team_languages_order_idx").on(columns._order), + index("team_languages_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team.id], + name: "team_languages_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const team_languages_locales = pgTable( + "team_languages_locales", + { + language: varchar("language").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("team_languages_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team_languages.id], + name: "team_languages_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const team = pgTable( + "team", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + name: varchar("name").notNull(), + slug: varchar("slug").notNull(), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + email: varchar("email"), + phone: varchar("phone"), + showContactInfo: boolean("show_contact_info").default(false), + linkedUser: integer("linked_user_id").references(() => users.id, { + onDelete: "set null", + }), + isActive: boolean("is_active").default(true), + isFeatured: boolean("is_featured").default(false), + order: numeric("order", { mode: "number" }).default(0), + startDate: timestamp("start_date", { mode: "string", withTimezone: true, precision: 3 }), + reportsTo: integer("reports_to_id").references((): AnyPgColumn => team.id, { + onDelete: "set null", + }), + hierarchyLevel: enum_team_hierarchy_level("hierarchy_level"), + allowVCard: boolean("allow_v_card").default(true), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("team_tenant_idx").on(columns.tenant), + uniqueIndex("team_slug_idx").on(columns.slug), + index("team_image_idx").on(columns.image), + index("team_linked_user_idx").on(columns.linkedUser), + index("team_reports_to_idx").on(columns.reportsTo), + index("team_updated_at_idx").on(columns.updatedAt), + index("team_created_at_idx").on(columns.createdAt), + ], +); + +export const team_locales = pgTable( + "team_locales", + { + role: varchar("role").notNull(), + department: varchar("department"), + bio: jsonb("bio"), + bioShort: varchar("bio_short"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("team_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [team.id], + name: "team_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const service_categories = pgTable( + "service_categories", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + icon: varchar("icon"), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + color: varchar("color"), + isActive: boolean("is_active").default(true), + order: numeric("order", { mode: "number" }).default(0), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("service_categories_tenant_idx").on(columns.tenant), + index("service_categories_image_idx").on(columns.image), + index("service_categories_updated_at_idx").on(columns.updatedAt), + index("service_categories_created_at_idx").on(columns.createdAt), + ], +); + +export const service_categories_locales = pgTable( + "service_categories_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("service_categories_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [service_categories.id], + name: "service_categories_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services_gallery = pgTable( + "services_gallery", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("services_gallery_order_idx").on(columns._order), + index("services_gallery_parent_id_idx").on(columns._parentID), + index("services_gallery_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [services.id], + name: "services_gallery_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services_gallery_locales = pgTable( + "services_gallery_locales", + { + caption: varchar("caption"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("services_gallery_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [services_gallery.id], + name: "services_gallery_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services_features = pgTable( + "services_features", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: varchar("icon"), + }, + (columns) => [ + index("services_features_order_idx").on(columns._order), + index("services_features_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [services.id], + name: "services_features_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services_features_locales = pgTable( + "services_features_locales", + { + title: varchar("title").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("services_features_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [services_features.id], + name: "services_features_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services_detail_sections = pgTable( + "services_detail_sections", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: varchar("icon"), + }, + (columns) => [ + index("services_detail_sections_order_idx").on(columns._order), + index("services_detail_sections_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [services.id], + name: "services_detail_sections_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services_detail_sections_locales = pgTable( + "services_detail_sections_locales", + { + title: varchar("title").notNull(), + content: jsonb("content").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("services_detail_sections_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [services_detail_sections.id], + name: "services_detail_sections_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services = pgTable( + "services", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + icon: varchar("icon"), + iconImage: integer("icon_image_id").references(() => media.id, { + onDelete: "set null", + }), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + category: integer("category_id").references(() => service_categories.id, { + onDelete: "set null", + }), + pricingType: enum_services_pricing_type("pricing_type").default("on-request"), + price: numeric("price", { mode: "number" }), + priceMax: numeric("price_max", { mode: "number" }), + ctaLink: varchar("cta_link").default("/kontakt"), + ctaStyle: enum_services_cta_style("cta_style").default("primary"), + secondaryCta_enabled: boolean("secondary_cta_enabled").default(false), + secondaryCta_link: varchar("secondary_cta_link"), + testimonialAuthor: varchar("testimonial_author"), + ogImage: integer("og_image_id").references(() => media.id, { + onDelete: "set null", + }), + isActive: boolean("is_active").default(true), + isFeatured: boolean("is_featured").default(false), + isNew: boolean("is_new").default(false), + order: numeric("order", { mode: "number" }).default(0), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("services_tenant_idx").on(columns.tenant), + index("services_icon_image_idx").on(columns.iconImage), + index("services_image_idx").on(columns.image), + index("services_category_idx").on(columns.category), + index("services_og_image_idx").on(columns.ogImage), + index("services_updated_at_idx").on(columns.updatedAt), + index("services_created_at_idx").on(columns.createdAt), + ], +); + +export const services_locales = pgTable( + "services_locales", + { + title: varchar("title").notNull(), + subtitle: varchar("subtitle"), + shortDescription: varchar("short_description").notNull(), + description: jsonb("description"), + priceUnit: varchar("price_unit"), + priceNote: varchar("price_note"), + pricingDetails: jsonb("pricing_details"), + ctaText: varchar("cta_text").default("Jetzt anfragen"), + secondaryCta_text: varchar("secondary_cta_text"), + testimonialQuote: varchar("testimonial_quote"), + metaTitle: varchar("meta_title"), + metaDescription: varchar("meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("services_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [services.id], + name: "services_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const services_rels = pgTable( + "services_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + servicesID: integer("services_id"), + teamID: integer("team_id"), + faqsID: integer("faqs_id"), + }, + (columns) => [ + index("services_rels_order_idx").on(columns.order), + index("services_rels_parent_idx").on(columns.parent), + index("services_rels_path_idx").on(columns.path), + index("services_rels_services_id_idx").on(columns.servicesID), + index("services_rels_team_id_idx").on(columns.teamID), + index("services_rels_faqs_id_idx").on(columns.faqsID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [services.id], + name: "services_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["servicesID"]], + foreignColumns: [services.id], + name: "services_rels_services_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["teamID"]], + foreignColumns: [team.id], + name: "services_rels_team_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["faqsID"]], + foreignColumns: [faqs.id], + name: "services_rels_faqs_fk", + }).onDelete("cascade"), + ], +); + export const newsletter_subscribers_interests = pgTable( "newsletter_subscribers_interests", { @@ -1275,6 +6717,2032 @@ export const newsletter_subscribers = pgTable( ], ); +export const portfolio_categories = pgTable( + "portfolio_categories", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + coverImage: integer("cover_image_id").references(() => media.id, { + onDelete: "set null", + }), + order: numeric("order", { mode: "number" }).default(0), + isActive: boolean("is_active").default(true), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("portfolio_categories_tenant_idx").on(columns.tenant), + index("portfolio_categories_cover_image_idx").on(columns.coverImage), + index("portfolio_categories_updated_at_idx").on(columns.updatedAt), + index("portfolio_categories_created_at_idx").on(columns.createdAt), + ], +); + +export const portfolio_categories_locales = pgTable( + "portfolio_categories_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("portfolio_categories_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [portfolio_categories.id], + name: "portfolio_categories_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const portfolios_images = pgTable( + "portfolios_images", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + isHighlight: boolean("is_highlight").default(false), + }, + (columns) => [ + index("portfolios_images_order_idx").on(columns._order), + index("portfolios_images_parent_id_idx").on(columns._parentID), + index("portfolios_images_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [portfolios.id], + name: "portfolios_images_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const portfolios_images_locales = pgTable( + "portfolios_images_locales", + { + caption: varchar("caption"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("portfolios_images_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [portfolios_images.id], + name: "portfolios_images_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const portfolios = pgTable( + "portfolios", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + category: integer("category_id") + .notNull() + .references(() => portfolio_categories.id, { + onDelete: "set null", + }), + coverImage: integer("cover_image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + projectDetails_client: varchar("project_details_client"), + projectDetails_shootingDate: timestamp("project_details_shooting_date", { + mode: "string", + withTimezone: true, + precision: 3, + }), + status: enum_portfolios_status("status").notNull().default("draft"), + isFeatured: boolean("is_featured").default(false), + publishedAt: timestamp("published_at", { mode: "string", withTimezone: true, precision: 3 }), + order: numeric("order", { mode: "number" }).default(0), + seo_ogImage: integer("seo_og_image_id").references(() => media.id, { + onDelete: "set null", + }), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("portfolios_tenant_idx").on(columns.tenant), + index("portfolios_category_idx").on(columns.category), + index("portfolios_cover_image_idx").on(columns.coverImage), + index("portfolios_seo_seo_og_image_idx").on(columns.seo_ogImage), + index("portfolios_updated_at_idx").on(columns.updatedAt), + index("portfolios_created_at_idx").on(columns.createdAt), + ], +); + +export const portfolios_locales = pgTable( + "portfolios_locales", + { + title: varchar("title").notNull(), + description: jsonb("description"), + excerpt: varchar("excerpt"), + projectDetails_location: varchar("project_details_location"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("portfolios_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [portfolios.id], + name: "portfolios_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const portfolios_texts = pgTable( + "portfolios_texts", + { + id: serial("id").primaryKey(), + order: integer("order").notNull(), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + text: varchar("text"), + }, + (columns) => [ + index("portfolios_texts_order_parent").on(columns.order, columns.parent), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [portfolios.id], + name: "portfolios_texts_parent_fk", + }).onDelete("cascade"), + ], +); + +export const product_categories = pgTable( + "product_categories", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + icon: varchar("icon"), + parent: integer("parent_id").references((): AnyPgColumn => product_categories.id, { + onDelete: "set null", + }), + order: numeric("order", { mode: "number" }).default(0), + isActive: boolean("is_active").default(true), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("product_categories_tenant_idx").on(columns.tenant), + index("product_categories_image_idx").on(columns.image), + index("product_categories_parent_idx").on(columns.parent), + index("product_categories_updated_at_idx").on(columns.updatedAt), + index("product_categories_created_at_idx").on(columns.createdAt), + ], +); + +export const product_categories_locales = pgTable( + "product_categories_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("product_categories_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [product_categories.id], + name: "product_categories_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_tags = pgTable( + "products_tags", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + tag: varchar("tag").notNull(), + }, + (columns) => [ + index("products_tags_order_idx").on(columns._order), + index("products_tags_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products.id], + name: "products_tags_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_gallery = pgTable( + "products_gallery", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("products_gallery_order_idx").on(columns._order), + index("products_gallery_parent_id_idx").on(columns._parentID), + index("products_gallery_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products.id], + name: "products_gallery_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_gallery_locales = pgTable( + "products_gallery_locales", + { + caption: varchar("caption"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("products_gallery_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products_gallery.id], + name: "products_gallery_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_details_specifications = pgTable( + "products_details_specifications", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("products_details_specifications_order_idx").on(columns._order), + index("products_details_specifications_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products.id], + name: "products_details_specifications_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_details_specifications_locales = pgTable( + "products_details_specifications_locales", + { + key: varchar("key").notNull(), + value: varchar("value").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("products_details_specifications_locales_locale_parent_id_uni").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products_details_specifications.id], + name: "products_details_specifications_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_details_features = pgTable( + "products_details_features", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: varchar("icon"), + }, + (columns) => [ + index("products_details_features_order_idx").on(columns._order), + index("products_details_features_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products.id], + name: "products_details_features_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_details_features_locales = pgTable( + "products_details_features_locales", + { + feature: varchar("feature").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("products_details_features_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products_details_features.id], + name: "products_details_features_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_download_files = pgTable( + "products_download_files", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + file: integer("file_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("products_download_files_order_idx").on(columns._order), + index("products_download_files_parent_id_idx").on(columns._parentID), + index("products_download_files_file_idx").on(columns.file), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products.id], + name: "products_download_files_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_download_files_locales = pgTable( + "products_download_files_locales", + { + title: varchar("title"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("products_download_files_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products_download_files.id], + name: "products_download_files_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products = pgTable( + "products", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + sku: varchar("sku"), + category: integer("category_id").references(() => product_categories.id, { + onDelete: "set null", + }), + featuredImage: integer("featured_image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + pricing_price: numeric("pricing_price", { mode: "number" }), + pricing_salePrice: numeric("pricing_sale_price", { mode: "number" }), + pricing_currency: enum_products_pricing_currency("pricing_currency").default("EUR"), + pricing_priceType: enum_products_pricing_price_type("pricing_price_type").default("fixed"), + inventory_stockStatus: enum_products_inventory_stock_status("inventory_stock_status").default("in_stock"), + inventory_stockQuantity: numeric("inventory_stock_quantity", { mode: "number" }), + cta_type: enum_products_cta_type("cta_type").default("contact"), + cta_externalUrl: varchar("cta_external_url"), + seo_ogImage: integer("seo_og_image_id").references(() => media.id, { + onDelete: "set null", + }), + status: enum_products_status("status").default("draft"), + isFeatured: boolean("is_featured").default(false), + isNew: boolean("is_new").default(false), + order: numeric("order", { mode: "number" }).default(0), + publishedAt: timestamp("published_at", { mode: "string", withTimezone: true, precision: 3 }), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("products_tenant_idx").on(columns.tenant), + index("products_category_idx").on(columns.category), + index("products_featured_image_idx").on(columns.featuredImage), + index("products_seo_seo_og_image_idx").on(columns.seo_ogImage), + index("products_updated_at_idx").on(columns.updatedAt), + index("products_created_at_idx").on(columns.createdAt), + ], +); + +export const products_locales = pgTable( + "products_locales", + { + title: varchar("title").notNull(), + shortDescription: varchar("short_description"), + description: jsonb("description"), + pricing_priceNote: varchar("pricing_price_note"), + inventory_deliveryTime: varchar("inventory_delivery_time"), + cta_buttonText: varchar("cta_button_text"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("products_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [products.id], + name: "products_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const products_rels = pgTable( + "products_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + productsID: integer("products_id"), + }, + (columns) => [ + index("products_rels_order_idx").on(columns.order), + index("products_rels_parent_idx").on(columns.parent), + index("products_rels_path_idx").on(columns.path), + index("products_rels_products_id_idx").on(columns.productsID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [products.id], + name: "products_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["productsID"]], + foreignColumns: [products.id], + name: "products_rels_products_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events_gallery = pgTable( + "timelines_events_gallery", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("timelines_events_gallery_order_idx").on(columns._order), + index("timelines_events_gallery_parent_id_idx").on(columns._parentID), + index("timelines_events_gallery_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines_events.id], + name: "timelines_events_gallery_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events_gallery_locales = pgTable( + "timelines_events_gallery_locales", + { + caption: varchar("caption"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("timelines_events_gallery_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines_events_gallery.id], + name: "timelines_events_gallery_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events_deliverables = pgTable( + "timelines_events_deliverables", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + type: enum_timelines_events_deliverables_type("type").default("output"), + }, + (columns) => [ + index("timelines_events_deliverables_order_idx").on(columns._order), + index("timelines_events_deliverables_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines_events.id], + name: "timelines_events_deliverables_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events_deliverables_locales = pgTable( + "timelines_events_deliverables_locales", + { + name: varchar("name"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("timelines_events_deliverables_locales_locale_parent_id_uniqu").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines_events_deliverables.id], + name: "timelines_events_deliverables_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events_links = pgTable( + "timelines_events_links", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + url: varchar("url").notNull(), + type: enum_timelines_events_links_type("type").default("internal"), + }, + (columns) => [ + index("timelines_events_links_order_idx").on(columns._order), + index("timelines_events_links_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines_events.id], + name: "timelines_events_links_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events_links_locales = pgTable( + "timelines_events_links_locales", + { + label: varchar("label").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("timelines_events_links_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines_events_links.id], + name: "timelines_events_links_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events = pgTable( + "timelines_events", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + dateType: enum_timelines_events_date_type("date_type").default("year"), + year: numeric("year", { mode: "number" }), + month: enum_timelines_events_month("month"), + day: numeric("day", { mode: "number" }), + endYear: numeric("end_year", { mode: "number" }), + endMonth: enum_timelines_events_end_month("end_month"), + ongoing: boolean("ongoing"), + customDate: varchar("custom_date"), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + category: enum_timelines_events_category("category"), + importance: enum_timelines_events_importance("importance").default("normal"), + stepNumber: numeric("step_number", { mode: "number" }), + actionRequired: enum_timelines_events_action_required("action_required"), + icon: varchar("icon"), + color: varchar("color"), + metadata: jsonb("metadata"), + }, + (columns) => [ + index("timelines_events_order_idx").on(columns._order), + index("timelines_events_parent_id_idx").on(columns._parentID), + index("timelines_events_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines.id], + name: "timelines_events_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines_events_locales = pgTable( + "timelines_events_locales", + { + title: varchar("title").notNull(), + subtitle: varchar("subtitle"), + description: jsonb("description"), + shortDescription: varchar("short_description"), + duration: varchar("duration"), + responsible: varchar("responsible"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("timelines_events_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines_events.id], + name: "timelines_events_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const timelines = pgTable( + "timelines", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + type: enum_timelines_type("type").notNull().default("history"), + status: enum_timelines_status("status").notNull().default("draft"), + displayOptions_layout: enum_timelines_display_options_layout("display_options_layout").default("vertical"), + displayOptions_sortOrder: enum_timelines_display_options_sort_order("display_options_sort_order").default("desc"), + displayOptions_showConnector: boolean("display_options_show_connector").default(true), + displayOptions_showImages: boolean("display_options_show_images").default(true), + displayOptions_groupByYear: boolean("display_options_group_by_year").default(false), + displayOptions_markerStyle: + enum_timelines_display_options_marker_style("display_options_marker_style").default("dot"), + displayOptions_colorScheme: + enum_timelines_display_options_color_scheme("display_options_color_scheme").default("primary"), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("timelines_tenant_idx").on(columns.tenant), + uniqueIndex("timelines_slug_idx").on(columns.slug), + index("timelines_updated_at_idx").on(columns.updatedAt), + index("timelines_created_at_idx").on(columns.createdAt), + ], +); + +export const timelines_locales = pgTable( + "timelines_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("timelines_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [timelines.id], + name: "timelines_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_conditions = pgTable( + "workflows_phases_steps_conditions", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + nextStep: varchar("next_step"), + color: varchar("color"), + }, + (columns) => [ + index("workflows_phases_steps_conditions_order_idx").on(columns._order), + index("workflows_phases_steps_conditions_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps.id], + name: "workflows_phases_steps_conditions_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_conditions_locales = pgTable( + "workflows_phases_steps_conditions_locales", + { + condition: varchar("condition"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_phases_steps_conditions_locales_locale_parent_id_u").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps_conditions.id], + name: "workflows_phases_steps_conditions_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_checklist = pgTable( + "workflows_phases_steps_checklist", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + isRequired: boolean("is_required").default(true), + }, + (columns) => [ + index("workflows_phases_steps_checklist_order_idx").on(columns._order), + index("workflows_phases_steps_checklist_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps.id], + name: "workflows_phases_steps_checklist_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_checklist_locales = pgTable( + "workflows_phases_steps_checklist_locales", + { + item: varchar("item").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_phases_steps_checklist_locales_locale_parent_id_un").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps_checklist.id], + name: "workflows_phases_steps_checklist_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_resources = pgTable( + "workflows_phases_steps_resources", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + type: enum_workflows_phases_steps_resources_type("type").default("document"), + file: integer("file_id").references(() => media.id, { + onDelete: "set null", + }), + url: varchar("url"), + }, + (columns) => [ + index("workflows_phases_steps_resources_order_idx").on(columns._order), + index("workflows_phases_steps_resources_parent_id_idx").on(columns._parentID), + index("workflows_phases_steps_resources_file_idx").on(columns.file), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps.id], + name: "workflows_phases_steps_resources_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_resources_locales = pgTable( + "workflows_phases_steps_resources_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_phases_steps_resources_locales_locale_parent_id_un").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps_resources.id], + name: "workflows_phases_steps_resources_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_outputs = pgTable( + "workflows_phases_steps_outputs", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("workflows_phases_steps_outputs_order_idx").on(columns._order), + index("workflows_phases_steps_outputs_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps.id], + name: "workflows_phases_steps_outputs_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_outputs_locales = pgTable( + "workflows_phases_steps_outputs_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_phases_steps_outputs_locales_locale_parent_id_uniq").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps_outputs.id], + name: "workflows_phases_steps_outputs_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps = pgTable( + "workflows_phases_steps", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + stepType: enum_workflows_phases_steps_step_type("step_type").default("task"), + priority: enum_workflows_phases_steps_priority("priority").default("normal"), + icon: varchar("icon"), + dependencies_dependsOnSteps: varchar("dependencies_depends_on_steps"), + dependencies_canRunParallel: boolean("dependencies_can_run_parallel").default(false), + dependencies_isBlocking: boolean("dependencies_is_blocking").default(true), + metadata: jsonb("metadata"), + }, + (columns) => [ + index("workflows_phases_steps_order_idx").on(columns._order), + index("workflows_phases_steps_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases.id], + name: "workflows_phases_steps_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_steps_locales = pgTable( + "workflows_phases_steps_locales", + { + name: varchar("name").notNull(), + description: jsonb("description"), + shortDescription: varchar("short_description"), + estimatedDuration: varchar("estimated_duration"), + responsible: varchar("responsible"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_phases_steps_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_steps.id], + name: "workflows_phases_steps_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_deliverables = pgTable( + "workflows_phases_deliverables", + { + _order: integer("_order").notNull(), + _parentID: varchar("_parent_id").notNull(), + id: varchar("id").primaryKey(), + }, + (columns) => [ + index("workflows_phases_deliverables_order_idx").on(columns._order), + index("workflows_phases_deliverables_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases.id], + name: "workflows_phases_deliverables_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_deliverables_locales = pgTable( + "workflows_phases_deliverables_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_phases_deliverables_locales_locale_parent_id_uniqu").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases_deliverables.id], + name: "workflows_phases_deliverables_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases = pgTable( + "workflows_phases", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: varchar("icon"), + color: varchar("color"), + }, + (columns) => [ + index("workflows_phases_order_idx").on(columns._order), + index("workflows_phases_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows.id], + name: "workflows_phases_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_phases_locales = pgTable( + "workflows_phases_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + estimatedDuration: varchar("estimated_duration"), + responsible: varchar("responsible"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_phases_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_phases.id], + name: "workflows_phases_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_global_resources = pgTable( + "workflows_global_resources", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + type: enum_workflows_global_resources_type("type").default("document"), + file: integer("file_id").references(() => media.id, { + onDelete: "set null", + }), + url: varchar("url"), + }, + (columns) => [ + index("workflows_global_resources_order_idx").on(columns._order), + index("workflows_global_resources_parent_id_idx").on(columns._parentID), + index("workflows_global_resources_file_idx").on(columns.file), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows.id], + name: "workflows_global_resources_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows_global_resources_locales = pgTable( + "workflows_global_resources_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_global_resources_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows_global_resources.id], + name: "workflows_global_resources_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const workflows = pgTable( + "workflows", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + type: enum_workflows_type("type").notNull().default("project"), + status: enum_workflows_status("status").notNull().default("draft"), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + properties_complexity: enum_workflows_properties_complexity("properties_complexity"), + properties_isIterative: boolean("properties_is_iterative").default(false), + properties_allowParallelPhases: boolean("properties_allow_parallel_phases").default(false), + displayOptions_layout: enum_workflows_display_options_layout("display_options_layout").default("vertical"), + displayOptions_showPhaseNumbers: boolean("display_options_show_phase_numbers").default(true), + displayOptions_showStepNumbers: boolean("display_options_show_step_numbers").default(true), + displayOptions_showDurations: boolean("display_options_show_durations").default(true), + displayOptions_showResponsible: boolean("display_options_show_responsible").default(true), + displayOptions_showProgress: boolean("display_options_show_progress").default(false), + displayOptions_colorScheme: + enum_workflows_display_options_color_scheme("display_options_color_scheme").default("phase"), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("workflows_tenant_idx").on(columns.tenant), + uniqueIndex("workflows_slug_idx").on(columns.slug), + index("workflows_image_idx").on(columns.image), + index("workflows_updated_at_idx").on(columns.updatedAt), + index("workflows_created_at_idx").on(columns.createdAt), + ], +); + +export const workflows_locales = pgTable( + "workflows_locales", + { + name: varchar("name").notNull(), + description: jsonb("description"), + shortDescription: varchar("short_description"), + properties_estimatedDuration: varchar("properties_estimated_duration"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("workflows_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [workflows.id], + name: "workflows_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const tags = pgTable( + "tags", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + color: varchar("color"), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("tags_tenant_idx").on(columns.tenant), + uniqueIndex("tags_slug_idx").on(columns.slug), + index("tags_updated_at_idx").on(columns.updatedAt), + index("tags_created_at_idx").on(columns.createdAt), + ], +); + +export const tags_locales = pgTable( + "tags_locales", + { + name: varchar("name").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("tags_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [tags.id], + name: "tags_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const authors = pgTable( + "authors", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + name: varchar("name").notNull(), + slug: varchar("slug").notNull(), + avatar: integer("avatar_id").references(() => media.id, { + onDelete: "set null", + }), + email: varchar("email"), + website: varchar("website"), + social_twitter: varchar("social_twitter"), + social_linkedin: varchar("social_linkedin"), + social_github: varchar("social_github"), + social_instagram: varchar("social_instagram"), + linkedTeam: integer("linked_team_id").references(() => team.id, { + onDelete: "set null", + }), + linkedUser: integer("linked_user_id").references(() => users.id, { + onDelete: "set null", + }), + isActive: boolean("is_active").default(true), + isGuest: boolean("is_guest").default(false), + featured: boolean("featured").default(false), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("authors_tenant_idx").on(columns.tenant), + uniqueIndex("authors_slug_idx").on(columns.slug), + index("authors_avatar_idx").on(columns.avatar), + index("authors_linked_team_idx").on(columns.linkedTeam), + index("authors_linked_user_idx").on(columns.linkedUser), + index("authors_updated_at_idx").on(columns.updatedAt), + index("authors_created_at_idx").on(columns.createdAt), + ], +); + +export const authors_locales = pgTable( + "authors_locales", + { + bio: jsonb("bio"), + bioShort: varchar("bio_short"), + title: varchar("title"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("authors_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [authors.id], + name: "authors_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const locations_hours_structured = pgTable( + "locations_hours_structured", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + day: enum_locations_hours_structured_day("day").notNull(), + closed: boolean("closed").default(false), + open: varchar("open"), + close: varchar("close"), + break_hasBreak: boolean("break_has_break").default(false), + break_start: varchar("break_start"), + break_end: varchar("break_end"), + }, + (columns) => [ + index("locations_hours_structured_order_idx").on(columns._order), + index("locations_hours_structured_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [locations.id], + name: "locations_hours_structured_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const locations = pgTable( + "locations", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + type: enum_locations_type("type").default("office"), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + address_street: varchar("address_street").notNull(), + address_additionalLine: varchar("address_additional_line"), + address_zip: varchar("address_zip").notNull(), + address_city: varchar("address_city").notNull(), + address_state: varchar("address_state"), + address_country: varchar("address_country").default("Deutschland"), + geo_lat: numeric("geo_lat", { mode: "number" }), + geo_lng: numeric("geo_lng", { mode: "number" }), + geo_zoom: numeric("geo_zoom", { mode: "number" }).default(15), + contact_phone: varchar("contact_phone"), + contact_fax: varchar("contact_fax"), + contact_email: varchar("contact_email"), + contact_website: varchar("contact_website"), + isMain: boolean("is_main").default(false), + isActive: boolean("is_active").default(true), + showInFooter: boolean("show_in_footer").default(false), + order: numeric("order", { mode: "number" }).default(0), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("locations_tenant_idx").on(columns.tenant), + uniqueIndex("locations_slug_idx").on(columns.slug), + index("locations_image_idx").on(columns.image), + index("locations_updated_at_idx").on(columns.updatedAt), + index("locations_created_at_idx").on(columns.createdAt), + ], +); + +export const locations_locales = pgTable( + "locations_locales", + { + name: varchar("name").notNull(), + description: jsonb("description"), + hours_display: varchar("hours_display"), + hours_note: varchar("hours_note"), + directions_text: jsonb("directions_text"), + directions_parking: varchar("directions_parking"), + directions_publicTransport: varchar("directions_public_transport"), + directions_accessibility: varchar("directions_accessibility"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("locations_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [locations.id], + name: "locations_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const locations_rels = pgTable( + "locations_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + servicesID: integer("services_id"), + teamID: integer("team_id"), + }, + (columns) => [ + index("locations_rels_order_idx").on(columns.order), + index("locations_rels_parent_idx").on(columns.parent), + index("locations_rels_path_idx").on(columns.path), + index("locations_rels_services_id_idx").on(columns.servicesID), + index("locations_rels_team_id_idx").on(columns.teamID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [locations.id], + name: "locations_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["servicesID"]], + foreignColumns: [services.id], + name: "locations_rels_services_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["teamID"]], + foreignColumns: [team.id], + name: "locations_rels_team_fk", + }).onDelete("cascade"), + ], +); + +export const partners_case_study_results = pgTable( + "partners_case_study_results", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + metric: varchar("metric"), + }, + (columns) => [ + index("partners_case_study_results_order_idx").on(columns._order), + index("partners_case_study_results_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [partners.id], + name: "partners_case_study_results_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const partners_case_study_results_locales = pgTable( + "partners_case_study_results_locales", + { + label: varchar("label"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("partners_case_study_results_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [partners_case_study_results.id], + name: "partners_case_study_results_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const partners_tags = pgTable( + "partners_tags", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + tag: varchar("tag").notNull(), + }, + (columns) => [ + index("partners_tags_order_idx").on(columns._order), + index("partners_tags_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [partners.id], + name: "partners_tags_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const partners = pgTable( + "partners", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + name: varchar("name").notNull(), + slug: varchar("slug").notNull(), + type: enum_partners_type("type").notNull().default("partner"), + logo: integer("logo_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + logoLight: integer("logo_light_id").references(() => media.id, { + onDelete: "set null", + }), + website: varchar("website"), + caseStudy_quotePerson: varchar("case_study_quote_person"), + caseStudy_quoteRole: varchar("case_study_quote_role"), + certification_issuer: varchar("certification_issuer"), + certification_validFrom: timestamp("certification_valid_from", { + mode: "string", + withTimezone: true, + precision: 3, + }), + certification_validUntil: timestamp("certification_valid_until", { + mode: "string", + withTimezone: true, + precision: 3, + }), + certification_certNumber: varchar("certification_cert_number"), + certification_document: integer("certification_document_id").references(() => media.id, { + onDelete: "set null", + }), + category: varchar("category"), + isFeatured: boolean("is_featured").default(false), + isActive: boolean("is_active").default(true), + order: numeric("order", { mode: "number" }).default(0), + since: timestamp("since", { mode: "string", withTimezone: true, precision: 3 }), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("partners_tenant_idx").on(columns.tenant), + uniqueIndex("partners_slug_idx").on(columns.slug), + index("partners_logo_idx").on(columns.logo), + index("partners_logo_light_idx").on(columns.logoLight), + index("partners_certification_certification_document_idx").on(columns.certification_document), + index("partners_updated_at_idx").on(columns.updatedAt), + index("partners_created_at_idx").on(columns.createdAt), + ], +); + +export const partners_locales = pgTable( + "partners_locales", + { + description: varchar("description"), + caseStudy_quote: varchar("case_study_quote"), + caseStudy_projectDescription: jsonb("case_study_project_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("partners_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [partners.id], + name: "partners_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const jobs_benefits_list = pgTable( + "jobs_benefits_list", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + icon: enum_jobs_benefits_list_icon("icon"), + }, + (columns) => [ + index("jobs_benefits_list_order_idx").on(columns._order), + index("jobs_benefits_list_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [jobs.id], + name: "jobs_benefits_list_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const jobs_benefits_list_locales = pgTable( + "jobs_benefits_list_locales", + { + benefit: varchar("benefit").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("jobs_benefits_list_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [jobs_benefits_list.id], + name: "jobs_benefits_list_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const jobs = pgTable( + "jobs", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + reference: varchar("reference"), + category: enum_jobs_category("category"), + type: enum_jobs_type("type").notNull().default("fulltime"), + workModel: enum_jobs_work_model("work_model"), + experienceLevel: enum_jobs_experience_level("experience_level"), + location_locationRef: integer("location_location_ref_id").references(() => locations.id, { + onDelete: "set null", + }), + location_city: varchar("location_city"), + location_region: varchar("location_region"), + location_country: varchar("location_country").default("Deutschland"), + salary_show: boolean("salary_show").default(false), + salary_type: enum_jobs_salary_type("salary_type"), + salary_min: numeric("salary_min", { mode: "number" }), + salary_max: numeric("salary_max", { mode: "number" }), + salary_currency: varchar("salary_currency").default("EUR"), + application_method: enum_jobs_application_method("application_method").default("email"), + application_email: varchar("application_email"), + application_formId: integer("application_form_id_id").references(() => forms.id, { + onDelete: "set null", + }), + application_externalUrl: varchar("application_external_url"), + application_contact: integer("application_contact_id").references(() => team.id, { + onDelete: "set null", + }), + application_deadline: timestamp("application_deadline", { mode: "string", withTimezone: true, precision: 3 }), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + status: enum_jobs_status("status").notNull().default("draft"), + publishedAt: timestamp("published_at", { mode: "string", withTimezone: true, precision: 3 }), + isFeatured: boolean("is_featured").default(false), + isUrgent: boolean("is_urgent").default(false), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("jobs_tenant_idx").on(columns.tenant), + uniqueIndex("jobs_slug_idx").on(columns.slug), + index("jobs_location_location_location_ref_idx").on(columns.location_locationRef), + index("jobs_application_application_form_id_idx").on(columns.application_formId), + index("jobs_application_application_contact_idx").on(columns.application_contact), + index("jobs_image_idx").on(columns.image), + index("jobs_updated_at_idx").on(columns.updatedAt), + index("jobs_created_at_idx").on(columns.createdAt), + ], +); + +export const jobs_locales = pgTable( + "jobs_locales", + { + title: varchar("title").notNull(), + department: varchar("department"), + summary: varchar("summary"), + description: jsonb("description"), + responsibilities: jsonb("responsibilities"), + requirements: jsonb("requirements"), + qualifications: jsonb("qualifications"), + benefits: jsonb("benefits"), + salary_note: varchar("salary_note"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("jobs_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [jobs.id], + name: "jobs_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const downloads_tags = pgTable( + "downloads_tags", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + tag: varchar("tag").notNull(), + }, + (columns) => [ + index("downloads_tags_order_idx").on(columns._order), + index("downloads_tags_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [downloads.id], + name: "downloads_tags_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const downloads_access_form_fields = pgTable( + "downloads_access_form_fields", + { + order: integer("order").notNull(), + parent: integer("parent_id").notNull(), + value: enum_downloads_access_form_fields("value"), + id: serial("id").primaryKey(), + }, + (columns) => [ + index("downloads_access_form_fields_order_idx").on(columns.order), + index("downloads_access_form_fields_parent_idx").on(columns.parent), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [downloads.id], + name: "downloads_access_form_fields_parent_fk", + }).onDelete("cascade"), + ], +); + +export const downloads = pgTable( + "downloads", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + file: integer("file_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + fileType: enum_downloads_file_type("file_type"), + fileSize: varchar("file_size"), + category: enum_downloads_category("category"), + thumbnail: integer("thumbnail_id").references(() => media.id, { + onDelete: "set null", + }), + access_requireLogin: boolean("access_require_login").default(false), + access_requireForm: boolean("access_require_form").default(false), + downloadCount: numeric("download_count", { mode: "number" }).default(0), + version: varchar("version"), + lastUpdated: timestamp("last_updated", { mode: "string", withTimezone: true, precision: 3 }), + isActive: boolean("is_active").default(true), + isFeatured: boolean("is_featured").default(false), + order: numeric("order", { mode: "number" }).default(0), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("downloads_tenant_idx").on(columns.tenant), + uniqueIndex("downloads_slug_idx").on(columns.slug), + index("downloads_file_idx").on(columns.file), + index("downloads_thumbnail_idx").on(columns.thumbnail), + index("downloads_updated_at_idx").on(columns.updatedAt), + index("downloads_created_at_idx").on(columns.createdAt), + ], +); + +export const downloads_locales = pgTable( + "downloads_locales", + { + title: varchar("title").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("downloads_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [downloads.id], + name: "downloads_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const downloads_rels = pgTable( + "downloads_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + servicesID: integer("services_id"), + productsID: integer("products_id"), + }, + (columns) => [ + index("downloads_rels_order_idx").on(columns.order), + index("downloads_rels_parent_idx").on(columns.parent), + index("downloads_rels_path_idx").on(columns.path), + index("downloads_rels_services_id_idx").on(columns.servicesID), + index("downloads_rels_products_id_idx").on(columns.productsID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [downloads.id], + name: "downloads_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["servicesID"]], + foreignColumns: [services.id], + name: "downloads_rels_services_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["productsID"]], + foreignColumns: [products.id], + name: "downloads_rels_products_fk", + }).onDelete("cascade"), + ], +); + +export const events_gallery = pgTable( + "events_gallery", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + image: integer("image_id") + .notNull() + .references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("events_gallery_order_idx").on(columns._order), + index("events_gallery_parent_id_idx").on(columns._parentID), + index("events_gallery_image_idx").on(columns.image), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events.id], + name: "events_gallery_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_gallery_locales = pgTable( + "events_gallery_locales", + { + caption: varchar("caption"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("events_gallery_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events_gallery.id], + name: "events_gallery_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_pricing_prices = pgTable( + "events_pricing_prices", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + price: numeric("price", { mode: "number" }), + currency: varchar("currency").default("EUR"), + validUntil: timestamp("valid_until", { mode: "string", withTimezone: true, precision: 3 }), + }, + (columns) => [ + index("events_pricing_prices_order_idx").on(columns._order), + index("events_pricing_prices_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events.id], + name: "events_pricing_prices_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_pricing_prices_locales = pgTable( + "events_pricing_prices_locales", + { + name: varchar("name"), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("events_pricing_prices_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events_pricing_prices.id], + name: "events_pricing_prices_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_speakers = pgTable( + "events_speakers", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + teamMember: integer("team_member_id").references(() => team.id, { + onDelete: "set null", + }), + isExternal: boolean("is_external").default(false), + name: varchar("name"), + company: varchar("company"), + photo: integer("photo_id").references(() => media.id, { + onDelete: "set null", + }), + }, + (columns) => [ + index("events_speakers_order_idx").on(columns._order), + index("events_speakers_parent_id_idx").on(columns._parentID), + index("events_speakers_team_member_idx").on(columns.teamMember), + index("events_speakers_photo_idx").on(columns.photo), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events.id], + name: "events_speakers_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_speakers_locales = pgTable( + "events_speakers_locales", + { + title: varchar("title"), + bio: varchar("bio"), + role: varchar("role"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("events_speakers_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events_speakers.id], + name: "events_speakers_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_agenda = pgTable( + "events_agenda", + { + _order: integer("_order").notNull(), + _parentID: integer("_parent_id").notNull(), + id: varchar("id").primaryKey(), + time: varchar("time"), + speaker: varchar("speaker"), + type: enum_events_agenda_type("type"), + }, + (columns) => [ + index("events_agenda_order_idx").on(columns._order), + index("events_agenda_parent_id_idx").on(columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events.id], + name: "events_agenda_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_agenda_locales = pgTable( + "events_agenda_locales", + { + title: varchar("title").notNull(), + description: varchar("description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("events_agenda_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events_agenda.id], + name: "events_agenda_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events = pgTable( + "events", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + slug: varchar("slug").notNull(), + eventType: enum_events_event_type("event_type").notNull().default("event"), + category: varchar("category"), + format: enum_events_format("format").notNull().default("onsite"), + startDate: timestamp("start_date", { mode: "string", withTimezone: true, precision: 3 }).notNull(), + endDate: timestamp("end_date", { mode: "string", withTimezone: true, precision: 3 }), + isAllDay: boolean("is_all_day").default(false), + timezone: varchar("timezone").default("Europe/Berlin"), + isRecurring: boolean("is_recurring").default(false), + recurrence_frequency: enum_events_recurrence_frequency("recurrence_frequency"), + recurrence_interval: numeric("recurrence_interval", { mode: "number" }).default(1), + recurrence_endRecurrence: timestamp("recurrence_end_recurrence", { + mode: "string", + withTimezone: true, + precision: 3, + }), + location_locationRef: integer("location_location_ref_id").references(() => locations.id, { + onDelete: "set null", + }), + location_customLocation: boolean("location_custom_location").default(false), + location_street: varchar("location_street"), + location_zip: varchar("location_zip"), + location_city: varchar("location_city"), + location_country: varchar("location_country").default("Deutschland"), + online_platform: enum_events_online_platform("online_platform"), + online_accessLink: varchar("online_access_link"), + image: integer("image_id").references(() => media.id, { + onDelete: "set null", + }), + registration_required: boolean("registration_required").default(false), + registration_method: enum_events_registration_method("registration_method").default("form"), + registration_formId: integer("registration_form_id_id").references(() => forms.id, { + onDelete: "set null", + }), + registration_email: varchar("registration_email"), + registration_externalUrl: varchar("registration_external_url"), + registration_phone: varchar("registration_phone"), + registration_deadline: timestamp("registration_deadline", { mode: "string", withTimezone: true, precision: 3 }), + registration_maxParticipants: numeric("registration_max_participants", { mode: "number" }), + registration_currentParticipants: numeric("registration_current_participants", { mode: "number" }).default(0), + registration_waitlistEnabled: boolean("registration_waitlist_enabled").default(false), + pricing_isFree: boolean("pricing_is_free").default(true), + contact_teamMember: integer("contact_team_member_id").references(() => team.id, { + onDelete: "set null", + }), + contact_name: varchar("contact_name"), + contact_email: varchar("contact_email"), + contact_phone: varchar("contact_phone"), + seo_ogImage: integer("seo_og_image_id").references(() => media.id, { + onDelete: "set null", + }), + status: enum_events_status("status").notNull().default("draft"), + isFeatured: boolean("is_featured").default(false), + publishedAt: timestamp("published_at", { mode: "string", withTimezone: true, precision: 3 }), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("events_tenant_idx").on(columns.tenant), + uniqueIndex("events_slug_idx").on(columns.slug), + index("events_location_location_location_ref_idx").on(columns.location_locationRef), + index("events_image_idx").on(columns.image), + index("events_registration_registration_form_id_idx").on(columns.registration_formId), + index("events_contact_contact_team_member_idx").on(columns.contact_teamMember), + index("events_seo_seo_og_image_idx").on(columns.seo_ogImage), + index("events_updated_at_idx").on(columns.updatedAt), + index("events_created_at_idx").on(columns.createdAt), + ], +); + +export const events_locales = pgTable( + "events_locales", + { + title: varchar("title").notNull(), + subtitle: varchar("subtitle"), + description: jsonb("description"), + excerpt: varchar("excerpt"), + recurrence_description: varchar("recurrence_description"), + location_venueName: varchar("location_venue_name"), + location_room: varchar("location_room"), + location_directions: varchar("location_directions"), + online_accessInfo: varchar("online_access_info"), + pricing_priceNote: varchar("pricing_price_note"), + seo_metaTitle: varchar("seo_meta_title"), + seo_metaDescription: varchar("seo_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("events_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [events.id], + name: "events_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const events_rels = pgTable( + "events_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + servicesID: integer("services_id"), + eventsID: integer("events_id"), + }, + (columns) => [ + index("events_rels_order_idx").on(columns.order), + index("events_rels_parent_idx").on(columns.parent), + index("events_rels_path_idx").on(columns.path), + index("events_rels_services_id_idx").on(columns.servicesID), + index("events_rels_events_id_idx").on(columns.eventsID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [events.id], + name: "events_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["servicesID"]], + foreignColumns: [services.id], + name: "events_rels_services_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["eventsID"]], + foreignColumns: [events.id], + name: "events_rels_events_fk", + }).onDelete("cascade"), + ], +); + export const cookie_configurations_enabled_categories = pgTable( "cookie_configurations_enabled_categories", { @@ -1445,6 +8913,65 @@ export const privacy_policy_settings = pgTable( ], ); +export const email_logs = pgTable( + "email_logs", + { + id: serial("id").primaryKey(), + tenant: integer("tenant_id") + .notNull() + .references(() => tenants.id, { + onDelete: "set null", + }), + to: varchar("to").notNull(), + from: varchar("from").notNull(), + subject: varchar("subject").notNull(), + status: enum_email_logs_status("status").notNull().default("pending"), + messageId: varchar("message_id"), + error: varchar("error"), + source: enum_email_logs_source("source").notNull().default("manual"), + metadata: jsonb("metadata"), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("email_logs_tenant_idx").on(columns.tenant), + index("email_logs_updated_at_idx").on(columns.updatedAt), + index("email_logs_created_at_idx").on(columns.createdAt), + ], +); + +export const audit_logs = pgTable( + "audit_logs", + { + id: serial("id").primaryKey(), + action: enum_audit_logs_action("action").notNull(), + severity: enum_audit_logs_severity("severity").notNull().default("info"), + entityType: enum_audit_logs_entity_type("entity_type"), + entityId: varchar("entity_id"), + user: integer("user_id").references(() => users.id, { + onDelete: "set null", + }), + userEmail: varchar("user_email"), + tenant: integer("tenant_id").references(() => tenants.id, { + onDelete: "set null", + }), + ipAddress: varchar("ip_address"), + userAgent: varchar("user_agent"), + description: varchar("description"), + previousValue: jsonb("previous_value"), + newValue: jsonb("new_value"), + metadata: jsonb("metadata"), + updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), + }, + (columns) => [ + index("audit_logs_user_idx").on(columns.user), + index("audit_logs_tenant_idx").on(columns.tenant), + index("audit_logs_updated_at_idx").on(columns.updatedAt), + index("audit_logs_created_at_idx").on(columns.createdAt), + ], +); + export const forms_blocks_checkbox = pgTable( "forms_blocks_checkbox", { @@ -1453,7 +8980,6 @@ export const forms_blocks_checkbox = pgTable( _path: text("_path").notNull(), id: varchar("id").primaryKey(), name: varchar("name").notNull(), - label: varchar("label"), width: numeric("width", { mode: "number" }), required: boolean("required"), defaultValue: boolean("default_value"), @@ -1471,6 +8997,24 @@ export const forms_blocks_checkbox = pgTable( ], ); +export const forms_blocks_checkbox_locales = pgTable( + "forms_blocks_checkbox_locales", + { + label: varchar("label"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_checkbox_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_checkbox.id], + name: "forms_blocks_checkbox_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_blocks_email = pgTable( "forms_blocks_email", { @@ -1479,7 +9023,6 @@ export const forms_blocks_email = pgTable( _path: text("_path").notNull(), id: varchar("id").primaryKey(), name: varchar("name").notNull(), - label: varchar("label"), width: numeric("width", { mode: "number" }), required: boolean("required"), blockName: varchar("block_name"), @@ -1496,6 +9039,24 @@ export const forms_blocks_email = pgTable( ], ); +export const forms_blocks_email_locales = pgTable( + "forms_blocks_email_locales", + { + label: varchar("label"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_email_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_email.id], + name: "forms_blocks_email_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_blocks_message = pgTable( "forms_blocks_message", { @@ -1503,7 +9064,6 @@ export const forms_blocks_message = pgTable( _parentID: integer("_parent_id").notNull(), _path: text("_path").notNull(), id: varchar("id").primaryKey(), - message: jsonb("message"), blockName: varchar("block_name"), }, (columns) => [ @@ -1518,6 +9078,24 @@ export const forms_blocks_message = pgTable( ], ); +export const forms_blocks_message_locales = pgTable( + "forms_blocks_message_locales", + { + message: jsonb("message"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_message_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_message.id], + name: "forms_blocks_message_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_blocks_number = pgTable( "forms_blocks_number", { @@ -1526,7 +9104,6 @@ export const forms_blocks_number = pgTable( _path: text("_path").notNull(), id: varchar("id").primaryKey(), name: varchar("name").notNull(), - label: varchar("label"), width: numeric("width", { mode: "number" }), defaultValue: numeric("default_value", { mode: "number" }), required: boolean("required"), @@ -1544,13 +9121,30 @@ export const forms_blocks_number = pgTable( ], ); +export const forms_blocks_number_locales = pgTable( + "forms_blocks_number_locales", + { + label: varchar("label"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_number_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_number.id], + name: "forms_blocks_number_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_blocks_select_options = pgTable( "forms_blocks_select_options", { _order: integer("_order").notNull(), _parentID: varchar("_parent_id").notNull(), id: varchar("id").primaryKey(), - label: varchar("label").notNull(), value: varchar("value").notNull(), }, (columns) => [ @@ -1564,6 +9158,24 @@ export const forms_blocks_select_options = pgTable( ], ); +export const forms_blocks_select_options_locales = pgTable( + "forms_blocks_select_options_locales", + { + label: varchar("label").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_select_options_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_select_options.id], + name: "forms_blocks_select_options_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_blocks_select = pgTable( "forms_blocks_select", { @@ -1572,9 +9184,7 @@ export const forms_blocks_select = pgTable( _path: text("_path").notNull(), id: varchar("id").primaryKey(), name: varchar("name").notNull(), - label: varchar("label"), width: numeric("width", { mode: "number" }), - defaultValue: varchar("default_value"), placeholder: varchar("placeholder"), required: boolean("required"), blockName: varchar("block_name"), @@ -1591,6 +9201,25 @@ export const forms_blocks_select = pgTable( ], ); +export const forms_blocks_select_locales = pgTable( + "forms_blocks_select_locales", + { + label: varchar("label"), + defaultValue: varchar("default_value"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_select_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_select.id], + name: "forms_blocks_select_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_blocks_text = pgTable( "forms_blocks_text", { @@ -1599,9 +9228,7 @@ export const forms_blocks_text = pgTable( _path: text("_path").notNull(), id: varchar("id").primaryKey(), name: varchar("name").notNull(), - label: varchar("label"), width: numeric("width", { mode: "number" }), - defaultValue: varchar("default_value"), required: boolean("required"), blockName: varchar("block_name"), }, @@ -1617,6 +9244,25 @@ export const forms_blocks_text = pgTable( ], ); +export const forms_blocks_text_locales = pgTable( + "forms_blocks_text_locales", + { + label: varchar("label"), + defaultValue: varchar("default_value"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_text_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_text.id], + name: "forms_blocks_text_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_blocks_textarea = pgTable( "forms_blocks_textarea", { @@ -1625,9 +9271,7 @@ export const forms_blocks_textarea = pgTable( _path: text("_path").notNull(), id: varchar("id").primaryKey(), name: varchar("name").notNull(), - label: varchar("label"), width: numeric("width", { mode: "number" }), - defaultValue: varchar("default_value"), required: boolean("required"), blockName: varchar("block_name"), }, @@ -1643,6 +9287,25 @@ export const forms_blocks_textarea = pgTable( ], ); +export const forms_blocks_textarea_locales = pgTable( + "forms_blocks_textarea_locales", + { + label: varchar("label"), + defaultValue: varchar("default_value"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_blocks_textarea_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_blocks_textarea.id], + name: "forms_blocks_textarea_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms_emails = pgTable( "forms_emails", { @@ -1654,8 +9317,6 @@ export const forms_emails = pgTable( bcc: varchar("bcc"), replyTo: varchar("reply_to"), emailFrom: varchar("email_from"), - subject: varchar("subject").notNull().default("You've received a new message."), - message: jsonb("message"), }, (columns) => [ index("forms_emails_order_idx").on(columns._order), @@ -1668,14 +9329,32 @@ export const forms_emails = pgTable( ], ); +export const forms_emails_locales = pgTable( + "forms_emails_locales", + { + subject: varchar("subject").notNull().default("You've received a new message."), + message: jsonb("message"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_emails_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms_emails.id], + name: "forms_emails_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const forms = pgTable( "forms", { id: serial("id").primaryKey(), title: varchar("title").notNull(), - submitButtonLabel: varchar("submit_button_label"), confirmationType: enum_forms_confirmation_type("confirmation_type").default("message"), - confirmationMessage: jsonb("confirmation_message"), + redirect_type: enum_forms_redirect_type("redirect_type").default("reference"), redirect_url: varchar("redirect_url"), updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), createdAt: timestamp("created_at", { mode: "string", withTimezone: true, precision: 3 }).defaultNow().notNull(), @@ -1686,6 +9365,52 @@ export const forms = pgTable( ], ); +export const forms_locales = pgTable( + "forms_locales", + { + submitButtonLabel: varchar("submit_button_label"), + confirmationMessage: jsonb("confirmation_message"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("forms_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [forms.id], + name: "forms_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + +export const forms_rels = pgTable( + "forms_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + pagesID: integer("pages_id"), + }, + (columns) => [ + index("forms_rels_order_idx").on(columns.order), + index("forms_rels_parent_idx").on(columns.parent), + index("forms_rels_path_idx").on(columns.path), + index("forms_rels_pages_id_idx").on(columns.pagesID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [forms.id], + name: "forms_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["pagesID"]], + foreignColumns: [pages.id], + name: "forms_rels_pages_fk", + }).onDelete("cascade"), + ], +); + export const form_submissions_submission_data = pgTable( "form_submissions_submission_data", { @@ -1742,6 +9467,33 @@ export const redirects = pgTable( ], ); +export const redirects_rels = pgTable( + "redirects_rels", + { + id: serial("id").primaryKey(), + order: integer("order"), + parent: integer("parent_id").notNull(), + path: varchar("path").notNull(), + pagesID: integer("pages_id"), + }, + (columns) => [ + index("redirects_rels_order_idx").on(columns.order), + index("redirects_rels_parent_idx").on(columns.parent), + index("redirects_rels_path_idx").on(columns.path), + index("redirects_rels_pages_id_idx").on(columns.pagesID), + foreignKey({ + columns: [columns["parent"]], + foreignColumns: [redirects.id], + name: "redirects_rels_parent_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["pagesID"]], + foreignColumns: [pages.id], + name: "redirects_rels_pages_fk", + }).onDelete("cascade"), + ], +); + export const payload_kv = pgTable( "payload_kv", { @@ -1782,11 +9534,30 @@ export const payload_locked_documents_rels = pgTable( categoriesID: integer("categories_id"), "social-linksID": integer("social_links_id"), testimonialsID: integer("testimonials_id"), + faqsID: integer("faqs_id"), + teamID: integer("team_id"), + "service-categoriesID": integer("service_categories_id"), + servicesID: integer("services_id"), "newsletter-subscribersID": integer("newsletter_subscribers_id"), + "portfolio-categoriesID": integer("portfolio_categories_id"), + portfoliosID: integer("portfolios_id"), + "product-categoriesID": integer("product_categories_id"), + productsID: integer("products_id"), + timelinesID: integer("timelines_id"), + workflowsID: integer("workflows_id"), + tagsID: integer("tags_id"), + authorsID: integer("authors_id"), + locationsID: integer("locations_id"), + partnersID: integer("partners_id"), + jobsID: integer("jobs_id"), + downloadsID: integer("downloads_id"), + eventsID: integer("events_id"), "cookie-configurationsID": integer("cookie_configurations_id"), "cookie-inventoryID": integer("cookie_inventory_id"), "consent-logsID": integer("consent_logs_id"), "privacy-policy-settingsID": integer("privacy_policy_settings_id"), + "email-logsID": integer("email_logs_id"), + "audit-logsID": integer("audit_logs_id"), formsID: integer("forms_id"), "form-submissionsID": integer("form_submissions_id"), redirectsID: integer("redirects_id"), @@ -1803,11 +9574,30 @@ export const payload_locked_documents_rels = pgTable( index("payload_locked_documents_rels_categories_id_idx").on(columns.categoriesID), index("payload_locked_documents_rels_social_links_id_idx").on(columns["social-linksID"]), index("payload_locked_documents_rels_testimonials_id_idx").on(columns.testimonialsID), + index("payload_locked_documents_rels_faqs_id_idx").on(columns.faqsID), + index("payload_locked_documents_rels_team_id_idx").on(columns.teamID), + index("payload_locked_documents_rels_service_categories_id_idx").on(columns["service-categoriesID"]), + index("payload_locked_documents_rels_services_id_idx").on(columns.servicesID), index("payload_locked_documents_rels_newsletter_subscribers_id_idx").on(columns["newsletter-subscribersID"]), + index("payload_locked_documents_rels_portfolio_categories_id_idx").on(columns["portfolio-categoriesID"]), + index("payload_locked_documents_rels_portfolios_id_idx").on(columns.portfoliosID), + index("payload_locked_documents_rels_product_categories_id_idx").on(columns["product-categoriesID"]), + index("payload_locked_documents_rels_products_id_idx").on(columns.productsID), + index("payload_locked_documents_rels_timelines_id_idx").on(columns.timelinesID), + index("payload_locked_documents_rels_workflows_id_idx").on(columns.workflowsID), + index("payload_locked_documents_rels_tags_id_idx").on(columns.tagsID), + index("payload_locked_documents_rels_authors_id_idx").on(columns.authorsID), + index("payload_locked_documents_rels_locations_id_idx").on(columns.locationsID), + index("payload_locked_documents_rels_partners_id_idx").on(columns.partnersID), + index("payload_locked_documents_rels_jobs_id_idx").on(columns.jobsID), + index("payload_locked_documents_rels_downloads_id_idx").on(columns.downloadsID), + index("payload_locked_documents_rels_events_id_idx").on(columns.eventsID), index("payload_locked_documents_rels_cookie_configurations_id_idx").on(columns["cookie-configurationsID"]), index("payload_locked_documents_rels_cookie_inventory_id_idx").on(columns["cookie-inventoryID"]), index("payload_locked_documents_rels_consent_logs_id_idx").on(columns["consent-logsID"]), index("payload_locked_documents_rels_privacy_policy_settings_id_idx").on(columns["privacy-policy-settingsID"]), + index("payload_locked_documents_rels_email_logs_id_idx").on(columns["email-logsID"]), + index("payload_locked_documents_rels_audit_logs_id_idx").on(columns["audit-logsID"]), index("payload_locked_documents_rels_forms_id_idx").on(columns.formsID), index("payload_locked_documents_rels_form_submissions_id_idx").on(columns["form-submissionsID"]), index("payload_locked_documents_rels_redirects_id_idx").on(columns.redirectsID), @@ -1856,11 +9646,96 @@ export const payload_locked_documents_rels = pgTable( foreignColumns: [testimonials.id], name: "payload_locked_documents_rels_testimonials_fk", }).onDelete("cascade"), + foreignKey({ + columns: [columns["faqsID"]], + foreignColumns: [faqs.id], + name: "payload_locked_documents_rels_faqs_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["teamID"]], + foreignColumns: [team.id], + name: "payload_locked_documents_rels_team_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["service-categoriesID"]], + foreignColumns: [service_categories.id], + name: "payload_locked_documents_rels_service_categories_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["servicesID"]], + foreignColumns: [services.id], + name: "payload_locked_documents_rels_services_fk", + }).onDelete("cascade"), foreignKey({ columns: [columns["newsletter-subscribersID"]], foreignColumns: [newsletter_subscribers.id], name: "payload_locked_documents_rels_newsletter_subscribers_fk", }).onDelete("cascade"), + foreignKey({ + columns: [columns["portfolio-categoriesID"]], + foreignColumns: [portfolio_categories.id], + name: "payload_locked_documents_rels_portfolio_categories_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["portfoliosID"]], + foreignColumns: [portfolios.id], + name: "payload_locked_documents_rels_portfolios_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["product-categoriesID"]], + foreignColumns: [product_categories.id], + name: "payload_locked_documents_rels_product_categories_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["productsID"]], + foreignColumns: [products.id], + name: "payload_locked_documents_rels_products_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["timelinesID"]], + foreignColumns: [timelines.id], + name: "payload_locked_documents_rels_timelines_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["workflowsID"]], + foreignColumns: [workflows.id], + name: "payload_locked_documents_rels_workflows_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["tagsID"]], + foreignColumns: [tags.id], + name: "payload_locked_documents_rels_tags_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["authorsID"]], + foreignColumns: [authors.id], + name: "payload_locked_documents_rels_authors_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["locationsID"]], + foreignColumns: [locations.id], + name: "payload_locked_documents_rels_locations_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["partnersID"]], + foreignColumns: [partners.id], + name: "payload_locked_documents_rels_partners_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["jobsID"]], + foreignColumns: [jobs.id], + name: "payload_locked_documents_rels_jobs_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["downloadsID"]], + foreignColumns: [downloads.id], + name: "payload_locked_documents_rels_downloads_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["eventsID"]], + foreignColumns: [events.id], + name: "payload_locked_documents_rels_events_fk", + }).onDelete("cascade"), foreignKey({ columns: [columns["cookie-configurationsID"]], foreignColumns: [cookie_configurations.id], @@ -1881,6 +9756,16 @@ export const payload_locked_documents_rels = pgTable( foreignColumns: [privacy_policy_settings.id], name: "payload_locked_documents_rels_privacy_policy_settings_fk", }).onDelete("cascade"), + foreignKey({ + columns: [columns["email-logsID"]], + foreignColumns: [email_logs.id], + name: "payload_locked_documents_rels_email_logs_fk", + }).onDelete("cascade"), + foreignKey({ + columns: [columns["audit-logsID"]], + foreignColumns: [audit_logs.id], + name: "payload_locked_documents_rels_audit_logs_fk", + }).onDelete("cascade"), foreignKey({ columns: [columns["formsID"]], foreignColumns: [forms.id], @@ -1961,8 +9846,6 @@ export const site_settings = pgTable( "site_settings", { id: serial("id").primaryKey(), - siteName: varchar("site_name").default("porwoll.de"), - siteTagline: varchar("site_tagline"), logo: integer("logo_id").references(() => media.id, { onDelete: "set null", }), @@ -1972,10 +9855,7 @@ export const site_settings = pgTable( contact_email: varchar("contact_email"), contact_phone: varchar("contact_phone"), contact_address: varchar("contact_address"), - footer_copyrightText: varchar("footer_copyright_text"), footer_showSocialLinks: boolean("footer_show_social_links").default(true), - seo_defaultMetaTitle: varchar("seo_default_meta_title"), - seo_defaultMetaDescription: varchar("seo_default_meta_description"), seo_defaultOgImage: integer("seo_default_og_image_id").references(() => media.id, { onDelete: "set null", }), @@ -1989,13 +9869,34 @@ export const site_settings = pgTable( ], ); +export const site_settings_locales = pgTable( + "site_settings_locales", + { + siteName: varchar("site_name").default("porwoll.de"), + siteTagline: varchar("site_tagline"), + footer_copyrightText: varchar("footer_copyright_text"), + seo_defaultMetaTitle: varchar("seo_default_meta_title"), + seo_defaultMetaDescription: varchar("seo_default_meta_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("site_settings_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [site_settings.id], + name: "site_settings_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const navigation_main_menu_submenu = pgTable( "navigation_main_menu_submenu", { _order: integer("_order").notNull(), _parentID: varchar("_parent_id").notNull(), id: varchar("id").primaryKey(), - label: varchar("label"), linkType: enum_navigation_main_menu_submenu_link_type("link_type").default("page"), page: integer("page_id").references(() => pages.id, { onDelete: "set null", @@ -2014,13 +9915,30 @@ export const navigation_main_menu_submenu = pgTable( ], ); +export const navigation_main_menu_submenu_locales = pgTable( + "navigation_main_menu_submenu_locales", + { + label: varchar("label"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("navigation_main_menu_submenu_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [navigation_main_menu_submenu.id], + name: "navigation_main_menu_submenu_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const navigation_main_menu = pgTable( "navigation_main_menu", { _order: integer("_order").notNull(), _parentID: integer("_parent_id").notNull(), id: varchar("id").primaryKey(), - label: varchar("label").notNull(), type: enum_navigation_main_menu_type("type").default("page"), page: integer("page_id").references(() => pages.id, { onDelete: "set null", @@ -2040,13 +9958,30 @@ export const navigation_main_menu = pgTable( ], ); +export const navigation_main_menu_locales = pgTable( + "navigation_main_menu_locales", + { + label: varchar("label").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("navigation_main_menu_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [navigation_main_menu.id], + name: "navigation_main_menu_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const navigation_footer_menu = pgTable( "navigation_footer_menu", { _order: integer("_order").notNull(), _parentID: integer("_parent_id").notNull(), id: varchar("id").primaryKey(), - label: varchar("label").notNull(), linkType: enum_navigation_footer_menu_link_type("link_type").default("page"), page: integer("page_id").references(() => pages.id, { onDelete: "set null", @@ -2065,6 +10000,24 @@ export const navigation_footer_menu = pgTable( ], ); +export const navigation_footer_menu_locales = pgTable( + "navigation_footer_menu_locales", + { + label: varchar("label").notNull(), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: varchar("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("navigation_footer_menu_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [navigation_footer_menu.id], + name: "navigation_footer_menu_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const navigation = pgTable("navigation", { id: serial("id").primaryKey(), updatedAt: timestamp("updated_at", { mode: "string", withTimezone: true, precision: 3 }), @@ -2114,14 +10067,11 @@ export const seo_settings = pgTable( "seo_settings", { id: serial("id").primaryKey(), - metaDefaults_titleSuffix: varchar("meta_defaults_title_suffix").default("| Website"), - metaDefaults_defaultDescription: varchar("meta_defaults_default_description"), metaDefaults_defaultOgImage: integer("meta_defaults_default_og_image_id").references(() => media.id, { onDelete: "set null", }), organization_name: varchar("organization_name").notNull(), organization_legalName: varchar("organization_legal_name"), - organization_description: varchar("organization_description"), organization_logo: integer("organization_logo_id").references(() => media.id, { onDelete: "set null", }), @@ -2157,6 +10107,26 @@ export const seo_settings = pgTable( ], ); +export const seo_settings_locales = pgTable( + "seo_settings_locales", + { + metaDefaults_titleSuffix: varchar("meta_defaults_title_suffix").default("| Website"), + metaDefaults_defaultDescription: varchar("meta_defaults_default_description"), + organization_description: varchar("organization_description"), + id: serial("id").primaryKey(), + _locale: enum__locales("_locale").notNull(), + _parentID: integer("_parent_id").notNull(), + }, + (columns) => [ + uniqueIndex("seo_settings_locales_locale_parent_id_unique").on(columns._locale, columns._parentID), + foreignKey({ + columns: [columns["_parentID"]], + foreignColumns: [seo_settings.id], + name: "seo_settings_locales_parent_id_fk", + }).onDelete("cascade"), + ], +); + export const seo_settings_texts = pgTable( "seo_settings_texts", { @@ -2232,45 +10202,201 @@ export const relations_tenants = relations(tenants, ({ many }) => ({ relationName: "domains", }), })); -export const relations_pages_blocks_hero_block = relations(pages_blocks_hero_block, ({ one }) => ({ +export const relations_pages_blocks_hero_block_locales = relations(pages_blocks_hero_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_hero_block, { + fields: [pages_blocks_hero_block_locales._parentID], + references: [pages_blocks_hero_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_hero_block = relations(pages_blocks_hero_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_hero_block._parentID], references: [pages.id], relationName: "_blocks_hero-block", }), + _locales: many(pages_blocks_hero_block_locales, { + relationName: "_locales", + }), backgroundImage: one(media, { fields: [pages_blocks_hero_block.backgroundImage], references: [media.id], relationName: "backgroundImage", }), })); -export const relations_pages_blocks_text_block = relations(pages_blocks_text_block, ({ one }) => ({ +export const relations_pages_blocks_hero_slider_block_slides_locales = relations( + pages_blocks_hero_slider_block_slides_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_hero_slider_block_slides, { + fields: [pages_blocks_hero_slider_block_slides_locales._parentID], + references: [pages_blocks_hero_slider_block_slides.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_hero_slider_block_slides = relations( + pages_blocks_hero_slider_block_slides, + ({ one, many }) => ({ + _parentID: one(pages_blocks_hero_slider_block, { + fields: [pages_blocks_hero_slider_block_slides._parentID], + references: [pages_blocks_hero_slider_block.id], + relationName: "slides", + }), + _locales: many(pages_blocks_hero_slider_block_slides_locales, { + relationName: "_locales", + }), + backgroundImage: one(media, { + fields: [pages_blocks_hero_slider_block_slides.backgroundImage], + references: [media.id], + relationName: "backgroundImage", + }), + mobileBackgroundImage: one(media, { + fields: [pages_blocks_hero_slider_block_slides.mobileBackgroundImage], + references: [media.id], + relationName: "mobileBackgroundImage", + }), + }), +); +export const relations_pages_blocks_hero_slider_block_locales = relations( + pages_blocks_hero_slider_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_hero_slider_block, { + fields: [pages_blocks_hero_slider_block_locales._parentID], + references: [pages_blocks_hero_slider_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_hero_slider_block = relations(pages_blocks_hero_slider_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_hero_slider_block._parentID], + references: [pages.id], + relationName: "_blocks_hero-slider-block", + }), + _locales: many(pages_blocks_hero_slider_block_locales, { + relationName: "_locales", + }), + slides: many(pages_blocks_hero_slider_block_slides, { + relationName: "slides", + }), +})); +export const relations_pages_blocks_image_slider_block_images_locales = relations( + pages_blocks_image_slider_block_images_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_image_slider_block_images, { + fields: [pages_blocks_image_slider_block_images_locales._parentID], + references: [pages_blocks_image_slider_block_images.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_image_slider_block_images = relations( + pages_blocks_image_slider_block_images, + ({ one, many }) => ({ + _parentID: one(pages_blocks_image_slider_block, { + fields: [pages_blocks_image_slider_block_images._parentID], + references: [pages_blocks_image_slider_block.id], + relationName: "images", + }), + _locales: many(pages_blocks_image_slider_block_images_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [pages_blocks_image_slider_block_images.image], + references: [media.id], + relationName: "image", + }), + }), +); +export const relations_pages_blocks_image_slider_block_locales = relations( + pages_blocks_image_slider_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_image_slider_block, { + fields: [pages_blocks_image_slider_block_locales._parentID], + references: [pages_blocks_image_slider_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_image_slider_block = relations( + pages_blocks_image_slider_block, + ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_image_slider_block._parentID], + references: [pages.id], + relationName: "_blocks_image-slider-block", + }), + _locales: many(pages_blocks_image_slider_block_locales, { + relationName: "_locales", + }), + images: many(pages_blocks_image_slider_block_images, { + relationName: "images", + }), + }), +); +export const relations_pages_blocks_text_block_locales = relations(pages_blocks_text_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_text_block, { + fields: [pages_blocks_text_block_locales._parentID], + references: [pages_blocks_text_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_text_block = relations(pages_blocks_text_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_text_block._parentID], references: [pages.id], relationName: "_blocks_text-block", }), + _locales: many(pages_blocks_text_block_locales, { + relationName: "_locales", + }), })); -export const relations_pages_blocks_image_text_block = relations(pages_blocks_image_text_block, ({ one }) => ({ +export const relations_pages_blocks_image_text_block_locales = relations( + pages_blocks_image_text_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_image_text_block, { + fields: [pages_blocks_image_text_block_locales._parentID], + references: [pages_blocks_image_text_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_image_text_block = relations(pages_blocks_image_text_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_image_text_block._parentID], references: [pages.id], relationName: "_blocks_image-text-block", }), + _locales: many(pages_blocks_image_text_block_locales, { + relationName: "_locales", + }), image: one(media, { fields: [pages_blocks_image_text_block.image], references: [media.id], relationName: "image", }), })); +export const relations_pages_blocks_card_grid_block_cards_locales = relations( + pages_blocks_card_grid_block_cards_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_card_grid_block_cards, { + fields: [pages_blocks_card_grid_block_cards_locales._parentID], + references: [pages_blocks_card_grid_block_cards.id], + relationName: "_locales", + }), + }), +); export const relations_pages_blocks_card_grid_block_cards = relations( pages_blocks_card_grid_block_cards, - ({ one }) => ({ + ({ one, many }) => ({ _parentID: one(pages_blocks_card_grid_block, { fields: [pages_blocks_card_grid_block_cards._parentID], references: [pages_blocks_card_grid_block.id], relationName: "cards", }), + _locales: many(pages_blocks_card_grid_block_cards_locales, { + relationName: "_locales", + }), image: one(media, { fields: [pages_blocks_card_grid_block_cards.image], references: [media.id], @@ -2278,34 +10404,77 @@ export const relations_pages_blocks_card_grid_block_cards = relations( }), }), ); +export const relations_pages_blocks_card_grid_block_locales = relations( + pages_blocks_card_grid_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_card_grid_block, { + fields: [pages_blocks_card_grid_block_locales._parentID], + references: [pages_blocks_card_grid_block.id], + relationName: "_locales", + }), + }), +); export const relations_pages_blocks_card_grid_block = relations(pages_blocks_card_grid_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_card_grid_block._parentID], references: [pages.id], relationName: "_blocks_card-grid-block", }), + _locales: many(pages_blocks_card_grid_block_locales, { + relationName: "_locales", + }), cards: many(pages_blocks_card_grid_block_cards, { relationName: "cards", }), })); -export const relations_pages_blocks_quote_block = relations(pages_blocks_quote_block, ({ one }) => ({ +export const relations_pages_blocks_quote_block_locales = relations(pages_blocks_quote_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_quote_block, { + fields: [pages_blocks_quote_block_locales._parentID], + references: [pages_blocks_quote_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_quote_block = relations(pages_blocks_quote_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_quote_block._parentID], references: [pages.id], relationName: "_blocks_quote-block", }), + _locales: many(pages_blocks_quote_block_locales, { + relationName: "_locales", + }), image: one(media, { fields: [pages_blocks_quote_block.image], references: [media.id], relationName: "image", }), })); -export const relations_pages_blocks_cta_block_buttons = relations(pages_blocks_cta_block_buttons, ({ one }) => ({ +export const relations_pages_blocks_cta_block_buttons_locales = relations( + pages_blocks_cta_block_buttons_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_cta_block_buttons, { + fields: [pages_blocks_cta_block_buttons_locales._parentID], + references: [pages_blocks_cta_block_buttons.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_cta_block_buttons = relations(pages_blocks_cta_block_buttons, ({ one, many }) => ({ _parentID: one(pages_blocks_cta_block, { fields: [pages_blocks_cta_block_buttons._parentID], references: [pages_blocks_cta_block.id], relationName: "buttons", }), + _locales: many(pages_blocks_cta_block_buttons_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_cta_block_locales = relations(pages_blocks_cta_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_cta_block, { + fields: [pages_blocks_cta_block_locales._parentID], + references: [pages_blocks_cta_block.id], + relationName: "_locales", + }), })); export const relations_pages_blocks_cta_block = relations(pages_blocks_cta_block, ({ one, many }) => ({ _parentID: one(pages, { @@ -2313,35 +10482,83 @@ export const relations_pages_blocks_cta_block = relations(pages_blocks_cta_block references: [pages.id], relationName: "_blocks_cta-block", }), + _locales: many(pages_blocks_cta_block_locales, { + relationName: "_locales", + }), buttons: many(pages_blocks_cta_block_buttons, { relationName: "buttons", }), })); -export const relations_pages_blocks_contact_form_block = relations(pages_blocks_contact_form_block, ({ one }) => ({ - _parentID: one(pages, { - fields: [pages_blocks_contact_form_block._parentID], - references: [pages.id], - relationName: "_blocks_contact-form-block", +export const relations_pages_blocks_contact_form_block_locales = relations( + pages_blocks_contact_form_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_contact_form_block, { + fields: [pages_blocks_contact_form_block_locales._parentID], + references: [pages_blocks_contact_form_block.id], + relationName: "_locales", + }), }), -})); -export const relations_pages_blocks_timeline_block_items = relations(pages_blocks_timeline_block_items, ({ one }) => ({ - _parentID: one(pages_blocks_timeline_block, { - fields: [pages_blocks_timeline_block_items._parentID], - references: [pages_blocks_timeline_block.id], - relationName: "items", +); +export const relations_pages_blocks_contact_form_block = relations( + pages_blocks_contact_form_block, + ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_contact_form_block._parentID], + references: [pages.id], + relationName: "_blocks_contact-form-block", + }), + _locales: many(pages_blocks_contact_form_block_locales, { + relationName: "_locales", + }), }), - image: one(media, { - fields: [pages_blocks_timeline_block_items.image], - references: [media.id], - relationName: "image", +); +export const relations_pages_blocks_timeline_block_items_locales = relations( + pages_blocks_timeline_block_items_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_timeline_block_items, { + fields: [pages_blocks_timeline_block_items_locales._parentID], + references: [pages_blocks_timeline_block_items.id], + relationName: "_locales", + }), }), -})); +); +export const relations_pages_blocks_timeline_block_items = relations( + pages_blocks_timeline_block_items, + ({ one, many }) => ({ + _parentID: one(pages_blocks_timeline_block, { + fields: [pages_blocks_timeline_block_items._parentID], + references: [pages_blocks_timeline_block.id], + relationName: "items", + }), + _locales: many(pages_blocks_timeline_block_items_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [pages_blocks_timeline_block_items.image], + references: [media.id], + relationName: "image", + }), + }), +); +export const relations_pages_blocks_timeline_block_locales = relations( + pages_blocks_timeline_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_timeline_block, { + fields: [pages_blocks_timeline_block_locales._parentID], + references: [pages_blocks_timeline_block.id], + relationName: "_locales", + }), + }), +); export const relations_pages_blocks_timeline_block = relations(pages_blocks_timeline_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_timeline_block._parentID], references: [pages.id], relationName: "_blocks_timeline-block", }), + _locales: many(pages_blocks_timeline_block_locales, { + relationName: "_locales", + }), items: many(pages_blocks_timeline_block_items, { relationName: "items", }), @@ -2353,27 +10570,66 @@ export const relations_pages_blocks_divider_block = relations(pages_blocks_divid relationName: "_blocks_divider-block", }), })); -export const relations_pages_blocks_video_block = relations(pages_blocks_video_block, ({ one }) => ({ +export const relations_pages_blocks_video_block_locales = relations(pages_blocks_video_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_video_block, { + fields: [pages_blocks_video_block_locales._parentID], + references: [pages_blocks_video_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_video_block = relations(pages_blocks_video_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_video_block._parentID], references: [pages.id], relationName: "_blocks_video-block", }), + _locales: many(pages_blocks_video_block_locales, { + relationName: "_locales", + }), })); -export const relations_pages_blocks_posts_list_block = relations(pages_blocks_posts_list_block, ({ one }) => ({ +export const relations_pages_blocks_posts_list_block_locales = relations( + pages_blocks_posts_list_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_posts_list_block, { + fields: [pages_blocks_posts_list_block_locales._parentID], + references: [pages_blocks_posts_list_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_posts_list_block = relations(pages_blocks_posts_list_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_posts_list_block._parentID], references: [pages.id], relationName: "_blocks_posts-list-block", }), -})); -export const relations_pages_blocks_testimonials_block = relations(pages_blocks_testimonials_block, ({ one }) => ({ - _parentID: one(pages, { - fields: [pages_blocks_testimonials_block._parentID], - references: [pages.id], - relationName: "_blocks_testimonials-block", + _locales: many(pages_blocks_posts_list_block_locales, { + relationName: "_locales", }), })); +export const relations_pages_blocks_testimonials_block_locales = relations( + pages_blocks_testimonials_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_testimonials_block, { + fields: [pages_blocks_testimonials_block_locales._parentID], + references: [pages_blocks_testimonials_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_testimonials_block = relations( + pages_blocks_testimonials_block, + ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_testimonials_block._parentID], + references: [pages.id], + relationName: "_blocks_testimonials-block", + }), + _locales: many(pages_blocks_testimonials_block_locales, { + relationName: "_locales", + }), + }), +); export const relations_pages_blocks_newsletter_block_available_interests = relations( pages_blocks_newsletter_block_available_interests, ({ one }) => ({ @@ -2384,12 +10640,25 @@ export const relations_pages_blocks_newsletter_block_available_interests = relat }), }), ); +export const relations_pages_blocks_newsletter_block_locales = relations( + pages_blocks_newsletter_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_newsletter_block, { + fields: [pages_blocks_newsletter_block_locales._parentID], + references: [pages_blocks_newsletter_block.id], + relationName: "_locales", + }), + }), +); export const relations_pages_blocks_newsletter_block = relations(pages_blocks_newsletter_block, ({ one, many }) => ({ _parentID: one(pages, { fields: [pages_blocks_newsletter_block._parentID], references: [pages.id], relationName: "_blocks_newsletter-block", }), + _locales: many(pages_blocks_newsletter_block_locales, { + relationName: "_locales", + }), image: one(media, { fields: [pages_blocks_newsletter_block.image], references: [media.id], @@ -2399,14 +10668,27 @@ export const relations_pages_blocks_newsletter_block = relations(pages_blocks_ne relationName: "availableInterests", }), })); +export const relations_pages_blocks_process_steps_block_steps_locales = relations( + pages_blocks_process_steps_block_steps_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_process_steps_block_steps, { + fields: [pages_blocks_process_steps_block_steps_locales._parentID], + references: [pages_blocks_process_steps_block_steps.id], + relationName: "_locales", + }), + }), +); export const relations_pages_blocks_process_steps_block_steps = relations( pages_blocks_process_steps_block_steps, - ({ one }) => ({ + ({ one, many }) => ({ _parentID: one(pages_blocks_process_steps_block, { fields: [pages_blocks_process_steps_block_steps._parentID], references: [pages_blocks_process_steps_block.id], relationName: "steps", }), + _locales: many(pages_blocks_process_steps_block_steps_locales, { + relationName: "_locales", + }), image: one(media, { fields: [pages_blocks_process_steps_block_steps.image], references: [media.id], @@ -2414,6 +10696,16 @@ export const relations_pages_blocks_process_steps_block_steps = relations( }), }), ); +export const relations_pages_blocks_process_steps_block_locales = relations( + pages_blocks_process_steps_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_process_steps_block, { + fields: [pages_blocks_process_steps_block_locales._parentID], + references: [pages_blocks_process_steps_block.id], + relationName: "_locales", + }), + }), +); export const relations_pages_blocks_process_steps_block = relations( pages_blocks_process_steps_block, ({ one, many }) => ({ @@ -2422,11 +10714,1128 @@ export const relations_pages_blocks_process_steps_block = relations( references: [pages.id], relationName: "_blocks_process-steps-block", }), + _locales: many(pages_blocks_process_steps_block_locales, { + relationName: "_locales", + }), steps: many(pages_blocks_process_steps_block_steps, { relationName: "steps", }), }), ); +export const relations_pages_blocks_faq_block_inline_f_a_qs_locales = relations( + pages_blocks_faq_block_inline_f_a_qs_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_faq_block_inline_f_a_qs, { + fields: [pages_blocks_faq_block_inline_f_a_qs_locales._parentID], + references: [pages_blocks_faq_block_inline_f_a_qs.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_faq_block_inline_f_a_qs = relations( + pages_blocks_faq_block_inline_f_a_qs, + ({ one, many }) => ({ + _parentID: one(pages_blocks_faq_block, { + fields: [pages_blocks_faq_block_inline_f_a_qs._parentID], + references: [pages_blocks_faq_block.id], + relationName: "inlineFAQs", + }), + _locales: many(pages_blocks_faq_block_inline_f_a_qs_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_faq_block_locales = relations(pages_blocks_faq_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_faq_block, { + fields: [pages_blocks_faq_block_locales._parentID], + references: [pages_blocks_faq_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_faq_block = relations(pages_blocks_faq_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_faq_block._parentID], + references: [pages.id], + relationName: "_blocks_faq-block", + }), + _locales: many(pages_blocks_faq_block_locales, { + relationName: "_locales", + }), + inlineFAQs: many(pages_blocks_faq_block_inline_f_a_qs, { + relationName: "inlineFAQs", + }), +})); +export const relations_pages_blocks_team_block_locales = relations(pages_blocks_team_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_team_block, { + fields: [pages_blocks_team_block_locales._parentID], + references: [pages_blocks_team_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_team_block = relations(pages_blocks_team_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_team_block._parentID], + references: [pages.id], + relationName: "_blocks_team-block", + }), + _locales: many(pages_blocks_team_block_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_services_block_locales = relations( + pages_blocks_services_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_services_block, { + fields: [pages_blocks_services_block_locales._parentID], + references: [pages_blocks_services_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_services_block = relations(pages_blocks_services_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_services_block._parentID], + references: [pages.id], + relationName: "_blocks_services-block", + }), + _locales: many(pages_blocks_services_block_locales, { + relationName: "_locales", + }), + category: one(service_categories, { + fields: [pages_blocks_services_block.category], + references: [service_categories.id], + relationName: "category", + }), +})); +export const relations_pages_blocks_author_bio_block_locales = relations( + pages_blocks_author_bio_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_author_bio_block, { + fields: [pages_blocks_author_bio_block_locales._parentID], + references: [pages_blocks_author_bio_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_author_bio_block = relations(pages_blocks_author_bio_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_author_bio_block._parentID], + references: [pages.id], + relationName: "_blocks_author-bio-block", + }), + _locales: many(pages_blocks_author_bio_block_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_related_posts_block_locales = relations( + pages_blocks_related_posts_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_related_posts_block, { + fields: [pages_blocks_related_posts_block_locales._parentID], + references: [pages_blocks_related_posts_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_related_posts_block = relations( + pages_blocks_related_posts_block, + ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_related_posts_block._parentID], + references: [pages.id], + relationName: "_blocks_related-posts-block", + }), + _locales: many(pages_blocks_related_posts_block_locales, { + relationName: "_locales", + }), + category: one(categories, { + fields: [pages_blocks_related_posts_block.category], + references: [categories.id], + relationName: "category", + }), + tag: one(tags, { + fields: [pages_blocks_related_posts_block.tag], + references: [tags.id], + relationName: "tag", + }), + }), +); +export const relations_pages_blocks_share_buttons_block_locales = relations( + pages_blocks_share_buttons_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_share_buttons_block, { + fields: [pages_blocks_share_buttons_block_locales._parentID], + references: [pages_blocks_share_buttons_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_share_buttons_block = relations( + pages_blocks_share_buttons_block, + ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_share_buttons_block._parentID], + references: [pages.id], + relationName: "_blocks_share-buttons-block", + }), + _locales: many(pages_blocks_share_buttons_block_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_toc_block_locales = relations(pages_blocks_toc_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_toc_block, { + fields: [pages_blocks_toc_block_locales._parentID], + references: [pages_blocks_toc_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_toc_block = relations(pages_blocks_toc_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_toc_block._parentID], + references: [pages.id], + relationName: "_blocks_toc-block", + }), + _locales: many(pages_blocks_toc_block_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_team_filter_block_locales = relations( + pages_blocks_team_filter_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_team_filter_block, { + fields: [pages_blocks_team_filter_block_locales._parentID], + references: [pages_blocks_team_filter_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_team_filter_block = relations(pages_blocks_team_filter_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_team_filter_block._parentID], + references: [pages.id], + relationName: "_blocks_team-filter-block", + }), + _locales: many(pages_blocks_team_filter_block_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_org_chart_block_locales = relations( + pages_blocks_org_chart_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_org_chart_block, { + fields: [pages_blocks_org_chart_block_locales._parentID], + references: [pages_blocks_org_chart_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_org_chart_block = relations(pages_blocks_org_chart_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_org_chart_block._parentID], + references: [pages.id], + relationName: "_blocks_org-chart-block", + }), + _locales: many(pages_blocks_org_chart_block_locales, { + relationName: "_locales", + }), + rootMember: one(team, { + fields: [pages_blocks_org_chart_block.rootMember], + references: [team.id], + relationName: "rootMember", + }), +})); +export const relations_pages_blocks_locations_block_locales = relations( + pages_blocks_locations_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_locations_block, { + fields: [pages_blocks_locations_block_locales._parentID], + references: [pages_blocks_locations_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_locations_block = relations(pages_blocks_locations_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_locations_block._parentID], + references: [pages.id], + relationName: "_blocks_locations-block", + }), + _locales: many(pages_blocks_locations_block_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_logo_grid_block_partner_type = relations( + pages_blocks_logo_grid_block_partner_type, + ({ one }) => ({ + parent: one(pages_blocks_logo_grid_block, { + fields: [pages_blocks_logo_grid_block_partner_type.parent], + references: [pages_blocks_logo_grid_block.id], + relationName: "partnerType", + }), + }), +); +export const relations_pages_blocks_logo_grid_block_logos = relations( + pages_blocks_logo_grid_block_logos, + ({ one }) => ({ + _parentID: one(pages_blocks_logo_grid_block, { + fields: [pages_blocks_logo_grid_block_logos._parentID], + references: [pages_blocks_logo_grid_block.id], + relationName: "logos", + }), + logo: one(media, { + fields: [pages_blocks_logo_grid_block_logos.logo], + references: [media.id], + relationName: "logo", + }), + }), +); +export const relations_pages_blocks_logo_grid_block_locales = relations( + pages_blocks_logo_grid_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_logo_grid_block, { + fields: [pages_blocks_logo_grid_block_locales._parentID], + references: [pages_blocks_logo_grid_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_logo_grid_block = relations(pages_blocks_logo_grid_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_logo_grid_block._parentID], + references: [pages.id], + relationName: "_blocks_logo-grid-block", + }), + _locales: many(pages_blocks_logo_grid_block_locales, { + relationName: "_locales", + }), + partnerType: many(pages_blocks_logo_grid_block_partner_type, { + relationName: "partnerType", + }), + logos: many(pages_blocks_logo_grid_block_logos, { + relationName: "logos", + }), +})); +export const relations_pages_blocks_stats_block_stats_locales = relations( + pages_blocks_stats_block_stats_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_stats_block_stats, { + fields: [pages_blocks_stats_block_stats_locales._parentID], + references: [pages_blocks_stats_block_stats.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_stats_block_stats = relations(pages_blocks_stats_block_stats, ({ one, many }) => ({ + _parentID: one(pages_blocks_stats_block, { + fields: [pages_blocks_stats_block_stats._parentID], + references: [pages_blocks_stats_block.id], + relationName: "stats", + }), + _locales: many(pages_blocks_stats_block_stats_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_stats_block_locales = relations(pages_blocks_stats_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_stats_block, { + fields: [pages_blocks_stats_block_locales._parentID], + references: [pages_blocks_stats_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_stats_block = relations(pages_blocks_stats_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_stats_block._parentID], + references: [pages.id], + relationName: "_blocks_stats-block", + }), + _locales: many(pages_blocks_stats_block_locales, { + relationName: "_locales", + }), + stats: many(pages_blocks_stats_block_stats, { + relationName: "stats", + }), + style_bgImage: one(media, { + fields: [pages_blocks_stats_block.style_bgImage], + references: [media.id], + relationName: "style_bgImage", + }), +})); +export const relations_pages_blocks_jobs_block_locales = relations(pages_blocks_jobs_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_jobs_block, { + fields: [pages_blocks_jobs_block_locales._parentID], + references: [pages_blocks_jobs_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_jobs_block = relations(pages_blocks_jobs_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_jobs_block._parentID], + references: [pages.id], + relationName: "_blocks_jobs-block", + }), + _locales: many(pages_blocks_jobs_block_locales, { + relationName: "_locales", + }), + locationFilter: one(locations, { + fields: [pages_blocks_jobs_block.locationFilter], + references: [locations.id], + relationName: "locationFilter", + }), +})); +export const relations_pages_blocks_downloads_block_locales = relations( + pages_blocks_downloads_block_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_downloads_block, { + fields: [pages_blocks_downloads_block_locales._parentID], + references: [pages_blocks_downloads_block.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_downloads_block = relations(pages_blocks_downloads_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_downloads_block._parentID], + references: [pages.id], + relationName: "_blocks_downloads-block", + }), + _locales: many(pages_blocks_downloads_block_locales, { + relationName: "_locales", + }), + relatedService: one(services, { + fields: [pages_blocks_downloads_block.relatedService], + references: [services.id], + relationName: "relatedService", + }), + relatedProduct: one(products, { + fields: [pages_blocks_downloads_block.relatedProduct], + references: [products.id], + relationName: "relatedProduct", + }), +})); +export const relations_pages_blocks_map_block_location_type = relations( + pages_blocks_map_block_location_type, + ({ one }) => ({ + parent: one(pages_blocks_map_block, { + fields: [pages_blocks_map_block_location_type.parent], + references: [pages_blocks_map_block.id], + relationName: "locationType", + }), + }), +); +export const relations_pages_blocks_map_block_markers_locales = relations( + pages_blocks_map_block_markers_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_map_block_markers, { + fields: [pages_blocks_map_block_markers_locales._parentID], + references: [pages_blocks_map_block_markers.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_map_block_markers = relations(pages_blocks_map_block_markers, ({ one, many }) => ({ + _parentID: one(pages_blocks_map_block, { + fields: [pages_blocks_map_block_markers._parentID], + references: [pages_blocks_map_block.id], + relationName: "markers", + }), + _locales: many(pages_blocks_map_block_markers_locales, { + relationName: "_locales", + }), + customIcon: one(media, { + fields: [pages_blocks_map_block_markers.customIcon], + references: [media.id], + relationName: "customIcon", + }), +})); +export const relations_pages_blocks_map_block_locales = relations(pages_blocks_map_block_locales, ({ one }) => ({ + _parentID: one(pages_blocks_map_block, { + fields: [pages_blocks_map_block_locales._parentID], + references: [pages_blocks_map_block.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_map_block = relations(pages_blocks_map_block, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_map_block._parentID], + references: [pages.id], + relationName: "_blocks_map-block", + }), + _locales: many(pages_blocks_map_block_locales, { + relationName: "_locales", + }), + locationType: many(pages_blocks_map_block_location_type, { + relationName: "locationType", + }), + markers: many(pages_blocks_map_block_markers, { + relationName: "markers", + }), + fallback_staticImage: one(media, { + fields: [pages_blocks_map_block.fallback_staticImage], + references: [media.id], + relationName: "fallback_staticImage", + }), +})); +export const relations_pages_blocks_events_locales = relations(pages_blocks_events_locales, ({ one }) => ({ + _parentID: one(pages_blocks_events, { + fields: [pages_blocks_events_locales._parentID], + references: [pages_blocks_events.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_events = relations(pages_blocks_events, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_events._parentID], + references: [pages.id], + relationName: "_blocks_events", + }), + _locales: many(pages_blocks_events_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_pricing_plans_features_locales = relations( + pages_blocks_pricing_plans_features_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_pricing_plans_features, { + fields: [pages_blocks_pricing_plans_features_locales._parentID], + references: [pages_blocks_pricing_plans_features.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_pricing_plans_features = relations( + pages_blocks_pricing_plans_features, + ({ one, many }) => ({ + _parentID: one(pages_blocks_pricing_plans, { + fields: [pages_blocks_pricing_plans_features._parentID], + references: [pages_blocks_pricing_plans.id], + relationName: "features", + }), + _locales: many(pages_blocks_pricing_plans_features_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_pricing_plans_locales = relations( + pages_blocks_pricing_plans_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_pricing_plans, { + fields: [pages_blocks_pricing_plans_locales._parentID], + references: [pages_blocks_pricing_plans.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_pricing_plans = relations(pages_blocks_pricing_plans, ({ one, many }) => ({ + _parentID: one(pages_blocks_pricing, { + fields: [pages_blocks_pricing_plans._parentID], + references: [pages_blocks_pricing.id], + relationName: "plans", + }), + _locales: many(pages_blocks_pricing_plans_locales, { + relationName: "_locales", + }), + features: many(pages_blocks_pricing_plans_features, { + relationName: "features", + }), + icon: one(media, { + fields: [pages_blocks_pricing_plans.icon], + references: [media.id], + relationName: "icon", + }), +})); +export const relations_pages_blocks_pricing_comparison_features_values_locales = relations( + pages_blocks_pricing_comparison_features_values_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_pricing_comparison_features_values, { + fields: [pages_blocks_pricing_comparison_features_values_locales._parentID], + references: [pages_blocks_pricing_comparison_features_values.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_pricing_comparison_features_values = relations( + pages_blocks_pricing_comparison_features_values, + ({ one, many }) => ({ + _parentID: one(pages_blocks_pricing_comparison_features, { + fields: [pages_blocks_pricing_comparison_features_values._parentID], + references: [pages_blocks_pricing_comparison_features.id], + relationName: "values", + }), + _locales: many(pages_blocks_pricing_comparison_features_values_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_pricing_comparison_features_locales = relations( + pages_blocks_pricing_comparison_features_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_pricing_comparison_features, { + fields: [pages_blocks_pricing_comparison_features_locales._parentID], + references: [pages_blocks_pricing_comparison_features.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_pricing_comparison_features = relations( + pages_blocks_pricing_comparison_features, + ({ one, many }) => ({ + _parentID: one(pages_blocks_pricing, { + fields: [pages_blocks_pricing_comparison_features._parentID], + references: [pages_blocks_pricing.id], + relationName: "comparisonFeatures", + }), + _locales: many(pages_blocks_pricing_comparison_features_locales, { + relationName: "_locales", + }), + values: many(pages_blocks_pricing_comparison_features_values, { + relationName: "values", + }), + }), +); +export const relations_pages_blocks_pricing_faq_items_locales = relations( + pages_blocks_pricing_faq_items_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_pricing_faq_items, { + fields: [pages_blocks_pricing_faq_items_locales._parentID], + references: [pages_blocks_pricing_faq_items.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_pricing_faq_items = relations(pages_blocks_pricing_faq_items, ({ one, many }) => ({ + _parentID: one(pages_blocks_pricing, { + fields: [pages_blocks_pricing_faq_items._parentID], + references: [pages_blocks_pricing.id], + relationName: "faqItems", + }), + _locales: many(pages_blocks_pricing_faq_items_locales, { + relationName: "_locales", + }), +})); +export const relations_pages_blocks_pricing_locales = relations(pages_blocks_pricing_locales, ({ one }) => ({ + _parentID: one(pages_blocks_pricing, { + fields: [pages_blocks_pricing_locales._parentID], + references: [pages_blocks_pricing.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_pricing = relations(pages_blocks_pricing, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_pricing._parentID], + references: [pages.id], + relationName: "_blocks_pricing", + }), + _locales: many(pages_blocks_pricing_locales, { + relationName: "_locales", + }), + plans: many(pages_blocks_pricing_plans, { + relationName: "plans", + }), + comparisonFeatures: many(pages_blocks_pricing_comparison_features, { + relationName: "comparisonFeatures", + }), + faqItems: many(pages_blocks_pricing_faq_items, { + relationName: "faqItems", + }), +})); +export const relations_pages_blocks_tabs_tabs_features_locales = relations( + pages_blocks_tabs_tabs_features_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_tabs_tabs_features, { + fields: [pages_blocks_tabs_tabs_features_locales._parentID], + references: [pages_blocks_tabs_tabs_features.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_tabs_tabs_features = relations( + pages_blocks_tabs_tabs_features, + ({ one, many }) => ({ + _parentID: one(pages_blocks_tabs_tabs, { + fields: [pages_blocks_tabs_tabs_features._parentID], + references: [pages_blocks_tabs_tabs.id], + relationName: "features", + }), + _locales: many(pages_blocks_tabs_tabs_features_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_tabs_tabs_locales = relations(pages_blocks_tabs_tabs_locales, ({ one }) => ({ + _parentID: one(pages_blocks_tabs_tabs, { + fields: [pages_blocks_tabs_tabs_locales._parentID], + references: [pages_blocks_tabs_tabs.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_tabs_tabs = relations(pages_blocks_tabs_tabs, ({ one, many }) => ({ + _parentID: one(pages_blocks_tabs, { + fields: [pages_blocks_tabs_tabs._parentID], + references: [pages_blocks_tabs.id], + relationName: "tabs", + }), + _locales: many(pages_blocks_tabs_tabs_locales, { + relationName: "_locales", + }), + customIcon: one(media, { + fields: [pages_blocks_tabs_tabs.customIcon], + references: [media.id], + relationName: "customIcon", + }), + imgTxt_img: one(media, { + fields: [pages_blocks_tabs_tabs.imgTxt_img], + references: [media.id], + relationName: "imgTxt_img", + }), + features: many(pages_blocks_tabs_tabs_features, { + relationName: "features", + }), +})); +export const relations_pages_blocks_tabs_locales = relations(pages_blocks_tabs_locales, ({ one }) => ({ + _parentID: one(pages_blocks_tabs, { + fields: [pages_blocks_tabs_locales._parentID], + references: [pages_blocks_tabs.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_tabs = relations(pages_blocks_tabs, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_tabs._parentID], + references: [pages.id], + relationName: "_blocks_tabs", + }), + _locales: many(pages_blocks_tabs_locales, { + relationName: "_locales", + }), + tabs: many(pages_blocks_tabs_tabs, { + relationName: "tabs", + }), +})); +export const relations_pages_blocks_accordion_items_list_items_locales = relations( + pages_blocks_accordion_items_list_items_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_accordion_items_list_items, { + fields: [pages_blocks_accordion_items_list_items_locales._parentID], + references: [pages_blocks_accordion_items_list_items.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_accordion_items_list_items = relations( + pages_blocks_accordion_items_list_items, + ({ one, many }) => ({ + _parentID: one(pages_blocks_accordion_items, { + fields: [pages_blocks_accordion_items_list_items._parentID], + references: [pages_blocks_accordion_items.id], + relationName: "listItems", + }), + _locales: many(pages_blocks_accordion_items_list_items_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_accordion_items_table_data_headers_locales = relations( + pages_blocks_accordion_items_table_data_headers_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_accordion_items_table_data_headers, { + fields: [pages_blocks_accordion_items_table_data_headers_locales._parentID], + references: [pages_blocks_accordion_items_table_data_headers.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_accordion_items_table_data_headers = relations( + pages_blocks_accordion_items_table_data_headers, + ({ one, many }) => ({ + _parentID: one(pages_blocks_accordion_items, { + fields: [pages_blocks_accordion_items_table_data_headers._parentID], + references: [pages_blocks_accordion_items.id], + relationName: "tableData_headers", + }), + _locales: many(pages_blocks_accordion_items_table_data_headers_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_accordion_items_table_data_rows_cells_locales = relations( + pages_blocks_accordion_items_table_data_rows_cells_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_accordion_items_table_data_rows_cells, { + fields: [pages_blocks_accordion_items_table_data_rows_cells_locales._parentID], + references: [pages_blocks_accordion_items_table_data_rows_cells.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_accordion_items_table_data_rows_cells = relations( + pages_blocks_accordion_items_table_data_rows_cells, + ({ one, many }) => ({ + _parentID: one(pages_blocks_accordion_items_table_data_rows, { + fields: [pages_blocks_accordion_items_table_data_rows_cells._parentID], + references: [pages_blocks_accordion_items_table_data_rows.id], + relationName: "cells", + }), + _locales: many(pages_blocks_accordion_items_table_data_rows_cells_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_accordion_items_table_data_rows = relations( + pages_blocks_accordion_items_table_data_rows, + ({ one, many }) => ({ + _parentID: one(pages_blocks_accordion_items, { + fields: [pages_blocks_accordion_items_table_data_rows._parentID], + references: [pages_blocks_accordion_items.id], + relationName: "tableData_rows", + }), + cells: many(pages_blocks_accordion_items_table_data_rows_cells, { + relationName: "cells", + }), + }), +); +export const relations_pages_blocks_accordion_items_locales = relations( + pages_blocks_accordion_items_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_accordion_items, { + fields: [pages_blocks_accordion_items_locales._parentID], + references: [pages_blocks_accordion_items.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_accordion_items = relations(pages_blocks_accordion_items, ({ one, many }) => ({ + _parentID: one(pages_blocks_accordion, { + fields: [pages_blocks_accordion_items._parentID], + references: [pages_blocks_accordion.id], + relationName: "items", + }), + _locales: many(pages_blocks_accordion_items_locales, { + relationName: "_locales", + }), + customIcon: one(media, { + fields: [pages_blocks_accordion_items.customIcon], + references: [media.id], + relationName: "customIcon", + }), + imgTxt_img: one(media, { + fields: [pages_blocks_accordion_items.imgTxt_img], + references: [media.id], + relationName: "imgTxt_img", + }), + listItems: many(pages_blocks_accordion_items_list_items, { + relationName: "listItems", + }), + tableData_headers: many(pages_blocks_accordion_items_table_data_headers, { + relationName: "tableData_headers", + }), + tableData_rows: many(pages_blocks_accordion_items_table_data_rows, { + relationName: "tableData_rows", + }), +})); +export const relations_pages_blocks_accordion_locales = relations(pages_blocks_accordion_locales, ({ one }) => ({ + _parentID: one(pages_blocks_accordion, { + fields: [pages_blocks_accordion_locales._parentID], + references: [pages_blocks_accordion.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_accordion = relations(pages_blocks_accordion, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_accordion._parentID], + references: [pages.id], + relationName: "_blocks_accordion", + }), + _locales: many(pages_blocks_accordion_locales, { + relationName: "_locales", + }), + items: many(pages_blocks_accordion_items, { + relationName: "items", + }), +})); +export const relations_pages_blocks_comparison_tbl_columns_locales = relations( + pages_blocks_comparison_tbl_columns_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_tbl_columns, { + fields: [pages_blocks_comparison_tbl_columns_locales._parentID], + references: [pages_blocks_comparison_tbl_columns.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_tbl_columns = relations( + pages_blocks_comparison_tbl_columns, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison, { + fields: [pages_blocks_comparison_tbl_columns._parentID], + references: [pages_blocks_comparison.id], + relationName: "tbl_columns", + }), + _locales: many(pages_blocks_comparison_tbl_columns_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [pages_blocks_comparison_tbl_columns.image], + references: [media.id], + relationName: "image", + }), + }), +); +export const relations_pages_blocks_comparison_tbl_rows_values_locales = relations( + pages_blocks_comparison_tbl_rows_values_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_tbl_rows_values, { + fields: [pages_blocks_comparison_tbl_rows_values_locales._parentID], + references: [pages_blocks_comparison_tbl_rows_values.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_tbl_rows_values = relations( + pages_blocks_comparison_tbl_rows_values, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison_tbl_rows, { + fields: [pages_blocks_comparison_tbl_rows_values._parentID], + references: [pages_blocks_comparison_tbl_rows.id], + relationName: "values", + }), + _locales: many(pages_blocks_comparison_tbl_rows_values_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_tbl_rows_locales = relations( + pages_blocks_comparison_tbl_rows_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_tbl_rows, { + fields: [pages_blocks_comparison_tbl_rows_locales._parentID], + references: [pages_blocks_comparison_tbl_rows.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_tbl_rows = relations( + pages_blocks_comparison_tbl_rows, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison, { + fields: [pages_blocks_comparison_tbl_rows._parentID], + references: [pages_blocks_comparison.id], + relationName: "tbl_rows", + }), + _locales: many(pages_blocks_comparison_tbl_rows_locales, { + relationName: "_locales", + }), + values: many(pages_blocks_comparison_tbl_rows_values, { + relationName: "values", + }), + }), +); +export const relations_pages_blocks_comparison_crd_items_features_locales = relations( + pages_blocks_comparison_crd_items_features_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_crd_items_features, { + fields: [pages_blocks_comparison_crd_items_features_locales._parentID], + references: [pages_blocks_comparison_crd_items_features.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_crd_items_features = relations( + pages_blocks_comparison_crd_items_features, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison_crd_items, { + fields: [pages_blocks_comparison_crd_items_features._parentID], + references: [pages_blocks_comparison_crd_items.id], + relationName: "features", + }), + _locales: many(pages_blocks_comparison_crd_items_features_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_crd_items_locales = relations( + pages_blocks_comparison_crd_items_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_crd_items, { + fields: [pages_blocks_comparison_crd_items_locales._parentID], + references: [pages_blocks_comparison_crd_items.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_crd_items = relations( + pages_blocks_comparison_crd_items, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison, { + fields: [pages_blocks_comparison_crd_items._parentID], + references: [pages_blocks_comparison.id], + relationName: "crd_items", + }), + _locales: many(pages_blocks_comparison_crd_items_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [pages_blocks_comparison_crd_items.image], + references: [media.id], + relationName: "image", + }), + features: many(pages_blocks_comparison_crd_items_features, { + relationName: "features", + }), + }), +); +export const relations_pages_blocks_comparison_before_after_items_locales = relations( + pages_blocks_comparison_before_after_items_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_before_after_items, { + fields: [pages_blocks_comparison_before_after_items_locales._parentID], + references: [pages_blocks_comparison_before_after_items.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_before_after_items = relations( + pages_blocks_comparison_before_after_items, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison, { + fields: [pages_blocks_comparison_before_after_items._parentID], + references: [pages_blocks_comparison.id], + relationName: "beforeAfter_items", + }), + _locales: many(pages_blocks_comparison_before_after_items_locales, { + relationName: "_locales", + }), + beforeImage: one(media, { + fields: [pages_blocks_comparison_before_after_items.beforeImage], + references: [media.id], + relationName: "beforeImage", + }), + afterImage: one(media, { + fields: [pages_blocks_comparison_before_after_items.afterImage], + references: [media.id], + relationName: "afterImage", + }), + }), +); +export const relations_pages_blocks_comparison_pros_cons_items_pros_locales = relations( + pages_blocks_comparison_pros_cons_items_pros_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_pros_cons_items_pros, { + fields: [pages_blocks_comparison_pros_cons_items_pros_locales._parentID], + references: [pages_blocks_comparison_pros_cons_items_pros.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_pros_cons_items_pros = relations( + pages_blocks_comparison_pros_cons_items_pros, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison_pros_cons_items, { + fields: [pages_blocks_comparison_pros_cons_items_pros._parentID], + references: [pages_blocks_comparison_pros_cons_items.id], + relationName: "pros", + }), + _locales: many(pages_blocks_comparison_pros_cons_items_pros_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_pros_cons_items_cons_locales = relations( + pages_blocks_comparison_pros_cons_items_cons_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_pros_cons_items_cons, { + fields: [pages_blocks_comparison_pros_cons_items_cons_locales._parentID], + references: [pages_blocks_comparison_pros_cons_items_cons.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_pros_cons_items_cons = relations( + pages_blocks_comparison_pros_cons_items_cons, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison_pros_cons_items, { + fields: [pages_blocks_comparison_pros_cons_items_cons._parentID], + references: [pages_blocks_comparison_pros_cons_items.id], + relationName: "cons", + }), + _locales: many(pages_blocks_comparison_pros_cons_items_cons_locales, { + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_pros_cons_items_locales = relations( + pages_blocks_comparison_pros_cons_items_locales, + ({ one }) => ({ + _parentID: one(pages_blocks_comparison_pros_cons_items, { + fields: [pages_blocks_comparison_pros_cons_items_locales._parentID], + references: [pages_blocks_comparison_pros_cons_items.id], + relationName: "_locales", + }), + }), +); +export const relations_pages_blocks_comparison_pros_cons_items = relations( + pages_blocks_comparison_pros_cons_items, + ({ one, many }) => ({ + _parentID: one(pages_blocks_comparison, { + fields: [pages_blocks_comparison_pros_cons_items._parentID], + references: [pages_blocks_comparison.id], + relationName: "prosCons_items", + }), + _locales: many(pages_blocks_comparison_pros_cons_items_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [pages_blocks_comparison_pros_cons_items.image], + references: [media.id], + relationName: "image", + }), + pros: many(pages_blocks_comparison_pros_cons_items_pros, { + relationName: "pros", + }), + cons: many(pages_blocks_comparison_pros_cons_items_cons, { + relationName: "cons", + }), + }), +); +export const relations_pages_blocks_comparison_locales = relations(pages_blocks_comparison_locales, ({ one }) => ({ + _parentID: one(pages_blocks_comparison, { + fields: [pages_blocks_comparison_locales._parentID], + references: [pages_blocks_comparison.id], + relationName: "_locales", + }), +})); +export const relations_pages_blocks_comparison = relations(pages_blocks_comparison, ({ one, many }) => ({ + _parentID: one(pages, { + fields: [pages_blocks_comparison._parentID], + references: [pages.id], + relationName: "_blocks_comparison", + }), + _locales: many(pages_blocks_comparison_locales, { + relationName: "_locales", + }), + tbl_columns: many(pages_blocks_comparison_tbl_columns, { + relationName: "tbl_columns", + }), + tbl_rows: many(pages_blocks_comparison_tbl_rows, { + relationName: "tbl_rows", + }), + crd_items: many(pages_blocks_comparison_crd_items, { + relationName: "crd_items", + }), + beforeAfter_items: many(pages_blocks_comparison_before_after_items, { + relationName: "beforeAfter_items", + }), + prosCons_items: many(pages_blocks_comparison_pros_cons_items, { + relationName: "prosCons_items", + }), +})); +export const relations_pages_locales = relations(pages_locales, ({ one }) => ({ + _parentID: one(pages, { + fields: [pages_locales._parentID], + references: [pages.id], + relationName: "_locales", + }), +})); export const relations_pages_rels = relations(pages_rels, ({ one }) => ({ parent: one(pages, { fields: [pages_rels.parent], @@ -2443,6 +11852,56 @@ export const relations_pages_rels = relations(pages_rels, ({ one }) => ({ references: [testimonials.id], relationName: "testimonials", }), + faqsID: one(faqs, { + fields: [pages_rels.faqsID], + references: [faqs.id], + relationName: "faqs", + }), + teamID: one(team, { + fields: [pages_rels.teamID], + references: [team.id], + relationName: "team", + }), + servicesID: one(services, { + fields: [pages_rels.servicesID], + references: [services.id], + relationName: "services", + }), + authorsID: one(authors, { + fields: [pages_rels.authorsID], + references: [authors.id], + relationName: "authors", + }), + postsID: one(posts, { + fields: [pages_rels.postsID], + references: [posts.id], + relationName: "posts", + }), + locationsID: one(locations, { + fields: [pages_rels.locationsID], + references: [locations.id], + relationName: "locations", + }), + partnersID: one(partners, { + fields: [pages_rels.partnersID], + references: [partners.id], + relationName: "partners", + }), + jobsID: one(jobs, { + fields: [pages_rels.jobsID], + references: [jobs.id], + relationName: "jobs", + }), + downloadsID: one(downloads, { + fields: [pages_rels.downloadsID], + references: [downloads.id], + relationName: "downloads", + }), + eventsID: one(events, { + fields: [pages_rels.eventsID], + references: [events.id], + relationName: "events", + }), })); export const relations_pages = relations(pages, ({ one, many }) => ({ tenant: one(tenants, { @@ -2458,6 +11917,12 @@ export const relations_pages = relations(pages, ({ one, many }) => ({ "_blocks_hero-block": many(pages_blocks_hero_block, { relationName: "_blocks_hero-block", }), + "_blocks_hero-slider-block": many(pages_blocks_hero_slider_block, { + relationName: "_blocks_hero-slider-block", + }), + "_blocks_image-slider-block": many(pages_blocks_image_slider_block, { + relationName: "_blocks_image-slider-block", + }), "_blocks_text-block": many(pages_blocks_text_block, { relationName: "_blocks_text-block", }), @@ -2497,15 +11962,85 @@ export const relations_pages = relations(pages, ({ one, many }) => ({ "_blocks_process-steps-block": many(pages_blocks_process_steps_block, { relationName: "_blocks_process-steps-block", }), + "_blocks_faq-block": many(pages_blocks_faq_block, { + relationName: "_blocks_faq-block", + }), + "_blocks_team-block": many(pages_blocks_team_block, { + relationName: "_blocks_team-block", + }), + "_blocks_services-block": many(pages_blocks_services_block, { + relationName: "_blocks_services-block", + }), + "_blocks_author-bio-block": many(pages_blocks_author_bio_block, { + relationName: "_blocks_author-bio-block", + }), + "_blocks_related-posts-block": many(pages_blocks_related_posts_block, { + relationName: "_blocks_related-posts-block", + }), + "_blocks_share-buttons-block": many(pages_blocks_share_buttons_block, { + relationName: "_blocks_share-buttons-block", + }), + "_blocks_toc-block": many(pages_blocks_toc_block, { + relationName: "_blocks_toc-block", + }), + "_blocks_team-filter-block": many(pages_blocks_team_filter_block, { + relationName: "_blocks_team-filter-block", + }), + "_blocks_org-chart-block": many(pages_blocks_org_chart_block, { + relationName: "_blocks_org-chart-block", + }), + "_blocks_locations-block": many(pages_blocks_locations_block, { + relationName: "_blocks_locations-block", + }), + "_blocks_logo-grid-block": many(pages_blocks_logo_grid_block, { + relationName: "_blocks_logo-grid-block", + }), + "_blocks_stats-block": many(pages_blocks_stats_block, { + relationName: "_blocks_stats-block", + }), + "_blocks_jobs-block": many(pages_blocks_jobs_block, { + relationName: "_blocks_jobs-block", + }), + "_blocks_downloads-block": many(pages_blocks_downloads_block, { + relationName: "_blocks_downloads-block", + }), + "_blocks_map-block": many(pages_blocks_map_block, { + relationName: "_blocks_map-block", + }), + _blocks_events: many(pages_blocks_events, { + relationName: "_blocks_events", + }), + _blocks_pricing: many(pages_blocks_pricing, { + relationName: "_blocks_pricing", + }), + _blocks_tabs: many(pages_blocks_tabs, { + relationName: "_blocks_tabs", + }), + _blocks_accordion: many(pages_blocks_accordion, { + relationName: "_blocks_accordion", + }), + _blocks_comparison: many(pages_blocks_comparison, { + relationName: "_blocks_comparison", + }), seo_ogImage: one(media, { fields: [pages.seo_ogImage], references: [media.id], relationName: "seo_ogImage", }), + _locales: many(pages_locales, { + relationName: "_locales", + }), _rels: many(pages_rels, { relationName: "_rels", }), })); +export const relations_posts_locales = relations(posts_locales, ({ one }) => ({ + _parentID: one(posts, { + fields: [posts_locales._parentID], + references: [posts.id], + relationName: "_locales", + }), +})); export const relations_posts_rels = relations(posts_rels, ({ one }) => ({ parent: one(posts, { fields: [posts_rels.parent], @@ -2517,6 +12052,16 @@ export const relations_posts_rels = relations(posts_rels, ({ one }) => ({ references: [categories.id], relationName: "categories", }), + tagsID: one(tags, { + fields: [posts_rels.tagsID], + references: [tags.id], + relationName: "tags", + }), + authorsID: one(authors, { + fields: [posts_rels.authorsID], + references: [authors.id], + relationName: "authors", + }), })); export const relations_posts = relations(posts, ({ one, many }) => ({ tenant: one(tenants, { @@ -2529,21 +12074,39 @@ export const relations_posts = relations(posts, ({ one, many }) => ({ references: [media.id], relationName: "featuredImage", }), + author: one(authors, { + fields: [posts.author], + references: [authors.id], + relationName: "author", + }), seo_ogImage: one(media, { fields: [posts.seo_ogImage], references: [media.id], relationName: "seo_ogImage", }), + _locales: many(posts_locales, { + relationName: "_locales", + }), _rels: many(posts_rels, { relationName: "_rels", }), })); -export const relations_categories = relations(categories, ({ one }) => ({ +export const relations_categories_locales = relations(categories_locales, ({ one }) => ({ + _parentID: one(categories, { + fields: [categories_locales._parentID], + references: [categories.id], + relationName: "_locales", + }), +})); +export const relations_categories = relations(categories, ({ one, many }) => ({ tenant: one(tenants, { fields: [categories.tenant], references: [tenants.id], relationName: "tenant", }), + _locales: many(categories_locales, { + relationName: "_locales", + }), })); export const relations_social_links = relations(social_links, ({ one }) => ({ tenant: one(tenants, { @@ -2552,7 +12115,14 @@ export const relations_social_links = relations(social_links, ({ one }) => ({ relationName: "tenant", }), })); -export const relations_testimonials = relations(testimonials, ({ one }) => ({ +export const relations_testimonials_locales = relations(testimonials_locales, ({ one }) => ({ + _parentID: one(testimonials, { + fields: [testimonials_locales._parentID], + references: [testimonials.id], + relationName: "_locales", + }), +})); +export const relations_testimonials = relations(testimonials, ({ one, many }) => ({ tenant: one(tenants, { fields: [testimonials.tenant], references: [tenants.id], @@ -2563,6 +12133,292 @@ export const relations_testimonials = relations(testimonials, ({ one }) => ({ references: [media.id], relationName: "image", }), + _locales: many(testimonials_locales, { + relationName: "_locales", + }), +})); +export const relations_faqs_locales = relations(faqs_locales, ({ one }) => ({ + _parentID: one(faqs, { + fields: [faqs_locales._parentID], + references: [faqs.id], + relationName: "_locales", + }), +})); +export const relations_faqs_rels = relations(faqs_rels, ({ one }) => ({ + parent: one(faqs, { + fields: [faqs_rels.parent], + references: [faqs.id], + relationName: "_rels", + }), + faqsID: one(faqs, { + fields: [faqs_rels.faqsID], + references: [faqs.id], + relationName: "faqs", + }), +})); +export const relations_faqs = relations(faqs, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [faqs.tenant], + references: [tenants.id], + relationName: "tenant", + }), + _locales: many(faqs_locales, { + relationName: "_locales", + }), + _rels: many(faqs_rels, { + relationName: "_rels", + }), +})); +export const relations_team_social_links = relations(team_social_links, ({ one }) => ({ + _parentID: one(team, { + fields: [team_social_links._parentID], + references: [team.id], + relationName: "socialLinks", + }), +})); +export const relations_team_qualifications_locales = relations(team_qualifications_locales, ({ one }) => ({ + _parentID: one(team_qualifications, { + fields: [team_qualifications_locales._parentID], + references: [team_qualifications.id], + relationName: "_locales", + }), +})); +export const relations_team_qualifications = relations(team_qualifications, ({ one, many }) => ({ + _parentID: one(team, { + fields: [team_qualifications._parentID], + references: [team.id], + relationName: "qualifications", + }), + _locales: many(team_qualifications_locales, { + relationName: "_locales", + }), +})); +export const relations_team_specializations_locales = relations(team_specializations_locales, ({ one }) => ({ + _parentID: one(team_specializations, { + fields: [team_specializations_locales._parentID], + references: [team_specializations.id], + relationName: "_locales", + }), +})); +export const relations_team_specializations = relations(team_specializations, ({ one, many }) => ({ + _parentID: one(team, { + fields: [team_specializations._parentID], + references: [team.id], + relationName: "specializations", + }), + _locales: many(team_specializations_locales, { + relationName: "_locales", + }), +})); +export const relations_team_languages_locales = relations(team_languages_locales, ({ one }) => ({ + _parentID: one(team_languages, { + fields: [team_languages_locales._parentID], + references: [team_languages.id], + relationName: "_locales", + }), +})); +export const relations_team_languages = relations(team_languages, ({ one, many }) => ({ + _parentID: one(team, { + fields: [team_languages._parentID], + references: [team.id], + relationName: "languages", + }), + _locales: many(team_languages_locales, { + relationName: "_locales", + }), +})); +export const relations_team_locales = relations(team_locales, ({ one }) => ({ + _parentID: one(team, { + fields: [team_locales._parentID], + references: [team.id], + relationName: "_locales", + }), +})); +export const relations_team = relations(team, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [team.tenant], + references: [tenants.id], + relationName: "tenant", + }), + image: one(media, { + fields: [team.image], + references: [media.id], + relationName: "image", + }), + socialLinks: many(team_social_links, { + relationName: "socialLinks", + }), + qualifications: many(team_qualifications, { + relationName: "qualifications", + }), + specializations: many(team_specializations, { + relationName: "specializations", + }), + languages: many(team_languages, { + relationName: "languages", + }), + linkedUser: one(users, { + fields: [team.linkedUser], + references: [users.id], + relationName: "linkedUser", + }), + reportsTo: one(team, { + fields: [team.reportsTo], + references: [team.id], + relationName: "reportsTo", + }), + _locales: many(team_locales, { + relationName: "_locales", + }), +})); +export const relations_service_categories_locales = relations(service_categories_locales, ({ one }) => ({ + _parentID: one(service_categories, { + fields: [service_categories_locales._parentID], + references: [service_categories.id], + relationName: "_locales", + }), +})); +export const relations_service_categories = relations(service_categories, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [service_categories.tenant], + references: [tenants.id], + relationName: "tenant", + }), + image: one(media, { + fields: [service_categories.image], + references: [media.id], + relationName: "image", + }), + _locales: many(service_categories_locales, { + relationName: "_locales", + }), +})); +export const relations_services_gallery_locales = relations(services_gallery_locales, ({ one }) => ({ + _parentID: one(services_gallery, { + fields: [services_gallery_locales._parentID], + references: [services_gallery.id], + relationName: "_locales", + }), +})); +export const relations_services_gallery = relations(services_gallery, ({ one, many }) => ({ + _parentID: one(services, { + fields: [services_gallery._parentID], + references: [services.id], + relationName: "gallery", + }), + _locales: many(services_gallery_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [services_gallery.image], + references: [media.id], + relationName: "image", + }), +})); +export const relations_services_features_locales = relations(services_features_locales, ({ one }) => ({ + _parentID: one(services_features, { + fields: [services_features_locales._parentID], + references: [services_features.id], + relationName: "_locales", + }), +})); +export const relations_services_features = relations(services_features, ({ one, many }) => ({ + _parentID: one(services, { + fields: [services_features._parentID], + references: [services.id], + relationName: "features", + }), + _locales: many(services_features_locales, { + relationName: "_locales", + }), +})); +export const relations_services_detail_sections_locales = relations(services_detail_sections_locales, ({ one }) => ({ + _parentID: one(services_detail_sections, { + fields: [services_detail_sections_locales._parentID], + references: [services_detail_sections.id], + relationName: "_locales", + }), +})); +export const relations_services_detail_sections = relations(services_detail_sections, ({ one, many }) => ({ + _parentID: one(services, { + fields: [services_detail_sections._parentID], + references: [services.id], + relationName: "detailSections", + }), + _locales: many(services_detail_sections_locales, { + relationName: "_locales", + }), +})); +export const relations_services_locales = relations(services_locales, ({ one }) => ({ + _parentID: one(services, { + fields: [services_locales._parentID], + references: [services.id], + relationName: "_locales", + }), +})); +export const relations_services_rels = relations(services_rels, ({ one }) => ({ + parent: one(services, { + fields: [services_rels.parent], + references: [services.id], + relationName: "_rels", + }), + servicesID: one(services, { + fields: [services_rels.servicesID], + references: [services.id], + relationName: "services", + }), + teamID: one(team, { + fields: [services_rels.teamID], + references: [team.id], + relationName: "team", + }), + faqsID: one(faqs, { + fields: [services_rels.faqsID], + references: [faqs.id], + relationName: "faqs", + }), +})); +export const relations_services = relations(services, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [services.tenant], + references: [tenants.id], + relationName: "tenant", + }), + iconImage: one(media, { + fields: [services.iconImage], + references: [media.id], + relationName: "iconImage", + }), + image: one(media, { + fields: [services.image], + references: [media.id], + relationName: "image", + }), + gallery: many(services_gallery, { + relationName: "gallery", + }), + category: one(service_categories, { + fields: [services.category], + references: [service_categories.id], + relationName: "category", + }), + features: many(services_features, { + relationName: "features", + }), + detailSections: many(services_detail_sections, { + relationName: "detailSections", + }), + ogImage: one(media, { + fields: [services.ogImage], + references: [media.id], + relationName: "ogImage", + }), + _locales: many(services_locales, { + relationName: "_locales", + }), + _rels: many(services_rels, { + relationName: "_rels", + }), })); export const relations_newsletter_subscribers_interests = relations(newsletter_subscribers_interests, ({ one }) => ({ parent: one(newsletter_subscribers, { @@ -2581,6 +12437,1051 @@ export const relations_newsletter_subscribers = relations(newsletter_subscribers relationName: "interests", }), })); +export const relations_portfolio_categories_locales = relations(portfolio_categories_locales, ({ one }) => ({ + _parentID: one(portfolio_categories, { + fields: [portfolio_categories_locales._parentID], + references: [portfolio_categories.id], + relationName: "_locales", + }), +})); +export const relations_portfolio_categories = relations(portfolio_categories, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [portfolio_categories.tenant], + references: [tenants.id], + relationName: "tenant", + }), + coverImage: one(media, { + fields: [portfolio_categories.coverImage], + references: [media.id], + relationName: "coverImage", + }), + _locales: many(portfolio_categories_locales, { + relationName: "_locales", + }), +})); +export const relations_portfolios_images_locales = relations(portfolios_images_locales, ({ one }) => ({ + _parentID: one(portfolios_images, { + fields: [portfolios_images_locales._parentID], + references: [portfolios_images.id], + relationName: "_locales", + }), +})); +export const relations_portfolios_images = relations(portfolios_images, ({ one, many }) => ({ + _parentID: one(portfolios, { + fields: [portfolios_images._parentID], + references: [portfolios.id], + relationName: "images", + }), + _locales: many(portfolios_images_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [portfolios_images.image], + references: [media.id], + relationName: "image", + }), +})); +export const relations_portfolios_locales = relations(portfolios_locales, ({ one }) => ({ + _parentID: one(portfolios, { + fields: [portfolios_locales._parentID], + references: [portfolios.id], + relationName: "_locales", + }), +})); +export const relations_portfolios_texts = relations(portfolios_texts, ({ one }) => ({ + parent: one(portfolios, { + fields: [portfolios_texts.parent], + references: [portfolios.id], + relationName: "_texts", + }), +})); +export const relations_portfolios = relations(portfolios, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [portfolios.tenant], + references: [tenants.id], + relationName: "tenant", + }), + category: one(portfolio_categories, { + fields: [portfolios.category], + references: [portfolio_categories.id], + relationName: "category", + }), + coverImage: one(media, { + fields: [portfolios.coverImage], + references: [media.id], + relationName: "coverImage", + }), + images: many(portfolios_images, { + relationName: "images", + }), + seo_ogImage: one(media, { + fields: [portfolios.seo_ogImage], + references: [media.id], + relationName: "seo_ogImage", + }), + _locales: many(portfolios_locales, { + relationName: "_locales", + }), + _texts: many(portfolios_texts, { + relationName: "_texts", + }), +})); +export const relations_product_categories_locales = relations(product_categories_locales, ({ one }) => ({ + _parentID: one(product_categories, { + fields: [product_categories_locales._parentID], + references: [product_categories.id], + relationName: "_locales", + }), +})); +export const relations_product_categories = relations(product_categories, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [product_categories.tenant], + references: [tenants.id], + relationName: "tenant", + }), + image: one(media, { + fields: [product_categories.image], + references: [media.id], + relationName: "image", + }), + parent: one(product_categories, { + fields: [product_categories.parent], + references: [product_categories.id], + relationName: "parent", + }), + _locales: many(product_categories_locales, { + relationName: "_locales", + }), +})); +export const relations_products_tags = relations(products_tags, ({ one }) => ({ + _parentID: one(products, { + fields: [products_tags._parentID], + references: [products.id], + relationName: "tags", + }), +})); +export const relations_products_gallery_locales = relations(products_gallery_locales, ({ one }) => ({ + _parentID: one(products_gallery, { + fields: [products_gallery_locales._parentID], + references: [products_gallery.id], + relationName: "_locales", + }), +})); +export const relations_products_gallery = relations(products_gallery, ({ one, many }) => ({ + _parentID: one(products, { + fields: [products_gallery._parentID], + references: [products.id], + relationName: "gallery", + }), + _locales: many(products_gallery_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [products_gallery.image], + references: [media.id], + relationName: "image", + }), +})); +export const relations_products_details_specifications_locales = relations( + products_details_specifications_locales, + ({ one }) => ({ + _parentID: one(products_details_specifications, { + fields: [products_details_specifications_locales._parentID], + references: [products_details_specifications.id], + relationName: "_locales", + }), + }), +); +export const relations_products_details_specifications = relations( + products_details_specifications, + ({ one, many }) => ({ + _parentID: one(products, { + fields: [products_details_specifications._parentID], + references: [products.id], + relationName: "details_specifications", + }), + _locales: many(products_details_specifications_locales, { + relationName: "_locales", + }), + }), +); +export const relations_products_details_features_locales = relations(products_details_features_locales, ({ one }) => ({ + _parentID: one(products_details_features, { + fields: [products_details_features_locales._parentID], + references: [products_details_features.id], + relationName: "_locales", + }), +})); +export const relations_products_details_features = relations(products_details_features, ({ one, many }) => ({ + _parentID: one(products, { + fields: [products_details_features._parentID], + references: [products.id], + relationName: "details_features", + }), + _locales: many(products_details_features_locales, { + relationName: "_locales", + }), +})); +export const relations_products_download_files_locales = relations(products_download_files_locales, ({ one }) => ({ + _parentID: one(products_download_files, { + fields: [products_download_files_locales._parentID], + references: [products_download_files.id], + relationName: "_locales", + }), +})); +export const relations_products_download_files = relations(products_download_files, ({ one, many }) => ({ + _parentID: one(products, { + fields: [products_download_files._parentID], + references: [products.id], + relationName: "downloadFiles", + }), + _locales: many(products_download_files_locales, { + relationName: "_locales", + }), + file: one(media, { + fields: [products_download_files.file], + references: [media.id], + relationName: "file", + }), +})); +export const relations_products_locales = relations(products_locales, ({ one }) => ({ + _parentID: one(products, { + fields: [products_locales._parentID], + references: [products.id], + relationName: "_locales", + }), +})); +export const relations_products_rels = relations(products_rels, ({ one }) => ({ + parent: one(products, { + fields: [products_rels.parent], + references: [products.id], + relationName: "_rels", + }), + productsID: one(products, { + fields: [products_rels.productsID], + references: [products.id], + relationName: "products", + }), +})); +export const relations_products = relations(products, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [products.tenant], + references: [tenants.id], + relationName: "tenant", + }), + category: one(product_categories, { + fields: [products.category], + references: [product_categories.id], + relationName: "category", + }), + tags: many(products_tags, { + relationName: "tags", + }), + featuredImage: one(media, { + fields: [products.featuredImage], + references: [media.id], + relationName: "featuredImage", + }), + gallery: many(products_gallery, { + relationName: "gallery", + }), + details_specifications: many(products_details_specifications, { + relationName: "details_specifications", + }), + details_features: many(products_details_features, { + relationName: "details_features", + }), + downloadFiles: many(products_download_files, { + relationName: "downloadFiles", + }), + seo_ogImage: one(media, { + fields: [products.seo_ogImage], + references: [media.id], + relationName: "seo_ogImage", + }), + _locales: many(products_locales, { + relationName: "_locales", + }), + _rels: many(products_rels, { + relationName: "_rels", + }), +})); +export const relations_timelines_events_gallery_locales = relations(timelines_events_gallery_locales, ({ one }) => ({ + _parentID: one(timelines_events_gallery, { + fields: [timelines_events_gallery_locales._parentID], + references: [timelines_events_gallery.id], + relationName: "_locales", + }), +})); +export const relations_timelines_events_gallery = relations(timelines_events_gallery, ({ one, many }) => ({ + _parentID: one(timelines_events, { + fields: [timelines_events_gallery._parentID], + references: [timelines_events.id], + relationName: "gallery", + }), + _locales: many(timelines_events_gallery_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [timelines_events_gallery.image], + references: [media.id], + relationName: "image", + }), +})); +export const relations_timelines_events_deliverables_locales = relations( + timelines_events_deliverables_locales, + ({ one }) => ({ + _parentID: one(timelines_events_deliverables, { + fields: [timelines_events_deliverables_locales._parentID], + references: [timelines_events_deliverables.id], + relationName: "_locales", + }), + }), +); +export const relations_timelines_events_deliverables = relations(timelines_events_deliverables, ({ one, many }) => ({ + _parentID: one(timelines_events, { + fields: [timelines_events_deliverables._parentID], + references: [timelines_events.id], + relationName: "deliverables", + }), + _locales: many(timelines_events_deliverables_locales, { + relationName: "_locales", + }), +})); +export const relations_timelines_events_links_locales = relations(timelines_events_links_locales, ({ one }) => ({ + _parentID: one(timelines_events_links, { + fields: [timelines_events_links_locales._parentID], + references: [timelines_events_links.id], + relationName: "_locales", + }), +})); +export const relations_timelines_events_links = relations(timelines_events_links, ({ one, many }) => ({ + _parentID: one(timelines_events, { + fields: [timelines_events_links._parentID], + references: [timelines_events.id], + relationName: "links", + }), + _locales: many(timelines_events_links_locales, { + relationName: "_locales", + }), +})); +export const relations_timelines_events_locales = relations(timelines_events_locales, ({ one }) => ({ + _parentID: one(timelines_events, { + fields: [timelines_events_locales._parentID], + references: [timelines_events.id], + relationName: "_locales", + }), +})); +export const relations_timelines_events = relations(timelines_events, ({ one, many }) => ({ + _parentID: one(timelines, { + fields: [timelines_events._parentID], + references: [timelines.id], + relationName: "events", + }), + _locales: many(timelines_events_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [timelines_events.image], + references: [media.id], + relationName: "image", + }), + gallery: many(timelines_events_gallery, { + relationName: "gallery", + }), + deliverables: many(timelines_events_deliverables, { + relationName: "deliverables", + }), + links: many(timelines_events_links, { + relationName: "links", + }), +})); +export const relations_timelines_locales = relations(timelines_locales, ({ one }) => ({ + _parentID: one(timelines, { + fields: [timelines_locales._parentID], + references: [timelines.id], + relationName: "_locales", + }), +})); +export const relations_timelines = relations(timelines, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [timelines.tenant], + references: [tenants.id], + relationName: "tenant", + }), + events: many(timelines_events, { + relationName: "events", + }), + _locales: many(timelines_locales, { + relationName: "_locales", + }), +})); +export const relations_workflows_phases_steps_conditions_locales = relations( + workflows_phases_steps_conditions_locales, + ({ one }) => ({ + _parentID: one(workflows_phases_steps_conditions, { + fields: [workflows_phases_steps_conditions_locales._parentID], + references: [workflows_phases_steps_conditions.id], + relationName: "_locales", + }), + }), +); +export const relations_workflows_phases_steps_conditions = relations( + workflows_phases_steps_conditions, + ({ one, many }) => ({ + _parentID: one(workflows_phases_steps, { + fields: [workflows_phases_steps_conditions._parentID], + references: [workflows_phases_steps.id], + relationName: "conditions", + }), + _locales: many(workflows_phases_steps_conditions_locales, { + relationName: "_locales", + }), + }), +); +export const relations_workflows_phases_steps_checklist_locales = relations( + workflows_phases_steps_checklist_locales, + ({ one }) => ({ + _parentID: one(workflows_phases_steps_checklist, { + fields: [workflows_phases_steps_checklist_locales._parentID], + references: [workflows_phases_steps_checklist.id], + relationName: "_locales", + }), + }), +); +export const relations_workflows_phases_steps_checklist = relations( + workflows_phases_steps_checklist, + ({ one, many }) => ({ + _parentID: one(workflows_phases_steps, { + fields: [workflows_phases_steps_checklist._parentID], + references: [workflows_phases_steps.id], + relationName: "checklist", + }), + _locales: many(workflows_phases_steps_checklist_locales, { + relationName: "_locales", + }), + }), +); +export const relations_workflows_phases_steps_resources_locales = relations( + workflows_phases_steps_resources_locales, + ({ one }) => ({ + _parentID: one(workflows_phases_steps_resources, { + fields: [workflows_phases_steps_resources_locales._parentID], + references: [workflows_phases_steps_resources.id], + relationName: "_locales", + }), + }), +); +export const relations_workflows_phases_steps_resources = relations( + workflows_phases_steps_resources, + ({ one, many }) => ({ + _parentID: one(workflows_phases_steps, { + fields: [workflows_phases_steps_resources._parentID], + references: [workflows_phases_steps.id], + relationName: "resources", + }), + _locales: many(workflows_phases_steps_resources_locales, { + relationName: "_locales", + }), + file: one(media, { + fields: [workflows_phases_steps_resources.file], + references: [media.id], + relationName: "file", + }), + }), +); +export const relations_workflows_phases_steps_outputs_locales = relations( + workflows_phases_steps_outputs_locales, + ({ one }) => ({ + _parentID: one(workflows_phases_steps_outputs, { + fields: [workflows_phases_steps_outputs_locales._parentID], + references: [workflows_phases_steps_outputs.id], + relationName: "_locales", + }), + }), +); +export const relations_workflows_phases_steps_outputs = relations(workflows_phases_steps_outputs, ({ one, many }) => ({ + _parentID: one(workflows_phases_steps, { + fields: [workflows_phases_steps_outputs._parentID], + references: [workflows_phases_steps.id], + relationName: "outputs", + }), + _locales: many(workflows_phases_steps_outputs_locales, { + relationName: "_locales", + }), +})); +export const relations_workflows_phases_steps_locales = relations(workflows_phases_steps_locales, ({ one }) => ({ + _parentID: one(workflows_phases_steps, { + fields: [workflows_phases_steps_locales._parentID], + references: [workflows_phases_steps.id], + relationName: "_locales", + }), +})); +export const relations_workflows_phases_steps = relations(workflows_phases_steps, ({ one, many }) => ({ + _parentID: one(workflows_phases, { + fields: [workflows_phases_steps._parentID], + references: [workflows_phases.id], + relationName: "steps", + }), + _locales: many(workflows_phases_steps_locales, { + relationName: "_locales", + }), + conditions: many(workflows_phases_steps_conditions, { + relationName: "conditions", + }), + checklist: many(workflows_phases_steps_checklist, { + relationName: "checklist", + }), + resources: many(workflows_phases_steps_resources, { + relationName: "resources", + }), + outputs: many(workflows_phases_steps_outputs, { + relationName: "outputs", + }), +})); +export const relations_workflows_phases_deliverables_locales = relations( + workflows_phases_deliverables_locales, + ({ one }) => ({ + _parentID: one(workflows_phases_deliverables, { + fields: [workflows_phases_deliverables_locales._parentID], + references: [workflows_phases_deliverables.id], + relationName: "_locales", + }), + }), +); +export const relations_workflows_phases_deliverables = relations(workflows_phases_deliverables, ({ one, many }) => ({ + _parentID: one(workflows_phases, { + fields: [workflows_phases_deliverables._parentID], + references: [workflows_phases.id], + relationName: "deliverables", + }), + _locales: many(workflows_phases_deliverables_locales, { + relationName: "_locales", + }), +})); +export const relations_workflows_phases_locales = relations(workflows_phases_locales, ({ one }) => ({ + _parentID: one(workflows_phases, { + fields: [workflows_phases_locales._parentID], + references: [workflows_phases.id], + relationName: "_locales", + }), +})); +export const relations_workflows_phases = relations(workflows_phases, ({ one, many }) => ({ + _parentID: one(workflows, { + fields: [workflows_phases._parentID], + references: [workflows.id], + relationName: "phases", + }), + _locales: many(workflows_phases_locales, { + relationName: "_locales", + }), + steps: many(workflows_phases_steps, { + relationName: "steps", + }), + deliverables: many(workflows_phases_deliverables, { + relationName: "deliverables", + }), +})); +export const relations_workflows_global_resources_locales = relations( + workflows_global_resources_locales, + ({ one }) => ({ + _parentID: one(workflows_global_resources, { + fields: [workflows_global_resources_locales._parentID], + references: [workflows_global_resources.id], + relationName: "_locales", + }), + }), +); +export const relations_workflows_global_resources = relations(workflows_global_resources, ({ one, many }) => ({ + _parentID: one(workflows, { + fields: [workflows_global_resources._parentID], + references: [workflows.id], + relationName: "globalResources", + }), + _locales: many(workflows_global_resources_locales, { + relationName: "_locales", + }), + file: one(media, { + fields: [workflows_global_resources.file], + references: [media.id], + relationName: "file", + }), +})); +export const relations_workflows_locales = relations(workflows_locales, ({ one }) => ({ + _parentID: one(workflows, { + fields: [workflows_locales._parentID], + references: [workflows.id], + relationName: "_locales", + }), +})); +export const relations_workflows = relations(workflows, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [workflows.tenant], + references: [tenants.id], + relationName: "tenant", + }), + image: one(media, { + fields: [workflows.image], + references: [media.id], + relationName: "image", + }), + phases: many(workflows_phases, { + relationName: "phases", + }), + globalResources: many(workflows_global_resources, { + relationName: "globalResources", + }), + _locales: many(workflows_locales, { + relationName: "_locales", + }), +})); +export const relations_tags_locales = relations(tags_locales, ({ one }) => ({ + _parentID: one(tags, { + fields: [tags_locales._parentID], + references: [tags.id], + relationName: "_locales", + }), +})); +export const relations_tags = relations(tags, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [tags.tenant], + references: [tenants.id], + relationName: "tenant", + }), + _locales: many(tags_locales, { + relationName: "_locales", + }), +})); +export const relations_authors_locales = relations(authors_locales, ({ one }) => ({ + _parentID: one(authors, { + fields: [authors_locales._parentID], + references: [authors.id], + relationName: "_locales", + }), +})); +export const relations_authors = relations(authors, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [authors.tenant], + references: [tenants.id], + relationName: "tenant", + }), + avatar: one(media, { + fields: [authors.avatar], + references: [media.id], + relationName: "avatar", + }), + linkedTeam: one(team, { + fields: [authors.linkedTeam], + references: [team.id], + relationName: "linkedTeam", + }), + linkedUser: one(users, { + fields: [authors.linkedUser], + references: [users.id], + relationName: "linkedUser", + }), + _locales: many(authors_locales, { + relationName: "_locales", + }), +})); +export const relations_locations_hours_structured = relations(locations_hours_structured, ({ one }) => ({ + _parentID: one(locations, { + fields: [locations_hours_structured._parentID], + references: [locations.id], + relationName: "hours_structured", + }), +})); +export const relations_locations_locales = relations(locations_locales, ({ one }) => ({ + _parentID: one(locations, { + fields: [locations_locales._parentID], + references: [locations.id], + relationName: "_locales", + }), +})); +export const relations_locations_rels = relations(locations_rels, ({ one }) => ({ + parent: one(locations, { + fields: [locations_rels.parent], + references: [locations.id], + relationName: "_rels", + }), + servicesID: one(services, { + fields: [locations_rels.servicesID], + references: [services.id], + relationName: "services", + }), + teamID: one(team, { + fields: [locations_rels.teamID], + references: [team.id], + relationName: "team", + }), +})); +export const relations_locations = relations(locations, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [locations.tenant], + references: [tenants.id], + relationName: "tenant", + }), + image: one(media, { + fields: [locations.image], + references: [media.id], + relationName: "image", + }), + hours_structured: many(locations_hours_structured, { + relationName: "hours_structured", + }), + _locales: many(locations_locales, { + relationName: "_locales", + }), + _rels: many(locations_rels, { + relationName: "_rels", + }), +})); +export const relations_partners_case_study_results_locales = relations( + partners_case_study_results_locales, + ({ one }) => ({ + _parentID: one(partners_case_study_results, { + fields: [partners_case_study_results_locales._parentID], + references: [partners_case_study_results.id], + relationName: "_locales", + }), + }), +); +export const relations_partners_case_study_results = relations(partners_case_study_results, ({ one, many }) => ({ + _parentID: one(partners, { + fields: [partners_case_study_results._parentID], + references: [partners.id], + relationName: "caseStudy_results", + }), + _locales: many(partners_case_study_results_locales, { + relationName: "_locales", + }), +})); +export const relations_partners_tags = relations(partners_tags, ({ one }) => ({ + _parentID: one(partners, { + fields: [partners_tags._parentID], + references: [partners.id], + relationName: "tags", + }), +})); +export const relations_partners_locales = relations(partners_locales, ({ one }) => ({ + _parentID: one(partners, { + fields: [partners_locales._parentID], + references: [partners.id], + relationName: "_locales", + }), +})); +export const relations_partners = relations(partners, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [partners.tenant], + references: [tenants.id], + relationName: "tenant", + }), + logo: one(media, { + fields: [partners.logo], + references: [media.id], + relationName: "logo", + }), + logoLight: one(media, { + fields: [partners.logoLight], + references: [media.id], + relationName: "logoLight", + }), + caseStudy_results: many(partners_case_study_results, { + relationName: "caseStudy_results", + }), + certification_document: one(media, { + fields: [partners.certification_document], + references: [media.id], + relationName: "certification_document", + }), + tags: many(partners_tags, { + relationName: "tags", + }), + _locales: many(partners_locales, { + relationName: "_locales", + }), +})); +export const relations_jobs_benefits_list_locales = relations(jobs_benefits_list_locales, ({ one }) => ({ + _parentID: one(jobs_benefits_list, { + fields: [jobs_benefits_list_locales._parentID], + references: [jobs_benefits_list.id], + relationName: "_locales", + }), +})); +export const relations_jobs_benefits_list = relations(jobs_benefits_list, ({ one, many }) => ({ + _parentID: one(jobs, { + fields: [jobs_benefits_list._parentID], + references: [jobs.id], + relationName: "benefitsList", + }), + _locales: many(jobs_benefits_list_locales, { + relationName: "_locales", + }), +})); +export const relations_jobs_locales = relations(jobs_locales, ({ one }) => ({ + _parentID: one(jobs, { + fields: [jobs_locales._parentID], + references: [jobs.id], + relationName: "_locales", + }), +})); +export const relations_jobs = relations(jobs, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [jobs.tenant], + references: [tenants.id], + relationName: "tenant", + }), + location_locationRef: one(locations, { + fields: [jobs.location_locationRef], + references: [locations.id], + relationName: "location_locationRef", + }), + benefitsList: many(jobs_benefits_list, { + relationName: "benefitsList", + }), + application_formId: one(forms, { + fields: [jobs.application_formId], + references: [forms.id], + relationName: "application_formId", + }), + application_contact: one(team, { + fields: [jobs.application_contact], + references: [team.id], + relationName: "application_contact", + }), + image: one(media, { + fields: [jobs.image], + references: [media.id], + relationName: "image", + }), + _locales: many(jobs_locales, { + relationName: "_locales", + }), +})); +export const relations_downloads_tags = relations(downloads_tags, ({ one }) => ({ + _parentID: one(downloads, { + fields: [downloads_tags._parentID], + references: [downloads.id], + relationName: "tags", + }), +})); +export const relations_downloads_access_form_fields = relations(downloads_access_form_fields, ({ one }) => ({ + parent: one(downloads, { + fields: [downloads_access_form_fields.parent], + references: [downloads.id], + relationName: "access_formFields", + }), +})); +export const relations_downloads_locales = relations(downloads_locales, ({ one }) => ({ + _parentID: one(downloads, { + fields: [downloads_locales._parentID], + references: [downloads.id], + relationName: "_locales", + }), +})); +export const relations_downloads_rels = relations(downloads_rels, ({ one }) => ({ + parent: one(downloads, { + fields: [downloads_rels.parent], + references: [downloads.id], + relationName: "_rels", + }), + servicesID: one(services, { + fields: [downloads_rels.servicesID], + references: [services.id], + relationName: "services", + }), + productsID: one(products, { + fields: [downloads_rels.productsID], + references: [products.id], + relationName: "products", + }), +})); +export const relations_downloads = relations(downloads, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [downloads.tenant], + references: [tenants.id], + relationName: "tenant", + }), + file: one(media, { + fields: [downloads.file], + references: [media.id], + relationName: "file", + }), + tags: many(downloads_tags, { + relationName: "tags", + }), + thumbnail: one(media, { + fields: [downloads.thumbnail], + references: [media.id], + relationName: "thumbnail", + }), + access_formFields: many(downloads_access_form_fields, { + relationName: "access_formFields", + }), + _locales: many(downloads_locales, { + relationName: "_locales", + }), + _rels: many(downloads_rels, { + relationName: "_rels", + }), +})); +export const relations_events_gallery_locales = relations(events_gallery_locales, ({ one }) => ({ + _parentID: one(events_gallery, { + fields: [events_gallery_locales._parentID], + references: [events_gallery.id], + relationName: "_locales", + }), +})); +export const relations_events_gallery = relations(events_gallery, ({ one, many }) => ({ + _parentID: one(events, { + fields: [events_gallery._parentID], + references: [events.id], + relationName: "gallery", + }), + _locales: many(events_gallery_locales, { + relationName: "_locales", + }), + image: one(media, { + fields: [events_gallery.image], + references: [media.id], + relationName: "image", + }), +})); +export const relations_events_pricing_prices_locales = relations(events_pricing_prices_locales, ({ one }) => ({ + _parentID: one(events_pricing_prices, { + fields: [events_pricing_prices_locales._parentID], + references: [events_pricing_prices.id], + relationName: "_locales", + }), +})); +export const relations_events_pricing_prices = relations(events_pricing_prices, ({ one, many }) => ({ + _parentID: one(events, { + fields: [events_pricing_prices._parentID], + references: [events.id], + relationName: "pricing_prices", + }), + _locales: many(events_pricing_prices_locales, { + relationName: "_locales", + }), +})); +export const relations_events_speakers_locales = relations(events_speakers_locales, ({ one }) => ({ + _parentID: one(events_speakers, { + fields: [events_speakers_locales._parentID], + references: [events_speakers.id], + relationName: "_locales", + }), +})); +export const relations_events_speakers = relations(events_speakers, ({ one, many }) => ({ + _parentID: one(events, { + fields: [events_speakers._parentID], + references: [events.id], + relationName: "speakers", + }), + _locales: many(events_speakers_locales, { + relationName: "_locales", + }), + teamMember: one(team, { + fields: [events_speakers.teamMember], + references: [team.id], + relationName: "teamMember", + }), + photo: one(media, { + fields: [events_speakers.photo], + references: [media.id], + relationName: "photo", + }), +})); +export const relations_events_agenda_locales = relations(events_agenda_locales, ({ one }) => ({ + _parentID: one(events_agenda, { + fields: [events_agenda_locales._parentID], + references: [events_agenda.id], + relationName: "_locales", + }), +})); +export const relations_events_agenda = relations(events_agenda, ({ one, many }) => ({ + _parentID: one(events, { + fields: [events_agenda._parentID], + references: [events.id], + relationName: "agenda", + }), + _locales: many(events_agenda_locales, { + relationName: "_locales", + }), +})); +export const relations_events_locales = relations(events_locales, ({ one }) => ({ + _parentID: one(events, { + fields: [events_locales._parentID], + references: [events.id], + relationName: "_locales", + }), +})); +export const relations_events_rels = relations(events_rels, ({ one }) => ({ + parent: one(events, { + fields: [events_rels.parent], + references: [events.id], + relationName: "_rels", + }), + servicesID: one(services, { + fields: [events_rels.servicesID], + references: [services.id], + relationName: "services", + }), + eventsID: one(events, { + fields: [events_rels.eventsID], + references: [events.id], + relationName: "events", + }), +})); +export const relations_events = relations(events, ({ one, many }) => ({ + tenant: one(tenants, { + fields: [events.tenant], + references: [tenants.id], + relationName: "tenant", + }), + location_locationRef: one(locations, { + fields: [events.location_locationRef], + references: [locations.id], + relationName: "location_locationRef", + }), + image: one(media, { + fields: [events.image], + references: [media.id], + relationName: "image", + }), + gallery: many(events_gallery, { + relationName: "gallery", + }), + registration_formId: one(forms, { + fields: [events.registration_formId], + references: [forms.id], + relationName: "registration_formId", + }), + pricing_prices: many(events_pricing_prices, { + relationName: "pricing_prices", + }), + speakers: many(events_speakers, { + relationName: "speakers", + }), + agenda: many(events_agenda, { + relationName: "agenda", + }), + contact_teamMember: one(team, { + fields: [events.contact_teamMember], + references: [team.id], + relationName: "contact_teamMember", + }), + seo_ogImage: one(media, { + fields: [events.seo_ogImage], + references: [media.id], + relationName: "seo_ogImage", + }), + _locales: many(events_locales, { + relationName: "_locales", + }), + _rels: many(events_rels, { + relationName: "_rels", + }), +})); export const relations_cookie_configurations_enabled_categories = relations( cookie_configurations_enabled_categories, ({ one }) => ({ @@ -2622,40 +13523,119 @@ export const relations_privacy_policy_settings = relations(privacy_policy_settin relationName: "tenant", }), })); -export const relations_forms_blocks_checkbox = relations(forms_blocks_checkbox, ({ one }) => ({ +export const relations_email_logs = relations(email_logs, ({ one }) => ({ + tenant: one(tenants, { + fields: [email_logs.tenant], + references: [tenants.id], + relationName: "tenant", + }), +})); +export const relations_audit_logs = relations(audit_logs, ({ one }) => ({ + user: one(users, { + fields: [audit_logs.user], + references: [users.id], + relationName: "user", + }), + tenant: one(tenants, { + fields: [audit_logs.tenant], + references: [tenants.id], + relationName: "tenant", + }), +})); +export const relations_forms_blocks_checkbox_locales = relations(forms_blocks_checkbox_locales, ({ one }) => ({ + _parentID: one(forms_blocks_checkbox, { + fields: [forms_blocks_checkbox_locales._parentID], + references: [forms_blocks_checkbox.id], + relationName: "_locales", + }), +})); +export const relations_forms_blocks_checkbox = relations(forms_blocks_checkbox, ({ one, many }) => ({ _parentID: one(forms, { fields: [forms_blocks_checkbox._parentID], references: [forms.id], relationName: "_blocks_checkbox", }), + _locales: many(forms_blocks_checkbox_locales, { + relationName: "_locales", + }), })); -export const relations_forms_blocks_email = relations(forms_blocks_email, ({ one }) => ({ +export const relations_forms_blocks_email_locales = relations(forms_blocks_email_locales, ({ one }) => ({ + _parentID: one(forms_blocks_email, { + fields: [forms_blocks_email_locales._parentID], + references: [forms_blocks_email.id], + relationName: "_locales", + }), +})); +export const relations_forms_blocks_email = relations(forms_blocks_email, ({ one, many }) => ({ _parentID: one(forms, { fields: [forms_blocks_email._parentID], references: [forms.id], relationName: "_blocks_email", }), + _locales: many(forms_blocks_email_locales, { + relationName: "_locales", + }), })); -export const relations_forms_blocks_message = relations(forms_blocks_message, ({ one }) => ({ +export const relations_forms_blocks_message_locales = relations(forms_blocks_message_locales, ({ one }) => ({ + _parentID: one(forms_blocks_message, { + fields: [forms_blocks_message_locales._parentID], + references: [forms_blocks_message.id], + relationName: "_locales", + }), +})); +export const relations_forms_blocks_message = relations(forms_blocks_message, ({ one, many }) => ({ _parentID: one(forms, { fields: [forms_blocks_message._parentID], references: [forms.id], relationName: "_blocks_message", }), + _locales: many(forms_blocks_message_locales, { + relationName: "_locales", + }), })); -export const relations_forms_blocks_number = relations(forms_blocks_number, ({ one }) => ({ +export const relations_forms_blocks_number_locales = relations(forms_blocks_number_locales, ({ one }) => ({ + _parentID: one(forms_blocks_number, { + fields: [forms_blocks_number_locales._parentID], + references: [forms_blocks_number.id], + relationName: "_locales", + }), +})); +export const relations_forms_blocks_number = relations(forms_blocks_number, ({ one, many }) => ({ _parentID: one(forms, { fields: [forms_blocks_number._parentID], references: [forms.id], relationName: "_blocks_number", }), + _locales: many(forms_blocks_number_locales, { + relationName: "_locales", + }), })); -export const relations_forms_blocks_select_options = relations(forms_blocks_select_options, ({ one }) => ({ +export const relations_forms_blocks_select_options_locales = relations( + forms_blocks_select_options_locales, + ({ one }) => ({ + _parentID: one(forms_blocks_select_options, { + fields: [forms_blocks_select_options_locales._parentID], + references: [forms_blocks_select_options.id], + relationName: "_locales", + }), + }), +); +export const relations_forms_blocks_select_options = relations(forms_blocks_select_options, ({ one, many }) => ({ _parentID: one(forms_blocks_select, { fields: [forms_blocks_select_options._parentID], references: [forms_blocks_select.id], relationName: "options", }), + _locales: many(forms_blocks_select_options_locales, { + relationName: "_locales", + }), +})); +export const relations_forms_blocks_select_locales = relations(forms_blocks_select_locales, ({ one }) => ({ + _parentID: one(forms_blocks_select, { + fields: [forms_blocks_select_locales._parentID], + references: [forms_blocks_select.id], + relationName: "_locales", + }), })); export const relations_forms_blocks_select = relations(forms_blocks_select, ({ one, many }) => ({ _parentID: one(forms, { @@ -2663,30 +13643,82 @@ export const relations_forms_blocks_select = relations(forms_blocks_select, ({ o references: [forms.id], relationName: "_blocks_select", }), + _locales: many(forms_blocks_select_locales, { + relationName: "_locales", + }), options: many(forms_blocks_select_options, { relationName: "options", }), })); -export const relations_forms_blocks_text = relations(forms_blocks_text, ({ one }) => ({ +export const relations_forms_blocks_text_locales = relations(forms_blocks_text_locales, ({ one }) => ({ + _parentID: one(forms_blocks_text, { + fields: [forms_blocks_text_locales._parentID], + references: [forms_blocks_text.id], + relationName: "_locales", + }), +})); +export const relations_forms_blocks_text = relations(forms_blocks_text, ({ one, many }) => ({ _parentID: one(forms, { fields: [forms_blocks_text._parentID], references: [forms.id], relationName: "_blocks_text", }), + _locales: many(forms_blocks_text_locales, { + relationName: "_locales", + }), })); -export const relations_forms_blocks_textarea = relations(forms_blocks_textarea, ({ one }) => ({ +export const relations_forms_blocks_textarea_locales = relations(forms_blocks_textarea_locales, ({ one }) => ({ + _parentID: one(forms_blocks_textarea, { + fields: [forms_blocks_textarea_locales._parentID], + references: [forms_blocks_textarea.id], + relationName: "_locales", + }), +})); +export const relations_forms_blocks_textarea = relations(forms_blocks_textarea, ({ one, many }) => ({ _parentID: one(forms, { fields: [forms_blocks_textarea._parentID], references: [forms.id], relationName: "_blocks_textarea", }), + _locales: many(forms_blocks_textarea_locales, { + relationName: "_locales", + }), })); -export const relations_forms_emails = relations(forms_emails, ({ one }) => ({ +export const relations_forms_emails_locales = relations(forms_emails_locales, ({ one }) => ({ + _parentID: one(forms_emails, { + fields: [forms_emails_locales._parentID], + references: [forms_emails.id], + relationName: "_locales", + }), +})); +export const relations_forms_emails = relations(forms_emails, ({ one, many }) => ({ _parentID: one(forms, { fields: [forms_emails._parentID], references: [forms.id], relationName: "emails", }), + _locales: many(forms_emails_locales, { + relationName: "_locales", + }), +})); +export const relations_forms_locales = relations(forms_locales, ({ one }) => ({ + _parentID: one(forms, { + fields: [forms_locales._parentID], + references: [forms.id], + relationName: "_locales", + }), +})); +export const relations_forms_rels = relations(forms_rels, ({ one }) => ({ + parent: one(forms, { + fields: [forms_rels.parent], + references: [forms.id], + relationName: "_rels", + }), + pagesID: one(pages, { + fields: [forms_rels.pagesID], + references: [pages.id], + relationName: "pages", + }), })); export const relations_forms = relations(forms, ({ many }) => ({ _blocks_checkbox: many(forms_blocks_checkbox, { @@ -2713,6 +13745,12 @@ export const relations_forms = relations(forms, ({ many }) => ({ emails: many(forms_emails, { relationName: "emails", }), + _locales: many(forms_locales, { + relationName: "_locales", + }), + _rels: many(forms_rels, { + relationName: "_rels", + }), })); export const relations_form_submissions_submission_data = relations(form_submissions_submission_data, ({ one }) => ({ _parentID: one(form_submissions, { @@ -2731,7 +13769,23 @@ export const relations_form_submissions = relations(form_submissions, ({ one, ma relationName: "submissionData", }), })); -export const relations_redirects = relations(redirects, () => ({})); +export const relations_redirects_rels = relations(redirects_rels, ({ one }) => ({ + parent: one(redirects, { + fields: [redirects_rels.parent], + references: [redirects.id], + relationName: "_rels", + }), + pagesID: one(pages, { + fields: [redirects_rels.pagesID], + references: [pages.id], + relationName: "pages", + }), +})); +export const relations_redirects = relations(redirects, ({ many }) => ({ + _rels: many(redirects_rels, { + relationName: "_rels", + }), +})); export const relations_payload_kv = relations(payload_kv, () => ({})); export const relations_payload_locked_documents_rels = relations(payload_locked_documents_rels, ({ one }) => ({ parent: one(payload_locked_documents, { @@ -2779,11 +13833,96 @@ export const relations_payload_locked_documents_rels = relations(payload_locked_ references: [testimonials.id], relationName: "testimonials", }), + faqsID: one(faqs, { + fields: [payload_locked_documents_rels.faqsID], + references: [faqs.id], + relationName: "faqs", + }), + teamID: one(team, { + fields: [payload_locked_documents_rels.teamID], + references: [team.id], + relationName: "team", + }), + "service-categoriesID": one(service_categories, { + fields: [payload_locked_documents_rels["service-categoriesID"]], + references: [service_categories.id], + relationName: "service-categories", + }), + servicesID: one(services, { + fields: [payload_locked_documents_rels.servicesID], + references: [services.id], + relationName: "services", + }), "newsletter-subscribersID": one(newsletter_subscribers, { fields: [payload_locked_documents_rels["newsletter-subscribersID"]], references: [newsletter_subscribers.id], relationName: "newsletter-subscribers", }), + "portfolio-categoriesID": one(portfolio_categories, { + fields: [payload_locked_documents_rels["portfolio-categoriesID"]], + references: [portfolio_categories.id], + relationName: "portfolio-categories", + }), + portfoliosID: one(portfolios, { + fields: [payload_locked_documents_rels.portfoliosID], + references: [portfolios.id], + relationName: "portfolios", + }), + "product-categoriesID": one(product_categories, { + fields: [payload_locked_documents_rels["product-categoriesID"]], + references: [product_categories.id], + relationName: "product-categories", + }), + productsID: one(products, { + fields: [payload_locked_documents_rels.productsID], + references: [products.id], + relationName: "products", + }), + timelinesID: one(timelines, { + fields: [payload_locked_documents_rels.timelinesID], + references: [timelines.id], + relationName: "timelines", + }), + workflowsID: one(workflows, { + fields: [payload_locked_documents_rels.workflowsID], + references: [workflows.id], + relationName: "workflows", + }), + tagsID: one(tags, { + fields: [payload_locked_documents_rels.tagsID], + references: [tags.id], + relationName: "tags", + }), + authorsID: one(authors, { + fields: [payload_locked_documents_rels.authorsID], + references: [authors.id], + relationName: "authors", + }), + locationsID: one(locations, { + fields: [payload_locked_documents_rels.locationsID], + references: [locations.id], + relationName: "locations", + }), + partnersID: one(partners, { + fields: [payload_locked_documents_rels.partnersID], + references: [partners.id], + relationName: "partners", + }), + jobsID: one(jobs, { + fields: [payload_locked_documents_rels.jobsID], + references: [jobs.id], + relationName: "jobs", + }), + downloadsID: one(downloads, { + fields: [payload_locked_documents_rels.downloadsID], + references: [downloads.id], + relationName: "downloads", + }), + eventsID: one(events, { + fields: [payload_locked_documents_rels.eventsID], + references: [events.id], + relationName: "events", + }), "cookie-configurationsID": one(cookie_configurations, { fields: [payload_locked_documents_rels["cookie-configurationsID"]], references: [cookie_configurations.id], @@ -2804,6 +13943,16 @@ export const relations_payload_locked_documents_rels = relations(payload_locked_ references: [privacy_policy_settings.id], relationName: "privacy-policy-settings", }), + "email-logsID": one(email_logs, { + fields: [payload_locked_documents_rels["email-logsID"]], + references: [email_logs.id], + relationName: "email-logs", + }), + "audit-logsID": one(audit_logs, { + fields: [payload_locked_documents_rels["audit-logsID"]], + references: [audit_logs.id], + relationName: "audit-logs", + }), formsID: one(forms, { fields: [payload_locked_documents_rels.formsID], references: [forms.id], @@ -2843,7 +13992,14 @@ export const relations_payload_preferences = relations(payload_preferences, ({ m }), })); export const relations_payload_migrations = relations(payload_migrations, () => ({})); -export const relations_site_settings = relations(site_settings, ({ one }) => ({ +export const relations_site_settings_locales = relations(site_settings_locales, ({ one }) => ({ + _parentID: one(site_settings, { + fields: [site_settings_locales._parentID], + references: [site_settings.id], + relationName: "_locales", + }), +})); +export const relations_site_settings = relations(site_settings, ({ one, many }) => ({ logo: one(media, { fields: [site_settings.logo], references: [media.id], @@ -2859,25 +14015,51 @@ export const relations_site_settings = relations(site_settings, ({ one }) => ({ references: [media.id], relationName: "seo_defaultOgImage", }), + _locales: many(site_settings_locales, { + relationName: "_locales", + }), })); -export const relations_navigation_main_menu_submenu = relations(navigation_main_menu_submenu, ({ one }) => ({ +export const relations_navigation_main_menu_submenu_locales = relations( + navigation_main_menu_submenu_locales, + ({ one }) => ({ + _parentID: one(navigation_main_menu_submenu, { + fields: [navigation_main_menu_submenu_locales._parentID], + references: [navigation_main_menu_submenu.id], + relationName: "_locales", + }), + }), +); +export const relations_navigation_main_menu_submenu = relations(navigation_main_menu_submenu, ({ one, many }) => ({ _parentID: one(navigation_main_menu, { fields: [navigation_main_menu_submenu._parentID], references: [navigation_main_menu.id], relationName: "submenu", }), + _locales: many(navigation_main_menu_submenu_locales, { + relationName: "_locales", + }), page: one(pages, { fields: [navigation_main_menu_submenu.page], references: [pages.id], relationName: "page", }), })); +export const relations_navigation_main_menu_locales = relations(navigation_main_menu_locales, ({ one }) => ({ + _parentID: one(navigation_main_menu, { + fields: [navigation_main_menu_locales._parentID], + references: [navigation_main_menu.id], + relationName: "_locales", + }), +})); export const relations_navigation_main_menu = relations(navigation_main_menu, ({ one, many }) => ({ _parentID: one(navigation, { fields: [navigation_main_menu._parentID], references: [navigation.id], relationName: "mainMenu", }), + _locales: many(navigation_main_menu_locales, { + relationName: "_locales", + }), page: one(pages, { fields: [navigation_main_menu.page], references: [pages.id], @@ -2887,12 +14069,22 @@ export const relations_navigation_main_menu = relations(navigation_main_menu, ({ relationName: "submenu", }), })); -export const relations_navigation_footer_menu = relations(navigation_footer_menu, ({ one }) => ({ +export const relations_navigation_footer_menu_locales = relations(navigation_footer_menu_locales, ({ one }) => ({ + _parentID: one(navigation_footer_menu, { + fields: [navigation_footer_menu_locales._parentID], + references: [navigation_footer_menu.id], + relationName: "_locales", + }), +})); +export const relations_navigation_footer_menu = relations(navigation_footer_menu, ({ one, many }) => ({ _parentID: one(navigation, { fields: [navigation_footer_menu._parentID], references: [navigation.id], relationName: "footerMenu", }), + _locales: many(navigation_footer_menu_locales, { + relationName: "_locales", + }), page: one(pages, { fields: [navigation_footer_menu.page], references: [pages.id], @@ -2924,6 +14116,13 @@ export const relations_seo_settings_local_business_opening_hours = relations( }), }), ); +export const relations_seo_settings_locales = relations(seo_settings_locales, ({ one }) => ({ + _parentID: one(seo_settings, { + fields: [seo_settings_locales._parentID], + references: [seo_settings.id], + relationName: "_locales", + }), +})); export const relations_seo_settings_texts = relations(seo_settings_texts, ({ one }) => ({ parent: one(seo_settings, { fields: [seo_settings_texts.parent], @@ -2948,14 +14147,55 @@ export const relations_seo_settings = relations(seo_settings, ({ one, many }) => localBusiness_openingHours: many(seo_settings_local_business_opening_hours, { relationName: "localBusiness_openingHours", }), + _locales: many(seo_settings_locales, { + relationName: "_locales", + }), _texts: many(seo_settings_texts, { relationName: "_texts", }), })); type DatabaseSchema = { + enum__locales: typeof enum__locales; enum_pages_blocks_hero_block_alignment: typeof enum_pages_blocks_hero_block_alignment; enum_pages_blocks_hero_block_cta_style: typeof enum_pages_blocks_hero_block_cta_style; + enum_pages_blocks_hero_slider_block_slides_text_alignment: typeof enum_pages_blocks_hero_slider_block_slides_text_alignment; + enum_pages_blocks_hero_slider_block_slides_vertical_position: typeof enum_pages_blocks_hero_slider_block_slides_vertical_position; + enum_pages_blocks_hero_slider_block_slides_overlay_color: typeof enum_pages_blocks_hero_slider_block_slides_overlay_color; + enum_pages_blocks_hero_slider_block_slides_overlay_opacity: typeof enum_pages_blocks_hero_slider_block_slides_overlay_opacity; + enum_pages_blocks_hero_slider_block_slides_primary_cta_style: typeof enum_pages_blocks_hero_slider_block_slides_primary_cta_style; + enum_pages_blocks_hero_slider_block_slides_secondary_cta_style: typeof enum_pages_blocks_hero_slider_block_slides_secondary_cta_style; + enum_pages_blocks_hero_slider_block_slides_text_color: typeof enum_pages_blocks_hero_slider_block_slides_text_color; + enum_pages_blocks_hero_slider_block_settings_animation: typeof enum_pages_blocks_hero_slider_block_settings_animation; + enum_pages_blocks_hero_slider_block_settings_animation_duration: typeof enum_pages_blocks_hero_slider_block_settings_animation_duration; + enum_pages_blocks_hero_slider_block_settings_autoplay_interval: typeof enum_pages_blocks_hero_slider_block_settings_autoplay_interval; + enum_pages_blocks_hero_slider_block_navigation_arrows_style: typeof enum_pages_blocks_hero_slider_block_navigation_arrows_style; + enum_pages_blocks_hero_slider_block_navigation_arrows_position: typeof enum_pages_blocks_hero_slider_block_navigation_arrows_position; + enum_pages_blocks_hero_slider_block_navigation_dots_style: typeof enum_pages_blocks_hero_slider_block_navigation_dots_style; + enum_pages_blocks_hero_slider_block_navigation_dots_position: typeof enum_pages_blocks_hero_slider_block_navigation_dots_position; + enum_pages_blocks_hero_slider_block_navigation_dots_color: typeof enum_pages_blocks_hero_slider_block_navigation_dots_color; + enum_pages_blocks_hero_slider_block_layout_height: typeof enum_pages_blocks_hero_slider_block_layout_height; + enum_pages_blocks_hero_slider_block_layout_mobile_height: typeof enum_pages_blocks_hero_slider_block_layout_mobile_height; + enum_pages_blocks_hero_slider_block_layout_content_width: typeof enum_pages_blocks_hero_slider_block_layout_content_width; + enum_pages_blocks_image_slider_block_layout: typeof enum_pages_blocks_image_slider_block_layout; + enum_pages_blocks_image_slider_block_grid_cols: typeof enum_pages_blocks_image_slider_block_grid_cols; + enum_pages_blocks_image_slider_block_grid_gap: typeof enum_pages_blocks_image_slider_block_grid_gap; + enum_pages_blocks_image_slider_block_grid_aspect_ratio: typeof enum_pages_blocks_image_slider_block_grid_aspect_ratio; + enum_pages_blocks_image_slider_block_slider_effect: typeof enum_pages_blocks_image_slider_block_slider_effect; + enum_pages_blocks_image_slider_block_slider_speed: typeof enum_pages_blocks_image_slider_block_slider_speed; + enum_pages_blocks_image_slider_block_slider_per_view: typeof enum_pages_blocks_image_slider_block_slider_per_view; + enum_pages_blocks_image_slider_block_slider_gap: typeof enum_pages_blocks_image_slider_block_slider_gap; + enum_pages_blocks_image_slider_block_slider_delay: typeof enum_pages_blocks_image_slider_block_slider_delay; + enum_pages_blocks_image_slider_block_nav_arrow_style: typeof enum_pages_blocks_image_slider_block_nav_arrow_style; + enum_pages_blocks_image_slider_block_nav_dot_style: typeof enum_pages_blocks_image_slider_block_nav_dot_style; + enum_pages_blocks_image_slider_block_lightbox_bg: typeof enum_pages_blocks_image_slider_block_lightbox_bg; + enum_pages_blocks_image_slider_block_style_height: typeof enum_pages_blocks_image_slider_block_style_height; + enum_pages_blocks_image_slider_block_style_img_fit: typeof enum_pages_blocks_image_slider_block_style_img_fit; + enum_pages_blocks_image_slider_block_style_rounded: typeof enum_pages_blocks_image_slider_block_style_rounded; + enum_pages_blocks_image_slider_block_style_hover_effect: typeof enum_pages_blocks_image_slider_block_style_hover_effect; + enum_pages_blocks_image_slider_block_style_caption_pos: typeof enum_pages_blocks_image_slider_block_style_caption_pos; + enum_pages_blocks_image_slider_block_style_bg: typeof enum_pages_blocks_image_slider_block_style_bg; + enum_pages_blocks_image_slider_block_style_padding: typeof enum_pages_blocks_image_slider_block_style_padding; enum_pages_blocks_text_block_width: typeof enum_pages_blocks_text_block_width; enum_pages_blocks_image_text_block_image_position: typeof enum_pages_blocks_image_text_block_image_position; enum_pages_blocks_card_grid_block_columns: typeof enum_pages_blocks_card_grid_block_columns; @@ -2975,7 +14215,22 @@ type DatabaseSchema = { enum_pages_blocks_testimonials_block_layout: typeof enum_pages_blocks_testimonials_block_layout; enum_pages_blocks_testimonials_block_columns: typeof enum_pages_blocks_testimonials_block_columns; enum_pages_blocks_testimonials_block_display_mode: typeof enum_pages_blocks_testimonials_block_display_mode; - enum_pages_blocks_testimonials_block_background_color: typeof enum_pages_blocks_testimonials_block_background_color; + enum_pages_blocks_testimonials_block_slider_effect: typeof enum_pages_blocks_testimonials_block_slider_effect; + enum_pages_blocks_testimonials_block_slider_speed: typeof enum_pages_blocks_testimonials_block_slider_speed; + enum_pages_blocks_testimonials_block_slider_per_view: typeof enum_pages_blocks_testimonials_block_slider_per_view; + enum_pages_blocks_testimonials_block_slider_gap: typeof enum_pages_blocks_testimonials_block_slider_gap; + enum_pages_blocks_testimonials_block_slider_delay: typeof enum_pages_blocks_testimonials_block_slider_delay; + enum_pages_blocks_testimonials_block_nav_arrow_style: typeof enum_pages_blocks_testimonials_block_nav_arrow_style; + enum_pages_blocks_testimonials_block_nav_arrow_pos: typeof enum_pages_blocks_testimonials_block_nav_arrow_pos; + enum_pages_blocks_testimonials_block_nav_dot_style: typeof enum_pages_blocks_testimonials_block_nav_dot_style; + enum_pages_blocks_testimonials_block_nav_dot_pos: typeof enum_pages_blocks_testimonials_block_nav_dot_pos; + enum_pages_blocks_testimonials_block_style_bg: typeof enum_pages_blocks_testimonials_block_style_bg; + enum_pages_blocks_testimonials_block_style_card: typeof enum_pages_blocks_testimonials_block_style_card; + enum_pages_blocks_testimonials_block_style_quote: typeof enum_pages_blocks_testimonials_block_style_quote; + enum_pages_blocks_testimonials_block_style_img_pos: typeof enum_pages_blocks_testimonials_block_style_img_pos; + enum_pages_blocks_testimonials_block_style_img_size: typeof enum_pages_blocks_testimonials_block_style_img_size; + enum_pages_blocks_testimonials_block_style_align: typeof enum_pages_blocks_testimonials_block_style_align; + enum_pages_blocks_testimonials_block_style_spacing: typeof enum_pages_blocks_testimonials_block_style_spacing; enum_pages_blocks_newsletter_block_available_interests: typeof enum_pages_blocks_newsletter_block_available_interests; enum_pages_blocks_newsletter_block_layout: typeof enum_pages_blocks_newsletter_block_layout; enum_pages_blocks_newsletter_block_image_position: typeof enum_pages_blocks_newsletter_block_image_position; @@ -2983,19 +14238,282 @@ type DatabaseSchema = { enum_pages_blocks_process_steps_block_layout: typeof enum_pages_blocks_process_steps_block_layout; enum_pages_blocks_process_steps_block_cta_variant: typeof enum_pages_blocks_process_steps_block_cta_variant; enum_pages_blocks_process_steps_block_background_color: typeof enum_pages_blocks_process_steps_block_background_color; + enum_pages_blocks_faq_block_source_mode: typeof enum_pages_blocks_faq_block_source_mode; + enum_pages_blocks_faq_block_display_mode: typeof enum_pages_blocks_faq_block_display_mode; + enum_pages_blocks_faq_block_layout: typeof enum_pages_blocks_faq_block_layout; + enum_pages_blocks_faq_block_columns: typeof enum_pages_blocks_faq_block_columns; + enum_pages_blocks_faq_block_background_color: typeof enum_pages_blocks_faq_block_background_color; + enum_pages_blocks_team_block_display_mode: typeof enum_pages_blocks_team_block_display_mode; + enum_pages_blocks_team_block_layout: typeof enum_pages_blocks_team_block_layout; + enum_pages_blocks_team_block_columns: typeof enum_pages_blocks_team_block_columns; + enum_pages_blocks_team_block_image_style: typeof enum_pages_blocks_team_block_image_style; + enum_pages_blocks_team_block_background_color: typeof enum_pages_blocks_team_block_background_color; + enum_pages_blocks_services_block_display_mode: typeof enum_pages_blocks_services_block_display_mode; + enum_pages_blocks_services_block_layout: typeof enum_pages_blocks_services_block_layout; + enum_pages_blocks_services_block_columns: typeof enum_pages_blocks_services_block_columns; + enum_pages_blocks_services_block_tabs_style: typeof enum_pages_blocks_services_block_tabs_style; + enum_pages_blocks_services_block_slides_per_view: typeof enum_pages_blocks_services_block_slides_per_view; + enum_pages_blocks_services_block_card_style: typeof enum_pages_blocks_services_block_card_style; + enum_pages_blocks_services_block_background_color: typeof enum_pages_blocks_services_block_background_color; + enum_pages_blocks_author_bio_block_source: typeof enum_pages_blocks_author_bio_block_source; + enum_pages_blocks_author_bio_block_layout: typeof enum_pages_blocks_author_bio_block_layout; + enum_pages_blocks_author_bio_block_show_bio: typeof enum_pages_blocks_author_bio_block_show_bio; + enum_pages_blocks_author_bio_block_style_avatar_size: typeof enum_pages_blocks_author_bio_block_style_avatar_size; + enum_pages_blocks_author_bio_block_style_avatar_shape: typeof enum_pages_blocks_author_bio_block_style_avatar_shape; + enum_pages_blocks_author_bio_block_style_bg: typeof enum_pages_blocks_author_bio_block_style_bg; + enum_pages_blocks_related_posts_block_source: typeof enum_pages_blocks_related_posts_block_source; + enum_pages_blocks_related_posts_block_layout: typeof enum_pages_blocks_related_posts_block_layout; + enum_pages_blocks_related_posts_block_cols: typeof enum_pages_blocks_related_posts_block_cols; + enum_pages_blocks_related_posts_block_style_img_ratio: typeof enum_pages_blocks_related_posts_block_style_img_ratio; + enum_pages_blocks_related_posts_block_style_rounded: typeof enum_pages_blocks_related_posts_block_style_rounded; + enum_pages_blocks_related_posts_block_style_hover: typeof enum_pages_blocks_related_posts_block_style_hover; + enum_pages_blocks_related_posts_block_style_bg: typeof enum_pages_blocks_related_posts_block_style_bg; + enum_pages_blocks_related_posts_block_style_gap: typeof enum_pages_blocks_related_posts_block_style_gap; + enum_pages_blocks_share_buttons_block_layout: typeof enum_pages_blocks_share_buttons_block_layout; + enum_pages_blocks_share_buttons_block_align: typeof enum_pages_blocks_share_buttons_block_align; + enum_pages_blocks_share_buttons_block_float_side: typeof enum_pages_blocks_share_buttons_block_float_side; + enum_pages_blocks_share_buttons_block_style_variant: typeof enum_pages_blocks_share_buttons_block_style_variant; + enum_pages_blocks_share_buttons_block_style_size: typeof enum_pages_blocks_share_buttons_block_style_size; + enum_pages_blocks_share_buttons_block_style_shape: typeof enum_pages_blocks_share_buttons_block_style_shape; + enum_pages_blocks_share_buttons_block_style_color_scheme: typeof enum_pages_blocks_share_buttons_block_style_color_scheme; + enum_pages_blocks_share_buttons_block_style_gap: typeof enum_pages_blocks_share_buttons_block_style_gap; + enum_pages_blocks_toc_block_layout: typeof enum_pages_blocks_toc_block_layout; + enum_pages_blocks_toc_block_sidebar_pos: typeof enum_pages_blocks_toc_block_sidebar_pos; + enum_pages_blocks_toc_block_behavior_progress_style: typeof enum_pages_blocks_toc_block_behavior_progress_style; + enum_pages_blocks_toc_block_style_bg: typeof enum_pages_blocks_toc_block_style_bg; + enum_pages_blocks_toc_block_style_border_side: typeof enum_pages_blocks_toc_block_style_border_side; + enum_pages_blocks_toc_block_style_rounded: typeof enum_pages_blocks_toc_block_style_rounded; + enum_pages_blocks_toc_block_style_font_size: typeof enum_pages_blocks_toc_block_style_font_size; + enum_pages_blocks_toc_block_style_line_height: typeof enum_pages_blocks_toc_block_style_line_height; + enum_pages_blocks_team_filter_block_filters_filter_layout: typeof enum_pages_blocks_team_filter_block_filters_filter_layout; + enum_pages_blocks_team_filter_block_filters_filter_style: typeof enum_pages_blocks_team_filter_block_filters_filter_style; + enum_pages_blocks_team_filter_block_display_layout: typeof enum_pages_blocks_team_filter_block_display_layout; + enum_pages_blocks_team_filter_block_display_columns: typeof enum_pages_blocks_team_filter_block_display_columns; + enum_pages_blocks_team_filter_block_display_load_more: typeof enum_pages_blocks_team_filter_block_display_load_more; + enum_pages_blocks_team_filter_block_card_image_style: typeof enum_pages_blocks_team_filter_block_card_image_style; + enum_pages_blocks_team_filter_block_style_bg: typeof enum_pages_blocks_team_filter_block_style_bg; + enum_pages_blocks_team_filter_block_style_card_bg: typeof enum_pages_blocks_team_filter_block_style_card_bg; + enum_pages_blocks_team_filter_block_style_card_hover: typeof enum_pages_blocks_team_filter_block_style_card_hover; + enum_pages_blocks_team_filter_block_style_gap: typeof enum_pages_blocks_team_filter_block_style_gap; + enum_pages_blocks_team_filter_block_style_animation: typeof enum_pages_blocks_team_filter_block_style_animation; + enum_pages_blocks_org_chart_block_source: typeof enum_pages_blocks_org_chart_block_source; + enum_pages_blocks_org_chart_block_layout: typeof enum_pages_blocks_org_chart_block_layout; + enum_pages_blocks_org_chart_block_direction: typeof enum_pages_blocks_org_chart_block_direction; + enum_pages_blocks_org_chart_block_node_style: typeof enum_pages_blocks_org_chart_block_node_style; + enum_pages_blocks_org_chart_block_node_image_size: typeof enum_pages_blocks_org_chart_block_node_image_size; + enum_pages_blocks_org_chart_block_node_image_shape: typeof enum_pages_blocks_org_chart_block_node_image_shape; + enum_pages_blocks_org_chart_block_node_click_action: typeof enum_pages_blocks_org_chart_block_node_click_action; + enum_pages_blocks_org_chart_block_connectors_style: typeof enum_pages_blocks_org_chart_block_connectors_style; + enum_pages_blocks_org_chart_block_connectors_color: typeof enum_pages_blocks_org_chart_block_connectors_color; + enum_pages_blocks_org_chart_block_connectors_thickness: typeof enum_pages_blocks_org_chart_block_connectors_thickness; + enum_pages_blocks_org_chart_block_style_bg: typeof enum_pages_blocks_org_chart_block_style_bg; + enum_pages_blocks_org_chart_block_style_node_bg: typeof enum_pages_blocks_org_chart_block_style_node_bg; + enum_pages_blocks_org_chart_block_style_spacing: typeof enum_pages_blocks_org_chart_block_style_spacing; + enum_pages_blocks_org_chart_block_style_min_height: typeof enum_pages_blocks_org_chart_block_style_min_height; + enum_pages_blocks_locations_block_source: typeof enum_pages_blocks_locations_block_source; + enum_pages_blocks_locations_block_location_type: typeof enum_pages_blocks_locations_block_location_type; + enum_pages_blocks_locations_block_layout: typeof enum_pages_blocks_locations_block_layout; + enum_pages_blocks_locations_block_map_position: typeof enum_pages_blocks_locations_block_map_position; + enum_pages_blocks_locations_block_columns: typeof enum_pages_blocks_locations_block_columns; + enum_pages_blocks_locations_block_map_provider: typeof enum_pages_blocks_locations_block_map_provider; + enum_pages_blocks_locations_block_map_style: typeof enum_pages_blocks_locations_block_map_style; + enum_pages_blocks_locations_block_map_height: typeof enum_pages_blocks_locations_block_map_height; + enum_pages_blocks_locations_block_map_marker_style: typeof enum_pages_blocks_locations_block_map_marker_style; + enum_pages_blocks_locations_block_style_bg: typeof enum_pages_blocks_locations_block_style_bg; + enum_pages_blocks_locations_block_style_card_style: typeof enum_pages_blocks_locations_block_style_card_style; + enum_pages_blocks_locations_block_style_gap: typeof enum_pages_blocks_locations_block_style_gap; + enum_pages_blocks_logo_grid_block_partner_type: typeof enum_pages_blocks_logo_grid_block_partner_type; + enum_pages_blocks_logo_grid_block_source: typeof enum_pages_blocks_logo_grid_block_source; + enum_pages_blocks_logo_grid_block_layout: typeof enum_pages_blocks_logo_grid_block_layout; + enum_pages_blocks_logo_grid_block_columns: typeof enum_pages_blocks_logo_grid_block_columns; + enum_pages_blocks_logo_grid_block_slider_per_view: typeof enum_pages_blocks_logo_grid_block_slider_per_view; + enum_pages_blocks_logo_grid_block_slider_speed: typeof enum_pages_blocks_logo_grid_block_slider_speed; + enum_pages_blocks_logo_grid_block_logo_style_size: typeof enum_pages_blocks_logo_grid_block_logo_style_size; + enum_pages_blocks_logo_grid_block_logo_style_max_height: typeof enum_pages_blocks_logo_grid_block_logo_style_max_height; + enum_pages_blocks_logo_grid_block_logo_style_opacity: typeof enum_pages_blocks_logo_grid_block_logo_style_opacity; + enum_pages_blocks_logo_grid_block_logo_style_hover_effect: typeof enum_pages_blocks_logo_grid_block_logo_style_hover_effect; + enum_pages_blocks_logo_grid_block_style_bg: typeof enum_pages_blocks_logo_grid_block_style_bg; + enum_pages_blocks_logo_grid_block_style_logo_bg: typeof enum_pages_blocks_logo_grid_block_style_logo_bg; + enum_pages_blocks_logo_grid_block_style_gap: typeof enum_pages_blocks_logo_grid_block_style_gap; + enum_pages_blocks_logo_grid_block_style_alignment: typeof enum_pages_blocks_logo_grid_block_style_alignment; + enum_pages_blocks_stats_block_stats_icon: typeof enum_pages_blocks_stats_block_stats_icon; + enum_pages_blocks_stats_block_stats_color: typeof enum_pages_blocks_stats_block_stats_color; + enum_pages_blocks_stats_block_layout: typeof enum_pages_blocks_stats_block_layout; + enum_pages_blocks_stats_block_columns: typeof enum_pages_blocks_stats_block_columns; + enum_pages_blocks_stats_block_alignment: typeof enum_pages_blocks_stats_block_alignment; + enum_pages_blocks_stats_block_animation_duration: typeof enum_pages_blocks_stats_block_animation_duration; + enum_pages_blocks_stats_block_animation_trigger: typeof enum_pages_blocks_stats_block_animation_trigger; + enum_pages_blocks_stats_block_style_bg: typeof enum_pages_blocks_stats_block_style_bg; + enum_pages_blocks_stats_block_style_bg_overlay: typeof enum_pages_blocks_stats_block_style_bg_overlay; + enum_pages_blocks_stats_block_style_text_color: typeof enum_pages_blocks_stats_block_style_text_color; + enum_pages_blocks_stats_block_style_value_size: typeof enum_pages_blocks_stats_block_style_value_size; + enum_pages_blocks_stats_block_style_value_weight: typeof enum_pages_blocks_stats_block_style_value_weight; + enum_pages_blocks_stats_block_style_icon_position: typeof enum_pages_blocks_stats_block_style_icon_position; + enum_pages_blocks_stats_block_style_gap: typeof enum_pages_blocks_stats_block_style_gap; + enum_pages_blocks_stats_block_style_padding: typeof enum_pages_blocks_stats_block_style_padding; + enum_pages_blocks_jobs_block_source: typeof enum_pages_blocks_jobs_block_source; + enum_pages_blocks_jobs_block_category: typeof enum_pages_blocks_jobs_block_category; + enum_pages_blocks_jobs_block_filters_filter_layout: typeof enum_pages_blocks_jobs_block_filters_filter_layout; + enum_pages_blocks_jobs_block_layout: typeof enum_pages_blocks_jobs_block_layout; + enum_pages_blocks_jobs_block_columns: typeof enum_pages_blocks_jobs_block_columns; + enum_pages_blocks_jobs_block_pagination_type: typeof enum_pages_blocks_jobs_block_pagination_type; + enum_pages_blocks_jobs_block_style_bg: typeof enum_pages_blocks_jobs_block_style_bg; + enum_pages_blocks_jobs_block_style_card_style: typeof enum_pages_blocks_jobs_block_style_card_style; + enum_pages_blocks_jobs_block_style_hover_effect: typeof enum_pages_blocks_jobs_block_style_hover_effect; + enum_pages_blocks_jobs_block_style_gap: typeof enum_pages_blocks_jobs_block_style_gap; + enum_pages_blocks_downloads_block_source: typeof enum_pages_blocks_downloads_block_source; + enum_pages_blocks_downloads_block_category: typeof enum_pages_blocks_downloads_block_category; + enum_pages_blocks_downloads_block_filters_filter_layout: typeof enum_pages_blocks_downloads_block_filters_filter_layout; + enum_pages_blocks_downloads_block_layout: typeof enum_pages_blocks_downloads_block_layout; + enum_pages_blocks_downloads_block_columns: typeof enum_pages_blocks_downloads_block_columns; + enum_pages_blocks_downloads_block_file_icons_icon_style: typeof enum_pages_blocks_downloads_block_file_icons_icon_style; + enum_pages_blocks_downloads_block_sort_by: typeof enum_pages_blocks_downloads_block_sort_by; + enum_pages_blocks_downloads_block_group_by: typeof enum_pages_blocks_downloads_block_group_by; + enum_pages_blocks_downloads_block_pagination_type: typeof enum_pages_blocks_downloads_block_pagination_type; + enum_pages_blocks_downloads_block_style_bg: typeof enum_pages_blocks_downloads_block_style_bg; + enum_pages_blocks_downloads_block_style_card_style: typeof enum_pages_blocks_downloads_block_style_card_style; + enum_pages_blocks_downloads_block_style_hover_effect: typeof enum_pages_blocks_downloads_block_style_hover_effect; + enum_pages_blocks_downloads_block_style_gap: typeof enum_pages_blocks_downloads_block_style_gap; + enum_pages_blocks_map_block_location_type: typeof enum_pages_blocks_map_block_location_type; + enum_pages_blocks_map_block_markers_marker_type: typeof enum_pages_blocks_map_block_markers_marker_type; + enum_pages_blocks_map_block_source: typeof enum_pages_blocks_map_block_source; + enum_pages_blocks_map_block_provider: typeof enum_pages_blocks_map_block_provider; + enum_pages_blocks_map_block_map_style: typeof enum_pages_blocks_map_block_map_style; + enum_pages_blocks_map_block_map_settings_height: typeof enum_pages_blocks_map_block_map_settings_height; + enum_pages_blocks_map_block_marker_style_type: typeof enum_pages_blocks_map_block_marker_style_type; + enum_pages_blocks_map_block_marker_style_size: typeof enum_pages_blocks_map_block_marker_style_size; + enum_pages_blocks_map_block_popup_trigger: typeof enum_pages_blocks_map_block_popup_trigger; + enum_pages_blocks_map_block_sidebar_position: typeof enum_pages_blocks_map_block_sidebar_position; + enum_pages_blocks_map_block_sidebar_width: typeof enum_pages_blocks_map_block_sidebar_width; + enum_pages_blocks_map_block_style_padding: typeof enum_pages_blocks_map_block_style_padding; + enum_pages_blocks_events_source_mode: typeof enum_pages_blocks_events_source_mode; + enum_pages_blocks_events_filter_mode: typeof enum_pages_blocks_events_filter_mode; + enum_pages_blocks_events_event_type: typeof enum_pages_blocks_events_event_type; + enum_pages_blocks_events_layout: typeof enum_pages_blocks_events_layout; + enum_pages_blocks_events_columns: typeof enum_pages_blocks_events_columns; + enum_pages_blocks_events_calendar_options_default_view: typeof enum_pages_blocks_events_calendar_options_default_view; + enum_pages_blocks_events_group_by: typeof enum_pages_blocks_events_group_by; + enum_pages_blocks_events_sort_order: typeof enum_pages_blocks_events_sort_order; + enum_pages_blocks_events_background_color: typeof enum_pages_blocks_events_background_color; + enum_pages_blocks_events_card_style: typeof enum_pages_blocks_events_card_style; + enum_pages_blocks_pricing_plans_cta_style: typeof enum_pages_blocks_pricing_plans_cta_style; + enum_pages_blocks_pricing_plans_accent_color: typeof enum_pages_blocks_pricing_plans_accent_color; + enum_pages_blocks_pricing_pricing_type: typeof enum_pages_blocks_pricing_pricing_type; + enum_pages_blocks_pricing_layout: typeof enum_pages_blocks_pricing_layout; + enum_pages_blocks_pricing_alignment: typeof enum_pages_blocks_pricing_alignment; + enum_pages_blocks_pricing_guarantee_icon: typeof enum_pages_blocks_pricing_guarantee_icon; + enum_pages_blocks_pricing_background_color: typeof enum_pages_blocks_pricing_background_color; + enum_pages_blocks_pricing_card_style: typeof enum_pages_blocks_pricing_card_style; + enum_pages_blocks_tabs_tabs_features_icon: typeof enum_pages_blocks_tabs_tabs_features_icon; + enum_pages_blocks_tabs_tabs_icon: typeof enum_pages_blocks_tabs_tabs_icon; + enum_pages_blocks_tabs_tabs_content_type: typeof enum_pages_blocks_tabs_tabs_content_type; + enum_pages_blocks_tabs_tabs_img_txt_img_pos: typeof enum_pages_blocks_tabs_tabs_img_txt_img_pos; + enum_pages_blocks_tabs_tabs_code_language: typeof enum_pages_blocks_tabs_tabs_code_language; + enum_pages_blocks_tabs_tabs_embed_type: typeof enum_pages_blocks_tabs_tabs_embed_type; + enum_pages_blocks_tabs_tabs_embed_aspect_ratio: typeof enum_pages_blocks_tabs_tabs_embed_aspect_ratio; + enum_pages_blocks_tabs_tab_style: typeof enum_pages_blocks_tabs_tab_style; + enum_pages_blocks_tabs_tab_position: typeof enum_pages_blocks_tabs_tab_position; + enum_pages_blocks_tabs_tab_alignment: typeof enum_pages_blocks_tabs_tab_alignment; + enum_pages_blocks_tabs_mobile_style: typeof enum_pages_blocks_tabs_mobile_style; + enum_pages_blocks_tabs_background_color: typeof enum_pages_blocks_tabs_background_color; + enum_pages_blocks_tabs_content_background: typeof enum_pages_blocks_tabs_content_background; + enum_pages_blocks_accordion_items_list_items_icon: typeof enum_pages_blocks_accordion_items_list_items_icon; + enum_pages_blocks_accordion_items_icon: typeof enum_pages_blocks_accordion_items_icon; + enum_pages_blocks_accordion_items_content_type: typeof enum_pages_blocks_accordion_items_content_type; + enum_pages_blocks_accordion_items_img_txt_img_pos: typeof enum_pages_blocks_accordion_items_img_txt_img_pos; + enum_pages_blocks_accordion_items_code_content_language: typeof enum_pages_blocks_accordion_items_code_content_language; + enum_pages_blocks_accordion_items_badge_color: typeof enum_pages_blocks_accordion_items_badge_color; + enum_pages_blocks_accordion_behavior: typeof enum_pages_blocks_accordion_behavior; + enum_pages_blocks_accordion_style: typeof enum_pages_blocks_accordion_style; + enum_pages_blocks_accordion_icon_position: typeof enum_pages_blocks_accordion_icon_position; + enum_pages_blocks_accordion_icon_style: typeof enum_pages_blocks_accordion_icon_style; + enum_pages_blocks_accordion_layout: typeof enum_pages_blocks_accordion_layout; + enum_pages_blocks_accordion_title_size: typeof enum_pages_blocks_accordion_title_size; + enum_pages_blocks_accordion_background_color: typeof enum_pages_blocks_accordion_background_color; + enum_pages_blocks_accordion_header_background: typeof enum_pages_blocks_accordion_header_background; + enum_pages_blocks_comparison_tbl_rows_values_value_type: typeof enum_pages_blocks_comparison_tbl_rows_values_value_type; + enum_pages_blocks_comparison_crd_items_accent_color: typeof enum_pages_blocks_comparison_crd_items_accent_color; + enum_pages_blocks_comparison_comparison_type: typeof enum_pages_blocks_comparison_comparison_type; + enum_pages_blocks_comparison_before_after_display_style: typeof enum_pages_blocks_comparison_before_after_display_style; + enum_pages_blocks_comparison_mobile_view: typeof enum_pages_blocks_comparison_mobile_view; + enum_pages_blocks_comparison_background_color: typeof enum_pages_blocks_comparison_background_color; + enum_pages_blocks_comparison_table_style: typeof enum_pages_blocks_comparison_table_style; + enum_pages_blocks_comparison_check_color: typeof enum_pages_blocks_comparison_check_color; + enum_pages_blocks_comparison_cross_color: typeof enum_pages_blocks_comparison_cross_color; enum_pages_status: typeof enum_pages_status; enum_posts_type: typeof enum_posts_type; enum_posts_status: typeof enum_posts_status; enum_social_links_platform: typeof enum_social_links_platform; + enum_team_social_links_platform: typeof enum_team_social_links_platform; + enum_team_languages_level: typeof enum_team_languages_level; + enum_team_hierarchy_level: typeof enum_team_hierarchy_level; + enum_services_pricing_type: typeof enum_services_pricing_type; + enum_services_cta_style: typeof enum_services_cta_style; enum_newsletter_subscribers_interests: typeof enum_newsletter_subscribers_interests; enum_newsletter_subscribers_status: typeof enum_newsletter_subscribers_status; + enum_portfolios_status: typeof enum_portfolios_status; + enum_products_pricing_currency: typeof enum_products_pricing_currency; + enum_products_pricing_price_type: typeof enum_products_pricing_price_type; + enum_products_inventory_stock_status: typeof enum_products_inventory_stock_status; + enum_products_cta_type: typeof enum_products_cta_type; + enum_products_status: typeof enum_products_status; + enum_timelines_events_deliverables_type: typeof enum_timelines_events_deliverables_type; + enum_timelines_events_links_type: typeof enum_timelines_events_links_type; + enum_timelines_events_date_type: typeof enum_timelines_events_date_type; + enum_timelines_events_month: typeof enum_timelines_events_month; + enum_timelines_events_end_month: typeof enum_timelines_events_end_month; + enum_timelines_events_category: typeof enum_timelines_events_category; + enum_timelines_events_importance: typeof enum_timelines_events_importance; + enum_timelines_events_action_required: typeof enum_timelines_events_action_required; + enum_timelines_type: typeof enum_timelines_type; + enum_timelines_status: typeof enum_timelines_status; + enum_timelines_display_options_layout: typeof enum_timelines_display_options_layout; + enum_timelines_display_options_sort_order: typeof enum_timelines_display_options_sort_order; + enum_timelines_display_options_marker_style: typeof enum_timelines_display_options_marker_style; + enum_timelines_display_options_color_scheme: typeof enum_timelines_display_options_color_scheme; + enum_workflows_phases_steps_resources_type: typeof enum_workflows_phases_steps_resources_type; + enum_workflows_phases_steps_step_type: typeof enum_workflows_phases_steps_step_type; + enum_workflows_phases_steps_priority: typeof enum_workflows_phases_steps_priority; + enum_workflows_global_resources_type: typeof enum_workflows_global_resources_type; + enum_workflows_type: typeof enum_workflows_type; + enum_workflows_status: typeof enum_workflows_status; + enum_workflows_properties_complexity: typeof enum_workflows_properties_complexity; + enum_workflows_display_options_layout: typeof enum_workflows_display_options_layout; + enum_workflows_display_options_color_scheme: typeof enum_workflows_display_options_color_scheme; + enum_locations_hours_structured_day: typeof enum_locations_hours_structured_day; + enum_locations_type: typeof enum_locations_type; + enum_partners_type: typeof enum_partners_type; + enum_jobs_benefits_list_icon: typeof enum_jobs_benefits_list_icon; + enum_jobs_category: typeof enum_jobs_category; + enum_jobs_type: typeof enum_jobs_type; + enum_jobs_work_model: typeof enum_jobs_work_model; + enum_jobs_experience_level: typeof enum_jobs_experience_level; + enum_jobs_salary_type: typeof enum_jobs_salary_type; + enum_jobs_application_method: typeof enum_jobs_application_method; + enum_jobs_status: typeof enum_jobs_status; + enum_downloads_access_form_fields: typeof enum_downloads_access_form_fields; + enum_downloads_file_type: typeof enum_downloads_file_type; + enum_downloads_category: typeof enum_downloads_category; + enum_events_agenda_type: typeof enum_events_agenda_type; + enum_events_event_type: typeof enum_events_event_type; + enum_events_format: typeof enum_events_format; + enum_events_recurrence_frequency: typeof enum_events_recurrence_frequency; + enum_events_online_platform: typeof enum_events_online_platform; + enum_events_registration_method: typeof enum_events_registration_method; + enum_events_status: typeof enum_events_status; enum_cookie_configurations_enabled_categories: typeof enum_cookie_configurations_enabled_categories; enum_cookie_configurations_styling_position: typeof enum_cookie_configurations_styling_position; enum_cookie_configurations_styling_theme: typeof enum_cookie_configurations_styling_theme; enum_cookie_inventory_category: typeof enum_cookie_inventory_category; enum_privacy_policy_settings_provider: typeof enum_privacy_policy_settings_provider; enum_privacy_policy_settings_alfright_language: typeof enum_privacy_policy_settings_alfright_language; + enum_email_logs_status: typeof enum_email_logs_status; + enum_email_logs_source: typeof enum_email_logs_source; + enum_audit_logs_action: typeof enum_audit_logs_action; + enum_audit_logs_severity: typeof enum_audit_logs_severity; + enum_audit_logs_entity_type: typeof enum_audit_logs_entity_type; enum_forms_confirmation_type: typeof enum_forms_confirmation_type; + enum_forms_redirect_type: typeof enum_forms_redirect_type; enum_redirects_to_type: typeof enum_redirects_to_type; enum_navigation_main_menu_submenu_link_type: typeof enum_navigation_main_menu_submenu_link_type; enum_navigation_main_menu_type: typeof enum_navigation_main_menu_type; @@ -3011,51 +14529,289 @@ type DatabaseSchema = { tenants_domains: typeof tenants_domains; tenants: typeof tenants; pages_blocks_hero_block: typeof pages_blocks_hero_block; + pages_blocks_hero_block_locales: typeof pages_blocks_hero_block_locales; + pages_blocks_hero_slider_block_slides: typeof pages_blocks_hero_slider_block_slides; + pages_blocks_hero_slider_block_slides_locales: typeof pages_blocks_hero_slider_block_slides_locales; + pages_blocks_hero_slider_block: typeof pages_blocks_hero_slider_block; + pages_blocks_hero_slider_block_locales: typeof pages_blocks_hero_slider_block_locales; + pages_blocks_image_slider_block_images: typeof pages_blocks_image_slider_block_images; + pages_blocks_image_slider_block_images_locales: typeof pages_blocks_image_slider_block_images_locales; + pages_blocks_image_slider_block: typeof pages_blocks_image_slider_block; + pages_blocks_image_slider_block_locales: typeof pages_blocks_image_slider_block_locales; pages_blocks_text_block: typeof pages_blocks_text_block; + pages_blocks_text_block_locales: typeof pages_blocks_text_block_locales; pages_blocks_image_text_block: typeof pages_blocks_image_text_block; + pages_blocks_image_text_block_locales: typeof pages_blocks_image_text_block_locales; pages_blocks_card_grid_block_cards: typeof pages_blocks_card_grid_block_cards; + pages_blocks_card_grid_block_cards_locales: typeof pages_blocks_card_grid_block_cards_locales; pages_blocks_card_grid_block: typeof pages_blocks_card_grid_block; + pages_blocks_card_grid_block_locales: typeof pages_blocks_card_grid_block_locales; pages_blocks_quote_block: typeof pages_blocks_quote_block; + pages_blocks_quote_block_locales: typeof pages_blocks_quote_block_locales; pages_blocks_cta_block_buttons: typeof pages_blocks_cta_block_buttons; + pages_blocks_cta_block_buttons_locales: typeof pages_blocks_cta_block_buttons_locales; pages_blocks_cta_block: typeof pages_blocks_cta_block; + pages_blocks_cta_block_locales: typeof pages_blocks_cta_block_locales; pages_blocks_contact_form_block: typeof pages_blocks_contact_form_block; + pages_blocks_contact_form_block_locales: typeof pages_blocks_contact_form_block_locales; pages_blocks_timeline_block_items: typeof pages_blocks_timeline_block_items; + pages_blocks_timeline_block_items_locales: typeof pages_blocks_timeline_block_items_locales; pages_blocks_timeline_block: typeof pages_blocks_timeline_block; + pages_blocks_timeline_block_locales: typeof pages_blocks_timeline_block_locales; pages_blocks_divider_block: typeof pages_blocks_divider_block; pages_blocks_video_block: typeof pages_blocks_video_block; + pages_blocks_video_block_locales: typeof pages_blocks_video_block_locales; pages_blocks_posts_list_block: typeof pages_blocks_posts_list_block; + pages_blocks_posts_list_block_locales: typeof pages_blocks_posts_list_block_locales; pages_blocks_testimonials_block: typeof pages_blocks_testimonials_block; + pages_blocks_testimonials_block_locales: typeof pages_blocks_testimonials_block_locales; pages_blocks_newsletter_block_available_interests: typeof pages_blocks_newsletter_block_available_interests; pages_blocks_newsletter_block: typeof pages_blocks_newsletter_block; + pages_blocks_newsletter_block_locales: typeof pages_blocks_newsletter_block_locales; pages_blocks_process_steps_block_steps: typeof pages_blocks_process_steps_block_steps; + pages_blocks_process_steps_block_steps_locales: typeof pages_blocks_process_steps_block_steps_locales; pages_blocks_process_steps_block: typeof pages_blocks_process_steps_block; + pages_blocks_process_steps_block_locales: typeof pages_blocks_process_steps_block_locales; + pages_blocks_faq_block_inline_f_a_qs: typeof pages_blocks_faq_block_inline_f_a_qs; + pages_blocks_faq_block_inline_f_a_qs_locales: typeof pages_blocks_faq_block_inline_f_a_qs_locales; + pages_blocks_faq_block: typeof pages_blocks_faq_block; + pages_blocks_faq_block_locales: typeof pages_blocks_faq_block_locales; + pages_blocks_team_block: typeof pages_blocks_team_block; + pages_blocks_team_block_locales: typeof pages_blocks_team_block_locales; + pages_blocks_services_block: typeof pages_blocks_services_block; + pages_blocks_services_block_locales: typeof pages_blocks_services_block_locales; + pages_blocks_author_bio_block: typeof pages_blocks_author_bio_block; + pages_blocks_author_bio_block_locales: typeof pages_blocks_author_bio_block_locales; + pages_blocks_related_posts_block: typeof pages_blocks_related_posts_block; + pages_blocks_related_posts_block_locales: typeof pages_blocks_related_posts_block_locales; + pages_blocks_share_buttons_block: typeof pages_blocks_share_buttons_block; + pages_blocks_share_buttons_block_locales: typeof pages_blocks_share_buttons_block_locales; + pages_blocks_toc_block: typeof pages_blocks_toc_block; + pages_blocks_toc_block_locales: typeof pages_blocks_toc_block_locales; + pages_blocks_team_filter_block: typeof pages_blocks_team_filter_block; + pages_blocks_team_filter_block_locales: typeof pages_blocks_team_filter_block_locales; + pages_blocks_org_chart_block: typeof pages_blocks_org_chart_block; + pages_blocks_org_chart_block_locales: typeof pages_blocks_org_chart_block_locales; + pages_blocks_locations_block: typeof pages_blocks_locations_block; + pages_blocks_locations_block_locales: typeof pages_blocks_locations_block_locales; + pages_blocks_logo_grid_block_partner_type: typeof pages_blocks_logo_grid_block_partner_type; + pages_blocks_logo_grid_block_logos: typeof pages_blocks_logo_grid_block_logos; + pages_blocks_logo_grid_block: typeof pages_blocks_logo_grid_block; + pages_blocks_logo_grid_block_locales: typeof pages_blocks_logo_grid_block_locales; + pages_blocks_stats_block_stats: typeof pages_blocks_stats_block_stats; + pages_blocks_stats_block_stats_locales: typeof pages_blocks_stats_block_stats_locales; + pages_blocks_stats_block: typeof pages_blocks_stats_block; + pages_blocks_stats_block_locales: typeof pages_blocks_stats_block_locales; + pages_blocks_jobs_block: typeof pages_blocks_jobs_block; + pages_blocks_jobs_block_locales: typeof pages_blocks_jobs_block_locales; + pages_blocks_downloads_block: typeof pages_blocks_downloads_block; + pages_blocks_downloads_block_locales: typeof pages_blocks_downloads_block_locales; + pages_blocks_map_block_location_type: typeof pages_blocks_map_block_location_type; + pages_blocks_map_block_markers: typeof pages_blocks_map_block_markers; + pages_blocks_map_block_markers_locales: typeof pages_blocks_map_block_markers_locales; + pages_blocks_map_block: typeof pages_blocks_map_block; + pages_blocks_map_block_locales: typeof pages_blocks_map_block_locales; + pages_blocks_events: typeof pages_blocks_events; + pages_blocks_events_locales: typeof pages_blocks_events_locales; + pages_blocks_pricing_plans_features: typeof pages_blocks_pricing_plans_features; + pages_blocks_pricing_plans_features_locales: typeof pages_blocks_pricing_plans_features_locales; + pages_blocks_pricing_plans: typeof pages_blocks_pricing_plans; + pages_blocks_pricing_plans_locales: typeof pages_blocks_pricing_plans_locales; + pages_blocks_pricing_comparison_features_values: typeof pages_blocks_pricing_comparison_features_values; + pages_blocks_pricing_comparison_features_values_locales: typeof pages_blocks_pricing_comparison_features_values_locales; + pages_blocks_pricing_comparison_features: typeof pages_blocks_pricing_comparison_features; + pages_blocks_pricing_comparison_features_locales: typeof pages_blocks_pricing_comparison_features_locales; + pages_blocks_pricing_faq_items: typeof pages_blocks_pricing_faq_items; + pages_blocks_pricing_faq_items_locales: typeof pages_blocks_pricing_faq_items_locales; + pages_blocks_pricing: typeof pages_blocks_pricing; + pages_blocks_pricing_locales: typeof pages_blocks_pricing_locales; + pages_blocks_tabs_tabs_features: typeof pages_blocks_tabs_tabs_features; + pages_blocks_tabs_tabs_features_locales: typeof pages_blocks_tabs_tabs_features_locales; + pages_blocks_tabs_tabs: typeof pages_blocks_tabs_tabs; + pages_blocks_tabs_tabs_locales: typeof pages_blocks_tabs_tabs_locales; + pages_blocks_tabs: typeof pages_blocks_tabs; + pages_blocks_tabs_locales: typeof pages_blocks_tabs_locales; + pages_blocks_accordion_items_list_items: typeof pages_blocks_accordion_items_list_items; + pages_blocks_accordion_items_list_items_locales: typeof pages_blocks_accordion_items_list_items_locales; + pages_blocks_accordion_items_table_data_headers: typeof pages_blocks_accordion_items_table_data_headers; + pages_blocks_accordion_items_table_data_headers_locales: typeof pages_blocks_accordion_items_table_data_headers_locales; + pages_blocks_accordion_items_table_data_rows_cells: typeof pages_blocks_accordion_items_table_data_rows_cells; + pages_blocks_accordion_items_table_data_rows_cells_locales: typeof pages_blocks_accordion_items_table_data_rows_cells_locales; + pages_blocks_accordion_items_table_data_rows: typeof pages_blocks_accordion_items_table_data_rows; + pages_blocks_accordion_items: typeof pages_blocks_accordion_items; + pages_blocks_accordion_items_locales: typeof pages_blocks_accordion_items_locales; + pages_blocks_accordion: typeof pages_blocks_accordion; + pages_blocks_accordion_locales: typeof pages_blocks_accordion_locales; + pages_blocks_comparison_tbl_columns: typeof pages_blocks_comparison_tbl_columns; + pages_blocks_comparison_tbl_columns_locales: typeof pages_blocks_comparison_tbl_columns_locales; + pages_blocks_comparison_tbl_rows_values: typeof pages_blocks_comparison_tbl_rows_values; + pages_blocks_comparison_tbl_rows_values_locales: typeof pages_blocks_comparison_tbl_rows_values_locales; + pages_blocks_comparison_tbl_rows: typeof pages_blocks_comparison_tbl_rows; + pages_blocks_comparison_tbl_rows_locales: typeof pages_blocks_comparison_tbl_rows_locales; + pages_blocks_comparison_crd_items_features: typeof pages_blocks_comparison_crd_items_features; + pages_blocks_comparison_crd_items_features_locales: typeof pages_blocks_comparison_crd_items_features_locales; + pages_blocks_comparison_crd_items: typeof pages_blocks_comparison_crd_items; + pages_blocks_comparison_crd_items_locales: typeof pages_blocks_comparison_crd_items_locales; + pages_blocks_comparison_before_after_items: typeof pages_blocks_comparison_before_after_items; + pages_blocks_comparison_before_after_items_locales: typeof pages_blocks_comparison_before_after_items_locales; + pages_blocks_comparison_pros_cons_items_pros: typeof pages_blocks_comparison_pros_cons_items_pros; + pages_blocks_comparison_pros_cons_items_pros_locales: typeof pages_blocks_comparison_pros_cons_items_pros_locales; + pages_blocks_comparison_pros_cons_items_cons: typeof pages_blocks_comparison_pros_cons_items_cons; + pages_blocks_comparison_pros_cons_items_cons_locales: typeof pages_blocks_comparison_pros_cons_items_cons_locales; + pages_blocks_comparison_pros_cons_items: typeof pages_blocks_comparison_pros_cons_items; + pages_blocks_comparison_pros_cons_items_locales: typeof pages_blocks_comparison_pros_cons_items_locales; + pages_blocks_comparison: typeof pages_blocks_comparison; + pages_blocks_comparison_locales: typeof pages_blocks_comparison_locales; pages: typeof pages; + pages_locales: typeof pages_locales; pages_rels: typeof pages_rels; posts: typeof posts; + posts_locales: typeof posts_locales; posts_rels: typeof posts_rels; categories: typeof categories; + categories_locales: typeof categories_locales; social_links: typeof social_links; testimonials: typeof testimonials; + testimonials_locales: typeof testimonials_locales; + faqs: typeof faqs; + faqs_locales: typeof faqs_locales; + faqs_rels: typeof faqs_rels; + team_social_links: typeof team_social_links; + team_qualifications: typeof team_qualifications; + team_qualifications_locales: typeof team_qualifications_locales; + team_specializations: typeof team_specializations; + team_specializations_locales: typeof team_specializations_locales; + team_languages: typeof team_languages; + team_languages_locales: typeof team_languages_locales; + team: typeof team; + team_locales: typeof team_locales; + service_categories: typeof service_categories; + service_categories_locales: typeof service_categories_locales; + services_gallery: typeof services_gallery; + services_gallery_locales: typeof services_gallery_locales; + services_features: typeof services_features; + services_features_locales: typeof services_features_locales; + services_detail_sections: typeof services_detail_sections; + services_detail_sections_locales: typeof services_detail_sections_locales; + services: typeof services; + services_locales: typeof services_locales; + services_rels: typeof services_rels; newsletter_subscribers_interests: typeof newsletter_subscribers_interests; newsletter_subscribers: typeof newsletter_subscribers; + portfolio_categories: typeof portfolio_categories; + portfolio_categories_locales: typeof portfolio_categories_locales; + portfolios_images: typeof portfolios_images; + portfolios_images_locales: typeof portfolios_images_locales; + portfolios: typeof portfolios; + portfolios_locales: typeof portfolios_locales; + portfolios_texts: typeof portfolios_texts; + product_categories: typeof product_categories; + product_categories_locales: typeof product_categories_locales; + products_tags: typeof products_tags; + products_gallery: typeof products_gallery; + products_gallery_locales: typeof products_gallery_locales; + products_details_specifications: typeof products_details_specifications; + products_details_specifications_locales: typeof products_details_specifications_locales; + products_details_features: typeof products_details_features; + products_details_features_locales: typeof products_details_features_locales; + products_download_files: typeof products_download_files; + products_download_files_locales: typeof products_download_files_locales; + products: typeof products; + products_locales: typeof products_locales; + products_rels: typeof products_rels; + timelines_events_gallery: typeof timelines_events_gallery; + timelines_events_gallery_locales: typeof timelines_events_gallery_locales; + timelines_events_deliverables: typeof timelines_events_deliverables; + timelines_events_deliverables_locales: typeof timelines_events_deliverables_locales; + timelines_events_links: typeof timelines_events_links; + timelines_events_links_locales: typeof timelines_events_links_locales; + timelines_events: typeof timelines_events; + timelines_events_locales: typeof timelines_events_locales; + timelines: typeof timelines; + timelines_locales: typeof timelines_locales; + workflows_phases_steps_conditions: typeof workflows_phases_steps_conditions; + workflows_phases_steps_conditions_locales: typeof workflows_phases_steps_conditions_locales; + workflows_phases_steps_checklist: typeof workflows_phases_steps_checklist; + workflows_phases_steps_checklist_locales: typeof workflows_phases_steps_checklist_locales; + workflows_phases_steps_resources: typeof workflows_phases_steps_resources; + workflows_phases_steps_resources_locales: typeof workflows_phases_steps_resources_locales; + workflows_phases_steps_outputs: typeof workflows_phases_steps_outputs; + workflows_phases_steps_outputs_locales: typeof workflows_phases_steps_outputs_locales; + workflows_phases_steps: typeof workflows_phases_steps; + workflows_phases_steps_locales: typeof workflows_phases_steps_locales; + workflows_phases_deliverables: typeof workflows_phases_deliverables; + workflows_phases_deliverables_locales: typeof workflows_phases_deliverables_locales; + workflows_phases: typeof workflows_phases; + workflows_phases_locales: typeof workflows_phases_locales; + workflows_global_resources: typeof workflows_global_resources; + workflows_global_resources_locales: typeof workflows_global_resources_locales; + workflows: typeof workflows; + workflows_locales: typeof workflows_locales; + tags: typeof tags; + tags_locales: typeof tags_locales; + authors: typeof authors; + authors_locales: typeof authors_locales; + locations_hours_structured: typeof locations_hours_structured; + locations: typeof locations; + locations_locales: typeof locations_locales; + locations_rels: typeof locations_rels; + partners_case_study_results: typeof partners_case_study_results; + partners_case_study_results_locales: typeof partners_case_study_results_locales; + partners_tags: typeof partners_tags; + partners: typeof partners; + partners_locales: typeof partners_locales; + jobs_benefits_list: typeof jobs_benefits_list; + jobs_benefits_list_locales: typeof jobs_benefits_list_locales; + jobs: typeof jobs; + jobs_locales: typeof jobs_locales; + downloads_tags: typeof downloads_tags; + downloads_access_form_fields: typeof downloads_access_form_fields; + downloads: typeof downloads; + downloads_locales: typeof downloads_locales; + downloads_rels: typeof downloads_rels; + events_gallery: typeof events_gallery; + events_gallery_locales: typeof events_gallery_locales; + events_pricing_prices: typeof events_pricing_prices; + events_pricing_prices_locales: typeof events_pricing_prices_locales; + events_speakers: typeof events_speakers; + events_speakers_locales: typeof events_speakers_locales; + events_agenda: typeof events_agenda; + events_agenda_locales: typeof events_agenda_locales; + events: typeof events; + events_locales: typeof events_locales; + events_rels: typeof events_rels; cookie_configurations_enabled_categories: typeof cookie_configurations_enabled_categories; cookie_configurations: typeof cookie_configurations; cookie_inventory: typeof cookie_inventory; consent_logs: typeof consent_logs; privacy_policy_settings: typeof privacy_policy_settings; + email_logs: typeof email_logs; + audit_logs: typeof audit_logs; forms_blocks_checkbox: typeof forms_blocks_checkbox; + forms_blocks_checkbox_locales: typeof forms_blocks_checkbox_locales; forms_blocks_email: typeof forms_blocks_email; + forms_blocks_email_locales: typeof forms_blocks_email_locales; forms_blocks_message: typeof forms_blocks_message; + forms_blocks_message_locales: typeof forms_blocks_message_locales; forms_blocks_number: typeof forms_blocks_number; + forms_blocks_number_locales: typeof forms_blocks_number_locales; forms_blocks_select_options: typeof forms_blocks_select_options; + forms_blocks_select_options_locales: typeof forms_blocks_select_options_locales; forms_blocks_select: typeof forms_blocks_select; + forms_blocks_select_locales: typeof forms_blocks_select_locales; forms_blocks_text: typeof forms_blocks_text; + forms_blocks_text_locales: typeof forms_blocks_text_locales; forms_blocks_textarea: typeof forms_blocks_textarea; + forms_blocks_textarea_locales: typeof forms_blocks_textarea_locales; forms_emails: typeof forms_emails; + forms_emails_locales: typeof forms_emails_locales; forms: typeof forms; + forms_locales: typeof forms_locales; + forms_rels: typeof forms_rels; form_submissions_submission_data: typeof form_submissions_submission_data; form_submissions: typeof form_submissions; redirects: typeof redirects; + redirects_rels: typeof redirects_rels; payload_kv: typeof payload_kv; payload_locked_documents: typeof payload_locked_documents; payload_locked_documents_rels: typeof payload_locked_documents_rels; @@ -3063,13 +14819,18 @@ type DatabaseSchema = { payload_preferences_rels: typeof payload_preferences_rels; payload_migrations: typeof payload_migrations; site_settings: typeof site_settings; + site_settings_locales: typeof site_settings_locales; navigation_main_menu_submenu: typeof navigation_main_menu_submenu; + navigation_main_menu_submenu_locales: typeof navigation_main_menu_submenu_locales; navigation_main_menu: typeof navigation_main_menu; + navigation_main_menu_locales: typeof navigation_main_menu_locales; navigation_footer_menu: typeof navigation_footer_menu; + navigation_footer_menu_locales: typeof navigation_footer_menu_locales; navigation: typeof navigation; seo_settings_social_profiles: typeof seo_settings_social_profiles; seo_settings_local_business_opening_hours: typeof seo_settings_local_business_opening_hours; seo_settings: typeof seo_settings; + seo_settings_locales: typeof seo_settings_locales; seo_settings_texts: typeof seo_settings_texts; relations_users_tenants: typeof relations_users_tenants; relations_users_sessions: typeof relations_users_sessions; @@ -3078,51 +14839,289 @@ type DatabaseSchema = { relations_media: typeof relations_media; relations_tenants_domains: typeof relations_tenants_domains; relations_tenants: typeof relations_tenants; + relations_pages_blocks_hero_block_locales: typeof relations_pages_blocks_hero_block_locales; relations_pages_blocks_hero_block: typeof relations_pages_blocks_hero_block; + relations_pages_blocks_hero_slider_block_slides_locales: typeof relations_pages_blocks_hero_slider_block_slides_locales; + relations_pages_blocks_hero_slider_block_slides: typeof relations_pages_blocks_hero_slider_block_slides; + relations_pages_blocks_hero_slider_block_locales: typeof relations_pages_blocks_hero_slider_block_locales; + relations_pages_blocks_hero_slider_block: typeof relations_pages_blocks_hero_slider_block; + relations_pages_blocks_image_slider_block_images_locales: typeof relations_pages_blocks_image_slider_block_images_locales; + relations_pages_blocks_image_slider_block_images: typeof relations_pages_blocks_image_slider_block_images; + relations_pages_blocks_image_slider_block_locales: typeof relations_pages_blocks_image_slider_block_locales; + relations_pages_blocks_image_slider_block: typeof relations_pages_blocks_image_slider_block; + relations_pages_blocks_text_block_locales: typeof relations_pages_blocks_text_block_locales; relations_pages_blocks_text_block: typeof relations_pages_blocks_text_block; + relations_pages_blocks_image_text_block_locales: typeof relations_pages_blocks_image_text_block_locales; relations_pages_blocks_image_text_block: typeof relations_pages_blocks_image_text_block; + relations_pages_blocks_card_grid_block_cards_locales: typeof relations_pages_blocks_card_grid_block_cards_locales; relations_pages_blocks_card_grid_block_cards: typeof relations_pages_blocks_card_grid_block_cards; + relations_pages_blocks_card_grid_block_locales: typeof relations_pages_blocks_card_grid_block_locales; relations_pages_blocks_card_grid_block: typeof relations_pages_blocks_card_grid_block; + relations_pages_blocks_quote_block_locales: typeof relations_pages_blocks_quote_block_locales; relations_pages_blocks_quote_block: typeof relations_pages_blocks_quote_block; + relations_pages_blocks_cta_block_buttons_locales: typeof relations_pages_blocks_cta_block_buttons_locales; relations_pages_blocks_cta_block_buttons: typeof relations_pages_blocks_cta_block_buttons; + relations_pages_blocks_cta_block_locales: typeof relations_pages_blocks_cta_block_locales; relations_pages_blocks_cta_block: typeof relations_pages_blocks_cta_block; + relations_pages_blocks_contact_form_block_locales: typeof relations_pages_blocks_contact_form_block_locales; relations_pages_blocks_contact_form_block: typeof relations_pages_blocks_contact_form_block; + relations_pages_blocks_timeline_block_items_locales: typeof relations_pages_blocks_timeline_block_items_locales; relations_pages_blocks_timeline_block_items: typeof relations_pages_blocks_timeline_block_items; + relations_pages_blocks_timeline_block_locales: typeof relations_pages_blocks_timeline_block_locales; relations_pages_blocks_timeline_block: typeof relations_pages_blocks_timeline_block; relations_pages_blocks_divider_block: typeof relations_pages_blocks_divider_block; + relations_pages_blocks_video_block_locales: typeof relations_pages_blocks_video_block_locales; relations_pages_blocks_video_block: typeof relations_pages_blocks_video_block; + relations_pages_blocks_posts_list_block_locales: typeof relations_pages_blocks_posts_list_block_locales; relations_pages_blocks_posts_list_block: typeof relations_pages_blocks_posts_list_block; + relations_pages_blocks_testimonials_block_locales: typeof relations_pages_blocks_testimonials_block_locales; relations_pages_blocks_testimonials_block: typeof relations_pages_blocks_testimonials_block; relations_pages_blocks_newsletter_block_available_interests: typeof relations_pages_blocks_newsletter_block_available_interests; + relations_pages_blocks_newsletter_block_locales: typeof relations_pages_blocks_newsletter_block_locales; relations_pages_blocks_newsletter_block: typeof relations_pages_blocks_newsletter_block; + relations_pages_blocks_process_steps_block_steps_locales: typeof relations_pages_blocks_process_steps_block_steps_locales; relations_pages_blocks_process_steps_block_steps: typeof relations_pages_blocks_process_steps_block_steps; + relations_pages_blocks_process_steps_block_locales: typeof relations_pages_blocks_process_steps_block_locales; relations_pages_blocks_process_steps_block: typeof relations_pages_blocks_process_steps_block; + relations_pages_blocks_faq_block_inline_f_a_qs_locales: typeof relations_pages_blocks_faq_block_inline_f_a_qs_locales; + relations_pages_blocks_faq_block_inline_f_a_qs: typeof relations_pages_blocks_faq_block_inline_f_a_qs; + relations_pages_blocks_faq_block_locales: typeof relations_pages_blocks_faq_block_locales; + relations_pages_blocks_faq_block: typeof relations_pages_blocks_faq_block; + relations_pages_blocks_team_block_locales: typeof relations_pages_blocks_team_block_locales; + relations_pages_blocks_team_block: typeof relations_pages_blocks_team_block; + relations_pages_blocks_services_block_locales: typeof relations_pages_blocks_services_block_locales; + relations_pages_blocks_services_block: typeof relations_pages_blocks_services_block; + relations_pages_blocks_author_bio_block_locales: typeof relations_pages_blocks_author_bio_block_locales; + relations_pages_blocks_author_bio_block: typeof relations_pages_blocks_author_bio_block; + relations_pages_blocks_related_posts_block_locales: typeof relations_pages_blocks_related_posts_block_locales; + relations_pages_blocks_related_posts_block: typeof relations_pages_blocks_related_posts_block; + relations_pages_blocks_share_buttons_block_locales: typeof relations_pages_blocks_share_buttons_block_locales; + relations_pages_blocks_share_buttons_block: typeof relations_pages_blocks_share_buttons_block; + relations_pages_blocks_toc_block_locales: typeof relations_pages_blocks_toc_block_locales; + relations_pages_blocks_toc_block: typeof relations_pages_blocks_toc_block; + relations_pages_blocks_team_filter_block_locales: typeof relations_pages_blocks_team_filter_block_locales; + relations_pages_blocks_team_filter_block: typeof relations_pages_blocks_team_filter_block; + relations_pages_blocks_org_chart_block_locales: typeof relations_pages_blocks_org_chart_block_locales; + relations_pages_blocks_org_chart_block: typeof relations_pages_blocks_org_chart_block; + relations_pages_blocks_locations_block_locales: typeof relations_pages_blocks_locations_block_locales; + relations_pages_blocks_locations_block: typeof relations_pages_blocks_locations_block; + relations_pages_blocks_logo_grid_block_partner_type: typeof relations_pages_blocks_logo_grid_block_partner_type; + relations_pages_blocks_logo_grid_block_logos: typeof relations_pages_blocks_logo_grid_block_logos; + relations_pages_blocks_logo_grid_block_locales: typeof relations_pages_blocks_logo_grid_block_locales; + relations_pages_blocks_logo_grid_block: typeof relations_pages_blocks_logo_grid_block; + relations_pages_blocks_stats_block_stats_locales: typeof relations_pages_blocks_stats_block_stats_locales; + relations_pages_blocks_stats_block_stats: typeof relations_pages_blocks_stats_block_stats; + relations_pages_blocks_stats_block_locales: typeof relations_pages_blocks_stats_block_locales; + relations_pages_blocks_stats_block: typeof relations_pages_blocks_stats_block; + relations_pages_blocks_jobs_block_locales: typeof relations_pages_blocks_jobs_block_locales; + relations_pages_blocks_jobs_block: typeof relations_pages_blocks_jobs_block; + relations_pages_blocks_downloads_block_locales: typeof relations_pages_blocks_downloads_block_locales; + relations_pages_blocks_downloads_block: typeof relations_pages_blocks_downloads_block; + relations_pages_blocks_map_block_location_type: typeof relations_pages_blocks_map_block_location_type; + relations_pages_blocks_map_block_markers_locales: typeof relations_pages_blocks_map_block_markers_locales; + relations_pages_blocks_map_block_markers: typeof relations_pages_blocks_map_block_markers; + relations_pages_blocks_map_block_locales: typeof relations_pages_blocks_map_block_locales; + relations_pages_blocks_map_block: typeof relations_pages_blocks_map_block; + relations_pages_blocks_events_locales: typeof relations_pages_blocks_events_locales; + relations_pages_blocks_events: typeof relations_pages_blocks_events; + relations_pages_blocks_pricing_plans_features_locales: typeof relations_pages_blocks_pricing_plans_features_locales; + relations_pages_blocks_pricing_plans_features: typeof relations_pages_blocks_pricing_plans_features; + relations_pages_blocks_pricing_plans_locales: typeof relations_pages_blocks_pricing_plans_locales; + relations_pages_blocks_pricing_plans: typeof relations_pages_blocks_pricing_plans; + relations_pages_blocks_pricing_comparison_features_values_locales: typeof relations_pages_blocks_pricing_comparison_features_values_locales; + relations_pages_blocks_pricing_comparison_features_values: typeof relations_pages_blocks_pricing_comparison_features_values; + relations_pages_blocks_pricing_comparison_features_locales: typeof relations_pages_blocks_pricing_comparison_features_locales; + relations_pages_blocks_pricing_comparison_features: typeof relations_pages_blocks_pricing_comparison_features; + relations_pages_blocks_pricing_faq_items_locales: typeof relations_pages_blocks_pricing_faq_items_locales; + relations_pages_blocks_pricing_faq_items: typeof relations_pages_blocks_pricing_faq_items; + relations_pages_blocks_pricing_locales: typeof relations_pages_blocks_pricing_locales; + relations_pages_blocks_pricing: typeof relations_pages_blocks_pricing; + relations_pages_blocks_tabs_tabs_features_locales: typeof relations_pages_blocks_tabs_tabs_features_locales; + relations_pages_blocks_tabs_tabs_features: typeof relations_pages_blocks_tabs_tabs_features; + relations_pages_blocks_tabs_tabs_locales: typeof relations_pages_blocks_tabs_tabs_locales; + relations_pages_blocks_tabs_tabs: typeof relations_pages_blocks_tabs_tabs; + relations_pages_blocks_tabs_locales: typeof relations_pages_blocks_tabs_locales; + relations_pages_blocks_tabs: typeof relations_pages_blocks_tabs; + relations_pages_blocks_accordion_items_list_items_locales: typeof relations_pages_blocks_accordion_items_list_items_locales; + relations_pages_blocks_accordion_items_list_items: typeof relations_pages_blocks_accordion_items_list_items; + relations_pages_blocks_accordion_items_table_data_headers_locales: typeof relations_pages_blocks_accordion_items_table_data_headers_locales; + relations_pages_blocks_accordion_items_table_data_headers: typeof relations_pages_blocks_accordion_items_table_data_headers; + relations_pages_blocks_accordion_items_table_data_rows_cells_locales: typeof relations_pages_blocks_accordion_items_table_data_rows_cells_locales; + relations_pages_blocks_accordion_items_table_data_rows_cells: typeof relations_pages_blocks_accordion_items_table_data_rows_cells; + relations_pages_blocks_accordion_items_table_data_rows: typeof relations_pages_blocks_accordion_items_table_data_rows; + relations_pages_blocks_accordion_items_locales: typeof relations_pages_blocks_accordion_items_locales; + relations_pages_blocks_accordion_items: typeof relations_pages_blocks_accordion_items; + relations_pages_blocks_accordion_locales: typeof relations_pages_blocks_accordion_locales; + relations_pages_blocks_accordion: typeof relations_pages_blocks_accordion; + relations_pages_blocks_comparison_tbl_columns_locales: typeof relations_pages_blocks_comparison_tbl_columns_locales; + relations_pages_blocks_comparison_tbl_columns: typeof relations_pages_blocks_comparison_tbl_columns; + relations_pages_blocks_comparison_tbl_rows_values_locales: typeof relations_pages_blocks_comparison_tbl_rows_values_locales; + relations_pages_blocks_comparison_tbl_rows_values: typeof relations_pages_blocks_comparison_tbl_rows_values; + relations_pages_blocks_comparison_tbl_rows_locales: typeof relations_pages_blocks_comparison_tbl_rows_locales; + relations_pages_blocks_comparison_tbl_rows: typeof relations_pages_blocks_comparison_tbl_rows; + relations_pages_blocks_comparison_crd_items_features_locales: typeof relations_pages_blocks_comparison_crd_items_features_locales; + relations_pages_blocks_comparison_crd_items_features: typeof relations_pages_blocks_comparison_crd_items_features; + relations_pages_blocks_comparison_crd_items_locales: typeof relations_pages_blocks_comparison_crd_items_locales; + relations_pages_blocks_comparison_crd_items: typeof relations_pages_blocks_comparison_crd_items; + relations_pages_blocks_comparison_before_after_items_locales: typeof relations_pages_blocks_comparison_before_after_items_locales; + relations_pages_blocks_comparison_before_after_items: typeof relations_pages_blocks_comparison_before_after_items; + relations_pages_blocks_comparison_pros_cons_items_pros_locales: typeof relations_pages_blocks_comparison_pros_cons_items_pros_locales; + relations_pages_blocks_comparison_pros_cons_items_pros: typeof relations_pages_blocks_comparison_pros_cons_items_pros; + relations_pages_blocks_comparison_pros_cons_items_cons_locales: typeof relations_pages_blocks_comparison_pros_cons_items_cons_locales; + relations_pages_blocks_comparison_pros_cons_items_cons: typeof relations_pages_blocks_comparison_pros_cons_items_cons; + relations_pages_blocks_comparison_pros_cons_items_locales: typeof relations_pages_blocks_comparison_pros_cons_items_locales; + relations_pages_blocks_comparison_pros_cons_items: typeof relations_pages_blocks_comparison_pros_cons_items; + relations_pages_blocks_comparison_locales: typeof relations_pages_blocks_comparison_locales; + relations_pages_blocks_comparison: typeof relations_pages_blocks_comparison; + relations_pages_locales: typeof relations_pages_locales; relations_pages_rels: typeof relations_pages_rels; relations_pages: typeof relations_pages; + relations_posts_locales: typeof relations_posts_locales; relations_posts_rels: typeof relations_posts_rels; relations_posts: typeof relations_posts; + relations_categories_locales: typeof relations_categories_locales; relations_categories: typeof relations_categories; relations_social_links: typeof relations_social_links; + relations_testimonials_locales: typeof relations_testimonials_locales; relations_testimonials: typeof relations_testimonials; + relations_faqs_locales: typeof relations_faqs_locales; + relations_faqs_rels: typeof relations_faqs_rels; + relations_faqs: typeof relations_faqs; + relations_team_social_links: typeof relations_team_social_links; + relations_team_qualifications_locales: typeof relations_team_qualifications_locales; + relations_team_qualifications: typeof relations_team_qualifications; + relations_team_specializations_locales: typeof relations_team_specializations_locales; + relations_team_specializations: typeof relations_team_specializations; + relations_team_languages_locales: typeof relations_team_languages_locales; + relations_team_languages: typeof relations_team_languages; + relations_team_locales: typeof relations_team_locales; + relations_team: typeof relations_team; + relations_service_categories_locales: typeof relations_service_categories_locales; + relations_service_categories: typeof relations_service_categories; + relations_services_gallery_locales: typeof relations_services_gallery_locales; + relations_services_gallery: typeof relations_services_gallery; + relations_services_features_locales: typeof relations_services_features_locales; + relations_services_features: typeof relations_services_features; + relations_services_detail_sections_locales: typeof relations_services_detail_sections_locales; + relations_services_detail_sections: typeof relations_services_detail_sections; + relations_services_locales: typeof relations_services_locales; + relations_services_rels: typeof relations_services_rels; + relations_services: typeof relations_services; relations_newsletter_subscribers_interests: typeof relations_newsletter_subscribers_interests; relations_newsletter_subscribers: typeof relations_newsletter_subscribers; + relations_portfolio_categories_locales: typeof relations_portfolio_categories_locales; + relations_portfolio_categories: typeof relations_portfolio_categories; + relations_portfolios_images_locales: typeof relations_portfolios_images_locales; + relations_portfolios_images: typeof relations_portfolios_images; + relations_portfolios_locales: typeof relations_portfolios_locales; + relations_portfolios_texts: typeof relations_portfolios_texts; + relations_portfolios: typeof relations_portfolios; + relations_product_categories_locales: typeof relations_product_categories_locales; + relations_product_categories: typeof relations_product_categories; + relations_products_tags: typeof relations_products_tags; + relations_products_gallery_locales: typeof relations_products_gallery_locales; + relations_products_gallery: typeof relations_products_gallery; + relations_products_details_specifications_locales: typeof relations_products_details_specifications_locales; + relations_products_details_specifications: typeof relations_products_details_specifications; + relations_products_details_features_locales: typeof relations_products_details_features_locales; + relations_products_details_features: typeof relations_products_details_features; + relations_products_download_files_locales: typeof relations_products_download_files_locales; + relations_products_download_files: typeof relations_products_download_files; + relations_products_locales: typeof relations_products_locales; + relations_products_rels: typeof relations_products_rels; + relations_products: typeof relations_products; + relations_timelines_events_gallery_locales: typeof relations_timelines_events_gallery_locales; + relations_timelines_events_gallery: typeof relations_timelines_events_gallery; + relations_timelines_events_deliverables_locales: typeof relations_timelines_events_deliverables_locales; + relations_timelines_events_deliverables: typeof relations_timelines_events_deliverables; + relations_timelines_events_links_locales: typeof relations_timelines_events_links_locales; + relations_timelines_events_links: typeof relations_timelines_events_links; + relations_timelines_events_locales: typeof relations_timelines_events_locales; + relations_timelines_events: typeof relations_timelines_events; + relations_timelines_locales: typeof relations_timelines_locales; + relations_timelines: typeof relations_timelines; + relations_workflows_phases_steps_conditions_locales: typeof relations_workflows_phases_steps_conditions_locales; + relations_workflows_phases_steps_conditions: typeof relations_workflows_phases_steps_conditions; + relations_workflows_phases_steps_checklist_locales: typeof relations_workflows_phases_steps_checklist_locales; + relations_workflows_phases_steps_checklist: typeof relations_workflows_phases_steps_checklist; + relations_workflows_phases_steps_resources_locales: typeof relations_workflows_phases_steps_resources_locales; + relations_workflows_phases_steps_resources: typeof relations_workflows_phases_steps_resources; + relations_workflows_phases_steps_outputs_locales: typeof relations_workflows_phases_steps_outputs_locales; + relations_workflows_phases_steps_outputs: typeof relations_workflows_phases_steps_outputs; + relations_workflows_phases_steps_locales: typeof relations_workflows_phases_steps_locales; + relations_workflows_phases_steps: typeof relations_workflows_phases_steps; + relations_workflows_phases_deliverables_locales: typeof relations_workflows_phases_deliverables_locales; + relations_workflows_phases_deliverables: typeof relations_workflows_phases_deliverables; + relations_workflows_phases_locales: typeof relations_workflows_phases_locales; + relations_workflows_phases: typeof relations_workflows_phases; + relations_workflows_global_resources_locales: typeof relations_workflows_global_resources_locales; + relations_workflows_global_resources: typeof relations_workflows_global_resources; + relations_workflows_locales: typeof relations_workflows_locales; + relations_workflows: typeof relations_workflows; + relations_tags_locales: typeof relations_tags_locales; + relations_tags: typeof relations_tags; + relations_authors_locales: typeof relations_authors_locales; + relations_authors: typeof relations_authors; + relations_locations_hours_structured: typeof relations_locations_hours_structured; + relations_locations_locales: typeof relations_locations_locales; + relations_locations_rels: typeof relations_locations_rels; + relations_locations: typeof relations_locations; + relations_partners_case_study_results_locales: typeof relations_partners_case_study_results_locales; + relations_partners_case_study_results: typeof relations_partners_case_study_results; + relations_partners_tags: typeof relations_partners_tags; + relations_partners_locales: typeof relations_partners_locales; + relations_partners: typeof relations_partners; + relations_jobs_benefits_list_locales: typeof relations_jobs_benefits_list_locales; + relations_jobs_benefits_list: typeof relations_jobs_benefits_list; + relations_jobs_locales: typeof relations_jobs_locales; + relations_jobs: typeof relations_jobs; + relations_downloads_tags: typeof relations_downloads_tags; + relations_downloads_access_form_fields: typeof relations_downloads_access_form_fields; + relations_downloads_locales: typeof relations_downloads_locales; + relations_downloads_rels: typeof relations_downloads_rels; + relations_downloads: typeof relations_downloads; + relations_events_gallery_locales: typeof relations_events_gallery_locales; + relations_events_gallery: typeof relations_events_gallery; + relations_events_pricing_prices_locales: typeof relations_events_pricing_prices_locales; + relations_events_pricing_prices: typeof relations_events_pricing_prices; + relations_events_speakers_locales: typeof relations_events_speakers_locales; + relations_events_speakers: typeof relations_events_speakers; + relations_events_agenda_locales: typeof relations_events_agenda_locales; + relations_events_agenda: typeof relations_events_agenda; + relations_events_locales: typeof relations_events_locales; + relations_events_rels: typeof relations_events_rels; + relations_events: typeof relations_events; relations_cookie_configurations_enabled_categories: typeof relations_cookie_configurations_enabled_categories; relations_cookie_configurations: typeof relations_cookie_configurations; relations_cookie_inventory: typeof relations_cookie_inventory; relations_consent_logs: typeof relations_consent_logs; relations_privacy_policy_settings: typeof relations_privacy_policy_settings; + relations_email_logs: typeof relations_email_logs; + relations_audit_logs: typeof relations_audit_logs; + relations_forms_blocks_checkbox_locales: typeof relations_forms_blocks_checkbox_locales; relations_forms_blocks_checkbox: typeof relations_forms_blocks_checkbox; + relations_forms_blocks_email_locales: typeof relations_forms_blocks_email_locales; relations_forms_blocks_email: typeof relations_forms_blocks_email; + relations_forms_blocks_message_locales: typeof relations_forms_blocks_message_locales; relations_forms_blocks_message: typeof relations_forms_blocks_message; + relations_forms_blocks_number_locales: typeof relations_forms_blocks_number_locales; relations_forms_blocks_number: typeof relations_forms_blocks_number; + relations_forms_blocks_select_options_locales: typeof relations_forms_blocks_select_options_locales; relations_forms_blocks_select_options: typeof relations_forms_blocks_select_options; + relations_forms_blocks_select_locales: typeof relations_forms_blocks_select_locales; relations_forms_blocks_select: typeof relations_forms_blocks_select; + relations_forms_blocks_text_locales: typeof relations_forms_blocks_text_locales; relations_forms_blocks_text: typeof relations_forms_blocks_text; + relations_forms_blocks_textarea_locales: typeof relations_forms_blocks_textarea_locales; relations_forms_blocks_textarea: typeof relations_forms_blocks_textarea; + relations_forms_emails_locales: typeof relations_forms_emails_locales; relations_forms_emails: typeof relations_forms_emails; + relations_forms_locales: typeof relations_forms_locales; + relations_forms_rels: typeof relations_forms_rels; relations_forms: typeof relations_forms; relations_form_submissions_submission_data: typeof relations_form_submissions_submission_data; relations_form_submissions: typeof relations_form_submissions; + relations_redirects_rels: typeof relations_redirects_rels; relations_redirects: typeof relations_redirects; relations_payload_kv: typeof relations_payload_kv; relations_payload_locked_documents_rels: typeof relations_payload_locked_documents_rels; @@ -3130,13 +15129,18 @@ type DatabaseSchema = { relations_payload_preferences_rels: typeof relations_payload_preferences_rels; relations_payload_preferences: typeof relations_payload_preferences; relations_payload_migrations: typeof relations_payload_migrations; + relations_site_settings_locales: typeof relations_site_settings_locales; relations_site_settings: typeof relations_site_settings; + relations_navigation_main_menu_submenu_locales: typeof relations_navigation_main_menu_submenu_locales; relations_navigation_main_menu_submenu: typeof relations_navigation_main_menu_submenu; + relations_navigation_main_menu_locales: typeof relations_navigation_main_menu_locales; relations_navigation_main_menu: typeof relations_navigation_main_menu; + relations_navigation_footer_menu_locales: typeof relations_navigation_footer_menu_locales; relations_navigation_footer_menu: typeof relations_navigation_footer_menu; relations_navigation: typeof relations_navigation; relations_seo_settings_social_profiles: typeof relations_seo_settings_social_profiles; relations_seo_settings_local_business_opening_hours: typeof relations_seo_settings_local_business_opening_hours; + relations_seo_settings_locales: typeof relations_seo_settings_locales; relations_seo_settings_texts: typeof relations_seo_settings_texts; relations_seo_settings: typeof relations_seo_settings; }; diff --git a/src/payload-types.ts b/src/payload-types.ts index 6f59b4d..e83ef2e 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -88,6 +88,11 @@ export interface Config { workflows: Workflow; tags: Tag; authors: Author; + locations: Location; + partners: Partner; + jobs: Job; + downloads: Download; + events: Event; 'cookie-configurations': CookieConfiguration; 'cookie-inventory': CookieInventory; 'consent-logs': ConsentLog; @@ -125,6 +130,11 @@ export interface Config { workflows: WorkflowsSelect | WorkflowsSelect; tags: TagsSelect | TagsSelect; authors: AuthorsSelect | AuthorsSelect; + locations: LocationsSelect | LocationsSelect; + partners: PartnersSelect | PartnersSelect; + jobs: JobsSelect | JobsSelect; + downloads: DownloadsSelect | DownloadsSelect; + events: EventsSelect | EventsSelect; 'cookie-configurations': CookieConfigurationsSelect | CookieConfigurationsSelect; 'cookie-inventory': CookieInventorySelect | CookieInventorySelect; 'consent-logs': ConsentLogsSelect | ConsentLogsSelect; @@ -1476,6 +1486,1104 @@ export interface Page { blockName?: string | null; blockType: 'org-chart-block'; } + | { + title?: string | null; + subtitle?: string | null; + source?: ('all' | 'main' | 'type' | 'manual') | null; + locationType?: + | ('headquarters' | 'office' | 'branch' | 'warehouse' | 'showroom' | 'studio' | 'practice' | 'workshop') + | null; + selectedLocations?: (number | Location)[] | null; + layout?: ('map-list' | 'map-only' | 'list-only' | 'cards' | 'accordion' | 'tabs') | null; + mapPosition?: ('left' | 'right' | 'top' | 'bottom') | null; + columns?: ('1' | '2' | '3') | null; + map?: { + provider?: ('osm' | 'google' | 'mapbox') | null; + style?: ('default' | 'light' | 'dark' | 'satellite') | null; + height?: ('300' | '400' | '500' | '600') | null; + defaultZoom?: number | null; + /** + * Karte automatisch anpassen, um alle Standorte zu zeigen + */ + fitBounds?: boolean | null; + markerStyle?: ('pin' | 'dot' | 'icon' | 'custom') | null; + /** + * Hex-Farbe (z.B. #e11d48) + */ + markerColor?: string | null; + /** + * Nahe Marker zu Gruppen zusammenfassen + */ + clustering?: boolean | null; + controls?: { + zoom?: boolean | null; + fullscreen?: boolean | null; + scrollZoom?: boolean | null; + dragging?: boolean | null; + }; + }; + show?: { + image?: boolean | null; + type?: boolean | null; + address?: boolean | null; + phone?: boolean | null; + email?: boolean | null; + hours?: boolean | null; + directions?: boolean | null; + services?: boolean | null; + team?: boolean | null; + }; + actions?: { + showDirectionsLink?: boolean | null; + showCallButton?: boolean | null; + showEmailButton?: boolean | null; + showDetailLink?: boolean | null; + detailBasePath?: string | null; + }; + style?: { + bg?: ('none' | 'light' | 'dark') | null; + cardStyle?: ('simple' | 'bordered' | 'shadow' | 'filled') | null; + gap?: ('16' | '24' | '32') | null; + }; + id?: string | null; + blockName?: string | null; + blockType: 'locations-block'; + } + | { + /** + * z.B. "Unsere Partner", "Bekannt aus", "Zertifizierungen" + */ + title?: string | null; + subtitle?: string | null; + source?: ('collection' | 'manual') | null; + partnerType?: + | ( + | 'all' + | 'partner' + | 'client' + | 'reference' + | 'sponsor' + | 'certification' + | 'membership' + | 'award' + | 'supplier' + | 'technology' + )[] + | null; + /** + * Optional: Bestimmte Partner auswählen (sonst alle vom gewählten Typ) + */ + selectedPartners?: (number | Partner)[] | null; + featuredOnly?: boolean | null; + limit?: number | null; + logos?: + | { + logo: number | Media; + /** + * Für Alt-Text und Tooltip + */ + name?: string | null; + link?: string | null; + id?: string | null; + }[] + | null; + layout?: ('grid' | 'slider' | 'marquee' | 'inline' | 'masonry') | null; + columns?: ('3' | '4' | '5' | '6' | '8') | null; + slider?: { + perView?: ('3' | '4' | '5' | '6' | 'auto') | null; + autoplay?: boolean | null; + speed?: ('5000' | '3000' | '2000') | null; + pauseOnHover?: boolean | null; + showArrows?: boolean | null; + showDots?: boolean | null; + }; + logoStyle?: { + size?: ('sm' | 'md' | 'lg') | null; + maxHeight?: ('40' | '50' | '60' | '80' | '100') | null; + /** + * Logos in Graustufen anzeigen + */ + grayscale?: boolean | null; + colorOnHover?: boolean | null; + opacity?: ('50' | '70' | '100') | null; + hoverEffect?: ('none' | 'scale' | 'brighten' | 'shadow') | null; + }; + behavior?: { + linkToWebsite?: boolean | null; + openInNewTab?: boolean | null; + showTooltip?: boolean | null; + showName?: boolean | null; + }; + style?: { + bg?: ('none' | 'light' | 'white' | 'dark') | null; + logoBg?: ('none' | 'white' | 'light') | null; + logoPadding?: boolean | null; + gap?: ('16' | '24' | '32' | '48') | null; + alignment?: ('left' | 'center' | 'right') | null; + divider?: boolean | null; + }; + showCTA?: boolean | null; + ctaText?: string | null; + ctaLink?: string | null; + id?: string | null; + blockName?: string | null; + blockType: 'logo-grid-block'; + } + | { + title?: string | null; + subtitle?: string | null; + stats: { + /** + * z.B. "500+", "99%", "24/7", "10.000" + */ + value: string; + /** + * Für Zähl-Animation (z.B. 500 für "500+") + */ + numericValue?: number | null; + /** + * z.B. "€", "+" + */ + prefix?: string | null; + /** + * z.B. "+", "%", "k", "Mio." + */ + suffix?: string | null; + /** + * z.B. "Zufriedene Kunden", "Erfolgsquote" + */ + label: string; + /** + * Optionaler erklärender Text + */ + description?: string | null; + icon?: + | ( + | 'none' + | 'users' + | 'star' + | 'heart' + | 'check' + | 'trophy' + | 'chart' + | 'clock' + | 'calendar' + | 'globe' + | 'building' + | 'document' + | 'target' + | 'rocket' + | 'handshake' + ) + | null; + color?: ('default' | 'primary' | 'green' | 'blue' | 'orange' | 'red') | null; + id?: string | null; + }[]; + layout?: ('row' | 'grid' | 'cards' | 'column' | 'inline' | 'feature') | null; + columns?: ('2' | '3' | '4' | 'auto') | null; + alignment?: ('left' | 'center' | 'right') | null; + animation?: { + /** + * Zahlen hochzählen (benötigt numericValue) + */ + countUp?: boolean | null; + duration?: ('1000' | '2000' | '3000') | null; + trigger?: ('viewport' | 'immediate') | null; + /** + * Statistiken nacheinander einblenden + */ + stagger?: boolean | null; + }; + style?: { + bg?: ('none' | 'light' | 'dark' | 'primary' | 'gradient') | null; + bgImage?: (number | null) | Media; + bgOverlay?: ('none' | 'dark' | 'light' | 'primary') | null; + textColor?: ('auto' | 'dark' | 'light') | null; + valueSize?: ('base' | 'lg' | 'xl' | '2xl') | null; + valueWeight?: ('normal' | 'medium' | 'bold' | 'extrabold') | null; + showIcon?: boolean | null; + iconPosition?: ('top' | 'left' | 'inline') | null; + dividers?: boolean | null; + cardBorder?: boolean | null; + cardShadow?: boolean | null; + gap?: ('16' | '24' | '32' | '48') | null; + padding?: ('none' | 'sm' | 'md' | 'lg') | null; + }; + id?: string | null; + blockName?: string | null; + blockType: 'stats-block'; + } + | { + title?: string | null; + subtitle?: string | null; + 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; + source?: ('all' | 'category' | 'department' | 'location' | 'featured' | 'manual') | null; + category?: + | ( + | 'care' + | 'medical' + | 'admin' + | 'it' + | 'marketing' + | 'sales' + | 'finance' + | 'hr' + | 'production' + | 'logistics' + ) + | null; + department?: string | null; + locationFilter?: (number | null) | Location; + selectedJobs?: (number | Job)[] | null; + limit?: number | null; + filters?: { + showSearch?: boolean | null; + showCategoryFilter?: boolean | null; + showTypeFilter?: boolean | null; + showLocationFilter?: boolean | null; + showWorkModelFilter?: boolean | null; + filterLayout?: ('horizontal' | 'sidebar' | 'dropdown') | null; + }; + layout?: ('list' | 'cards' | 'compact' | 'accordion') | null; + columns?: ('1' | '2' | '3') | null; + show?: { + image?: boolean | null; + department?: boolean | null; + type?: boolean | null; + location?: boolean | null; + workModel?: boolean | null; + salary?: boolean | null; + summary?: boolean | null; + deadline?: boolean | null; + publishDate?: boolean | null; + badges?: boolean | null; + }; + badges?: { + /** + * Wie viele Tage nach Veröffentlichung "Neu" anzeigen + */ + newDays?: number | null; + showUrgent?: boolean | null; + showFeatured?: boolean | null; + }; + pagination?: { + type?: ('button' | 'pagination' | 'infinite' | 'none') | null; + perPage?: number | null; + }; + style?: { + bg?: ('none' | 'light' | 'dark') | null; + cardStyle?: ('simple' | 'bordered' | 'shadow') | null; + hoverEffect?: ('none' | 'lift' | 'highlight') | null; + gap?: ('8' | '16' | '24') | null; + }; + emptyState?: { + title?: string | null; + message?: string | null; + showInitiativeLink?: boolean | null; + initiativeText?: string | null; + initiativeUrl?: string | null; + }; + showAllJobsLink?: boolean | null; + allJobsText?: string | null; + allJobsUrl?: string | null; + id?: string | null; + blockName?: string | null; + blockType: 'jobs-block'; + } + | { + title?: string | null; + subtitle?: string | null; + 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; + source?: ('all' | 'category' | 'tags' | 'featured' | 'service' | 'product' | 'manual') | null; + category?: + | ( + | 'brochure' + | 'flyer' + | 'catalog' + | 'pricelist' + | 'form' + | 'manual' + | 'datasheet' + | 'certificate' + | 'press' + | 'whitepaper' + | 'presentation' + | 'legal' + ) + | null; + /** + * z.B. "produktinfo, 2024, neu" + */ + filterTags?: string | null; + relatedService?: (number | null) | Service; + relatedProduct?: (number | null) | Product; + selectedDownloads?: (number | Download)[] | null; + limit?: number | null; + filters?: { + showSearch?: boolean | null; + showCategoryFilter?: boolean | null; + showFileTypeFilter?: boolean | null; + filterLayout?: ('horizontal' | 'sidebar' | 'dropdown') | null; + }; + layout?: ('list' | 'cards' | 'compact' | 'table' | 'accordion') | null; + columns?: ('1' | '2' | '3' | '4') | null; + show?: { + thumbnail?: boolean | null; + description?: boolean | null; + fileSize?: boolean | null; + fileType?: boolean | null; + category?: boolean | null; + downloadCount?: boolean | null; + version?: boolean | null; + lastUpdated?: boolean | null; + }; + downloadBehavior?: { + /** + * Datei direkt herunterladen vs. Vorschau öffnen + */ + directDownload?: boolean | null; + trackDownloads?: boolean | null; + openInNewTab?: boolean | null; + }; + fileIcons?: { + showFileTypeIcon?: boolean | null; + iconStyle?: ('colored' | 'mono' | 'outline') | null; + }; + sortBy?: + | ('order' | 'title_asc' | 'title_desc' | 'date_desc' | 'date_asc' | 'downloads_desc' | 'size') + | null; + groupBy?: ('none' | 'category' | 'fileType') | null; + pagination?: { + type?: ('none' | 'button' | 'pagination') | null; + perPage?: number | null; + }; + style?: { + bg?: ('none' | 'light' | 'dark') | null; + cardStyle?: ('simple' | 'bordered' | 'shadow') | null; + hoverEffect?: ('none' | 'highlight' | 'lift') | null; + gap?: ('8' | '16' | '24') | null; + }; + emptyState?: { + title?: string | null; + message?: string | null; + }; + showAllDownloadsLink?: boolean | null; + allDownloadsText?: string | null; + allDownloadsUrl?: string | null; + id?: string | null; + blockName?: string | null; + blockType: 'downloads-block'; + } + | { + title?: string | null; + subtitle?: string | null; + source?: ('locations' | 'manual' | 'single') | null; + locationType?: + | ( + | 'all' + | 'headquarters' + | 'branch' + | 'office' + | 'warehouse' + | 'production' + | 'showroom' + | 'service' + | 'partner' + )[] + | null; + /** + * Optional: Bestimmte Standorte auswählen (sonst alle vom gewählten Typ) + */ + selectedLocations?: (number | Location)[] | null; + markers?: + | { + name: string; + address?: string | null; + lat: number; + lng: number; + markerType?: ('default' | 'main' | 'highlight' | 'custom') | null; + customIcon?: (number | null) | Media; + popupContent?: { + 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; + link?: string | null; + id?: string | null; + }[] + | null; + singleAddress?: { + name?: string | null; + street?: string | null; + zip?: string | null; + city?: string | null; + country?: string | null; + /** + * Optional - wird sonst per Geocoding ermittelt + */ + lat?: number | null; + lng?: number | null; + }; + provider?: ('osm' | 'google' | 'mapbox' | 'leaflet') | null; + mapStyle?: ('default' | 'light' | 'dark' | 'satellite' | 'hybrid' | 'terrain') | null; + mapSettings?: { + height?: ('300' | '400' | '500' | '600' | 'fullscreen') | null; + /** + * 1 = Welt, 20 = Gebäude-Details + */ + zoom?: number | null; + /** + * Zoom so anpassen, dass alle Marker sichtbar sind + */ + autoFit?: boolean | null; + /** + * Optional - wird automatisch berechnet wenn leer + */ + centerLat?: number | null; + centerLng?: number | null; + }; + interaction?: { + scrollZoom?: boolean | null; + dragging?: boolean | null; + zoomControl?: boolean | null; + fullscreenControl?: boolean | null; + /** + * User-Standort ermitteln + */ + locateControl?: boolean | null; + }; + markerStyle?: { + type?: ('pin' | 'dot' | 'icon' | 'custom') | null; + /** + * HEX-Farbcode, z.B. #3B82F6 + */ + color?: string | null; + size?: ('sm' | 'md' | 'lg') | null; + /** + * Nahe beieinander liegende Marker gruppieren + */ + clustering?: boolean | null; + clusterRadius?: number | null; + }; + popup?: { + show?: boolean | null; + trigger?: ('click' | 'hover') | null; + showAddress?: boolean | null; + showDirectionsLink?: boolean | null; + showPhone?: boolean | null; + showOpeningHours?: boolean | null; + showDetailLink?: boolean | null; + }; + sidebar?: { + show?: boolean | null; + position?: ('left' | 'right' | 'bottom') | null; + width?: ('250' | '300' | '400') | null; + searchable?: boolean | null; + clickToCenter?: boolean | null; + }; + style?: { + rounded?: boolean | null; + shadow?: boolean | null; + border?: boolean | null; + padding?: ('none' | 'sm' | 'md' | 'lg') | null; + }; + fallback?: { + showStaticImage?: boolean | null; + staticImage?: (number | null) | Media; + noJsMessage?: string | null; + }; + id?: string | null; + blockName?: string | null; + blockType: 'map-block'; + } + | { + title?: string | null; + subtitle?: string | null; + sourceMode?: ('collection' | 'selected') | null; + filterMode?: ('upcoming' | 'past' | 'all' | 'featured' | 'type' | 'category') | null; + eventType?: + | ( + | 'event' + | 'workshop' + | 'seminar' + | 'webinar' + | 'conference' + | 'tradeshow' + | 'networking' + | 'course' + | 'talk' + ) + | null; + category?: string | null; + selectedEvents?: (number | Event)[] | null; + limit?: number | null; + layout?: ('cards' | 'list' | 'compact' | 'timeline' | 'calendar' | 'agenda') | null; + columns?: ('2' | '3' | '4') | null; + showImage?: boolean | null; + showExcerpt?: boolean | null; + showDate?: boolean | null; + showTime?: boolean | null; + showLocation?: boolean | null; + showPrice?: boolean | null; + showEventType?: boolean | null; + showRegistrationButton?: boolean | null; + registrationButtonText?: string | null; + calendarOptions?: { + defaultView?: ('month' | 'week' | 'day') | null; + showNavigation?: boolean | null; + showViewToggle?: boolean | null; + }; + groupBy?: ('none' | 'month' | 'type' | 'category') | null; + sortOrder?: ('asc' | 'desc') | null; + showAllLink?: boolean | null; + allEventsLink?: string | null; + allEventsText?: string | null; + emptyMessage?: string | null; + backgroundColor?: ('white' | 'light' | 'dark' | 'accent') | null; + cardStyle?: ('elevated' | 'bordered' | 'flat') | null; + id?: string | null; + blockName?: string | null; + blockType: 'events'; + } + | { + title?: string | null; + subtitle?: string | null; + description?: string | null; + pricingType?: ('one-time' | 'monthly' | 'yearly' | 'toggle' | 'custom') | null; + currency?: string | null; + showCurrencyBefore?: boolean | null; + toggleOptions?: { + monthlyLabel?: string | null; + yearlyLabel?: string | null; + /** + * z.B. "2 Monate gratis" + */ + yearlyDiscount?: string | null; + defaultToYearly?: boolean | null; + }; + plans?: + | { + /** + * z.B. "Basic", "Pro", "Enterprise" + */ + name: string; + /** + * z.B. "Für Einsteiger" + */ + subtitle?: string | null; + description?: string | null; + price?: number | null; + priceMonthly?: number | null; + priceYearly?: number | null; + /** + * z.B. "/Monat", "/Nutzer" + */ + priceSuffix?: string | null; + /** + * Für Rabatt-Darstellung + */ + originalPrice?: number | null; + /** + * z.B. "zzgl. MwSt.", "Bei jährlicher Zahlung" + */ + priceNote?: string | null; + /** + * z.B. "Auf Anfrage", "Individuell" + */ + customPriceText?: string | null; + features?: + | { + text: string; + included?: boolean | null; + highlight?: boolean | null; + tooltip?: string | null; + id?: string | null; + }[] + | null; + ctaText?: string | null; + ctaLink?: string | null; + ctaStyle?: ('primary' | 'secondary' | 'outline') | null; + isPopular?: boolean | null; + popularLabel?: string | null; + isRecommended?: boolean | null; + recommendedLabel?: string | null; + accentColor?: ('default' | 'primary' | 'secondary' | 'green' | 'blue' | 'purple') | null; + icon?: (number | null) | Media; + id?: string | null; + }[] + | null; + showComparison?: boolean | null; + comparisonFeatures?: + | { + category?: string | null; + feature: string; + tooltip?: string | null; + values?: + | { + planIndex?: number | null; + /** + * ✓, ✗, oder Text wie "10 GB", "Unbegrenzt" + */ + value?: string | null; + id?: string | null; + }[] + | null; + id?: string | null; + }[] + | null; + layout?: ('cards' | 'table' | 'compact') | null; + alignment?: ('left' | 'center' | 'right') | null; + highlightPopular?: boolean | null; + guarantee?: { + show?: boolean | null; + text?: string | null; + icon?: ('shield' | 'check' | 'star' | 'lock') | null; + }; + showFAQ?: boolean | null; + faqTitle?: string | null; + faqItems?: + | { + 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; + }; + id?: string | null; + }[] + | null; + backgroundColor?: ('white' | 'light' | 'dark' | 'gradient') | null; + cardStyle?: ('elevated' | 'bordered' | 'flat' | 'glass') | null; + id?: string | null; + blockName?: string | null; + blockType: 'pricing'; + } + | { + title?: string | null; + subtitle?: string | null; + tabs?: + | { + label: string; + icon?: + | ( + | 'none' + | 'info' + | 'star' + | 'heart' + | 'check' + | 'settings' + | 'user' + | 'document' + | 'image' + | 'video' + | 'code' + | 'chart' + | 'calendar' + | 'location' + | 'email' + | 'phone' + ) + | null; + /** + * Überschreibt das ausgewählte Icon + */ + customIcon?: (number | null) | Media; + /** + * z.B. "Neu", "3", "Beta" + */ + badge?: string | null; + contentType?: ('richtext' | 'image-text' | 'features' | 'code' | 'embed') | 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; + imgTxt?: { + img?: (number | null) | Media; + imgPos?: ('left' | 'right' | 'top') | null; + text?: { + 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; + }; + features?: + | { + title: string; + description?: string | null; + icon?: ('check' | 'star' | 'arrow' | 'dot' | 'number') | null; + id?: string | null; + }[] + | null; + code?: { + language?: + | ('javascript' | 'typescript' | 'html' | 'css' | 'json' | 'python' | 'bash' | 'sql') + | null; + code?: string | null; + showLineNumbers?: boolean | null; + }; + embed?: { + type?: ('youtube' | 'vimeo' | 'iframe') | null; + url?: string | null; + aspectRatio?: ('16:9' | '4:3' | '1:1') | null; + }; + id?: string | null; + }[] + | null; + tabStyle?: ('underline' | 'boxed' | 'pills' | 'buttons' | 'vertical') | null; + tabPosition?: ('top' | 'left' | 'right' | 'bottom') | null; + tabAlignment?: ('left' | 'center' | 'right' | 'stretch') | null; + /** + * 0 = erster Tab + */ + defaultTab?: number | null; + allowKeyboardNavigation?: boolean | null; + animated?: boolean | null; + /** + * Tab-Inhalte erst bei Aktivierung laden + */ + lazy?: boolean | null; + mobileStyle?: ('scroll' | 'dropdown' | 'accordion' | 'stacked') | null; + backgroundColor?: ('white' | 'light' | 'dark' | 'transparent') | null; + contentBackground?: ('white' | 'light' | 'transparent') | null; + showBorder?: boolean | null; + fullWidth?: boolean | null; + id?: string | null; + blockName?: string | null; + blockType: 'tabs'; + } + | { + title?: string | null; + subtitle?: string | null; + description?: string | null; + items?: + | { + title: string; + subtitle?: string | null; + icon?: + | ( + | 'none' + | 'info' + | 'question' + | 'star' + | 'check' + | 'warning' + | 'document' + | 'user' + | 'settings' + | 'code' + | 'lightbulb' + | 'lock' + ) + | null; + customIcon?: (number | null) | Media; + contentType?: ('richtext' | 'image-text' | 'list' | 'table' | 'code') | 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; + imgTxt?: { + img?: (number | null) | Media; + imgPos?: ('left' | 'right') | null; + text?: { + 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; + }; + listItems?: + | { + text: string; + icon?: ('check' | 'dot' | 'arrow' | 'star' | 'x') | null; + id?: string | null; + }[] + | null; + tableData?: { + headers?: + | { + text?: string | null; + id?: string | null; + }[] + | null; + rows?: + | { + cells?: + | { + text?: string | null; + id?: string | null; + }[] + | null; + id?: string | null; + }[] + | null; + }; + codeContent?: { + language?: ('javascript' | 'typescript' | 'html' | 'css' | 'json' | 'python' | 'bash') | null; + code?: string | null; + }; + /** + * z.B. "Neu", "Wichtig", "Pro" + */ + badge?: string | null; + badgeColor?: ('gray' | 'blue' | 'green' | 'yellow' | 'red' | 'purple') | null; + defaultOpen?: boolean | null; + disabled?: boolean | null; + id?: string | null; + }[] + | null; + behavior?: ('single' | 'multiple' | 'at-least-one') | null; + expandFirst?: boolean | null; + animated?: boolean | null; + style?: ('default' | 'bordered' | 'separated' | 'flush' | 'rounded') | null; + iconPosition?: ('left' | 'right') | null; + iconStyle?: ('chevron' | 'plus-minus' | 'arrow' | 'caret') | null; + layout?: ('full' | 'centered' | 'narrow' | 'two-column') | null; + titleSize?: ('small' | 'medium' | 'large') | null; + backgroundColor?: ('white' | 'light' | 'dark' | 'transparent') | null; + headerBackground?: ('white' | 'light' | 'transparent') | null; + /** + * Wenn aktiviert, wird FAQ Structured Data generiert + */ + enableSchemaOrg?: boolean | null; + id?: string | null; + blockName?: string | null; + blockType: 'accordion'; + } + | { + title?: string | null; + subtitle?: string | null; + description?: string | null; + comparisonType?: ('table' | 'cards' | 'before-after' | 'pros-cons' | 'feature-matrix') | null; + tbl?: { + columns?: + | { + name: string; + subtitle?: string | null; + image?: (number | null) | Media; + price?: string | null; + isHighlighted?: boolean | null; + /** + * z.B. "Empfohlen", "Bestseller" + */ + highlightLabel?: string | null; + ctaText?: string | null; + ctaLink?: string | null; + id?: string | null; + }[] + | null; + rows?: + | { + feature: string; + /** + * Für Gruppierung + */ + category?: string | null; + tooltip?: string | null; + values?: + | { + /** + * 0 = erste Spalte + */ + columnIndex?: number | null; + valueType?: ('text' | 'boolean' | 'partial' | 'na') | null; + textValue?: string | null; + booleanValue?: boolean | null; + /** + * z.B. "Eingeschränkt", "Mit Aufpreis" + */ + partialNote?: string | null; + id?: string | null; + }[] + | null; + id?: string | null; + }[] + | null; + }; + crd?: { + items?: + | { + title: string; + subtitle?: string | null; + image?: (number | null) | Media; + 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; + features?: + | { + text: string; + included?: boolean | null; + id?: string | null; + }[] + | null; + price?: string | null; + ctaText?: string | null; + ctaLink?: string | null; + isHighlighted?: boolean | null; + accentColor?: ('default' | 'primary' | 'secondary' | 'green' | 'blue') | null; + id?: string | null; + }[] + | null; + }; + beforeAfter?: { + beforeLabel?: string | null; + afterLabel?: string | null; + items?: + | { + title?: string | null; + beforeImage?: (number | null) | Media; + afterImage?: (number | null) | Media; + beforeText?: string | null; + afterText?: string | null; + id?: string | null; + }[] + | null; + displayStyle?: ('slider' | 'side-by-side' | 'stacked' | 'flip') | null; + }; + prosCons?: { + prosLabel?: string | null; + consLabel?: string | null; + items?: + | { + title?: string | null; + image?: (number | null) | Media; + pros?: + | { + text: string; + id?: string | null; + }[] + | null; + cons?: + | { + text: string; + id?: string | null; + }[] + | null; + verdict?: string | null; + rating?: number | null; + id?: string | null; + }[] + | null; + }; + stickyHeader?: boolean | null; + showCategories?: boolean | null; + collapsibleCategories?: boolean | null; + showRowDividers?: boolean | null; + highlightDifferences?: boolean | null; + mobileView?: ('scroll' | 'stacked' | 'accordion' | 'dropdown') | null; + symbols?: { + checkSymbol?: string | null; + crossSymbol?: string | null; + partialSymbol?: string | null; + }; + backgroundColor?: ('white' | 'light' | 'dark') | null; + tableStyle?: ('bordered' | 'striped' | 'minimal' | 'cards') | null; + checkColor?: ('green' | 'primary' | 'blue') | null; + crossColor?: ('red' | 'gray' | 'transparent') | null; + id?: string | null; + blockName?: string | null; + blockType: 'comparison'; + } )[] | null; seo?: { @@ -2165,6 +3273,1087 @@ export interface Tag { updatedAt: string; createdAt: string; } +/** + * Firmenstandorte und Niederlassungen + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "locations". + */ +export interface Location { + id: number; + tenant?: (number | null) | Tenant; + /** + * z.B. "Hauptsitz München", "Filiale Hamburg" + */ + name: string; + /** + * URL-freundlicher Identifier + */ + slug: string; + type?: ('headquarters' | 'office' | 'branch' | 'warehouse' | 'showroom' | 'studio' | 'practice' | 'workshop') | null; + /** + * Optionale Beschreibung des Standorts + */ + 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; + /** + * Foto des Gebäudes oder Standorts + */ + image?: (number | null) | Media; + address: { + street: string; + /** + * z.B. "Gebäude B, 3. Stock" + */ + additionalLine?: string | null; + zip: string; + city: string; + state?: string | null; + country?: string | null; + }; + /** + * Für Kartenanzeige + */ + geo?: { + /** + * z.B. 48.137154 + */ + lat?: number | null; + /** + * z.B. 11.576124 + */ + lng?: number | null; + zoom?: number | null; + }; + contact?: { + phone?: string | null; + fax?: string | null; + email?: string | null; + /** + * Falls abweichend von Hauptwebsite + */ + website?: string | null; + }; + hours?: { + /** + * z.B. "Mo-Fr: 9-18 Uhr, Sa: 10-14 Uhr" + */ + display?: string | null; + /** + * Detaillierte Öffnungszeiten pro Tag + */ + structured?: + | { + day: 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday'; + closed?: boolean | null; + /** + * z.B. "09:00" + */ + open?: string | null; + /** + * z.B. "18:00" + */ + close?: string | null; + break?: { + hasBreak?: boolean | null; + start?: string | null; + end?: string | null; + }; + id?: string | null; + }[] + | null; + /** + * z.B. "Termine nach Vereinbarung" + */ + note?: string | null; + }; + directions?: { + text?: { + 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; + parking?: string | null; + /** + * z.B. "U-Bahn U3 Haltestelle Münchner Freiheit" + */ + publicTransport?: string | null; + accessibility?: string | null; + }; + /** + * Welche Dienstleistungen werden hier angeboten? + */ + services?: (number | Service)[] | null; + /** + * Mitarbeiter an diesem Standort + */ + teamMembers?: (number | Team)[] | null; + /** + * Als primärer Standort markieren + */ + isMain?: boolean | null; + isActive?: boolean | null; + showInFooter?: boolean | null; + order?: number | null; + updatedAt: string; + createdAt: string; +} +/** + * Partner, Kunden, Referenzen und Zertifizierungen + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "partners". + */ +export interface Partner { + id: number; + tenant?: (number | null) | Tenant; + /** + * Firmen-/Partnername + */ + name: string; + slug: string; + type: + | 'partner' + | 'client' + | 'reference' + | 'sponsor' + | 'certification' + | 'membership' + | 'award' + | 'supplier' + | 'technology'; + /** + * Logo (empfohlen: SVG oder PNG mit transparentem Hintergrund) + */ + logo: number | Media; + /** + * Alternative Version für dunkle Hintergründe + */ + logoLight?: (number | null) | Media; + /** + * Kurze Beschreibung der Partnerschaft + */ + description?: string | null; + website?: string | null; + caseStudy?: { + quote?: string | null; + quotePerson?: string | null; + quoteRole?: string | null; + projectDescription?: { + 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; + results?: + | { + /** + * z.B. "+50%", "10.000+" + */ + metric: string; + /** + * z.B. "Umsatzsteigerung", "Neue Kunden" + */ + label: string; + id?: string | null; + }[] + | null; + }; + certification?: { + issuer?: string | null; + validFrom?: string | null; + validUntil?: string | null; + certNumber?: string | null; + document?: (number | null) | Media; + }; + /** + * z.B. "Technologie", "Finanzen", "Pflege" + */ + category?: string | null; + tags?: + | { + tag: string; + id?: string | null; + }[] + | null; + isFeatured?: boolean | null; + isActive?: boolean | null; + order?: number | null; + since?: string | null; + updatedAt: string; + createdAt: string; +} +/** + * Stellenanzeigen und Karriere + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "jobs". + */ +export interface Job { + id: number; + tenant?: (number | null) | Tenant; + /** + * z.B. "Pflegefachkraft (m/w/d)", "Senior Developer" + */ + title: string; + slug: string; + /** + * Interne Stellennummer + */ + reference?: string | null; + /** + * z.B. "Pflege", "IT", "Marketing" + */ + department?: string | null; + category?: + | ( + | 'care' + | 'medical' + | 'admin' + | 'it' + | 'marketing' + | 'sales' + | 'finance' + | 'hr' + | 'production' + | 'logistics' + | 'other' + ) + | null; + type: + | 'fulltime' + | 'parttime' + | 'minijob' + | 'working_student' + | 'internship' + | 'apprenticeship' + | 'dual_study' + | 'freelance' + | 'temporary'; + workModel?: ('onsite' | 'remote' | 'hybrid') | null; + experienceLevel?: ('entry' | 'experienced' | 'senior' | 'management') | null; + location?: { + locationRef?: (number | null) | Location; + /** + * Falls kein Standort aus Collection + */ + city?: string | null; + region?: string | null; + country?: string | null; + }; + /** + * Für Übersichten und SEO (max. 300 Zeichen) + */ + summary?: 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; + responsibilities?: { + 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; + requirements?: { + 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; + qualifications?: { + 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; + benefits?: { + 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 visuelle Darstellung mit Icons + */ + benefitsList?: + | { + benefit: string; + icon?: + | ( + | 'money' + | 'vacation' + | 'home' + | 'education' + | 'health' + | 'team' + | 'flexible' + | 'transport' + | 'food' + | 'childcare' + | 'fitness' + | 'parking' + ) + | null; + id?: string | null; + }[] + | null; + salary?: { + show?: boolean | null; + type?: ('yearly' | 'monthly' | 'hourly') | null; + min?: number | null; + max?: number | null; + currency?: string | null; + /** + * z.B. "je nach Qualifikation" + */ + note?: string | null; + }; + application?: { + method?: ('email' | 'form' | 'external' | 'mail') | null; + email?: string | null; + formId?: (number | null) | Form; + externalUrl?: string | null; + contact?: (number | null) | Team; + deadline?: string | null; + }; + /** + * Bild für die Stellenanzeige + */ + image?: (number | null) | Media; + status: 'draft' | 'published' | 'filled' | 'archived'; + publishedAt?: string | null; + isFeatured?: boolean | null; + isUrgent?: boolean | null; + seo?: { + metaTitle?: string | null; + metaDescription?: string | 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; +} +/** + * 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; +} +/** + * 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; +} +/** + * Downloadbare Dateien und Dokumente + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "downloads". + */ +export interface Download { + id: number; + tenant?: (number | null) | Tenant; + title: string; + slug: string; + description?: string | null; + file: number | Media; + /** + * Wird automatisch erkannt, kann überschrieben werden + */ + fileType?: ('pdf' | 'doc' | 'xls' | 'ppt' | 'image' | 'video' | 'audio' | 'archive' | 'other') | null; + /** + * z.B. "2.5 MB" - wird automatisch berechnet + */ + fileSize?: string | null; + category?: + | ( + | 'brochure' + | 'flyer' + | 'catalog' + | 'pricelist' + | 'form' + | 'manual' + | 'datasheet' + | 'certificate' + | 'press' + | 'whitepaper' + | 'presentation' + | 'legal' + | 'other' + ) + | null; + tags?: + | { + tag: string; + id?: string | null; + }[] + | null; + /** + * Optionales Thumbnail (sonst wird Standard-Icon verwendet) + */ + thumbnail?: (number | null) | Media; + relatedServices?: (number | Service)[] | null; + relatedProducts?: (number | Product)[] | null; + access?: { + requireLogin?: boolean | null; + /** + * User müssen Kontaktdaten eingeben + */ + requireForm?: boolean | null; + formFields?: ('name' | 'email' | 'company' | 'phone')[] | null; + }; + downloadCount?: number | null; + /** + * z.B. "2024-01", "v2.0" + */ + version?: string | null; + lastUpdated?: string | null; + isActive?: boolean | null; + isFeatured?: boolean | null; + order?: number | null; + updatedAt: string; + createdAt: string; +} +/** + * Veranstaltungen und Events + * + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "events". + */ +export interface Event { + id: number; + tenant?: (number | null) | Tenant; + title: string; + /** + * URL-Pfad für das Event + */ + slug: string; + 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 Übersichtsseiten und SEO + */ + excerpt?: string | null; + eventType: + | 'event' + | 'workshop' + | 'seminar' + | 'webinar' + | 'conference' + | 'tradeshow' + | 'networking' + | 'course' + | 'talk' + | 'other'; + /** + * Freies Textfeld für Kategorisierung + */ + category?: string | null; + format: 'onsite' | 'online' | 'hybrid'; + startDate: string; + /** + * Leer lassen für eintägige Events + */ + endDate?: string | null; + isAllDay?: boolean | null; + /** + * z.B. Europe/Berlin, America/New_York + */ + timezone?: string | null; + isRecurring?: boolean | null; + recurrence?: { + frequency?: ('daily' | 'weekly' | 'monthly' | 'yearly') | null; + /** + * Alle X Tage/Wochen/Monate/Jahre + */ + interval?: number | null; + endRecurrence?: string | null; + /** + * z.B. "Jeden ersten Montag im Monat" + */ + description?: string | null; + }; + location?: { + /** + * Aus bestehenden Standorten wählen + */ + locationRef?: (number | null) | Location; + customLocation?: boolean | null; + venueName?: string | null; + street?: string | null; + zip?: string | null; + city?: string | null; + country?: string | null; + room?: string | null; + directions?: string | null; + }; + online?: { + platform?: ('zoom' | 'teams' | 'google-meet' | 'webex' | 'gotowebinar' | 'livestream' | 'other') | null; + /** + * Wird nur angemeldeten Teilnehmern angezeigt + */ + accessLink?: string | null; + /** + * z.B. Meeting-ID, Passwort + */ + accessInfo?: string | null; + }; + image?: (number | null) | Media; + gallery?: + | { + image: number | Media; + caption?: string | null; + id?: string | null; + }[] + | null; + registration?: { + required?: boolean | null; + method?: ('form' | 'email' | 'external' | 'phone') | null; + formId?: (number | null) | Form; + email?: string | null; + externalUrl?: string | null; + phone?: string | null; + deadline?: string | null; + /** + * 0 = unbegrenzt + */ + maxParticipants?: number | null; + currentParticipants?: number | null; + waitlistEnabled?: boolean | null; + }; + pricing?: { + isFree?: boolean | null; + prices?: + | { + /** + * z.B. "Standard", "Frühbucher", "Ermäßigt" + */ + name: string; + price: number; + currency?: string | null; + description?: string | null; + /** + * Für Frühbucher-Preise + */ + validUntil?: string | null; + id?: string | null; + }[] + | null; + /** + * z.B. "zzgl. MwSt.", "inkl. Verpflegung" + */ + priceNote?: string | null; + }; + speakers?: + | { + teamMember?: (number | null) | Team; + isExternal?: boolean | null; + name?: string | null; + title?: string | null; + company?: string | null; + photo?: (number | null) | Media; + bio?: string | null; + /** + * z.B. "Hauptredner", "Workshop-Leiter" + */ + role?: string | null; + id?: string | null; + }[] + | null; + agenda?: + | { + /** + * z.B. "09:00 - 10:30" + */ + time?: string | null; + title: string; + description?: string | null; + speaker?: string | null; + type?: ('talk' | 'workshop' | 'break' | 'networking' | 'panel' | 'qa') | null; + id?: string | null; + }[] + | null; + contact?: { + teamMember?: (number | null) | Team; + name?: string | null; + email?: string | null; + phone?: string | null; + }; + relatedServices?: (number | Service)[] | null; + relatedEvents?: (number | Event)[] | null; + seo?: { + metaTitle?: string | null; + metaDescription?: string | null; + ogImage?: (number | null) | Media; + }; + status: 'draft' | 'published' | 'soldout' | 'cancelled' | 'postponed' | 'past'; + isFeatured?: boolean | null; + publishedAt?: string | null; + updatedAt: string; + createdAt: string; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "social-links". @@ -2361,226 +4550,6 @@ export interface Portfolio { 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. * @@ -3335,167 +5304,6 @@ export interface AuditLog { 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 * @@ -3641,6 +5449,26 @@ export interface PayloadLockedDocument { relationTo: 'authors'; value: number | Author; } | null) + | ({ + relationTo: 'locations'; + value: number | Location; + } | null) + | ({ + relationTo: 'partners'; + value: number | Partner; + } | null) + | ({ + relationTo: 'jobs'; + value: number | Job; + } | null) + | ({ + relationTo: 'downloads'; + value: number | Download; + } | null) + | ({ + relationTo: 'events'; + value: number | Event; + } | null) | ({ relationTo: 'cookie-configurations'; value: number | CookieConfiguration; @@ -4792,6 +6620,828 @@ export interface PagesSelect { id?: T; blockName?: T; }; + 'locations-block'?: + | T + | { + title?: T; + subtitle?: T; + source?: T; + locationType?: T; + selectedLocations?: T; + layout?: T; + mapPosition?: T; + columns?: T; + map?: + | T + | { + provider?: T; + style?: T; + height?: T; + defaultZoom?: T; + fitBounds?: T; + markerStyle?: T; + markerColor?: T; + clustering?: T; + controls?: + | T + | { + zoom?: T; + fullscreen?: T; + scrollZoom?: T; + dragging?: T; + }; + }; + show?: + | T + | { + image?: T; + type?: T; + address?: T; + phone?: T; + email?: T; + hours?: T; + directions?: T; + services?: T; + team?: T; + }; + actions?: + | T + | { + showDirectionsLink?: T; + showCallButton?: T; + showEmailButton?: T; + showDetailLink?: T; + detailBasePath?: T; + }; + style?: + | T + | { + bg?: T; + cardStyle?: T; + gap?: T; + }; + id?: T; + blockName?: T; + }; + 'logo-grid-block'?: + | T + | { + title?: T; + subtitle?: T; + source?: T; + partnerType?: T; + selectedPartners?: T; + featuredOnly?: T; + limit?: T; + logos?: + | T + | { + logo?: T; + name?: T; + link?: T; + id?: T; + }; + layout?: T; + columns?: T; + slider?: + | T + | { + perView?: T; + autoplay?: T; + speed?: T; + pauseOnHover?: T; + showArrows?: T; + showDots?: T; + }; + logoStyle?: + | T + | { + size?: T; + maxHeight?: T; + grayscale?: T; + colorOnHover?: T; + opacity?: T; + hoverEffect?: T; + }; + behavior?: + | T + | { + linkToWebsite?: T; + openInNewTab?: T; + showTooltip?: T; + showName?: T; + }; + style?: + | T + | { + bg?: T; + logoBg?: T; + logoPadding?: T; + gap?: T; + alignment?: T; + divider?: T; + }; + showCTA?: T; + ctaText?: T; + ctaLink?: T; + id?: T; + blockName?: T; + }; + 'stats-block'?: + | T + | { + title?: T; + subtitle?: T; + stats?: + | T + | { + value?: T; + numericValue?: T; + prefix?: T; + suffix?: T; + label?: T; + description?: T; + icon?: T; + color?: T; + id?: T; + }; + layout?: T; + columns?: T; + alignment?: T; + animation?: + | T + | { + countUp?: T; + duration?: T; + trigger?: T; + stagger?: T; + }; + style?: + | T + | { + bg?: T; + bgImage?: T; + bgOverlay?: T; + textColor?: T; + valueSize?: T; + valueWeight?: T; + showIcon?: T; + iconPosition?: T; + dividers?: T; + cardBorder?: T; + cardShadow?: T; + gap?: T; + padding?: T; + }; + id?: T; + blockName?: T; + }; + 'jobs-block'?: + | T + | { + title?: T; + subtitle?: T; + introduction?: T; + source?: T; + category?: T; + department?: T; + locationFilter?: T; + selectedJobs?: T; + limit?: T; + filters?: + | T + | { + showSearch?: T; + showCategoryFilter?: T; + showTypeFilter?: T; + showLocationFilter?: T; + showWorkModelFilter?: T; + filterLayout?: T; + }; + layout?: T; + columns?: T; + show?: + | T + | { + image?: T; + department?: T; + type?: T; + location?: T; + workModel?: T; + salary?: T; + summary?: T; + deadline?: T; + publishDate?: T; + badges?: T; + }; + badges?: + | T + | { + newDays?: T; + showUrgent?: T; + showFeatured?: T; + }; + pagination?: + | T + | { + type?: T; + perPage?: T; + }; + style?: + | T + | { + bg?: T; + cardStyle?: T; + hoverEffect?: T; + gap?: T; + }; + emptyState?: + | T + | { + title?: T; + message?: T; + showInitiativeLink?: T; + initiativeText?: T; + initiativeUrl?: T; + }; + showAllJobsLink?: T; + allJobsText?: T; + allJobsUrl?: T; + id?: T; + blockName?: T; + }; + 'downloads-block'?: + | T + | { + title?: T; + subtitle?: T; + introduction?: T; + source?: T; + category?: T; + filterTags?: T; + relatedService?: T; + relatedProduct?: T; + selectedDownloads?: T; + limit?: T; + filters?: + | T + | { + showSearch?: T; + showCategoryFilter?: T; + showFileTypeFilter?: T; + filterLayout?: T; + }; + layout?: T; + columns?: T; + show?: + | T + | { + thumbnail?: T; + description?: T; + fileSize?: T; + fileType?: T; + category?: T; + downloadCount?: T; + version?: T; + lastUpdated?: T; + }; + downloadBehavior?: + | T + | { + directDownload?: T; + trackDownloads?: T; + openInNewTab?: T; + }; + fileIcons?: + | T + | { + showFileTypeIcon?: T; + iconStyle?: T; + }; + sortBy?: T; + groupBy?: T; + pagination?: + | T + | { + type?: T; + perPage?: T; + }; + style?: + | T + | { + bg?: T; + cardStyle?: T; + hoverEffect?: T; + gap?: T; + }; + emptyState?: + | T + | { + title?: T; + message?: T; + }; + showAllDownloadsLink?: T; + allDownloadsText?: T; + allDownloadsUrl?: T; + id?: T; + blockName?: T; + }; + 'map-block'?: + | T + | { + title?: T; + subtitle?: T; + source?: T; + locationType?: T; + selectedLocations?: T; + markers?: + | T + | { + name?: T; + address?: T; + lat?: T; + lng?: T; + markerType?: T; + customIcon?: T; + popupContent?: T; + link?: T; + id?: T; + }; + singleAddress?: + | T + | { + name?: T; + street?: T; + zip?: T; + city?: T; + country?: T; + lat?: T; + lng?: T; + }; + provider?: T; + mapStyle?: T; + mapSettings?: + | T + | { + height?: T; + zoom?: T; + autoFit?: T; + centerLat?: T; + centerLng?: T; + }; + interaction?: + | T + | { + scrollZoom?: T; + dragging?: T; + zoomControl?: T; + fullscreenControl?: T; + locateControl?: T; + }; + markerStyle?: + | T + | { + type?: T; + color?: T; + size?: T; + clustering?: T; + clusterRadius?: T; + }; + popup?: + | T + | { + show?: T; + trigger?: T; + showAddress?: T; + showDirectionsLink?: T; + showPhone?: T; + showOpeningHours?: T; + showDetailLink?: T; + }; + sidebar?: + | T + | { + show?: T; + position?: T; + width?: T; + searchable?: T; + clickToCenter?: T; + }; + style?: + | T + | { + rounded?: T; + shadow?: T; + border?: T; + padding?: T; + }; + fallback?: + | T + | { + showStaticImage?: T; + staticImage?: T; + noJsMessage?: T; + }; + id?: T; + blockName?: T; + }; + events?: + | T + | { + title?: T; + subtitle?: T; + sourceMode?: T; + filterMode?: T; + eventType?: T; + category?: T; + selectedEvents?: T; + limit?: T; + layout?: T; + columns?: T; + showImage?: T; + showExcerpt?: T; + showDate?: T; + showTime?: T; + showLocation?: T; + showPrice?: T; + showEventType?: T; + showRegistrationButton?: T; + registrationButtonText?: T; + calendarOptions?: + | T + | { + defaultView?: T; + showNavigation?: T; + showViewToggle?: T; + }; + groupBy?: T; + sortOrder?: T; + showAllLink?: T; + allEventsLink?: T; + allEventsText?: T; + emptyMessage?: T; + backgroundColor?: T; + cardStyle?: T; + id?: T; + blockName?: T; + }; + pricing?: + | T + | { + title?: T; + subtitle?: T; + description?: T; + pricingType?: T; + currency?: T; + showCurrencyBefore?: T; + toggleOptions?: + | T + | { + monthlyLabel?: T; + yearlyLabel?: T; + yearlyDiscount?: T; + defaultToYearly?: T; + }; + plans?: + | T + | { + name?: T; + subtitle?: T; + description?: T; + price?: T; + priceMonthly?: T; + priceYearly?: T; + priceSuffix?: T; + originalPrice?: T; + priceNote?: T; + customPriceText?: T; + features?: + | T + | { + text?: T; + included?: T; + highlight?: T; + tooltip?: T; + id?: T; + }; + ctaText?: T; + ctaLink?: T; + ctaStyle?: T; + isPopular?: T; + popularLabel?: T; + isRecommended?: T; + recommendedLabel?: T; + accentColor?: T; + icon?: T; + id?: T; + }; + showComparison?: T; + comparisonFeatures?: + | T + | { + category?: T; + feature?: T; + tooltip?: T; + values?: + | T + | { + planIndex?: T; + value?: T; + id?: T; + }; + id?: T; + }; + layout?: T; + alignment?: T; + highlightPopular?: T; + guarantee?: + | T + | { + show?: T; + text?: T; + icon?: T; + }; + showFAQ?: T; + faqTitle?: T; + faqItems?: + | T + | { + question?: T; + answer?: T; + id?: T; + }; + backgroundColor?: T; + cardStyle?: T; + id?: T; + blockName?: T; + }; + tabs?: + | T + | { + title?: T; + subtitle?: T; + tabs?: + | T + | { + label?: T; + icon?: T; + customIcon?: T; + badge?: T; + contentType?: T; + content?: T; + imgTxt?: + | T + | { + img?: T; + imgPos?: T; + text?: T; + }; + features?: + | T + | { + title?: T; + description?: T; + icon?: T; + id?: T; + }; + code?: + | T + | { + language?: T; + code?: T; + showLineNumbers?: T; + }; + embed?: + | T + | { + type?: T; + url?: T; + aspectRatio?: T; + }; + id?: T; + }; + tabStyle?: T; + tabPosition?: T; + tabAlignment?: T; + defaultTab?: T; + allowKeyboardNavigation?: T; + animated?: T; + lazy?: T; + mobileStyle?: T; + backgroundColor?: T; + contentBackground?: T; + showBorder?: T; + fullWidth?: T; + id?: T; + blockName?: T; + }; + accordion?: + | T + | { + title?: T; + subtitle?: T; + description?: T; + items?: + | T + | { + title?: T; + subtitle?: T; + icon?: T; + customIcon?: T; + contentType?: T; + content?: T; + imgTxt?: + | T + | { + img?: T; + imgPos?: T; + text?: T; + }; + listItems?: + | T + | { + text?: T; + icon?: T; + id?: T; + }; + tableData?: + | T + | { + headers?: + | T + | { + text?: T; + id?: T; + }; + rows?: + | T + | { + cells?: + | T + | { + text?: T; + id?: T; + }; + id?: T; + }; + }; + codeContent?: + | T + | { + language?: T; + code?: T; + }; + badge?: T; + badgeColor?: T; + defaultOpen?: T; + disabled?: T; + id?: T; + }; + behavior?: T; + expandFirst?: T; + animated?: T; + style?: T; + iconPosition?: T; + iconStyle?: T; + layout?: T; + titleSize?: T; + backgroundColor?: T; + headerBackground?: T; + enableSchemaOrg?: T; + id?: T; + blockName?: T; + }; + comparison?: + | T + | { + title?: T; + subtitle?: T; + description?: T; + comparisonType?: T; + tbl?: + | T + | { + columns?: + | T + | { + name?: T; + subtitle?: T; + image?: T; + price?: T; + isHighlighted?: T; + highlightLabel?: T; + ctaText?: T; + ctaLink?: T; + id?: T; + }; + rows?: + | T + | { + feature?: T; + category?: T; + tooltip?: T; + values?: + | T + | { + columnIndex?: T; + valueType?: T; + textValue?: T; + booleanValue?: T; + partialNote?: T; + id?: T; + }; + id?: T; + }; + }; + crd?: + | T + | { + items?: + | T + | { + title?: T; + subtitle?: T; + image?: T; + description?: T; + features?: + | T + | { + text?: T; + included?: T; + id?: T; + }; + price?: T; + ctaText?: T; + ctaLink?: T; + isHighlighted?: T; + accentColor?: T; + id?: T; + }; + }; + beforeAfter?: + | T + | { + beforeLabel?: T; + afterLabel?: T; + items?: + | T + | { + title?: T; + beforeImage?: T; + afterImage?: T; + beforeText?: T; + afterText?: T; + id?: T; + }; + displayStyle?: T; + }; + prosCons?: + | T + | { + prosLabel?: T; + consLabel?: T; + items?: + | T + | { + title?: T; + image?: T; + pros?: + | T + | { + text?: T; + id?: T; + }; + cons?: + | T + | { + text?: T; + id?: T; + }; + verdict?: T; + rating?: T; + id?: T; + }; + }; + stickyHeader?: T; + showCategories?: T; + collapsibleCategories?: T; + showRowDividers?: T; + highlightDifferences?: T; + mobileView?: T; + symbols?: + | T + | { + checkSymbol?: T; + crossSymbol?: T; + partialSymbol?: T; + }; + backgroundColor?: T; + tableStyle?: T; + checkColor?: T; + crossColor?: T; + id?: T; + blockName?: T; + }; }; seo?: | T @@ -5476,6 +8126,370 @@ export interface AuthorsSelect { updatedAt?: T; createdAt?: T; } +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "locations_select". + */ +export interface LocationsSelect { + tenant?: T; + name?: T; + slug?: T; + type?: T; + description?: T; + image?: T; + address?: + | T + | { + street?: T; + additionalLine?: T; + zip?: T; + city?: T; + state?: T; + country?: T; + }; + geo?: + | T + | { + lat?: T; + lng?: T; + zoom?: T; + }; + contact?: + | T + | { + phone?: T; + fax?: T; + email?: T; + website?: T; + }; + hours?: + | T + | { + display?: T; + structured?: + | T + | { + day?: T; + closed?: T; + open?: T; + close?: T; + break?: + | T + | { + hasBreak?: T; + start?: T; + end?: T; + }; + id?: T; + }; + note?: T; + }; + directions?: + | T + | { + text?: T; + parking?: T; + publicTransport?: T; + accessibility?: T; + }; + services?: T; + teamMembers?: T; + isMain?: T; + isActive?: T; + showInFooter?: T; + order?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "partners_select". + */ +export interface PartnersSelect { + tenant?: T; + name?: T; + slug?: T; + type?: T; + logo?: T; + logoLight?: T; + description?: T; + website?: T; + caseStudy?: + | T + | { + quote?: T; + quotePerson?: T; + quoteRole?: T; + projectDescription?: T; + results?: + | T + | { + metric?: T; + label?: T; + id?: T; + }; + }; + certification?: + | T + | { + issuer?: T; + validFrom?: T; + validUntil?: T; + certNumber?: T; + document?: T; + }; + category?: T; + tags?: + | T + | { + tag?: T; + id?: T; + }; + isFeatured?: T; + isActive?: T; + order?: T; + since?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "jobs_select". + */ +export interface JobsSelect { + tenant?: T; + title?: T; + slug?: T; + reference?: T; + department?: T; + category?: T; + type?: T; + workModel?: T; + experienceLevel?: T; + location?: + | T + | { + locationRef?: T; + city?: T; + region?: T; + country?: T; + }; + summary?: T; + description?: T; + responsibilities?: T; + requirements?: T; + qualifications?: T; + benefits?: T; + benefitsList?: + | T + | { + benefit?: T; + icon?: T; + id?: T; + }; + salary?: + | T + | { + show?: T; + type?: T; + min?: T; + max?: T; + currency?: T; + note?: T; + }; + application?: + | T + | { + method?: T; + email?: T; + formId?: T; + externalUrl?: T; + contact?: T; + deadline?: T; + }; + image?: T; + status?: T; + publishedAt?: T; + isFeatured?: T; + isUrgent?: T; + seo?: + | T + | { + metaTitle?: T; + metaDescription?: T; + }; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "downloads_select". + */ +export interface DownloadsSelect { + tenant?: T; + title?: T; + slug?: T; + description?: T; + file?: T; + fileType?: T; + fileSize?: T; + category?: T; + tags?: + | T + | { + tag?: T; + id?: T; + }; + thumbnail?: T; + relatedServices?: T; + relatedProducts?: T; + access?: + | T + | { + requireLogin?: T; + requireForm?: T; + formFields?: T; + }; + downloadCount?: T; + version?: T; + lastUpdated?: T; + isActive?: T; + isFeatured?: T; + order?: T; + updatedAt?: T; + createdAt?: T; +} +/** + * This interface was referenced by `Config`'s JSON-Schema + * via the `definition` "events_select". + */ +export interface EventsSelect { + tenant?: T; + title?: T; + slug?: T; + subtitle?: T; + description?: T; + excerpt?: T; + eventType?: T; + category?: T; + format?: T; + startDate?: T; + endDate?: T; + isAllDay?: T; + timezone?: T; + isRecurring?: T; + recurrence?: + | T + | { + frequency?: T; + interval?: T; + endRecurrence?: T; + description?: T; + }; + location?: + | T + | { + locationRef?: T; + customLocation?: T; + venueName?: T; + street?: T; + zip?: T; + city?: T; + country?: T; + room?: T; + directions?: T; + }; + online?: + | T + | { + platform?: T; + accessLink?: T; + accessInfo?: T; + }; + image?: T; + gallery?: + | T + | { + image?: T; + caption?: T; + id?: T; + }; + registration?: + | T + | { + required?: T; + method?: T; + formId?: T; + email?: T; + externalUrl?: T; + phone?: T; + deadline?: T; + maxParticipants?: T; + currentParticipants?: T; + waitlistEnabled?: T; + }; + pricing?: + | T + | { + isFree?: T; + prices?: + | T + | { + name?: T; + price?: T; + currency?: T; + description?: T; + validUntil?: T; + id?: T; + }; + priceNote?: T; + }; + speakers?: + | T + | { + teamMember?: T; + isExternal?: T; + name?: T; + title?: T; + company?: T; + photo?: T; + bio?: T; + role?: T; + id?: T; + }; + agenda?: + | T + | { + time?: T; + title?: T; + description?: T; + speaker?: T; + type?: T; + id?: T; + }; + contact?: + | T + | { + teamMember?: T; + name?: T; + email?: T; + phone?: T; + }; + relatedServices?: T; + relatedEvents?: T; + seo?: + | T + | { + metaTitle?: T; + metaDescription?: T; + ogImage?: T; + }; + status?: T; + isFeatured?: T; + publishedAt?: T; + updatedAt?: T; + createdAt?: T; +} /** * This interface was referenced by `Config`'s JSON-Schema * via the `definition` "cookie-configurations_select". diff --git a/src/payload.config.ts b/src/payload.config.ts index 172f9d8..fa47863 100644 --- a/src/payload.config.ts +++ b/src/payload.config.ts @@ -48,6 +48,13 @@ import { Workflows } from './collections/Workflows' import { Tags } from './collections/Tags' import { Authors } from './collections/Authors' +// New Feature Collections +import { Locations } from './collections/Locations' +import { Partners } from './collections/Partners' +import { Jobs } from './collections/Jobs' +import { Downloads } from './collections/Downloads' +import { Events } from './collections/Events' + // Consent Management Collections import { CookieConfigurations } from './collections/CookieConfigurations' import { CookieInventory } from './collections/CookieInventory' @@ -168,6 +175,12 @@ export default buildConfig({ // Blogging Tags, Authors, + // New Feature Collections + Locations, + Partners, + Jobs, + Downloads, + Events, // Consent Management CookieConfigurations, CookieInventory, @@ -187,9 +200,8 @@ export default buildConfig({ pool: { connectionString: env.DATABASE_URI, }, - // Deaktiviere automatisches Schema-Push - // Änderungen sollten nur über Migrationen erfolgen - push: false, + // Temporär aktiviert für Events Collection + push: true, }), // Sharp für Bildoptimierung sharp, @@ -222,6 +234,12 @@ export default buildConfig({ // Blogging Collections tags: {}, authors: {}, + // New Feature Collections + locations: {}, + partners: {}, + jobs: {}, + downloads: {}, + events: {}, // Consent Management Collections - customTenantField: true weil sie bereits ein tenant-Feld haben 'cookie-configurations': { customTenantField: true }, 'cookie-inventory': { customTenantField: true },