from .core import *
import abc
from _typeshed import Incomplete
from typing import Any

class ButtonText(TextSurface):
    def __init__(self, text: str, size: int_f, _color: color_liked = ..., _bold: bool = ..., _italic: bool = ..., alpha_when_not_hover: int = ...) -> None: ...
    def set_is_hovered(self, value: bool) -> None: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class AbstractButton(AbstractImageSurface, metaclass=ABCMeta):
    def __init__(self, img: ImageSurface, x: int, y: int, width: int = ..., height: int = ..., tag: str = ...) -> None: ...
    def has_been_hovered(self) -> bool: ...
    def set_hover_img(self, img: ImageSurface) -> None: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class ButtonComponent(AbstractButton):
    def __init__(self, img: ImageSurface, width: int = ..., height: int = ..., tag: str = ...) -> None: ...
    def has_been_hovered(self) -> bool: ...
    def set_is_hovered(self, value: bool) -> None: ...
    @staticmethod
    def icon(path: PoI, size: tuple[int, int], alpha_when_not_hover: int = ...) -> ButtonComponent: ...
    @staticmethod
    def text(text: str, size: int_f, _color: color_liked = ..., _bold: bool = ..., _italic: bool = ..., alpha_when_not_hover: int = ...) -> ButtonText: ...

class Button(AbstractButton):
    def __init__(self, img: ImageSurface, x: int, y: int, width: int = ..., height: int = ..., tag: str = ...) -> None: ...
    @staticmethod
    def load(path: PoI, position: tuple[int, int], size: tuple[int, int], alpha_when_not_hover: int = ...) -> Button: ...
    def set_auto_resize(self, value: bool) -> None: ...
    def set_scale_for_resizing_width(self, value: number = ...) -> None: ...
    def set_scale_for_resizing_height(self, value: number = ...) -> None: ...
    def set_icon(self, _icon: Optional[ButtonComponent] = ...) -> None: ...
    def get_icon(self) -> Optional[ButtonComponent]: ...
    def get_description(self) -> str: ...
    def set_description(self, value: str = ...) -> None: ...
    def get_text(self) -> Optional[ButtonText]: ...
    def set_text(self, text_surface: Optional[ButtonText] = ...) -> None: ...
    def has_been_hovered(self) -> bool: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class AbstractGameObjectsContainer(AbstractImageSurface, metaclass=ABCMeta):
    def __init__(self, bg_img: Optional[PoI], x: int_f, y: int_f, width: int, height: int, tag: str = ...) -> None: ...
    @property
    def item_num(self) -> int: ...
    def clear(self) -> None: ...
    def is_empty(self) -> bool: ...
    def set_width(self, value: int_f) -> None: ...
    def set_height(self, value: int_f) -> None: ...
    def update_background(self, newImg: Any) -> None: ...

class GameObjectsDictContainer(AbstractGameObjectsContainer):
    def __init__(self, bg_img: Optional[PoI], x: int_f, y: int_f, width: int, height: int, tag: str = ...) -> None: ...
    def __setitem__(self, key: str, new_item: Optional[object]) -> None: ...
    def __getitem__(self, key: str) -> Any: ...
    def __len__(self) -> int: ...
    @property
    def item_being_hovered(self) -> Optional[str]: ...
    def keys(self) -> tuple: ...
    def set(self, key: str, new_item: Optional[object]) -> None: ...
    def get(self, key: str) -> Any: ...
    def swap(self, key1: str, key2: str) -> None: ...
    def remove(self, key: str) -> None: ...
    def contain(self, key: str) -> bool: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class GameObjectsListContainer(AbstractGameObjectsContainer):
    def __init__(self, bg_img: Optional[PoI], x: int_f, y: int_f, width: int, height: int, tag: str = ...) -> None: ...
    def __getitem__(self, index: int) -> Any: ...
    def __setitem__(self, index: int, new_item: Optional[object]) -> None: ...
    def __len__(self) -> int: ...
    @property
    def item_being_hovered(self) -> int: ...
    def append(self, new_item: Optional[object]) -> None: ...
    def swap(self, index1: int, index2: int) -> None: ...
    def remove(self, index: int) -> None: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class DropDownList(GameObjectsDictContainer):
    outline_thickness: int
    def __init__(self, bg_img: Optional[PoI], x: int_f, y: int_f, font_size: int, font_color: color_liked = ..., tag: str = ...) -> None: ...
    def update_font_size(self, font_size: int) -> None: ...
    def update_font_color(self, font_color: color_liked) -> None: ...
    def set(self, key: str, new_item: strint) -> None: ...
    def get(self, key: str) -> strint: ...
    def get_selected_item(self) -> str: ...
    def set_selected_item(self, key: str) -> None: ...
    def get_height(self) -> int: ...
    def remove(self, key: str) -> None: ...
    def clear(self) -> None: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class AbstractScrollBarsSurface(SurfaceWithLocalPos, metaclass=ABCMeta):
    def __init__(self) -> None: ...
    def get_surface_width(self) -> int: ...
    def get_surface_height(self) -> int: ...
    def get_left(self) -> int: ...
    def get_top(self) -> int: ...
    def get_right(self) -> int: ...
    def get_bottom(self) -> int: ...
    def get_width(self) -> int: ...
    def get_height(self) -> int: ...
    def is_hovered(self, off_set: Optional[tuple[int, int]] = ...) -> bool: ...
    def get_bar_color(self) -> tuple[int, int, int, int]: ...
    def set_bar_color(self, color: color_liked) -> None: ...
    def display_scrollbar(self, _surface: ImageSurface, off_set: tuple[int, int] = ...) -> None: ...

class AbstractSurfaceWithScrollBar(AbstractScrollBarsSurface, metaclass=ABCMeta):
    axis_mode: Incomplete
    def __init__(self) -> None: ...
    def switch_mode(self) -> None: ...
    @property
    def scroll_bar_pos(self) -> str: ...
    def get_scroll_bar_pos(self) -> str: ...
    def set_scroll_bar_pos(self, pos: str) -> None: ...
    def display_scrollbar(self, _surface: ImageSurface, off_set: tuple[int, int] = ...) -> None: ...

class SurfaceContainerWithScrollBar(GameObjectsDictContainer, AbstractSurfaceWithScrollBar):
    padding: int
    distance_between_item: int
    axis_mode: Incomplete
    def __init__(self, img: Optional[PoI], x: int_f, y: int_f, width: int, height: int, mode: Axis = ..., tag: str = ...) -> None: ...
    def get_surface_width(self) -> int: ...
    def get_surface_height(self) -> int: ...
    @property
    def item_per_line(self) -> int: ...
    def get_item_per_line(self) -> int: ...
    def set_item_per_line(self, value: int) -> None: ...
    def switch_mode(self) -> None: ...
    def display(self, _surface: ImageSurface, off_set: tuple[int, int] = ...) -> None: ...

class _RemoveCharLocation(enum.IntEnum):
    LEFT: Incomplete
    RIGHT: Incomplete
    ALL: Incomplete

class AbstractInputBox(GameObject2d, metaclass=ABCMeta):
    need_save: bool
    def __init__(self, x: int_f, y: int_f, font_size: int, txt_color: color_liked, default_width: int) -> None: ...
    def get_width(self) -> int: ...
    def get_height(self) -> int: ...
    def get_fontsize(self) -> int: ...
    def set_fontsize(self, font_size: int) -> None: ...
    def set_pos(self, x: int_f, y: int_f) -> None: ...

class SingleLineInputBox(AbstractInputBox):
    def __init__(self, x: int_f, y: int_f, font_size: int, txt_color: color_liked, default_width: int = ...) -> None: ...
    need_save: bool
    def get_text(self) -> str: ...
    def set_text(self, new_txt: str = ...) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class MultipleLinesInputBox(AbstractInputBox):
    def __init__(self, x: int_f, y: int_f, font_size: int, txt_color: color_liked, default_width: int = ...) -> None: ...
    need_save: bool
    def get_text(self) -> list: ...
    def get_raw_text(self) -> str: ...
    def set_text(self, new_txt: list = ...) -> None: ...
    def set_fontsize(self, font_size: int) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class Console(SingleLineInputBox, HidableSurface, threading.Thread):
    color_active: Incomplete
    color_inactive: Incomplete
    daemon: bool
    def __init__(self, x: int_f, y: int_f, font_size: int = ..., default_width: int = ...) -> None: ...
    def safely_set_text(self, new_txt: str) -> None: ...
    def run(self) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class AbstractProgressBar(AbstractImageSurface, metaclass=ABCMeta):
    def __init__(self, img: Any, x: int_f, y: int_f, width: int_f, height: int_f, tag: str) -> None: ...
    @property
    def percentage(self) -> float: ...
    def get_percentage(self) -> float: ...
    def set_percentage(self, value: float) -> None: ...

class ProgressBar(AbstractProgressBar):
    def __init__(self, x: int_f, y: int_f, max_width: int, height: int, color: color_liked, tag: str = ...) -> None: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class SimpleRectPointsBar(AbstractProgressBar):
    def __init__(self, x: int_f, y: int_f, max_width: int, height: int, front_color: color_liked, back_color: color_liked, outline_color: color_liked, font_color: color_liked, tag: str = ...) -> None: ...
    def get_percentage(self) -> float: ...
    def set_current_point(self, value: int) -> None: ...
    def set_max_point(self, value: int) -> None: ...
    def set_color(self, front_color: color_liked, back_color: Optional[color_liked] = ..., outline_color: Optional[color_liked] = ..., font_color: Optional[color_liked] = ...) -> None: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class ProgressBarSurface(AbstractProgressBar):
    axis_mode: Incomplete
    def __init__(self, imgOnTop: Optional[PoI], imgOnBottom: Optional[PoI], x: int_f, y: int_f, max_width: int, height: int, mode: Axis = ..., tag: str = ...) -> None: ...
    def copy(self) -> ProgressBarSurface: ...
    def light_copy(self) -> ProgressBarSurface: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class ProgressBarAdjuster(ProgressBarSurface):
    def __init__(self, imgOnTop: Optional[PoI], imgOnBottom: Optional[PoI], indicator_img: PoI, x: int_f, y: int_f, max_width: int, height: int, indicator_width: int, indicator_height: int, mode: Axis = ..., tag: str = ...) -> None: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class DynamicProgressBarSurface(ProgressBarSurface):
    def __init__(self, imgOnTop: Optional[PoI], imgOnBottom: Optional[PoI], x: int_f, y: int_f, max_width: int, height: int, mode: Axis = ...) -> None: ...
    @property
    def accuracy(self) -> int: ...
    @property
    def percentage(self) -> float: ...
    def get_percentage(self) -> float: ...
    def set_percentage(self, value: float) -> None: ...
    def copy(self) -> DynamicProgressBarSurface: ...
    def light_copy(self) -> DynamicProgressBarSurface: ...
    def display(self, _surface: ImageSurface, offSet: tuple[int, int] = ...) -> None: ...

class UiGenerator:
    @classmethod
    def generate(cls, data: Union[str, dict], custom_values: dict = ...) -> GameObject2d: ...
    @classmethod
    def generate_container(cls, data: Union[str, dict], custom_values: dict = ...) -> GameObjectsDictContainer: ...

UI: UiGenerator

class AbstractInternalMenu(HidableSurface, metaclass=ABCMeta):
    def __init__(self, menu_name: str) -> None: ...
    def initialize(self) -> None: ...
    def is_hovered(self) -> bool: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class DefaultOptionMenu(AbstractInternalMenu):
    need_update: Incomplete
    def __init__(self) -> None: ...
    def initialize(self) -> None: ...
    def get_width(self) -> int: ...
    def get_height(self) -> int: ...
    def update_background(self, newImg: Any) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

OptionMenu: DefaultOptionMenu

class PauseMenu(AbstractInternalMenu):
    split_point: int
    def __init__(self) -> None: ...
    def get_button_clicked(self) -> str: ...
    def initialize(self) -> None: ...
    def set_visible(self, visible: bool) -> None: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class SaveOrLoadSelectedProgressMenu(HidableSurface):
    row: int
    colum: int
    switch: bool
    def __init__(self) -> None: ...
    def refresh(self) -> None: ...
    def set_visible(self, visible: bool) -> None: ...
    def get_selected_slot(self) -> int: ...
    def get_selected_save(self) -> Optional[ProgressDataPackageSavingSystem]: ...
    def draw(self, _surface: ImageSurface) -> None: ...

class PauseMenuModuleForGameSystem(AbstractInternalMenu, metaclass=abc.ABCMeta):
    def __init__(self) -> None: ...
    def save_progress(self, screenshot: ImageSurface, slotId: int) -> None: ...
    def load_progress(self, _data: dict) -> None: ...
    def stop(self) -> None: ...
    def update_language(self) -> None: ...
