# pylint: disable=missing-module-docstring,missing-function-docstring
# pylint: disable=unused-argument,redefined-outer-name

from typing import Union, Literal, Iterator, Optional, Sequence

TermProgram = Union[bool, str]
ControlCodes = Literal['parse', 'strict', 'ignore']


def wcwidth(wc: str, unicode_version: str = 'auto', ambiguous_width: int = 1) -> int: ...
def wcswidth(
    pwcs: str,
    n: Optional[int] = None,
    unicode_version: str = 'auto',
    ambiguous_width: int = 1,
) -> int: ...
def wcstwidth(
    pwcs: str,
    n: Optional[int] = None,
    unicode_version: str = 'auto',
    ambiguous_width: int = 1,
    term_program: TermProgram = True,
) -> int: ...
def width(
    text: str,
    *,
    control_codes: ControlCodes = 'parse',
    tabsize: int = 8,
    ambiguous_width: int = 1,
    term_program: TermProgram = False,
) -> int: ...
def ljust(
    text: str,
    dest_width: int,
    fillchar: str = ' ',
    *,
    control_codes: ControlCodes = 'parse',
    ambiguous_width: int = 1,
    term_program: TermProgram = False,
) -> str: ...
def rjust(
    text: str,
    dest_width: int,
    fillchar: str = ' ',
    *,
    control_codes: ControlCodes = 'parse',
    ambiguous_width: int = 1,
    term_program: TermProgram = False,
) -> str: ...
def center(
    text: str,
    dest_width: int,
    fillchar: str = ' ',
    *,
    control_codes: ControlCodes = 'parse',
    ambiguous_width: int = 1,
    term_program: TermProgram = False,
) -> str: ...
def clip(
    text: str,
    start: int,
    end: int,
    *,
    fillchar: str = ' ',
    tabsize: int = 8,
    ambiguous_width: int = 1,
    propagate_sgr: bool = True,
    control_codes: ControlCodes = 'parse',
    term_program: TermProgram = False,
) -> Optional[str]: ...
def strip_sequences(text: str) -> str: ...
def propagate_sgr(lines: Sequence[str]) -> list[str]: ...
def iter_graphemes(
    unistr: str,
    start: int = 0,
    end: Optional[int] = None,
) -> Iterator[str]: ...
