Quartz UI ↗
Browse docs
On this page
Private preview · 0.57.0-devView Markdown

QuartzUICoreContract: declaration reference

0.57.0-dev · beta source documentation. Native, Blueprint, Editor and rendering examples are source-reviewed, not executed in Unreal during this scan. See validation and limits.

Pinned source (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h) · integration recipe · practical guide

FQuartzUIEmptyContract

Advanced type. Empty JSON object used by parameterless built-in requests. Wire role: result of quartzui.action (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.action', payload) with the generated exact payload; this type is its result. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L13)

FQuartzUIInputStateContract

Advanced type. Exact browser-facing input snapshot published as quartzui.input. Wire role: payload of quartzui.input (state).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.subscribeState('quartzui.input', value => { /* read this DTO */ }). Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L20)

FQuartzUIBoundActionStateContract

Advanced type. Exact browser-facing contextual action snapshot. Wire role: payload of quartzui.actions (state).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.subscribeState('quartzui.actions', value => { /* read this DTO */ }). Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L39)

FQuartzUIShellStateContract

Advanced type. Retained-document screen and Unreal-owned input intent published as quartzui.shell. Wire role: payload of quartzui.shell (state).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.subscribeState('quartzui.shell', value => { /* read this DTO */ }). Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L49)

FQuartzUINotificationEventContract

Advanced type. One bounded localized notification emitted through quartzui.notifications. Wire role: payload of quartzui.notifications (event).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.subscribeEvent('quartzui.notifications', value => { /* read this DTO */ }). Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L65)

FQuartzUIActionRequestContract

Advanced type. Strict web-to-Unreal named action request accepted only by explicit registrations. Wire role: payload of quartzui.action (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.action', payload) with the generated exact payload; this type is its payload. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L78)

FQuartzUISoundRequestContract

Advanced type. Semantic UI-audio cue selected by the page and rendered by project code. Wire role: payload of quartzui.sound.play (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.sound.play', payload) with the generated exact payload; this type is its payload. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L88)

FQuartzUISoundResultContract

Advanced type. Whether the exact player's project audio listener received the cue. Wire role: result of quartzui.sound.play (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.sound.play', payload) with the generated exact payload; this type is its result. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L98)

FQuartzUILoadingStateContract

Advanced type. Exact browser-facing loading presentation published as quartzui.loading. Wire role: payload of quartzui.loading (state).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.subscribeState('quartzui.loading', value => { /* read this DTO */ }). Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L111)

FQuartzUINavigationEventContract

Advanced type. Navigation Event Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: payload of quartzui.navigation (event).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.subscribeEvent('quartzui.navigation', value => { /* read this DTO */ }). Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L132)

FQuartzUIBackEventContract

Advanced type. Back Event Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: payload of quartzui.back (event).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.subscribeEvent('quartzui.back', value => { /* read this DTO */ }). Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L141)

FQuartzUIBackResultContract

Advanced type. Request and echoed result for web-first Back ownership. Wire role: payload of quartzui.back.resolve (request), result of quartzui.back.resolve (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.back.resolve', payload) with the generated exact payload; this type is its payload. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L151)

FQuartzUIPingRequestContract

Advanced type. Ping Request Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: payload of quartzui.ping (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.ping', payload) with the generated exact payload; this type is its payload. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L163)

FQuartzUIPingResultContract

Advanced type. Ping Result Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: result of quartzui.ping (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.ping', payload) with the generated exact payload; this type is its result. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L172)

FQuartzUIAccessibilityAnnouncementRequestContract

Advanced type. Accessibility Announcement Request Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: payload of quartzui.accessibility.announce (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.accessibility.announce', payload) with the generated exact payload; this type is its payload. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L187)

FQuartzUIAccessibilityAnnouncementResultContract

Advanced type. Accessibility Announcement Result Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: result of quartzui.accessibility.announce (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.accessibility.announce', payload) with the generated exact payload; this type is its result. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L196)

FQuartzUISceneBackdropRegionContract

Advanced type. Scene Backdrop Region Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Generate -App=core; use wire-catalog.md for subscriptions/requests. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L208)

FQuartzUISceneBackdropRequestContract

Advanced type. Scene Backdrop Request Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: payload of quartzui.backdrop.update (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.backdrop.update', payload) with the generated exact payload; this type is its payload. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L235)

FQuartzUISceneBackdropResultContract

Advanced type. Scene Backdrop Result Contract: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below. Wire role: result of quartzui.backdrop.update (request).

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: client.request('quartzui.backdrop.update', payload) with the generated exact payload; this type is its result. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L256)

EQuartzUIContractMessageKind

Advanced type. Contract Message Kind: a declared type in immutable middleware wire dtos and message catalog; use its exact fields/operations below.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Generate -App=core; use wire-catalog.md for subscriptions/requests. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L271)

FQuartzUIContractMessageDeclaration

Advanced type. One explicit wire name and its reflected DTOs; no runtime class scan occurs.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Generate -App=core; use wire-catalog.md for subscriptions/requests. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L280)

FQuartzUIContractManifest

Advanced type. Native manifest accepted by the Editor generator and extensible by project C++ code.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Generate -App=core; use wire-catalog.md for subscriptions/requests. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L297)

FQuartzUICoreContract

Advanced type. C++ source of truth for the middleware-owned protocol-v1 surface.

Prerequisites / integration: Configured app, explicit reflected value types, saved assets and freshly generated app contract. Use the QuartzUICoreContract recipe in the host module QuartzUIRuntime.

Minimal example / lifecycle: Generate -App=core; use wire-catalog.md for subscriptions/requests. Core identity is process-stable; messages are value copies.

Avoid: Copying core fingerprint into an app with providers. Match the exact declaration below; dependent DTOs/enums are values used by this owner, not independent systems.

Exact source line (source: Source/QuartzUIRuntime/Public/QuartzUICoreContract.h#L307)

Complete header

Source snapshot, not an additional example. Unreal annotations distinguish exposed Blueprint nodes from native-only/private methods.

#pragma once

#include "CoreMinimal.h"
#include "QuartzUIActions.h"
#include "QuartzUIGASContract.h"
#include "QuartzUIInput.h"
#include "QuartzUIPresentation.h"

#include "QuartzUICoreContract.generated.h"

/** Empty JSON object used by parameterless built-in requests. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUIEmpty"))
struct QUARTZUIRUNTIME_API FQuartzUIEmptyContract
{
	GENERATED_BODY()
};

/** Exact browser-facing input snapshot published as quartzui.input. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUIInputState"))
struct QUARTZUIRUNTIME_API FQuartzUIInputStateContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "modality"))
	EQuartzUIInputModality Modality = EQuartzUIInputModality::MouseAndKeyboard;

	UPROPERTY(meta = (QuartzUIName = "inputProfile"))
	FString InputProfile;

	UPROPERTY(meta = (QuartzUIName = "gamepadConnected"))
	bool bGamepadConnected = false;

	UPROPERTY(meta = (QuartzUIName = "glyphs"))
	TMap<FString, FQuartzUIResolvedInputGlyph> Glyphs;
};

/** Exact browser-facing contextual action snapshot. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUIBoundActionState"))
struct QUARTZUIRUNTIME_API FQuartzUIBoundActionStateContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "actions"))
	TArray<FQuartzUIBoundAction> Actions;
};

/** Retained-document screen and Unreal-owned input intent published as quartzui.shell. */
USTRUCT(BlueprintType, meta = (QuartzUITypeName = "QuartzUIShellState"))
struct QUARTZUIRUNTIME_API FQuartzUIShellStateContract
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Shell", meta = (QuartzUIName = "screen"))
	FString Screen;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Shell", meta = (QuartzUIName = "inputMode"))
	EQuartzUIInputMode InputMode = EQuartzUIInputMode::GameAndUI;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Shell", meta = (QuartzUIName = "visible"))
	bool bVisible = true;
};

/** One bounded localized notification emitted through quartzui.notifications. */
USTRUCT(BlueprintType, meta = (QuartzUITypeName = "QuartzUINotificationEvent"))
struct QUARTZUIRUNTIME_API FQuartzUINotificationEventContract
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Notifications", meta = (QuartzUIName = "id"))
	FString Id;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "QuartzUI|Notifications", meta = (QuartzUIName = "message"))
	FString Message;
};

/** Strict web-to-Unreal named action request accepted only by explicit registrations. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUIActionRequest"))
struct QUARTZUIRUNTIME_API FQuartzUIActionRequestContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "action"))
	FString Action;
};

/** Semantic UI-audio cue selected by the page and rendered by project code. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUISoundRequest"))
struct QUARTZUIRUNTIME_API FQuartzUISoundRequestContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "sound"))
	FString Sound;
};

/** Whether the exact player's project audio listener received the cue. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUISoundResult"))
struct QUARTZUIRUNTIME_API FQuartzUISoundResultContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "routed"))
	bool bRouted = false;

	UPROPERTY(meta = (QuartzUIName = "reason", QuartzUIOptional, QuartzUIStringValues = "unhandled|rate-limited"))
	FString Reason;
};

/** Exact browser-facing loading presentation published as quartzui.loading. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUILoadingState"))
struct QUARTZUIRUNTIME_API FQuartzUILoadingStateContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "title"))
	FString Title;

	UPROPERTY(meta = (QuartzUIName = "detail"))
	FString Detail;

	UPROPERTY(meta = (QuartzUIName = "progress"))
	float Progress = 0.0f;

	UPROPERTY(meta = (QuartzUIName = "indeterminate"))
	bool bIndeterminate = true;

	UPROPERTY(meta = (QuartzUIName = "revision"))
	int32 Revision = 0;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUINavigationEvent"))
struct QUARTZUIRUNTIME_API FQuartzUINavigationEventContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "action"))
	EQuartzUINavigationAction Action = EQuartzUINavigationAction::Next;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUIBackEvent"))
struct QUARTZUIRUNTIME_API FQuartzUIBackEventContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "requestId"))
	int64 RequestId = 0;
};

/** Request and echoed result for web-first Back ownership. */
USTRUCT(meta = (QuartzUITypeName = "QuartzUIBackResult"))
struct QUARTZUIRUNTIME_API FQuartzUIBackResultContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "requestId"))
	int64 RequestId = 0;

	UPROPERTY(meta = (QuartzUIName = "handled"))
	bool bHandled = false;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUIPingRequest"))
struct QUARTZUIRUNTIME_API FQuartzUIPingRequestContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "contractHash"))
	FString ContractHash;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUIPingResult"))
struct QUARTZUIRUNTIME_API FQuartzUIPingResultContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "protocol"))
	int32 Protocol = 1;

	UPROPERTY(meta = (QuartzUIName = "session"))
	int64 Session = 0;

	UPROPERTY(meta = (QuartzUIName = "contractHash"))
	FString ContractHash;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUIAccessibilityAnnouncementRequest"))
struct QUARTZUIRUNTIME_API FQuartzUIAccessibilityAnnouncementRequestContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "message"))
	FString Message;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUIAccessibilityAnnouncementResult"))
struct QUARTZUIRUNTIME_API FQuartzUIAccessibilityAnnouncementResultContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "announced"))
	bool bAnnounced = false;

	UPROPERTY(meta = (QuartzUIName = "reason", QuartzUIOptional, QuartzUIStringValues = "inactive|unavailable|rate-limited"))
	FString Reason;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUISceneBackdropRegion"))
struct QUARTZUIRUNTIME_API FQuartzUISceneBackdropRegionContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "effect", QuartzUIStringValues = "frost"))
	FString Effect;

	UPROPERTY(meta = (QuartzUIName = "x"))
	float X = 0.0f;

	UPROPERTY(meta = (QuartzUIName = "y"))
	float Y = 0.0f;

	UPROPERTY(meta = (QuartzUIName = "width"))
	float Width = 0.0f;

	UPROPERTY(meta = (QuartzUIName = "height"))
	float Height = 0.0f;

	UPROPERTY(meta = (QuartzUIName = "blur"))
	float Blur = 0.0f;

	UPROPERTY(meta = (QuartzUIName = "radius"))
	float Radius = 0.0f;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUISceneBackdropRequest"))
struct QUARTZUIRUNTIME_API FQuartzUISceneBackdropRequestContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "revision"))
	int32 Revision = 0;

	UPROPERTY(meta = (QuartzUIName = "viewportWidth"))
	int32 ViewportWidth = 0;

	UPROPERTY(meta = (QuartzUIName = "viewportHeight"))
	int32 ViewportHeight = 0;

	UPROPERTY(meta = (QuartzUIName = "devicePixelRatio"))
	float DevicePixelRatio = 1.0f;

	UPROPERTY(meta = (QuartzUIName = "regions"))
	TArray<FQuartzUISceneBackdropRegionContract> Regions;
};

USTRUCT(meta = (QuartzUITypeName = "QuartzUISceneBackdropResult"))
struct QUARTZUIRUNTIME_API FQuartzUISceneBackdropResultContract
{
	GENERATED_BODY()

	UPROPERTY(meta = (QuartzUIName = "revision"))
	int32 Revision = 0;

	UPROPERTY(meta = (QuartzUIName = "regions"))
	int32 Regions = 0;

	UPROPERTY(meta = (QuartzUIName = "stale"))
	bool bStale = false;
};

UENUM(BlueprintType)
enum class EQuartzUIContractMessageKind : uint8
{
	State,
	Event,
	Action,
	Request
};

/** One explicit wire name and its reflected DTOs; no runtime class scan occurs. */
struct QUARTZUIRUNTIME_API FQuartzUIContractMessageDeclaration
{
	EQuartzUIContractMessageKind Kind = EQuartzUIContractMessageKind::State;
	FString Name;
	const UScriptStruct* PayloadType = nullptr;
	const UScriptStruct* ResultType = nullptr;

	static FQuartzUIContractMessageDeclaration State(const TCHAR* Name, const UScriptStruct* PayloadType);
	static FQuartzUIContractMessageDeclaration Event(const TCHAR* Name, const UScriptStruct* PayloadType);
	static FQuartzUIContractMessageDeclaration Action(const TCHAR* Name, const UScriptStruct* PayloadType);
	static FQuartzUIContractMessageDeclaration Request(
		const TCHAR* Name,
		const UScriptStruct* PayloadType,
		const UScriptStruct* ResultType);
};

/** Native manifest accepted by the Editor generator and extensible by project C++ code. */
struct QUARTZUIRUNTIME_API FQuartzUIContractManifest
{
	FString ContractName = TEXT("quartzui.core");
	int32 Version = 1;
	TArray<FQuartzUIContractMessageDeclaration> Messages;
	/** Explicit provider classes reflected by the same runtime/generator schema. */
	TArray<const UClass*> Providers;
};

/** C++ source of truth for the middleware-owned protocol-v1 surface. */
class QUARTZUIRUNTIME_API FQuartzUICoreContract final
{
public:
	static FQuartzUIContractManifest BuildManifest();
	/** Checked-in runtime identity of the canonical generated core declarations. */
	static const TCHAR* GetContractHash();
};