import type { ViewStyle } from 'react-native'; import { type SizeValue } from '../../core/theme/sizes'; import type { RadiusValue } from '../../core/theme/radius'; import { type COMPONENT_SHADOW_DEFAULTS, type ShadowValue } from '../../core/theme/shadow'; import type { SurfaceLevel, SurfaceToken } from '../../core/theme/types'; export interface UseSurfaceStylesOptions { /** Explicit elevation step. Wins over `raised`. */ level?: SurfaceLevel; /** Derive the level from the enclosing Surface, plus one. */ raised?: boolean; /** Level used when neither `level` nor `raised` is given. */ defaultLevel?: SurfaceLevel; /** `'auto'` draws the hairline in dark mode only. */ withBorder?: boolean | 'auto'; borderColor?: string; borderWidth?: number; /** Background override — CSS color, `theme.backgrounds` key, or palette name. */ bg?: string; /** Shadow override. Falls back to `componentShadowType`, then the level's default. */ shadow?: ShadowValue; /** * Resolve an unset shadow from `COMPONENT_SHADOW_DEFAULTS[componentShadowType]` * instead of from the level. For components whose depth is part of their * identity rather than a consequence of where they sit. */ componentShadowType?: keyof typeof COMPONENT_SHADOW_DEFAULTS; radius?: RadiusValue; /** Padding — size token or px. Omitted entirely when undefined. */ padding?: SizeValue; } export interface UseSurfaceStylesResult { /** The resolved elevation step — feed this to a SurfaceContext.Provider. */ level: SurfaceLevel; /** The raw token, for callers that need the colors rather than the style. */ token: SurfaceToken; /** Background + border + radius + padding. */ style: ViewStyle; /** Shadow styles, kept separate so callers can drop them per platform. */ shadowStyle: Record; } /** * Resolve one elevation step into concrete styles. * * Shared by `Surface` and by every component that paints its own container but * should still sit on the same ladder (Card, Menu dropdowns, Popover, Dialog). * Keeping the resolution here is the point of the whole exercise: components * pick a *level*, never a color. */ export declare function useSurfaceStyles(options?: UseSurfaceStylesOptions): UseSurfaceStylesResult;