export type CustomizationFieldValue = string | number | boolean | string[]; export type UiLayout = 'form' | 'comparison-table'; export type WidgetType = 'radiobuttons' | 'select' | 'checkboxes' | 'chips' | 'checkbox' | 'switch' | 'slider' | 'stepper' | 'currency' | 'number' | 'text' | 'textarea' | 'date' | 'cards' | 'card-checkboxes' | 'icon-checkboxes' | 'consent'; export type RuleEffect = 'visible' | 'disabled'; export type ContractMessageType = 'warning' | 'error' | 'info'; export interface WidgetOption { value: string | number | boolean; label: string; description?: string; icon?: string; premium?: number; } export interface RuleConditionSchema { const?: string | number | boolean; enum?: (string | number | boolean)[]; not?: RuleConditionSchema; minimum?: number; maximum?: number; anyOf?: Array<{ properties: Record; required?: string[]; }>; properties?: Record; required?: string[]; } export interface RuleCondition { scope: string; schema: RuleConditionSchema; } export interface Rule { effect: RuleEffect; condition: RuleCondition; } export interface ConditionalOptionSet { when: RuleCondition; options: WidgetOption[]; } export interface Widget { type: WidgetType; options?: WidgetOption[]; optionSets?: ConditionalOptionSet[]; content?: string; } export interface Hint { header: string; content: string; } export interface UiElement { scope: string; label: string; description?: string; hint?: Hint; extension?: boolean; indent?: boolean; widget?: Widget; rules?: Rule[]; } export interface UiCategory { key: string; label: string; elements: UiElement[]; } export interface UiSchema { layout?: UiLayout; categories: UiCategory[]; } export interface ContractMessage { type: ContractMessageType; text: string; category?: string; scope?: string; } export interface VariantOverrides { discriminatorScope: string; defaultsByValue: Record>; } export interface CustomizationContract { dataSchema: Record; uiSchema: UiSchema; values: Record; messages?: ContractMessage[]; variantOverrides?: VariantOverrides; }