import type { Canvas, Image } from "canvas"; export declare namespace MemeFramework { interface Border { position: "top" | "left" | "bottom" | "right" | "all"; color: string; width: number; } interface Stroke { color: string; width: number; } interface Shadow { x: number; y: number; color: string; blur: number; } interface Position { type: "absolute" | "relative"; top?: string; left?: string; right?: string; bottom?: string; } interface Style { backgroundColor?: string; position?: Position; border?: Border | Border[]; fontStyle?: "bold" | "italic" | undefined; shadow?: Shadow; textColor?: string; textAlign?: CanvasTextAlign; width?: string; height?: string; marginTop?: string; marginBottom?: string; marginLeft?: string; marginRight?: string; fontFamily?: string; fontSize?: string; children?: MemeNode[]; opacity?: number; compositeOperation?: ImageCompositeOperation; maxFontSize?: string; minFontSize?: string; stroke?: Stroke; maxWidth?: string; maxHeight?: string; } interface IntrinsicAttributes { style?: Style; id?: string; children?: MemeNode | MemeNode[]; } interface StackAttributes extends IntrinsicAttributes { align?: HorizontalAlignment; valign?: VerticalAlignment; } interface VStackAttributes extends StackAttributes { } interface HStackAttributes extends StackAttributes { } interface ZStackAttributes extends StackAttributes { } interface TextAttributes extends IntrinsicAttributes { align?: HorizontalAlignment; } interface ImageAttributes extends Omit { source?: Image | Canvas; } type VerticalAlignment = "top" | "middle" | "bottom"; type HorizontalAlignment = "left" | "center" | "right"; type ImageCompositeOperation = "source-over" | "source-in" | "source-out" | "source-atop" | "destination-over" | "destination-in" | "destination-out" | "destination-atop" | "lighter" | "copy" | "xor" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity"; interface MemeElement { type: string; props?: IntrinsicAttributes & { [key: string]: any; }; } type MemeNode = MemeElement | string | null | undefined; type Component

= (props: P) => MemeNode; } export declare namespace MemeFrameworkJSX { type Element = string; interface IntrinsicElements { vstack: MemeFramework.VStackAttributes; hstack: MemeFramework.HStackAttributes; zstack: MemeFramework.ZStackAttributes; image: MemeFramework.ImageAttributes; text: MemeFramework.TextAttributes; } }