declare module "ui-next-library" {
  import { ComponentType, FC, InputHTMLAttributes, ButtonHTMLAttributes, ReactNode, HTMLAttributes } from "react";

  interface TextProps extends InputHTMLAttributes<HTMLInputElement> {
    Icon?: ComponentType<any>;
    iconPosition?: "left" | "right";
    iconClassName?: string;
    error?: boolean;
    errorMessage?: string;
    register?: Function;
    registerOptions?: object;
  }

  interface EmailProps extends TextProps {
    errorMessage?: string;
  }

  interface PasswordProps extends TextProps {
    showPasswordIcon?: boolean;
    requireValidation?: boolean;
    customValidationMessage?: string;
  }

  interface NumberProps extends TextProps {
    decimals?: number;
    requiredMessage?: string;
  }
  
  interface ButtonBaseProps extends ButtonHTMLAttributes<HTMLButtonElement> {
    children?: ReactNode;
  }

  interface SubmitProps extends ButtonBaseProps {
    isLoading?: boolean;
    loadingtext?: string;
    showLoadingIcon?: boolean;
    loadingIcon?: ComponentType<any>;
    color?: "blue" | "green" | "red" | "gray";
    fullWidth?: boolean;
    size?: "sm" | "md" | "lg";
    height?: string;
    children?: ReactNode;
  }

  interface ContainerElementsProps extends HTMLAttributes<HTMLDivElement> {
    title?: string;
    width?: string;
    height?: string;
    titlePosition?: "left" | "center" | "right";
    backgroundColor?: string;
    rounded?: string;
    shadow?: string;
    shadowColor?: "black" | "white";
    shadowIntensity?: "light" | "normal" | "strong";
    border?: boolean;
    borderColor?: string;
    padding?: string;
    gap?: string;
    titleClassName?: string;
    bodyClassName?: string;
    children?: ReactNode;
  }
  
  interface SpinnerProps {
    className?: string;
    size?: string;
  }

  export const Text: FC<TextProps>;
  export const Email: FC<EmailProps>;
  export const Password: FC<PasswordProps>;
  export const Number: FC<NumberProps>;
  export const ButtonBase: FC<ButtonBaseProps>;
  export const Submit: FC<SubmitProps>;
  export const ContainerElements: FC<ContainerElementsProps>;
  export const Spinner: FC<SpinnerProps>;
}
  