feat: payload cms
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 8s
Build & Deploy / 🧪 QA (push) Failing after 1m13s
Build & Deploy / 🏗️ Build (push) Failing after 5m53s
Build & Deploy / 🚀 Deploy (push) Has been skipped
Build & Deploy / 🧪 Smoke Test (push) Has been skipped
Build & Deploy / ⚡ Lighthouse (push) Has been skipped
Build & Deploy / ♿ WCAG (push) Has been skipped
Build & Deploy / 🛡️ Quality Gates (push) Has been skipped
Build & Deploy / 🔔 Notify (push) Successful in 4s

This commit is contained in:
2026-02-24 02:28:48 +01:00
parent 41cfe19cbf
commit a5d77fc69b
89 changed files with 25282 additions and 1903 deletions

View File

@@ -0,0 +1,25 @@
import { Block } from 'payload';
export const AnimatedImage: Block = {
slug: 'animatedImage',
fields: [
{
name: 'src',
type: 'text',
required: true,
},
{
name: 'alt',
type: 'text',
required: true,
},
{
name: 'width',
type: 'number',
},
{
name: 'height',
type: 'number',
},
],
};

View File

@@ -0,0 +1,20 @@
import { Block } from 'payload';
import { lexicalEditor } from '@payloadcms/richtext-lexical';
export const Callout: Block = {
slug: 'callout',
fields: [
{
name: 'type',
type: 'select',
options: ['info', 'warning', 'important', 'tip', 'caution'],
defaultValue: 'info',
},
{
name: 'content',
type: 'richText',
editor: lexicalEditor({}),
required: true,
},
],
};

View File

@@ -0,0 +1,34 @@
import { Block } from 'payload';
import { lexicalEditor } from '@payloadcms/richtext-lexical';
export const ChatBubble: Block = {
slug: 'chatBubble',
fields: [
{
name: 'author',
type: 'text',
defaultValue: 'KLZ Team',
},
{
name: 'avatar',
type: 'text',
},
{
name: 'role',
type: 'text',
defaultValue: 'Assistant',
},
{
name: 'align',
type: 'select',
options: ['left', 'right'],
defaultValue: 'left',
},
{
name: 'content',
type: 'richText',
editor: lexicalEditor({}),
required: true,
},
],
};

View File

@@ -0,0 +1,47 @@
import { Block } from 'payload';
export const ComparisonGrid: Block = {
slug: 'comparisonGrid',
fields: [
{
name: 'title',
label: 'Main Heading',
type: 'text',
required: true,
},
{
name: 'leftLabel',
type: 'text',
required: true,
},
{
name: 'rightLabel',
type: 'text',
required: true,
},
{
name: 'items',
type: 'array',
required: true,
minRows: 1,
fields: [
{
name: 'label',
label: 'Row Label',
type: 'text',
required: true,
},
{
name: 'leftValue',
type: 'text',
required: true,
},
{
name: 'rightValue',
type: 'text',
required: true,
},
],
},
],
};

View File

@@ -0,0 +1,20 @@
import { Block } from 'payload';
import { lexicalEditor } from '@payloadcms/richtext-lexical';
export const HighlightBox: Block = {
slug: 'highlightBox',
fields: [
{
name: 'type',
type: 'select',
options: ['info', 'warning', 'success', 'error', 'neutral'],
defaultValue: 'neutral',
},
{
name: 'content',
type: 'richText',
editor: lexicalEditor({}),
required: true,
},
],
};

View File

@@ -0,0 +1,12 @@
import { Block } from 'payload';
export const PowerCTA: Block = {
slug: 'powerCTA',
fields: [
{
name: 'locale',
type: 'text',
required: true,
},
],
};

View File

@@ -0,0 +1,96 @@
import { Block } from 'payload';
export const ProductTabs: Block = {
slug: 'productTabs',
interfaceName: 'ProductTabsBlock',
fields: [
{
name: 'technicalItems',
type: 'array',
fields: [
{
name: 'label',
type: 'text',
required: true,
},
{
name: 'value',
type: 'text',
required: true,
},
{
name: 'unit',
type: 'text',
},
],
},
{
name: 'voltageTables',
type: 'array',
fields: [
{
name: 'voltageLabel',
type: 'text',
required: true,
},
{
name: 'metaItems',
type: 'array',
fields: [
{
name: 'label',
type: 'text',
required: true,
},
{
name: 'value',
type: 'text',
required: true,
},
{
name: 'unit',
type: 'text',
},
],
},
{
name: 'columns',
type: 'array',
fields: [
{
name: 'key',
type: 'text',
required: true,
},
{
name: 'label',
type: 'text',
required: true,
},
],
},
{
name: 'rows',
type: 'array',
fields: [
{
name: 'configuration',
type: 'text',
required: true,
},
{
name: 'cells',
type: 'array',
fields: [
{
name: 'value',
type: 'text',
},
],
},
],
},
],
},
],
};

View File

@@ -0,0 +1,23 @@
import { Block } from 'payload';
export const SplitHeading: Block = {
slug: 'splitHeading',
interfaceName: 'SplitHeadingBlock',
fields: [
{
name: 'title',
type: 'text',
required: true,
},
{
name: 'id',
type: 'text',
},
{
name: 'level',
type: 'select',
options: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
defaultValue: 'h2',
},
],
};

View File

@@ -0,0 +1,25 @@
import { Block } from 'payload';
export const Stats: Block = {
slug: 'stats',
interfaceName: 'StatsBlock',
fields: [
{
name: 'stats',
type: 'array',
required: true,
fields: [
{
name: 'value',
type: 'text',
required: true,
},
{
name: 'label',
type: 'text',
required: true,
},
],
},
],
};

View File

@@ -0,0 +1,31 @@
import { Block } from 'payload';
export const StickyNarrative: Block = {
slug: 'stickyNarrative',
fields: [
{
name: 'title',
label: 'Main Heading',
type: 'text',
required: true,
},
{
name: 'items',
type: 'array',
required: true,
minRows: 1,
fields: [
{
name: 'title',
type: 'text',
required: true,
},
{
name: 'content',
type: 'textarea',
required: true,
},
],
},
],
};

View File

@@ -0,0 +1,30 @@
import { Block } from 'payload';
export const TechnicalGrid: Block = {
slug: 'technicalGrid',
fields: [
{
name: 'title',
label: 'Main Heading',
type: 'text',
},
{
name: 'items',
type: 'array',
required: true,
minRows: 1,
fields: [
{
name: 'label',
type: 'text',
required: true,
},
{
name: 'value',
type: 'text',
required: true,
},
],
},
],
};

View File

@@ -0,0 +1,30 @@
import { Block } from 'payload';
export const VisualLinkPreview: Block = {
slug: 'visualLinkPreview',
fields: [
{
name: 'url',
type: 'text',
required: true,
},
{
name: 'title',
type: 'text',
required: true,
},
{
name: 'summary',
type: 'textarea',
required: true,
},
{
name: 'image',
type: 'text',
admin: {
description: 'Legacy HTTP string from the old hardcoded images.',
},
required: false,
},
],
};

View File

@@ -0,0 +1,27 @@
import { AnimatedImage } from './AnimatedImage';
import { Callout } from './Callout';
import { ChatBubble } from './ChatBubble';
import { ComparisonGrid } from './ComparisonGrid';
import { HighlightBox } from './HighlightBox';
import { PowerCTA } from './PowerCTA';
import { ProductTabs } from './ProductTabs';
import { SplitHeading } from './SplitHeading';
import { Stats } from './Stats';
import { StickyNarrative } from './StickyNarrative';
import { TechnicalGrid } from './TechnicalGrid';
import { VisualLinkPreview } from './VisualLinkPreview';
export const payloadBlocks = [
AnimatedImage,
Callout,
ChatBubble,
ComparisonGrid,
HighlightBox,
PowerCTA,
ProductTabs,
SplitHeading,
Stats,
StickyNarrative,
TechnicalGrid,
VisualLinkPreview,
];