"""
This type stub file was generated by pyright.
"""

from typing import Any

def make_delta_path(root_container: int, parent_path: tuple[int, ...], index: int) -> list[int]:
    ...

def get_container_cursor(root_container: int | None) -> RunningCursor | None:
    """Return the top-level RunningCursor for the given container.
    This is the cursor that is used when user code calls something like
    `st.foo` (which uses the main container) or `st.sidebar.foo` (which uses
    the sidebar container).
    """
    ...

class Cursor:
    """A pointer to a delta location in the app.

    When adding an element to the app, you should always call
    get_locked_cursor() on that element's respective Cursor.
    """
    def __repr__(self) -> str:
        ...
    
    @property
    def root_container(self) -> int:
        """The top-level container this cursor lives within - either
        RootContainer.MAIN or RootContainer.SIDEBAR.
        """
        ...
    
    @property
    def parent_path(self) -> tuple[int, ...]:
        """The cursor's parent's path within its container."""
        ...
    
    @property
    def index(self) -> int:
        """The index of the Delta within its parent block."""
        ...
    
    @property
    def delta_path(self) -> list[int]:
        """The complete path of the delta pointed to by this cursor - its
        container, parent path, and index.
        """
        ...
    
    @property
    def is_locked(self) -> bool:
        ...
    
    def get_locked_cursor(self, **props) -> LockedCursor:
        ...
    
    @property
    def props(self) -> Any:
        """Other data in this cursor. This is a temporary measure that will go
        away when we implement improved return values for elements.

        This is only implemented in LockedCursor.
        """
        ...
    


class RunningCursor(Cursor):
    def __init__(self, root_container: int, parent_path: tuple[int, ...] = ...) -> None:
        """A moving pointer to a delta location in the app.

        RunningCursors auto-increment to the next available location when you
        call get_locked_cursor() on them.

        Parameters
        ----------
        root_container: int
            The root container this cursor lives in.
        parent_path: tuple of ints
          The full path of this cursor, consisting of the IDs of all ancestors.
          The 0th item is the topmost ancestor.

        """
        ...
    
    @property
    def root_container(self) -> int:
        ...
    
    @property
    def parent_path(self) -> tuple[int, ...]:
        ...
    
    @property
    def index(self) -> int:
        ...
    
    @property
    def is_locked(self) -> bool:
        ...
    
    def get_locked_cursor(self, **props) -> LockedCursor:
        ...
    


class LockedCursor(Cursor):
    def __init__(self, root_container: int, parent_path: tuple[int, ...] = ..., index: int = ..., **props) -> None:
        """A locked pointer to a location in the app.

        LockedCursors always point to the same location, even when you call
        get_locked_cursor() on them.

        Parameters
        ----------
        root_container: int
            The root container this cursor lives in.
        parent_path: tuple of ints
          The full path of this cursor, consisting of the IDs of all ancestors. The
          0th item is the topmost ancestor.
        index: int
        **props: any
          Anything else you want to store in this cursor. This is a temporary
          measure that will go away when we implement improved return values
          for elements.

        """
        ...
    
    @property
    def root_container(self) -> int:
        ...
    
    @property
    def parent_path(self) -> tuple[int, ...]:
        ...
    
    @property
    def index(self) -> int:
        ...
    
    @property
    def is_locked(self) -> bool:
        ...
    
    def get_locked_cursor(self, **props) -> LockedCursor:
        ...
    
    @property
    def props(self) -> Any:
        ...
    


