import { Machine, Service } from '@zag-js/core'; import { CommonProperties, DirectionProperty, PropTypes } from '@zag-js/types'; type LoadStatus = "error" | "loaded"; interface StatusChangeDetails { status: LoadStatus; } type ElementIds = Partial<{ root: string; image: string; fallback: string; }>; interface AvatarProps extends CommonProperties, DirectionProperty { /** * Functional called when the image loading status changes. */ onStatusChange?: ((details: StatusChangeDetails) => void) | undefined; /** * The ids of the elements in the avatar. Useful for composition. */ ids?: ElementIds | undefined; } interface AvatarSchema { props: AvatarProps; context: any; initial: "loading"; effect: "trackImageRemoval" | "trackSrcChange"; action: "invokeOnLoad" | "invokeOnError" | "checkImageStatus"; event: { type: "img.loaded"; src?: string | undefined; } | { type: "img.error"; src?: string | undefined; } | { type: "img.unmount"; } | { type: "src.change"; }; state: "loading" | "error" | "loaded"; } type AvatarService = Service; type AvatarMachine = Machine; interface AvatarApi { /** * Whether the image is loaded. */ loaded: boolean; /** * Function to set new src. */ setSrc: (src: string) => void; /** * Function to set loaded state. */ setLoaded: VoidFunction; /** * Function to set error state. */ setError: VoidFunction; getRootProps: () => T["element"]; getImageProps: () => T["img"]; getFallbackProps: () => T["element"]; } export type { AvatarApi, AvatarMachine, AvatarProps, AvatarSchema, AvatarService, ElementIds, LoadStatus, StatusChangeDetails };