import { ButtonHTMLAttributes } from 'react';
import { CSSProperties } from 'react';
import { ForwardRefExoticComponent } from 'react';
import { HTMLAttributes } from 'react';
import { InputHTMLAttributes } from 'react';
import { ReactNode } from 'react';
import { RefAttributes } from 'react';
import { SelectHTMLAttributes } from 'react';
import { TextareaHTMLAttributes } from 'react';
/** Opt in to placeholders on purpose, and stop being told about it. */
export declare function acknowledgeClayPlaceholders(): void;
export declare interface BendTuning {
/** Vertical bow strength, 0..1. */
vertical?: number;
/** Horizontal cap deformation, 0..1. */
horizontal?: number;
}
declare interface BlobShape {
/** Outward bulge, in px. 0 gives the plain rounded rectangle. */
readonly amplitude: number;
/** Which shape. Same seed, same silhouette, every render. */
readonly seed?: number;
/** How many swells go round the outline. 2 is lazy, 5 is busy. */
readonly lobes?: number;
/** Rotates the swells around the outline; the knob a press animates. */
readonly phase?: number;
}
export declare const CLAY_ASSET_BASE_PATH: "/assets/game/ui/clay/phase03-clay-kit";
export declare const CLAY_ASSET_SIZE_TOKENS: {
readonly iconSm: "var(--game-ui-asset-icon-sm)";
readonly iconMd: "var(--game-ui-asset-icon-md)";
readonly iconLg: "var(--game-ui-asset-icon-lg)";
readonly iconXl: "var(--game-ui-asset-icon-xl)";
readonly buttonSkinMinWidth: "var(--game-ui-asset-button-min-width)";
readonly cardFanWidth: "var(--game-ui-asset-card-fan-width)";
readonly stageTileMinHeight: "var(--game-ui-stage-tile-min-height)";
readonly terrainSwatchSize: "var(--game-ui-terrain-swatch-size)";
readonly terrainToolHitSize: "var(--game-ui-terrain-tool-hit-size)";
readonly buildRailCardSize: "var(--game-ui-build-rail-card-size)";
readonly brushNumberWidth: "var(--game-ui-brush-number-width)";
};
export declare const CLAY_ASSETS: {
buttons: {
primary: string;
blue: string;
brown: string;
green: string;
purple: string;
red: string;
};
panels: {
popup: string;
commonTitle: string;
language: string;
};
controls: {
switchOn: string;
switchOff: string;
slider: string;
tabSelected: string;
tabNormal: string;
};
icons: Record;
catalog: {
manifest: string;
sourceCatalog: string;
contactSheetCommon: string;
contactSheetComponents: string;
contactSheetFunction: string;
};
};
export declare const CLAY_COLOR_TOKENS: {
readonly ink: "#3b2d23";
readonly inkMuted: "#786250";
readonly parchment: "#fff8ec";
readonly parchmentDeep: "#f4e2c6";
readonly cream: "#f3e8d8";
readonly wood: "#6c4f38";
readonly woodDeep: "#3a2518";
readonly honey: "#f2b35c";
readonly orange: "#e8743b";
readonly teal: "#1d9a8b";
readonly green: "#4f9d6b";
readonly mint: "#7ee0b6";
readonly berry: "#9b6dd6";
readonly red: "#d85a45";
readonly sky: "#5ca6d8";
readonly shadow: "rgba(76, 52, 28, 0.24)";
readonly glass: "rgba(255, 248, 236, 0.82)";
readonly nightGlass: "rgba(31, 24, 18, 0.76)";
/** Official HUD-on-scene glass fill (matches SupaLuv stage chrome). */
readonly overlayGlass: "rgba(12, 14, 20, 0.72)";
readonly overlayGlassText: "#fff6ee";
/** Liquid-metal plate fill (light). Dedicated so it cannot inherit ink-deep, which inverts on night. */
readonly liquidMetalFace: "#3a2518";
readonly liquidMetalInk: "#fff8ec";
};
export declare const CLAY_ELEVATION_TOKENS: {
readonly button: "var(--game-ui-shadow-button)";
readonly panel: "var(--game-ui-shadow-panel)";
readonly modal: "var(--game-ui-shadow-modal)";
readonly inset: "var(--game-ui-shadow-inset)";
readonly stroke: "var(--game-ui-stroke)";
};
export declare const CLAY_GAME_SPRITE_NAMES: ClayGameSpriteName[];
/**
* Decorative game-content sprites — sculpted clay objects from the same source
* pack that read as *game content* (loot, weapons, shields, potions, currency
* variants) rather than UI affordances. They are deliberately kept OUT of
* CLAY_ICON_VARIANTS so the semantic icon API stays a clean, product-agnostic UI
* vocabulary. Reach for these in reward popups, inventories, win screens, or
* decorative flourishes — never for buttons or toolbars. Game family only; these
* have no flat line equivalents.
*/
export declare const CLAY_GAME_SPRITES: {
anvil: string;
arrow: string;
bomb: string;
candle: string;
chicken: string;
giftBlue: string;
hammer: string;
horn: string;
horseshoe: string;
letter: string;
medalBronze: string;
medalSilver: string;
pickaxe: string;
potionPurple: string;
potionRed: string;
purpleGem: string;
shieldA: string;
shieldB: string;
shieldC: string;
shieldD: string;
skull: string;
soulGem: string;
swordA: string;
swordB: string;
talaria: string;
treasure: string;
};
export declare const CLAY_ICON_NAMES: ClayIconName[];
export declare const CLAY_ICON_VARIANTS: {
ai: {
line: string;
};
alert: {
game: string;
line: string;
};
card: {
line: string;
};
chat: {
line: string;
};
check: {
line: string;
};
close: {
game: string;
line: string;
};
coin: {
game: string;
line: string;
};
compass: {
line: string;
};
copy: {
line: string;
};
crown: {
game: string;
line: string;
};
energy: {
game: string;
line: string;
};
gem: {
game: string;
line: string;
};
gift: {
game: string;
line: string;
};
globe: {
line: string;
};
history: {
line: string;
};
home: {
line: string;
};
hourglass: {
game: string;
line: string;
};
laurel: {
game: string;
};
lock: {
game: string;
line: string;
};
lucky: {
game: string;
};
mail: {
game: string;
line: string;
};
medal: {
game: string;
line: string;
};
mission: {
game: string;
};
mobile: {
line: string;
};
portal: {
game: string;
line: string;
};
scroll: {
game: string;
line: string;
};
settings: {
game: string;
line: string;
};
shirt: {
line: string;
};
shop: {
game: string;
line: string;
};
smile: {
line: string;
};
timer: {
game: string;
line: string;
};
trophy: {
game: string;
line: string;
};
undo: {
line: string;
};
redo: {
line: string;
};
vote: {
game: string;
line: string;
};
};
export declare const CLAY_LAYER_TOKENS: {
readonly playfield: "var(--game-ui-z-playfield)";
readonly hud: "var(--game-ui-z-hud)";
readonly sidebar: "var(--game-ui-z-sidebar)";
readonly overlay: "var(--game-ui-z-overlay)";
readonly modal: "var(--game-ui-z-modal)";
readonly toast: "var(--game-ui-z-toast)";
};
/**
* Token references for the adopted liquid-gooey Move physics. The values are
* deliberately numeric custom properties so a host theme can tune the feel
* without putting physics constants in the engine.
*/
declare const CLAY_LIQUID_GOOEY_TOKENS: {
readonly morphShape: "var(--game-ui-liquid-gooey-morph-shape)";
readonly morphSpeed: "var(--game-ui-liquid-gooey-morph-speed)";
readonly morphBounce: "var(--game-ui-liquid-gooey-morph-bounce)";
readonly evolveMassStiffness: "var(--game-ui-liquid-gooey-evolve-mass-stiffness)";
readonly evolveMassDamping: "var(--game-ui-liquid-gooey-evolve-mass-damping)";
readonly evolveSizeStiffness: "var(--game-ui-liquid-gooey-evolve-size-stiffness)";
readonly evolveSizeDamping: "var(--game-ui-liquid-gooey-evolve-size-damping)";
readonly evolveRadiusStiffness: "var(--game-ui-liquid-gooey-evolve-radius-stiffness)";
readonly evolveRadiusDamping: "var(--game-ui-liquid-gooey-evolve-radius-damping)";
readonly evolveContentBlur: "var(--game-ui-liquid-gooey-evolve-content-blur)";
readonly evolveRoundness: "var(--game-ui-liquid-gooey-evolve-roundness)";
readonly evolveCornerDuration: "var(--game-ui-liquid-gooey-evolve-corner-duration)";
readonly evolveCornerDelay: "var(--game-ui-liquid-gooey-evolve-corner-delay)";
readonly evolveCornerEase: "var(--game-ui-liquid-gooey-evolve-corner-ease)";
readonly evolveAnticipation: "var(--game-ui-liquid-gooey-evolve-anticipation)";
readonly evolveTravel: "var(--game-ui-liquid-gooey-evolve-travel)";
readonly contentBlurAreaMultiplier: "var(--game-ui-liquid-gooey-content-blur-area-multiplier)";
readonly bendVertical: "var(--game-ui-liquid-gooey-bend-vertical)";
readonly bendHorizontal: "var(--game-ui-liquid-gooey-bend-horizontal)";
readonly bendVelocityVertical: "var(--game-ui-liquid-gooey-bend-velocity-vertical)";
readonly bendVelocityHorizontal: "var(--game-ui-liquid-gooey-bend-velocity-horizontal)";
readonly bendSmoothing: "var(--game-ui-liquid-gooey-bend-smoothing)";
readonly bendActiveThreshold: "var(--game-ui-liquid-gooey-bend-active-threshold)";
readonly bendVerticalCap: "var(--game-ui-liquid-gooey-bend-vertical-cap)";
readonly bendHorizontalCap: "var(--game-ui-liquid-gooey-bend-horizontal-cap)";
readonly bendRadiusMin: "var(--game-ui-liquid-gooey-bend-radius-min)";
readonly bendRadiusMax: "var(--game-ui-liquid-gooey-bend-radius-max)";
readonly bendLeadingCapFactor: "var(--game-ui-liquid-gooey-bend-leading-cap-factor)";
readonly bendTrailingCapFactor: "var(--game-ui-liquid-gooey-bend-trailing-cap-factor)";
readonly moveStiffness: "var(--game-ui-liquid-gooey-move-stiffness)";
readonly moveDamping: "var(--game-ui-liquid-gooey-move-damping)";
readonly moveStretch: "var(--game-ui-liquid-gooey-move-stretch)";
readonly moveTail: "var(--game-ui-liquid-gooey-move-tail)";
readonly moveForce: "var(--game-ui-liquid-gooey-move-force)";
readonly moveTailSpringStiffness: "var(--game-ui-liquid-gooey-move-tail-spring-stiffness)";
readonly moveTailSpringDamping: "var(--game-ui-liquid-gooey-move-tail-spring-damping)";
readonly moveStretchSpeed: "var(--game-ui-liquid-gooey-move-stretch-speed)";
readonly moveStretchSquash: "var(--game-ui-liquid-gooey-move-stretch-squash)";
readonly moveSpeedThreshold: "var(--game-ui-liquid-gooey-move-speed-threshold)";
readonly moveTailOnsetSpeed: "var(--game-ui-liquid-gooey-move-tail-onset-speed)";
readonly moveTailOnsetRange: "var(--game-ui-liquid-gooey-move-tail-onset-range)";
readonly moveTailRamp: "var(--game-ui-liquid-gooey-move-tail-ramp)";
readonly moveTailMinRadius: "var(--game-ui-liquid-gooey-move-tail-min-radius)";
readonly moveTailWobble: "var(--game-ui-liquid-gooey-move-tail-wobble)";
readonly moveTailPhaseSpeed: "var(--game-ui-liquid-gooey-move-tail-phase-speed)";
readonly moveTailMidpointA: "var(--game-ui-liquid-gooey-move-tail-midpoint-a)";
readonly moveTailMidpointB: "var(--game-ui-liquid-gooey-move-tail-midpoint-b)";
readonly moveTailMidRadiusA: "var(--game-ui-liquid-gooey-move-tail-mid-radius-a)";
readonly moveTailMidRadiusB: "var(--game-ui-liquid-gooey-move-tail-mid-radius-b)";
readonly moveTailWobblePhase: "var(--game-ui-liquid-gooey-move-tail-wobble-phase)";
readonly moveMinPerpendicular: "var(--game-ui-liquid-gooey-move-min-perpendicular)";
readonly moveLagBase: "var(--game-ui-liquid-gooey-move-lag-base)";
readonly moveLagForce: "var(--game-ui-liquid-gooey-move-lag-force)";
readonly moveSettleDistance: "var(--game-ui-liquid-gooey-move-settle-distance)";
readonly moveSettleSpeed: "var(--game-ui-liquid-gooey-move-settle-speed)";
readonly moveIntegrationRate: "var(--game-ui-liquid-gooey-move-integration-rate)";
readonly waviness: "var(--game-ui-liquid-gooey-waviness)";
readonly wavinessFreq: "var(--game-ui-liquid-gooey-waviness-freq)";
readonly meltBlur: "var(--game-ui-liquid-gooey-melt-blur)";
readonly meltContrast: "var(--game-ui-liquid-gooey-melt-contrast)";
readonly meltReach: "var(--game-ui-liquid-gooey-melt-reach)";
readonly meltFade: "var(--game-ui-liquid-gooey-melt-fade)";
readonly meltWarp: "var(--game-ui-liquid-gooey-melt-warp)";
readonly meltMix: "var(--game-ui-liquid-gooey-melt-mix)";
readonly meltMixBlur: "var(--game-ui-liquid-gooey-melt-mix-blur)";
readonly meltGravity: "var(--game-ui-liquid-gooey-melt-gravity)";
readonly meltWaviness: "var(--game-ui-liquid-gooey-melt-waviness)";
readonly dissolveBlur: "var(--game-ui-liquid-gooey-dissolve-blur)";
readonly dissolveWarp: "var(--game-ui-liquid-gooey-dissolve-warp)";
readonly dissolvePull: "var(--game-ui-liquid-gooey-dissolve-pull)";
readonly dissolveRange: "var(--game-ui-liquid-gooey-dissolve-range)";
readonly dissolveZone: "var(--game-ui-liquid-gooey-dissolve-zone)";
readonly dissolveMix: "var(--game-ui-liquid-gooey-dissolve-mix)";
readonly dissolveGravity: "var(--game-ui-liquid-gooey-dissolve-gravity)";
readonly dissolveTaper: "var(--game-ui-liquid-gooey-dissolve-taper)";
readonly dissolveWarpFreq: "var(--game-ui-liquid-gooey-dissolve-warp-freq)";
readonly dissolveFlowSpeed: "var(--game-ui-liquid-gooey-dissolve-flow-speed)";
readonly dissolveDetail: "var(--game-ui-liquid-gooey-dissolve-detail)";
readonly dissolveReleaseMs: "var(--game-ui-liquid-gooey-dissolve-release-ms)";
readonly dissolveFadeMs: "var(--game-ui-liquid-gooey-dissolve-fade-ms)";
readonly dissolveStrength: "var(--game-ui-liquid-gooey-dissolve-strength)";
readonly dissolveSink: "var(--game-ui-liquid-gooey-dissolve-sink)";
readonly dissolveSeamBlur: "var(--game-ui-liquid-gooey-dissolve-seam-blur)";
};
export { CLAY_LIQUID_GOOEY_TOKENS }
export { CLAY_LIQUID_GOOEY_TOKENS as GAME_UI_LIQUID_GOOEY_TOKENS }
/**
* Effect knobs for ``. Face/ink are real colours (both
* themes must set them); accent aliases `--game-ui-accent` so a host can
* retint just this button without rebranding every primary.
*/
declare const CLAY_LIQUID_METAL_TOKENS: {
readonly face: "var(--game-ui-liquid-metal-face)";
readonly ink: "var(--game-ui-liquid-metal-ink)";
readonly accent: "var(--game-ui-liquid-metal-accent)";
readonly dispersion: "var(--game-ui-liquid-metal-dispersion)";
readonly sweepSpeed: "var(--game-ui-liquid-metal-sweep-speed)";
readonly rest: "var(--game-ui-liquid-metal-rest)";
readonly bloom: "var(--game-ui-liquid-metal-bloom)";
};
export { CLAY_LIQUID_METAL_TOKENS }
export { CLAY_LIQUID_METAL_TOKENS as GAME_UI_LIQUID_METAL_TOKENS }
export declare const CLAY_MOTION_TOKENS: {
readonly fast: "var(--game-ui-motion-fast)";
readonly base: "var(--game-ui-motion-base)";
readonly slow: "var(--game-ui-motion-slow)";
readonly easingPop: "var(--game-ui-ease-pop)";
readonly easingSoft: "var(--game-ui-ease-soft)";
readonly reducedMotion: "var(--game-ui-reduced-motion-policy)";
};
/**
* Semantic CSS vars for the official overlay-glass HUD tone
* (`data-game-ui-tone="glass"` / `.game-ui-overlay-scope`).
*/
declare const CLAY_OVERLAY_GLASS_TOKENS: {
readonly bg: "var(--game-ui-overlay-glass-bg)";
readonly bgHover: "var(--game-ui-overlay-glass-bg-hover)";
readonly bgStrong: "var(--game-ui-overlay-glass-bg-strong)";
readonly bgPanel: "var(--game-ui-overlay-glass-bg-panel)";
readonly border: "var(--game-ui-overlay-glass-border)";
readonly borderHover: "var(--game-ui-overlay-glass-border-hover)";
readonly text: "var(--game-ui-overlay-glass-text)";
readonly textMuted: "var(--game-ui-overlay-glass-text-muted)";
readonly blur: "var(--game-ui-overlay-glass-blur)";
readonly focusRing: "var(--game-ui-overlay-glass-focus-ring)";
readonly primaryFill: "var(--game-ui-overlay-glass-primary-fill)";
};
export { CLAY_OVERLAY_GLASS_TOKENS }
export { CLAY_OVERLAY_GLASS_TOKENS as GAME_UI_OVERLAY_GLASS_TOKENS }
export declare const CLAY_RADIUS_TOKENS: {
readonly bead: "var(--game-ui-radius-bead)";
readonly control: "var(--game-ui-radius-control)";
readonly card: "var(--game-ui-radius-card)";
readonly panel: "var(--game-ui-radius-panel)";
readonly modal: "var(--game-ui-radius-modal)";
};
export declare const CLAY_SCROLLBAR_TOKENS: {
readonly size: "var(--game-ui-scrollbar-size)";
readonly track: "var(--game-ui-scrollbar-track)";
readonly thumb: "var(--game-ui-scrollbar-thumb)";
readonly thumbHover: "var(--game-ui-scrollbar-thumb-hover)";
};
export declare const CLAY_SEMANTIC_TOKENS: {
readonly background: "var(--game-ui-bg)";
readonly playfieldScrim: "var(--game-ui-playfield-scrim)";
readonly surface: "var(--game-ui-surface)";
readonly surfaceRaised: "var(--game-ui-surface-raised)";
readonly panel: "var(--game-ui-panel)";
readonly panelStrong: "var(--game-ui-panel-strong)";
readonly text: "var(--game-ui-text)";
readonly textMuted: "var(--game-ui-text-muted)";
readonly accent: "var(--game-ui-accent)";
readonly accentContrast: "var(--game-ui-accent-contrast)";
readonly secondary: "var(--game-ui-secondary)";
readonly success: "var(--game-ui-success)";
readonly danger: "var(--game-ui-danger)";
readonly warning: "var(--game-ui-warning)";
readonly focusRing: "var(--game-ui-focus-ring)";
readonly borderSubtle: "var(--game-ui-border-subtle)";
readonly borderStrong: "var(--game-ui-border-strong)";
readonly disabled: "var(--game-ui-disabled)";
};
export declare const CLAY_SPACE_TOKENS: {
readonly px2: "var(--game-ui-space-2)";
readonly px4: "var(--game-ui-space-4)";
readonly px6: "var(--game-ui-space-6)";
readonly px8: "var(--game-ui-space-8)";
readonly px10: "var(--game-ui-space-10)";
readonly px12: "var(--game-ui-space-12)";
readonly px16: "var(--game-ui-space-16)";
readonly px20: "var(--game-ui-space-20)";
readonly px24: "var(--game-ui-space-24)";
readonly px32: "var(--game-ui-space-32)";
readonly safeTop: "var(--game-ui-safe-top)";
readonly safeRight: "var(--game-ui-safe-right)";
readonly safeBottom: "var(--game-ui-safe-bottom)";
readonly safeLeft: "var(--game-ui-safe-left)";
};
export declare const CLAY_TARGET_TOKENS: {
readonly touchMinimumPx: 44;
readonly touchPrimaryPx: 52;
readonly touchIconPx: 48;
readonly touchRowPx: 46;
readonly adjacentSpacingPx: 8;
readonly mobileLandscapeMinHeightPx: 390;
readonly desktopProofWidthPx: 1440;
readonly desktopProofHeightPx: 900;
readonly mobileLandscapeProofWidthPx: 844;
readonly mobileLandscapeProofHeightPx: 390;
};
export declare const CLAY_TYPE_TOKENS: {
readonly familyDisplay: "var(--game-ui-font-display)";
readonly familyBody: "var(--game-ui-font-body)";
readonly familyMono: "var(--game-ui-font-mono)";
readonly xs: "var(--game-ui-font-xs)";
readonly sm: "var(--game-ui-font-sm)";
readonly md: "var(--game-ui-font-md)";
readonly lg: "var(--game-ui-font-lg)";
readonly xl: "var(--game-ui-font-xl)";
readonly xxl: "var(--game-ui-font-xxl)";
readonly lineTight: "var(--game-ui-line-tight)";
readonly lineBody: "var(--game-ui-line-body)";
readonly reading: "var(--game-ui-font-reading)";
readonly lineReading: "var(--game-ui-line-reading)";
readonly measureReading: "var(--game-ui-measure-reading)";
readonly weightBody: "var(--game-ui-weight-body)";
readonly weightStrong: "var(--game-ui-weight-strong)";
readonly weightTitle: "var(--game-ui-weight-title)";
};
export declare const CLAY_UI_TOKENS: {
readonly colors: {
readonly ink: "#3b2d23";
readonly inkMuted: "#786250";
readonly parchment: "#fff8ec";
readonly parchmentDeep: "#f4e2c6";
readonly cream: "#f3e8d8";
readonly wood: "#6c4f38";
readonly woodDeep: "#3a2518";
readonly honey: "#f2b35c";
readonly orange: "#e8743b";
readonly teal: "#1d9a8b";
readonly green: "#4f9d6b";
readonly mint: "#7ee0b6";
readonly berry: "#9b6dd6";
readonly red: "#d85a45";
readonly sky: "#5ca6d8";
readonly shadow: "rgba(76, 52, 28, 0.24)";
readonly glass: "rgba(255, 248, 236, 0.82)";
readonly nightGlass: "rgba(31, 24, 18, 0.76)";
/** Official HUD-on-scene glass fill (matches SupaLuv stage chrome). */
readonly overlayGlass: "rgba(12, 14, 20, 0.72)";
readonly overlayGlassText: "#fff6ee";
/** Liquid-metal plate fill (light). Dedicated so it cannot inherit ink-deep, which inverts on night. */
readonly liquidMetalFace: "#3a2518";
readonly liquidMetalInk: "#fff8ec";
};
readonly semantic: {
readonly background: "var(--game-ui-bg)";
readonly playfieldScrim: "var(--game-ui-playfield-scrim)";
readonly surface: "var(--game-ui-surface)";
readonly surfaceRaised: "var(--game-ui-surface-raised)";
readonly panel: "var(--game-ui-panel)";
readonly panelStrong: "var(--game-ui-panel-strong)";
readonly text: "var(--game-ui-text)";
readonly textMuted: "var(--game-ui-text-muted)";
readonly accent: "var(--game-ui-accent)";
readonly accentContrast: "var(--game-ui-accent-contrast)";
readonly secondary: "var(--game-ui-secondary)";
readonly success: "var(--game-ui-success)";
readonly danger: "var(--game-ui-danger)";
readonly warning: "var(--game-ui-warning)";
readonly focusRing: "var(--game-ui-focus-ring)";
readonly borderSubtle: "var(--game-ui-border-subtle)";
readonly borderStrong: "var(--game-ui-border-strong)";
readonly disabled: "var(--game-ui-disabled)";
};
readonly typography: {
readonly familyDisplay: "var(--game-ui-font-display)";
readonly familyBody: "var(--game-ui-font-body)";
readonly familyMono: "var(--game-ui-font-mono)";
readonly xs: "var(--game-ui-font-xs)";
readonly sm: "var(--game-ui-font-sm)";
readonly md: "var(--game-ui-font-md)";
readonly lg: "var(--game-ui-font-lg)";
readonly xl: "var(--game-ui-font-xl)";
readonly xxl: "var(--game-ui-font-xxl)";
readonly lineTight: "var(--game-ui-line-tight)";
readonly lineBody: "var(--game-ui-line-body)";
readonly reading: "var(--game-ui-font-reading)";
readonly lineReading: "var(--game-ui-line-reading)";
readonly measureReading: "var(--game-ui-measure-reading)";
readonly weightBody: "var(--game-ui-weight-body)";
readonly weightStrong: "var(--game-ui-weight-strong)";
readonly weightTitle: "var(--game-ui-weight-title)";
};
readonly spacing: {
readonly px2: "var(--game-ui-space-2)";
readonly px4: "var(--game-ui-space-4)";
readonly px6: "var(--game-ui-space-6)";
readonly px8: "var(--game-ui-space-8)";
readonly px10: "var(--game-ui-space-10)";
readonly px12: "var(--game-ui-space-12)";
readonly px16: "var(--game-ui-space-16)";
readonly px20: "var(--game-ui-space-20)";
readonly px24: "var(--game-ui-space-24)";
readonly px32: "var(--game-ui-space-32)";
readonly safeTop: "var(--game-ui-safe-top)";
readonly safeRight: "var(--game-ui-safe-right)";
readonly safeBottom: "var(--game-ui-safe-bottom)";
readonly safeLeft: "var(--game-ui-safe-left)";
};
readonly radius: {
readonly bead: "var(--game-ui-radius-bead)";
readonly control: "var(--game-ui-radius-control)";
readonly card: "var(--game-ui-radius-card)";
readonly panel: "var(--game-ui-radius-panel)";
readonly modal: "var(--game-ui-radius-modal)";
};
readonly scrollbars: {
readonly size: "var(--game-ui-scrollbar-size)";
readonly track: "var(--game-ui-scrollbar-track)";
readonly thumb: "var(--game-ui-scrollbar-thumb)";
readonly thumbHover: "var(--game-ui-scrollbar-thumb-hover)";
};
readonly elevation: {
readonly button: "var(--game-ui-shadow-button)";
readonly panel: "var(--game-ui-shadow-panel)";
readonly modal: "var(--game-ui-shadow-modal)";
readonly inset: "var(--game-ui-shadow-inset)";
readonly stroke: "var(--game-ui-stroke)";
};
readonly motion: {
readonly fast: "var(--game-ui-motion-fast)";
readonly base: "var(--game-ui-motion-base)";
readonly slow: "var(--game-ui-motion-slow)";
readonly easingPop: "var(--game-ui-ease-pop)";
readonly easingSoft: "var(--game-ui-ease-soft)";
readonly reducedMotion: "var(--game-ui-reduced-motion-policy)";
};
readonly layers: {
readonly playfield: "var(--game-ui-z-playfield)";
readonly hud: "var(--game-ui-z-hud)";
readonly sidebar: "var(--game-ui-z-sidebar)";
readonly overlay: "var(--game-ui-z-overlay)";
readonly modal: "var(--game-ui-z-modal)";
readonly toast: "var(--game-ui-z-toast)";
};
readonly targets: {
readonly touchMinimumPx: 44;
readonly touchPrimaryPx: 52;
readonly touchIconPx: 48;
readonly touchRowPx: 46;
readonly adjacentSpacingPx: 8;
readonly mobileLandscapeMinHeightPx: 390;
readonly desktopProofWidthPx: 1440;
readonly desktopProofHeightPx: 900;
readonly mobileLandscapeProofWidthPx: 844;
readonly mobileLandscapeProofHeightPx: 390;
};
readonly assetSizing: {
readonly iconSm: "var(--game-ui-asset-icon-sm)";
readonly iconMd: "var(--game-ui-asset-icon-md)";
readonly iconLg: "var(--game-ui-asset-icon-lg)";
readonly iconXl: "var(--game-ui-asset-icon-xl)";
readonly buttonSkinMinWidth: "var(--game-ui-asset-button-min-width)";
readonly cardFanWidth: "var(--game-ui-asset-card-fan-width)";
readonly stageTileMinHeight: "var(--game-ui-stage-tile-min-height)";
readonly terrainSwatchSize: "var(--game-ui-terrain-swatch-size)";
readonly terrainToolHitSize: "var(--game-ui-terrain-tool-hit-size)";
readonly buildRailCardSize: "var(--game-ui-build-rail-card-size)";
readonly brushNumberWidth: "var(--game-ui-brush-number-width)";
};
readonly overlayGlass: {
readonly bg: "var(--game-ui-overlay-glass-bg)";
readonly bgHover: "var(--game-ui-overlay-glass-bg-hover)";
readonly bgStrong: "var(--game-ui-overlay-glass-bg-strong)";
readonly bgPanel: "var(--game-ui-overlay-glass-bg-panel)";
readonly border: "var(--game-ui-overlay-glass-border)";
readonly borderHover: "var(--game-ui-overlay-glass-border-hover)";
readonly text: "var(--game-ui-overlay-glass-text)";
readonly textMuted: "var(--game-ui-overlay-glass-text-muted)";
readonly blur: "var(--game-ui-overlay-glass-blur)";
readonly focusRing: "var(--game-ui-overlay-glass-focus-ring)";
readonly primaryFill: "var(--game-ui-overlay-glass-primary-fill)";
};
readonly liquidMetal: {
readonly face: "var(--game-ui-liquid-metal-face)";
readonly ink: "var(--game-ui-liquid-metal-ink)";
readonly accent: "var(--game-ui-liquid-metal-accent)";
readonly dispersion: "var(--game-ui-liquid-metal-dispersion)";
readonly sweepSpeed: "var(--game-ui-liquid-metal-sweep-speed)";
readonly rest: "var(--game-ui-liquid-metal-rest)";
readonly bloom: "var(--game-ui-liquid-metal-bloom)";
};
readonly liquidGooey: {
readonly morphShape: "var(--game-ui-liquid-gooey-morph-shape)";
readonly morphSpeed: "var(--game-ui-liquid-gooey-morph-speed)";
readonly morphBounce: "var(--game-ui-liquid-gooey-morph-bounce)";
readonly evolveMassStiffness: "var(--game-ui-liquid-gooey-evolve-mass-stiffness)";
readonly evolveMassDamping: "var(--game-ui-liquid-gooey-evolve-mass-damping)";
readonly evolveSizeStiffness: "var(--game-ui-liquid-gooey-evolve-size-stiffness)";
readonly evolveSizeDamping: "var(--game-ui-liquid-gooey-evolve-size-damping)";
readonly evolveRadiusStiffness: "var(--game-ui-liquid-gooey-evolve-radius-stiffness)";
readonly evolveRadiusDamping: "var(--game-ui-liquid-gooey-evolve-radius-damping)";
readonly evolveContentBlur: "var(--game-ui-liquid-gooey-evolve-content-blur)";
readonly evolveRoundness: "var(--game-ui-liquid-gooey-evolve-roundness)";
readonly evolveCornerDuration: "var(--game-ui-liquid-gooey-evolve-corner-duration)";
readonly evolveCornerDelay: "var(--game-ui-liquid-gooey-evolve-corner-delay)";
readonly evolveCornerEase: "var(--game-ui-liquid-gooey-evolve-corner-ease)";
readonly evolveAnticipation: "var(--game-ui-liquid-gooey-evolve-anticipation)";
readonly evolveTravel: "var(--game-ui-liquid-gooey-evolve-travel)";
readonly contentBlurAreaMultiplier: "var(--game-ui-liquid-gooey-content-blur-area-multiplier)";
readonly bendVertical: "var(--game-ui-liquid-gooey-bend-vertical)";
readonly bendHorizontal: "var(--game-ui-liquid-gooey-bend-horizontal)";
readonly bendVelocityVertical: "var(--game-ui-liquid-gooey-bend-velocity-vertical)";
readonly bendVelocityHorizontal: "var(--game-ui-liquid-gooey-bend-velocity-horizontal)";
readonly bendSmoothing: "var(--game-ui-liquid-gooey-bend-smoothing)";
readonly bendActiveThreshold: "var(--game-ui-liquid-gooey-bend-active-threshold)";
readonly bendVerticalCap: "var(--game-ui-liquid-gooey-bend-vertical-cap)";
readonly bendHorizontalCap: "var(--game-ui-liquid-gooey-bend-horizontal-cap)";
readonly bendRadiusMin: "var(--game-ui-liquid-gooey-bend-radius-min)";
readonly bendRadiusMax: "var(--game-ui-liquid-gooey-bend-radius-max)";
readonly bendLeadingCapFactor: "var(--game-ui-liquid-gooey-bend-leading-cap-factor)";
readonly bendTrailingCapFactor: "var(--game-ui-liquid-gooey-bend-trailing-cap-factor)";
readonly moveStiffness: "var(--game-ui-liquid-gooey-move-stiffness)";
readonly moveDamping: "var(--game-ui-liquid-gooey-move-damping)";
readonly moveStretch: "var(--game-ui-liquid-gooey-move-stretch)";
readonly moveTail: "var(--game-ui-liquid-gooey-move-tail)";
readonly moveForce: "var(--game-ui-liquid-gooey-move-force)";
readonly moveTailSpringStiffness: "var(--game-ui-liquid-gooey-move-tail-spring-stiffness)";
readonly moveTailSpringDamping: "var(--game-ui-liquid-gooey-move-tail-spring-damping)";
readonly moveStretchSpeed: "var(--game-ui-liquid-gooey-move-stretch-speed)";
readonly moveStretchSquash: "var(--game-ui-liquid-gooey-move-stretch-squash)";
readonly moveSpeedThreshold: "var(--game-ui-liquid-gooey-move-speed-threshold)";
readonly moveTailOnsetSpeed: "var(--game-ui-liquid-gooey-move-tail-onset-speed)";
readonly moveTailOnsetRange: "var(--game-ui-liquid-gooey-move-tail-onset-range)";
readonly moveTailRamp: "var(--game-ui-liquid-gooey-move-tail-ramp)";
readonly moveTailMinRadius: "var(--game-ui-liquid-gooey-move-tail-min-radius)";
readonly moveTailWobble: "var(--game-ui-liquid-gooey-move-tail-wobble)";
readonly moveTailPhaseSpeed: "var(--game-ui-liquid-gooey-move-tail-phase-speed)";
readonly moveTailMidpointA: "var(--game-ui-liquid-gooey-move-tail-midpoint-a)";
readonly moveTailMidpointB: "var(--game-ui-liquid-gooey-move-tail-midpoint-b)";
readonly moveTailMidRadiusA: "var(--game-ui-liquid-gooey-move-tail-mid-radius-a)";
readonly moveTailMidRadiusB: "var(--game-ui-liquid-gooey-move-tail-mid-radius-b)";
readonly moveTailWobblePhase: "var(--game-ui-liquid-gooey-move-tail-wobble-phase)";
readonly moveMinPerpendicular: "var(--game-ui-liquid-gooey-move-min-perpendicular)";
readonly moveLagBase: "var(--game-ui-liquid-gooey-move-lag-base)";
readonly moveLagForce: "var(--game-ui-liquid-gooey-move-lag-force)";
readonly moveSettleDistance: "var(--game-ui-liquid-gooey-move-settle-distance)";
readonly moveSettleSpeed: "var(--game-ui-liquid-gooey-move-settle-speed)";
readonly moveIntegrationRate: "var(--game-ui-liquid-gooey-move-integration-rate)";
readonly waviness: "var(--game-ui-liquid-gooey-waviness)";
readonly wavinessFreq: "var(--game-ui-liquid-gooey-waviness-freq)";
readonly meltBlur: "var(--game-ui-liquid-gooey-melt-blur)";
readonly meltContrast: "var(--game-ui-liquid-gooey-melt-contrast)";
readonly meltReach: "var(--game-ui-liquid-gooey-melt-reach)";
readonly meltFade: "var(--game-ui-liquid-gooey-melt-fade)";
readonly meltWarp: "var(--game-ui-liquid-gooey-melt-warp)";
readonly meltMix: "var(--game-ui-liquid-gooey-melt-mix)";
readonly meltMixBlur: "var(--game-ui-liquid-gooey-melt-mix-blur)";
readonly meltGravity: "var(--game-ui-liquid-gooey-melt-gravity)";
readonly meltWaviness: "var(--game-ui-liquid-gooey-melt-waviness)";
readonly dissolveBlur: "var(--game-ui-liquid-gooey-dissolve-blur)";
readonly dissolveWarp: "var(--game-ui-liquid-gooey-dissolve-warp)";
readonly dissolvePull: "var(--game-ui-liquid-gooey-dissolve-pull)";
readonly dissolveRange: "var(--game-ui-liquid-gooey-dissolve-range)";
readonly dissolveZone: "var(--game-ui-liquid-gooey-dissolve-zone)";
readonly dissolveMix: "var(--game-ui-liquid-gooey-dissolve-mix)";
readonly dissolveGravity: "var(--game-ui-liquid-gooey-dissolve-gravity)";
readonly dissolveTaper: "var(--game-ui-liquid-gooey-dissolve-taper)";
readonly dissolveWarpFreq: "var(--game-ui-liquid-gooey-dissolve-warp-freq)";
readonly dissolveFlowSpeed: "var(--game-ui-liquid-gooey-dissolve-flow-speed)";
readonly dissolveDetail: "var(--game-ui-liquid-gooey-dissolve-detail)";
readonly dissolveReleaseMs: "var(--game-ui-liquid-gooey-dissolve-release-ms)";
readonly dissolveFadeMs: "var(--game-ui-liquid-gooey-dissolve-fade-ms)";
readonly dissolveStrength: "var(--game-ui-liquid-gooey-dissolve-strength)";
readonly dissolveSink: "var(--game-ui-liquid-gooey-dissolve-sink)";
readonly dissolveSeamBlur: "var(--game-ui-liquid-gooey-dissolve-seam-blur)";
};
};
export declare type ClayAssetGroup = keyof typeof CLAY_ASSETS;
export declare type ClayAssetMode = 'inline' | 'source';
export declare type ClayGameSpriteName = keyof typeof CLAY_GAME_SPRITES;
export declare type ClayIconName = keyof typeof CLAY_ICON_VARIANTS;
export declare interface ClayIconResolveOptions {
/** Force a specific visual family. Defaults to game-preferred resolution. */
style?: ClayIconStyle;
/** Force inline SVG placeholder (true) or real PNG path (false). */
inline?: boolean;
}
/**
* Clay icons ship in two visual families, and which one you use is a deliberate
* design choice:
*
* - 'game' — the colorful, sculpted clay objects under `icons/common/*`
* (crown, scroll, trophy, key…). This is the primary, on-brand look
* and the default everywhere. Use it for anything the player sees.
* - 'line' — the flat, white, monochrome glyphs under `icons/function/*`
* (home, compass, chat…). This is the alternate/utility family for
* dense toolbars or places a sculpted object would feel too heavy.
*
* Not every semantic icon exists in both families: the game family is a curated
* set of ~45 sculpted objects, while the line family covers ~230 generic UI
* concepts. `getClayIconStyles()` reports which families a given icon has, and
* resolution always prefers 'game' so cards get the on-brand look by default.
*/
export declare type ClayIconStyle = 'game' | 'line';
export declare type ClayTokenCategory = keyof typeof CLAY_UI_TOKENS;
declare type CornerRadii = [number, number, number, number];
/**
* Process-wide budget for animated liquid-gooey groups.
*
* SVG filters do not consume WebGL contexts, but they can still be expensive
* to repaint. The default allows two animated groups and rejects regions
* larger than the configured filter-area ceiling. A rejected group keeps its
* SVG filter and snaps its content to each new state without animating.
*/
export declare const DEFAULT_LIQUID_GOOEY_ANIMATION_BUDGET = 2;
export declare const DEFAULT_LIQUID_GOOEY_FILTER_AREA_BUDGET = 480000;
/**
* Process-wide ledger for liquid-metal WebGL2 contexts.
*
* Chrome gives a tab about 16 contexts (Android about 8) and silently
* kills the oldest when the cap is hit. In University that oldest context
* is the 3D world map. These buttons are allowed to light up a shader,
* but they are not allowed to evict the map — so the default budget is
* 2, hosts can raise or lower it, and a button that cannot get a slot
* stays on the CSS renderer without throwing.
*/
export declare const DEFAULT_LIQUID_METAL_CONTEXT_BUDGET = 2;
export declare const DISSOLVE_DEFAULTS: ResolvedDissolveOptions;
export declare interface DissolveOptions {
/** Melt blur in px. */
blur?: number;
/** Displacement strength of the liquid warp. */
warp?: number;
/** Magnetic drift toward the contact, in px. */
pull?: number;
/** Distance at which melting starts. */
range?: number;
/** Size of the melt zone around the contact, in px. */
zone?: number;
/** 0..1 two-liquid erosion strength. */
mix?: number;
/** Px the melt is drawn toward the neighbour's centre. */
gravity?: number;
/** 0..1 pointiness of the directional flow. */
taper?: number;
/** Noise frequency multiplier. */
warpFreq?: number;
/** Px/s the noise field may drift while the item is moving. */
flowSpeed?: number;
/** Noise style. */
warpStyle?: 'fractalNoise' | 'turbulence';
/** Noise octaves. */
detail?: number;
/** Whether the dissolve is currently allowed to grow. */
active?: boolean;
/** Structural release time in ms. */
releaseMs?: number;
/** Opacity fade time in ms. */
fadeMs?: number;
/** 0..1 overall dissolve ceiling. */
strength?: number;
/** Fraction of the smaller body at which the seam has been swallowed. */
sink?: number;
/** Plain blur radius for the guaranteed-smooth seam wash. */
seamBlur?: number;
}
export declare type DissolveValue = boolean | number | DissolveOptions;
declare interface EvolveOptions {
/** Spring driving the liquid mass's centre. */
massStiffness?: number;
massDamping?: number;
/** Spring driving width and height. */
sizeStiffness?: number;
sizeDamping?: number;
/** Spring driving the corner radius. */
radiusStiffness?: number;
radiusDamping?: number;
/** Maximum content cross-blur during the morph, in px. */
contentBlur?: number;
/** 0..1 droplet roundness during a shape transition. */
roundness?: number;
/** Corner-forming timeline. */
cornerDuration?: number;
cornerDelay?: number;
cornerEase?: string;
/** Ramp-in time for the droplet lead, in ms. */
anticipation?: number;
/** Maximum droplet lead toward the destination, in px. */
travel?: number;
}
export declare function FirstSessionHud({ authenticated, batteryCount, className, dailyStreak, iconSlots, labels, onHistory, onSettings, onWardrobe, playerName, }: FirstSessionHudProps): ReactNode;
export declare interface FirstSessionHudIconSlots {
history?: ReactNode;
input?: ReactNode;
settings?: ReactNode;
wardrobe?: ReactNode;
emote?: ReactNode;
}
export declare interface FirstSessionHudLabels {
controls: string;
emote: string;
goalLabel: string;
goalValue: string;
/** Streak prefix, e.g. "Daily" → "Daily 3". Defaults to "Daily". */
streak?: string;
/** Resource meta shown for guests (unauthenticated). Defaults to "guest". */
guest?: string;
history: string;
hud: string;
input: string;
moveBadge: string;
move: string;
roomLabel: string;
roomValue: string;
roleLabel: string;
roleValue: string;
settings: string;
shell: string;
timerLabel: string;
timerValue: string;
tools: string;
wardrobe: string;
}
export declare interface FirstSessionHudProps {
authenticated: boolean;
batteryCount: number | string;
className?: string;
dailyStreak: number;
iconSlots?: FirstSessionHudIconSlots;
labels: FirstSessionHudLabels;
onHistory: () => void;
onSettings: () => void;
onWardrobe: () => void;
playerName: string;
}
export declare function FirstSessionOnboarding({ labels, onDismiss, open, }: FirstSessionOnboardingProps): ReactNode;
export declare interface FirstSessionOnboardingLabels {
badge: string;
body: string;
skip: string;
start: string;
steps: readonly FirstSessionOnboardingStep[];
title: string;
}
export declare interface FirstSessionOnboardingProps {
labels: FirstSessionOnboardingLabels;
onDismiss: () => void;
open: boolean;
}
export declare interface FirstSessionOnboardingStep {
body: string;
title: string;
}
/** Opt-in attribute values for the official overlay-glass HUD scope. */
export declare const GAME_UI_OVERLAY: {
readonly toneAttr: "data-game-ui-tone";
readonly toneGlass: "glass";
readonly densityAttr: "data-game-ui-density";
readonly densityCompact: "compact";
readonly scopeClass: "game-ui-overlay-scope";
};
export declare const GAME_UI_PREVIEW_MESSAGES: readonly GameUiHistoryEntry[];
export declare const GAME_UI_TARGETS: {
readonly touchMinimumPx: 44;
readonly touchPrimaryPx: 52;
readonly touchIconPx: 48;
readonly touchRowPx: 46;
readonly adjacentSpacingPx: 8;
readonly mobileLandscapeMinHeightPx: 390;
readonly desktopProofWidthPx: 1440;
readonly desktopProofHeightPx: 900;
readonly mobileLandscapeProofWidthPx: 844;
readonly mobileLandscapeProofHeightPx: 390;
};
/**
* The semantic `--game-ui-*` custom properties a *complete* theme must
* override for full fidelity — this is the same list the official
* `[data-game-ui-theme='night']` block in theme.css satisfies, enforced by
* a guard test in src/tokens.test.ts. A downstream product building its own
* full theme (e.g. `[data-game-ui-theme='abyss']`) can reuse this constant
* to check its own CSS for the same completeness instead of eyeballing it —
* see "自定义第三主题" in design-system-guide.md for a usage example.
*/
export declare const GAME_UI_THEME_CONTRACT: readonly ["--game-ui-bg", "--game-ui-surface", "--game-ui-surface-raised", "--game-ui-panel", "--game-ui-panel-strong", "--game-ui-panel-deep", "--game-ui-text", "--game-ui-text-muted", "--game-ui-accent", "--game-ui-accent-bright", "--game-ui-secondary", "--game-ui-success", "--game-ui-success-bright", "--game-ui-danger", "--game-ui-danger-bright", "--game-ui-warning", "--game-ui-focus-ring", "--game-ui-border-subtle", "--game-ui-border-strong", "--game-ui-disabled", "--game-ui-ink-deep", "--game-ui-border-ink", "--game-ui-wood", "--game-ui-ink-title", "--game-ui-ink-heading", "--game-ui-liquid-metal-face", "--game-ui-liquid-metal-ink"];
export declare const GAME_UI_TOKENS: {
readonly morphShape: "var(--game-ui-liquid-gooey-morph-shape)";
readonly morphSpeed: "var(--game-ui-liquid-gooey-morph-speed)";
readonly morphBounce: "var(--game-ui-liquid-gooey-morph-bounce)";
readonly evolveMassStiffness: "var(--game-ui-liquid-gooey-evolve-mass-stiffness)";
readonly evolveMassDamping: "var(--game-ui-liquid-gooey-evolve-mass-damping)";
readonly evolveSizeStiffness: "var(--game-ui-liquid-gooey-evolve-size-stiffness)";
readonly evolveSizeDamping: "var(--game-ui-liquid-gooey-evolve-size-damping)";
readonly evolveRadiusStiffness: "var(--game-ui-liquid-gooey-evolve-radius-stiffness)";
readonly evolveRadiusDamping: "var(--game-ui-liquid-gooey-evolve-radius-damping)";
readonly evolveContentBlur: "var(--game-ui-liquid-gooey-evolve-content-blur)";
readonly evolveRoundness: "var(--game-ui-liquid-gooey-evolve-roundness)";
readonly evolveCornerDuration: "var(--game-ui-liquid-gooey-evolve-corner-duration)";
readonly evolveCornerDelay: "var(--game-ui-liquid-gooey-evolve-corner-delay)";
readonly evolveCornerEase: "var(--game-ui-liquid-gooey-evolve-corner-ease)";
readonly evolveAnticipation: "var(--game-ui-liquid-gooey-evolve-anticipation)";
readonly evolveTravel: "var(--game-ui-liquid-gooey-evolve-travel)";
readonly contentBlurAreaMultiplier: "var(--game-ui-liquid-gooey-content-blur-area-multiplier)";
readonly bendVertical: "var(--game-ui-liquid-gooey-bend-vertical)";
readonly bendHorizontal: "var(--game-ui-liquid-gooey-bend-horizontal)";
readonly bendVelocityVertical: "var(--game-ui-liquid-gooey-bend-velocity-vertical)";
readonly bendVelocityHorizontal: "var(--game-ui-liquid-gooey-bend-velocity-horizontal)";
readonly bendSmoothing: "var(--game-ui-liquid-gooey-bend-smoothing)";
readonly bendActiveThreshold: "var(--game-ui-liquid-gooey-bend-active-threshold)";
readonly bendVerticalCap: "var(--game-ui-liquid-gooey-bend-vertical-cap)";
readonly bendHorizontalCap: "var(--game-ui-liquid-gooey-bend-horizontal-cap)";
readonly bendRadiusMin: "var(--game-ui-liquid-gooey-bend-radius-min)";
readonly bendRadiusMax: "var(--game-ui-liquid-gooey-bend-radius-max)";
readonly bendLeadingCapFactor: "var(--game-ui-liquid-gooey-bend-leading-cap-factor)";
readonly bendTrailingCapFactor: "var(--game-ui-liquid-gooey-bend-trailing-cap-factor)";
readonly moveStiffness: "var(--game-ui-liquid-gooey-move-stiffness)";
readonly moveDamping: "var(--game-ui-liquid-gooey-move-damping)";
readonly moveStretch: "var(--game-ui-liquid-gooey-move-stretch)";
readonly moveTail: "var(--game-ui-liquid-gooey-move-tail)";
readonly moveForce: "var(--game-ui-liquid-gooey-move-force)";
readonly moveTailSpringStiffness: "var(--game-ui-liquid-gooey-move-tail-spring-stiffness)";
readonly moveTailSpringDamping: "var(--game-ui-liquid-gooey-move-tail-spring-damping)";
readonly moveStretchSpeed: "var(--game-ui-liquid-gooey-move-stretch-speed)";
readonly moveStretchSquash: "var(--game-ui-liquid-gooey-move-stretch-squash)";
readonly moveSpeedThreshold: "var(--game-ui-liquid-gooey-move-speed-threshold)";
readonly moveTailOnsetSpeed: "var(--game-ui-liquid-gooey-move-tail-onset-speed)";
readonly moveTailOnsetRange: "var(--game-ui-liquid-gooey-move-tail-onset-range)";
readonly moveTailRamp: "var(--game-ui-liquid-gooey-move-tail-ramp)";
readonly moveTailMinRadius: "var(--game-ui-liquid-gooey-move-tail-min-radius)";
readonly moveTailWobble: "var(--game-ui-liquid-gooey-move-tail-wobble)";
readonly moveTailPhaseSpeed: "var(--game-ui-liquid-gooey-move-tail-phase-speed)";
readonly moveTailMidpointA: "var(--game-ui-liquid-gooey-move-tail-midpoint-a)";
readonly moveTailMidpointB: "var(--game-ui-liquid-gooey-move-tail-midpoint-b)";
readonly moveTailMidRadiusA: "var(--game-ui-liquid-gooey-move-tail-mid-radius-a)";
readonly moveTailMidRadiusB: "var(--game-ui-liquid-gooey-move-tail-mid-radius-b)";
readonly moveTailWobblePhase: "var(--game-ui-liquid-gooey-move-tail-wobble-phase)";
readonly moveMinPerpendicular: "var(--game-ui-liquid-gooey-move-min-perpendicular)";
readonly moveLagBase: "var(--game-ui-liquid-gooey-move-lag-base)";
readonly moveLagForce: "var(--game-ui-liquid-gooey-move-lag-force)";
readonly moveSettleDistance: "var(--game-ui-liquid-gooey-move-settle-distance)";
readonly moveSettleSpeed: "var(--game-ui-liquid-gooey-move-settle-speed)";
readonly moveIntegrationRate: "var(--game-ui-liquid-gooey-move-integration-rate)";
readonly waviness: "var(--game-ui-liquid-gooey-waviness)";
readonly wavinessFreq: "var(--game-ui-liquid-gooey-waviness-freq)";
readonly meltBlur: "var(--game-ui-liquid-gooey-melt-blur)";
readonly meltContrast: "var(--game-ui-liquid-gooey-melt-contrast)";
readonly meltReach: "var(--game-ui-liquid-gooey-melt-reach)";
readonly meltFade: "var(--game-ui-liquid-gooey-melt-fade)";
readonly meltWarp: "var(--game-ui-liquid-gooey-melt-warp)";
readonly meltMix: "var(--game-ui-liquid-gooey-melt-mix)";
readonly meltMixBlur: "var(--game-ui-liquid-gooey-melt-mix-blur)";
readonly meltGravity: "var(--game-ui-liquid-gooey-melt-gravity)";
readonly meltWaviness: "var(--game-ui-liquid-gooey-melt-waviness)";
readonly dissolveBlur: "var(--game-ui-liquid-gooey-dissolve-blur)";
readonly dissolveWarp: "var(--game-ui-liquid-gooey-dissolve-warp)";
readonly dissolvePull: "var(--game-ui-liquid-gooey-dissolve-pull)";
readonly dissolveRange: "var(--game-ui-liquid-gooey-dissolve-range)";
readonly dissolveZone: "var(--game-ui-liquid-gooey-dissolve-zone)";
readonly dissolveMix: "var(--game-ui-liquid-gooey-dissolve-mix)";
readonly dissolveGravity: "var(--game-ui-liquid-gooey-dissolve-gravity)";
readonly dissolveTaper: "var(--game-ui-liquid-gooey-dissolve-taper)";
readonly dissolveWarpFreq: "var(--game-ui-liquid-gooey-dissolve-warp-freq)";
readonly dissolveFlowSpeed: "var(--game-ui-liquid-gooey-dissolve-flow-speed)";
readonly dissolveDetail: "var(--game-ui-liquid-gooey-dissolve-detail)";
readonly dissolveReleaseMs: "var(--game-ui-liquid-gooey-dissolve-release-ms)";
readonly dissolveFadeMs: "var(--game-ui-liquid-gooey-dissolve-fade-ms)";
readonly dissolveStrength: "var(--game-ui-liquid-gooey-dissolve-strength)";
readonly dissolveSink: "var(--game-ui-liquid-gooey-dissolve-sink)";
readonly dissolveSeamBlur: "var(--game-ui-liquid-gooey-dissolve-seam-blur)";
readonly iconSm: "var(--game-ui-asset-icon-sm)";
readonly iconMd: "var(--game-ui-asset-icon-md)";
readonly iconLg: "var(--game-ui-asset-icon-lg)";
readonly iconXl: "var(--game-ui-asset-icon-xl)";
readonly buttonSkinMinWidth: "var(--game-ui-asset-button-min-width)";
readonly cardFanWidth: "var(--game-ui-asset-card-fan-width)";
readonly stageTileMinHeight: "var(--game-ui-stage-tile-min-height)";
readonly terrainSwatchSize: "var(--game-ui-terrain-swatch-size)";
readonly terrainToolHitSize: "var(--game-ui-terrain-tool-hit-size)";
readonly buildRailCardSize: "var(--game-ui-build-rail-card-size)";
readonly brushNumberWidth: "var(--game-ui-brush-number-width)";
readonly playfield: "var(--game-ui-z-playfield)";
readonly hud: "var(--game-ui-z-hud)";
readonly sidebar: "var(--game-ui-z-sidebar)";
readonly overlay: "var(--game-ui-z-overlay)";
readonly modal: "var(--game-ui-z-modal)";
readonly toast: "var(--game-ui-z-toast)";
readonly fast: "var(--game-ui-motion-fast)";
readonly base: "var(--game-ui-motion-base)";
readonly slow: "var(--game-ui-motion-slow)";
readonly easingPop: "var(--game-ui-ease-pop)";
readonly easingSoft: "var(--game-ui-ease-soft)";
readonly reducedMotion: "var(--game-ui-reduced-motion-policy)";
readonly button: "var(--game-ui-shadow-button)";
readonly panel: "var(--game-ui-shadow-panel)";
readonly inset: "var(--game-ui-shadow-inset)";
readonly stroke: "var(--game-ui-stroke)";
readonly scrollbarSize: "var(--game-ui-scrollbar-size)";
readonly scrollbarTrack: "var(--game-ui-scrollbar-track)";
readonly scrollbarThumb: "var(--game-ui-scrollbar-thumb)";
readonly scrollbarThumbHover: "var(--game-ui-scrollbar-thumb-hover)";
readonly bead: "var(--game-ui-radius-bead)";
readonly control: "var(--game-ui-radius-control)";
readonly card: "var(--game-ui-radius-card)";
readonly px2: "var(--game-ui-space-2)";
readonly px4: "var(--game-ui-space-4)";
readonly px6: "var(--game-ui-space-6)";
readonly px8: "var(--game-ui-space-8)";
readonly px10: "var(--game-ui-space-10)";
readonly px12: "var(--game-ui-space-12)";
readonly px16: "var(--game-ui-space-16)";
readonly px20: "var(--game-ui-space-20)";
readonly px24: "var(--game-ui-space-24)";
readonly px32: "var(--game-ui-space-32)";
readonly safeTop: "var(--game-ui-safe-top)";
readonly safeRight: "var(--game-ui-safe-right)";
readonly safeBottom: "var(--game-ui-safe-bottom)";
readonly safeLeft: "var(--game-ui-safe-left)";
readonly familyDisplay: "var(--game-ui-font-display)";
readonly familyBody: "var(--game-ui-font-body)";
readonly familyMono: "var(--game-ui-font-mono)";
readonly xs: "var(--game-ui-font-xs)";
readonly sm: "var(--game-ui-font-sm)";
readonly md: "var(--game-ui-font-md)";
readonly lg: "var(--game-ui-font-lg)";
readonly xl: "var(--game-ui-font-xl)";
readonly xxl: "var(--game-ui-font-xxl)";
readonly lineTight: "var(--game-ui-line-tight)";
readonly lineBody: "var(--game-ui-line-body)";
readonly reading: "var(--game-ui-font-reading)";
readonly lineReading: "var(--game-ui-line-reading)";
readonly measureReading: "var(--game-ui-measure-reading)";
readonly weightBody: "var(--game-ui-weight-body)";
readonly weightStrong: "var(--game-ui-weight-strong)";
readonly weightTitle: "var(--game-ui-weight-title)";
readonly background: "var(--game-ui-bg)";
readonly playfieldScrim: "var(--game-ui-playfield-scrim)";
readonly surface: "var(--game-ui-surface)";
readonly surfaceRaised: "var(--game-ui-surface-raised)";
readonly panelStrong: "var(--game-ui-panel-strong)";
readonly text: "var(--game-ui-text)";
readonly textMuted: "var(--game-ui-text-muted)";
readonly accent: "var(--game-ui-accent)";
readonly accentContrast: "var(--game-ui-accent-contrast)";
readonly secondary: "var(--game-ui-secondary)";
readonly success: "var(--game-ui-success)";
readonly danger: "var(--game-ui-danger)";
readonly warning: "var(--game-ui-warning)";
readonly focusRing: "var(--game-ui-focus-ring)";
readonly borderSubtle: "var(--game-ui-border-subtle)";
readonly borderStrong: "var(--game-ui-border-strong)";
readonly disabled: "var(--game-ui-disabled)";
};
export declare function GameActionGrid({ actions, className, density, iconLabelMode, label, style, }: GameActionGridProps): ReactNode;
export declare interface GameActionGridProps {
actions: readonly GameUiAction[];
className?: string;
density?: GameSurfaceDensity;
iconLabelMode?: GameActionIconLabelMode;
label: string;
style?: GameActionStyle;
}
export declare type GameActionIconLabelMode = 'hidden' | 'caption';
export declare type GameActionStyle = 'button' | 'icon';
export declare interface GameAssetBadge {
label: string;
tone?: GameBadgeTone;
}
export declare function GameAssetCard({ assetId, badges, cardLayout, className, description, disabled, facts, icon, onClick, onSelect, selected, source, sourceLabel, status, statusLabel, thumbnailAlt, thumbnailSrc, title, type, ...props }: GameAssetCardProps): ReactNode;
export declare type GameAssetCardLayout = 'auto' | 'list' | 'rail';
export declare interface GameAssetCardProps extends Omit, 'children' | 'onSelect'> {
assetId: string;
badges?: readonly GameAssetBadge[];
cardLayout?: Exclude;
description?: string;
facts?: readonly GameAssetFact[];
icon?: ClayIconName;
onSelect?: (assetId: string) => void;
selected?: boolean;
source: GameAssetSource;
sourceLabel?: string;
status?: GameAssetStatus;
statusLabel?: string;
thumbnailAlt?: string;
thumbnailSrc?: string;
title: string;
}
export declare interface GameAssetFact {
id: string;
label: string;
value: string;
}
export declare interface GameAssetGroup {
assets: readonly Omit[];
id: string;
label: string;
source?: GameAssetSource;
}
export declare function GameAssetIcon({ className, icon, label, size, style, useSourceAsset, }: GameAssetIconProps): ReactNode;
export declare interface GameAssetIconProps {
className?: string;
icon: ClayIconName;
label?: string;
size?: 'sm' | 'md' | 'lg' | 'xl';
/**
* Visual family. 'game' (default) is the colorful sculpted clay object;
* 'line' is the flat white glyph alternate. Falls back automatically when an
* icon only ships one family.
*/
style?: ClayIconStyle;
useSourceAsset?: boolean;
}
export declare function GameAssetLibrary({ cardLayout, className, density, emptyAction, emptyDescription, emptyTitle, groups, label, onSelectAsset, selectedAssetId, subtitle, title, }: GameAssetLibraryProps): ReactNode;
export declare interface GameAssetLibraryProps {
cardLayout?: GameAssetCardLayout;
className?: string;
density?: GameSurfaceDensity;
emptyAction?: ReactNode;
emptyDescription?: string;
emptyTitle?: string;
groups: readonly GameAssetGroup[];
label: string;
onSelectAsset?: (assetId: string) => void;
selectedAssetId?: string;
subtitle?: string;
title: string;
}
export declare type GameAssetSource = 'starter' | 'generated' | 'imported';
export declare type GameAssetStatus = 'ready' | 'generating' | 'missing' | 'placed' | 'selected' | 'error';
export declare function GameAvatar({ className, name, size, src, status, }: GameAvatarProps): ReactNode;
export declare interface GameAvatarProps {
/** Display name — used as image alt text and for the initials fallback. */
name: string;
/** Optional image URL; when missing, initials are shown instead. */
src?: string;
size?: 'sm' | 'md' | 'lg' | 'xl';
/** Presence dot; 'none' hides it. */
status?: 'none' | 'online' | 'busy' | 'away';
className?: string;
}
export declare function GameBadge({ children, className, tone }: GameBadgeProps): ReactNode;
export declare interface GameBadgeProps {
children: ReactNode;
className?: string;
tone?: GameBadgeTone;
}
export declare type GameBadgeTone = 'neutral' | 'success' | 'warning' | 'danger' | 'ai';
export declare function GameBeforeAfterToggle({ activeView, after, before, className, label, onViewChange, variant, 'data-testid': testId, }: GameBeforeAfterToggleProps): ReactNode;
export declare interface GameBeforeAfterToggleProps {
activeView: GameBeforeAfterView;
after: GameConstructionPreviewPane;
before: GameConstructionPreviewPane;
className?: string | undefined;
label: string;
onViewChange?: ((view: GameBeforeAfterView) => void) | undefined;
variant?: GameConstructionVariant | undefined;
'data-testid'?: string | undefined;
}
export declare type GameBeforeAfterView = 'before' | 'after';
export declare interface GameBrushControlLabels {
radius?: string;
strength?: string;
radiusHint?: string;
strengthHint?: string;
}
export declare function GameBrushControls({ className, labels, onRadiusChange, onStrengthChange, state, variant, 'data-testid': testId, }: GameBrushControlsProps): ReactNode;
export declare interface GameBrushControlsProps {
className?: string;
labels?: GameBrushControlLabels;
onRadiusChange?: ((radius: number) => void) | undefined;
onStrengthChange?: ((strength: number) => void) | undefined;
state: GameBrushControlState;
variant?: GameTerrainBuildVariant;
'data-testid'?: string | undefined;
}
export declare interface GameBrushControlState {
disabled?: boolean;
maxRadius?: number;
maxStrength?: number;
minRadius?: number;
minStrength?: number;
radius: number;
radiusStep?: number;
strength: number;
strengthStep?: number;
}
export declare interface GameBuildCategory {
compactLabel?: string;
disabled?: boolean;
icon?: ClayIconName;
id: GameBuildCategoryId;
items: readonly GameBuildItem[];
label: string;
meta?: string;
}
export declare type GameBuildCategoryId = 'foundation' | 'wall' | 'opening' | 'roof' | 'prop' | 'house' | string;
export declare interface GameBuildItem {
badges?: readonly {
label: string;
tone?: GameBadgeTone;
}[];
compactLabel?: string;
description?: string;
disabled?: boolean;
icon?: ClayIconName;
id: string;
label: string;
meta?: string;
previewAlt?: string;
previewSrc?: string;
status?: GameBuildItemStatus;
}
export declare type GameBuildItemStatus = 'ready' | 'selected' | 'locked' | 'missing' | 'progress' | 'error';
export declare function GameBuildLibrary({ activeCategoryId, categories, className, density, emptyDescription, emptyTitle, label, onCategoryChange, onSelectItem, selectedItemId, title, variant, 'data-testid': testId, }: GameBuildLibraryProps): ReactNode;
export declare interface GameBuildLibraryProps {
activeCategoryId?: string | undefined;
categories: readonly GameBuildCategory[];
className?: string;
density?: GameSurfaceDensity;
emptyDescription?: string;
emptyTitle?: string;
label: string;
onCategoryChange?: ((categoryId: string) => void) | undefined;
onSelectItem?: ((itemId: string, categoryId: string) => void) | undefined;
selectedItemId?: string | undefined;
title: string;
variant?: GameTerrainBuildVariant;
'data-testid'?: string | undefined;
}
export declare function GameButton({ children, className, fullWidth, liquidFinish, onClick, sound, static: isStatic, surface, type, variant, ...props }: GameButtonProps): ReactNode;
export declare interface GameButtonProps extends ButtonHTMLAttributes {
children: ReactNode;
/** Fill the available row, including the liquid silhouette and hit target. */
fullWidth?: boolean;
/** Named liquid material. Only used with surface="liquid"; omitted keeps the current look. */
liquidFinish?: LiquidFinish;
sound?: GameInteractionSoundOptions | false;
/** Disable the scale-on-press feedback where the motion would distract. */
static?: boolean;
/**
* Draw the button on a liquid body. The button itself is unchanged — same
* element, same classes, same hit target; a silhouette behind it does the
* deforming, so text stays crisp and the tap target never shrinks.
*/
surface?: GameButtonSurface;
variant?: GameButtonVariant;
}
export declare type GameButtonSurface = 'flat' | 'liquid';
export declare type GameButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'success';
/**
* Compact product notice (wallet pitch, soft warnings, onboarding hints).
* Token-driven; products may still override cinema theme in host CSS.
*/
export declare function GameCallout({ heading, children, tone, className, ...props }: GameCalloutProps): ReactNode;
export declare interface GameCalloutProps extends Omit, 'title'> {
/** Visible heading (not HTML title attribute). */
readonly heading?: ReactNode;
readonly children: ReactNode;
readonly tone?: GameCalloutTone;
}
export declare type GameCalloutTone = 'neutral' | 'info' | 'warning' | 'success' | 'danger';
export declare function GameCardFan({ cards, className, label }: GameCardFanProps): ReactNode;
export declare interface GameCardFanCard {
id: string;
icon?: ClayIconName;
kicker: string;
title: string;
}
export declare interface GameCardFanProps {
cards: readonly GameCardFanCard[];
className?: string;
label: string;
}
export declare function GameCheckbox({ className, label, ...props }: GameCheckboxProps): ReactNode;
export declare interface GameCheckboxProps extends Pick, 'checked' | 'defaultChecked' | 'disabled' | 'name' | 'onChange' | 'required' | 'value'> {
label: string;
className?: string;
}
export declare function GameCollapsiblePanel({ actions, children, className, defaultOpen, labels, onOpenChange, open, title, tone, ...props }: GameCollapsiblePanelProps): ReactNode;
export declare interface GameCollapsiblePanelLabels {
collapse: string;
expand: string;
}
export declare interface GameCollapsiblePanelProps extends Omit, 'title'> {
children: ReactNode;
className?: string;
/** Controlled open state. Leave undefined for uncontrolled usage. */
open?: boolean;
/** Uncontrolled initial state. Defaults to true (expanded). */
defaultOpen?: boolean;
onOpenChange?: (open: boolean) => void;
/** Extra header actions rendered next to the toggle (e.g. icon buttons). */
actions?: ReactNode;
labels?: Partial;
title: string;
tone?: 'default' | 'strong';
}
export declare function GameCompactGameDrawer({ children, className, closeIcon, closeLabel, disabled, label, onOpenChange, open, panelId: providedPanelId, title, triggerIcon, triggerLabel, variant, 'data-testid': testId, }: GameCompactGameDrawerProps): ReactNode;
export declare interface GameCompactGameDrawerProps {
children: ReactNode;
className?: string;
closeIcon?: ClayIconName;
closeLabel?: string;
disabled?: boolean;
label: string;
onOpenChange?: ((open: boolean) => void) | undefined;
open: boolean;
panelId?: string;
title: string;
triggerIcon?: ClayIconName;
triggerLabel?: string;
variant?: GameTerrainBuildVariant;
'data-testid'?: string | undefined;
}
export declare function GameCompactJobDrawer({ children, className, closeLabel, disabled, jobs, label, onAction, onOpenChange, onSelectJob, open, panelId, selectedJobId, title, triggerLabel, variant, 'data-testid': testId, }: GameCompactJobDrawerProps): ReactNode;
export declare interface GameCompactJobDrawerProps {
children?: ReactNode | undefined;
className?: string | undefined;
closeLabel?: string | undefined;
disabled?: boolean | undefined;
jobs?: readonly GameConstructionJob[] | undefined;
label: string;
onAction?: ((actionId: string, jobId: string) => void) | undefined;
onOpenChange?: ((open: boolean) => void) | undefined;
onSelectJob?: ((jobId: string) => void) | undefined;
open: boolean;
panelId?: string | undefined;
selectedJobId?: string | undefined;
title: string;
triggerLabel?: string | undefined;
variant?: Extract | undefined;
'data-testid'?: string | undefined;
}
export declare interface GameConstructionAction {
ariaLabel?: string | undefined;
disabled?: boolean | undefined;
icon?: ClayIconName | undefined;
id: GameConstructionActionId;
label: string;
meta?: string | undefined;
tone?: GameButtonVariant | undefined;
}
export declare type GameConstructionActionId = 'approve' | 'cancel' | 'preview' | 'revise' | 'revert' | string;
export declare function GameConstructionApprovalBar({ actions, className, disabled, label, localOnlyLabel, onAction, providerMode, status, validationWarnings, variant, 'data-testid': testId, }: GameConstructionApprovalBarProps): ReactNode;
export declare interface GameConstructionApprovalBarProps {
actions?: readonly GameConstructionAction[] | undefined;
className?: string | undefined;
disabled?: boolean | undefined;
label: string;
localOnlyLabel?: string | undefined;
onAction?: ((actionId: string) => void) | undefined;
providerMode?: GameConstructionProviderMode | undefined;
status: GameConstructionJobStatus;
validationWarnings?: readonly GameConstructionValidationWarning[] | undefined;
variant?: GameConstructionVariant | undefined;
'data-testid'?: string | undefined;
}
export declare interface GameConstructionBadge {
label: string;
tone?: GameBadgeTone | undefined;
}
export declare interface GameConstructionFact {
id: string;
label: string;
value: ReactNode;
}
export declare interface GameConstructionJob {
actions?: readonly GameConstructionAction[] | undefined;
after?: GameConstructionPreviewPane | undefined;
badges?: readonly GameConstructionBadge[] | undefined;
before?: GameConstructionPreviewPane | undefined;
crew?: readonly GameRobotCrewMember[] | undefined;
description?: string | undefined;
estimate?: string | undefined;
facts?: readonly GameConstructionFact[] | undefined;
id: string;
location?: string | undefined;
progressLabel?: string | undefined;
progressMax?: number | undefined;
progressValue?: number | undefined;
providerMode?: GameConstructionProviderMode | undefined;
status: GameConstructionJobStatus;
statusLabel?: string | undefined;
steps?: readonly GameConstructionProgressStep[] | undefined;
title: string;
validationWarnings?: readonly GameConstructionValidationWarning[] | undefined;
}
export declare function GameConstructionJobCard({ className, density, job, onAction, onSelect, selected, showApprovalBar, showBeforeAfter, variant, 'data-testid': testId, }: GameConstructionJobCardProps): ReactNode;
export declare interface GameConstructionJobCardProps {
className?: string | undefined;
density?: GameSurfaceDensity | undefined;
job: GameConstructionJob;
onAction?: ((actionId: string, jobId: string) => void) | undefined;
onSelect?: ((jobId: string) => void) | undefined;
selected?: boolean | undefined;
showApprovalBar?: boolean | undefined;
showBeforeAfter?: boolean | undefined;
variant?: GameConstructionVariant | undefined;
'data-testid'?: string | undefined;
}
export declare type GameConstructionJobStatus = 'draft' | 'preview' | 'queued' | 'working' | 'blocked' | 'readyForReview' | 'accepted' | 'cancelled';
export declare interface GameConstructionPreviewPane {
caption?: string | undefined;
content?: ReactNode | undefined;
label: string;
}
export declare function GameConstructionProgress({ className, label, max, progressLabel, showStatusBadge, status, statusLabel: explicitStatusLabel, steps, validationWarnings, value, variant, 'data-testid': testId, }: GameConstructionProgressProps): ReactNode;
export declare interface GameConstructionProgressProps {
className?: string | undefined;
label: string;
max?: number | undefined;
progressLabel?: string | undefined;
showStatusBadge?: boolean | undefined;
status: GameConstructionJobStatus;
statusLabel?: string | undefined;
steps?: readonly GameConstructionProgressStep[] | undefined;
validationWarnings?: readonly GameConstructionValidationWarning[] | undefined;
value?: number | undefined;
variant?: GameConstructionVariant | undefined;
'data-testid'?: string | undefined;
}
export declare interface GameConstructionProgressStep {
caption?: string | undefined;
id: string;
label: string;
status: GameConstructionProgressStepStatus;
}
export declare type GameConstructionProgressStepStatus = 'pending' | 'active' | 'complete' | 'blocked';
export declare type GameConstructionProviderMode = 'local-only' | 'mock' | 'paid-disabled';
export declare type GameConstructionValidationTone = Extract;
export declare interface GameConstructionValidationWarning {
description?: string | undefined;
id: string;
label: string;
tone?: GameConstructionValidationTone | undefined;
}
export declare type GameConstructionVariant = 'desktop' | 'tablet' | 'mobile' | 'small-mobile';
export declare function GameContractorPanel({ activePreviewView, className, density, drawerOpen, emptyDescription, emptyTitle, jobs, label, onAction, onDrawerOpenChange, onPreviewViewChange, onSelectJob, selectedJobId, subtitle, title, variant, 'data-testid': testId, }: GameContractorPanelProps): ReactNode;
export declare interface GameContractorPanelProps {
activePreviewView?: GameBeforeAfterView | undefined;
className?: string | undefined;
density?: GameSurfaceDensity | undefined;
drawerOpen?: boolean | undefined;
emptyDescription?: string | undefined;
emptyTitle?: string | undefined;
jobs: readonly GameConstructionJob[];
label: string;
onAction?: ((actionId: string, jobId: string) => void) | undefined;
onDrawerOpenChange?: ((open: boolean) => void) | undefined;
onPreviewViewChange?: ((view: GameBeforeAfterView) => void) | undefined;
onSelectJob?: ((jobId: string) => void) | undefined;
selectedJobId?: string | undefined;
subtitle?: string | undefined;
title: string;
variant?: GameConstructionVariant | undefined;
'data-testid'?: string | undefined;
}
export declare function GameDialog({ children, className, title }: GameDialogProps): ReactNode;
export declare interface GameDialogProps {
children: ReactNode;
className?: string;
title: string;
}
export declare function GameEmptyState({ action, className, description, icon, title, }: GameEmptyStateProps): ReactNode;
export declare interface GameEmptyStateProps {
/** Optional clay icon shown above the title. */
icon?: ClayIconName;
title: string;
description?: string;
/** Optional call-to-action node (e.g. a GameButton). */
action?: ReactNode;
className?: string;
}
export declare interface GameFactItem {
icon?: ClayIconName;
id: string;
label: string;
meta?: string;
tone?: GameBadgeTone;
value: ReactNode;
}
export declare function GameFactList({ className, density, facts, label, variant, }: GameFactListProps): ReactNode;
export declare interface GameFactListProps {
className?: string;
density?: GameSurfaceDensity;
facts: readonly GameFactItem[];
label: string;
variant?: 'facts' | 'stats';
}
export declare function GameField({ children, className, error, hint, label, required, }: GameFieldProps): ReactNode;
export declare interface GameFieldProps {
/** The input/textarea this field labels. Rendered inside the