import io
from PIL import Image
from clickgen import __path__ as __path__
from clickgen.core import CursorAlias as CursorAlias
from clickgen.util import remove_util as remove_util
from pathlib import Path
from typing import Any, List, NamedTuple, Tuple, Union

clickgen_pypi_path: Any

class XCursor:
    config_file: Path
    prefix: Path
    out_dir: Path
    out: Path
    def __init__(self, config_file: Path, out_dir: Path) -> None: ...
    def gen_argv_ctypes(self, argv: List[str]) -> Any: ...
    def generate(self) -> None: ...
    @classmethod
    def create(cls, alias_file: Path, out_dir: Path) -> Path: ...
    @classmethod
    def from_bitmap(cls, **kwargs) -> Path: ...
Color = Tuple[int, int, int, int]

class Options(NamedTuple):
    add_shadows: bool
    blur: float
    color: Color
    down_shift: float
    right_shift: float
ConfigFrame = Tuple[int, int, int, str, int]

class WindowsCursor:
    options: Options
    config_file: Path
    prefix: Path
    out_dir: Path
    out: Path
    def __init__(self, config_file: Path, out_dir: Path, options: Options) -> None: ...
    def get_frames(self) -> List[ConfigFrame]: ...
    @staticmethod
    def frames_have_animation(frames: List[ConfigFrame]) -> bool: ...
    @staticmethod
    def make_framesets(frames: List[ConfigFrame]) -> List[List[ConfigFrame]]: ...
    @staticmethod
    def copy_to(out: Union[io.BytesIO, io.BufferedWriter], buf: io.BytesIO) -> None: ...
    def make_ani(self, frames: List[ConfigFrame], out_buffer: Union[io.BytesIO, io.BufferedWriter]) -> None: ...
    @staticmethod
    def shadowize(shadow: Image.Image, orig: Image.Image, color: Color) -> None: ...
    def create_shadow(self, orig: Image.Image) -> Tuple[int, Image.Image]: ...
    @staticmethod
    def write_png(out: Union[io.BytesIO, io.BufferedWriter], frame_png: Image.Image) -> None: ...
    @staticmethod
    def write_cur(out: Union[io.BytesIO, io.BufferedWriter], frame: ConfigFrame, frame_png: Image.Image) -> None: ...
    def make_cur(self, frames: List[ConfigFrame], animated: bool = ...) -> io.BytesIO: ...
    def generate(self) -> None: ...
    @classmethod
    def create(cls, alias_file: Path, out_dir: Path, options=...) -> Path: ...
    @classmethod
    def from_bitmap(cls, **kwargs) -> Path: ...
