Split out Result and ResultType to break import cycle (#3387)
Previously, there was an import cycle between tui.menu_item and tui.types.
This commit is contained in:
parent
57a63053cd
commit
e281c2fa6a
|
|
@ -5,7 +5,8 @@ from archinstall.lib.output import info
|
||||||
from archinstall.lib.profile.profiles_handler import profile_handler
|
from archinstall.lib.profile.profiles_handler import profile_handler
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import FrameProperties, PreviewStyle, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import FrameProperties, PreviewStyle
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from archinstall.lib.installer import Installer
|
from archinstall.lib.installer import Installer
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
|
||||||
from archinstall.default_profiles.xorg import XorgProfile
|
from archinstall.default_profiles.xorg import XorgProfile
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
|
||||||
from archinstall.default_profiles.xorg import XorgProfile
|
from archinstall.default_profiles.xorg import XorgProfile
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
|
||||||
from archinstall.default_profiles.xorg import XorgProfile
|
from archinstall.default_profiles.xorg import XorgProfile
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from archinstall.default_profiles.profile import GreeterType, ProfileType
|
||||||
from archinstall.default_profiles.xorg import XorgProfile
|
from archinstall.default_profiles.xorg import XorgProfile
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from archinstall.lib.output import info
|
||||||
from archinstall.lib.profile.profiles_handler import profile_handler
|
from archinstall.lib.profile.profiles_handler import profile_handler
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import FrameProperties, PreviewStyle, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import FrameProperties, PreviewStyle
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from archinstall.lib.installer import Installer
|
from archinstall.lib.installer import Installer
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,8 @@ from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import SelectMenu, Tui
|
from archinstall.tui.curses_menu import SelectMenu, Tui
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle
|
||||||
|
|
||||||
from .args import ArchConfig
|
from .args import ArchConfig
|
||||||
from .general import JSON, UNSAFE_JSON
|
from .general import JSON, UNSAFE_JSON
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,8 @@ from archinstall.lib.models.device_model import (
|
||||||
)
|
)
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
from ..menu.abstract_menu import AbstractSubMenu
|
from ..menu.abstract_menu import AbstractSubMenu
|
||||||
from ..models.device_model import Fido2Device
|
from ..models.device_model import Fido2Device
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,8 @@ from archinstall.lib.models.device_model import (
|
||||||
)
|
)
|
||||||
from archinstall.tui.curses_menu import EditMenu, SelectMenu
|
from archinstall.tui.curses_menu import EditMenu, SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, Orientation, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties, Orientation
|
||||||
|
|
||||||
from ..menu.list_manager import ListManager
|
from ..menu.list_manager import ListManager
|
||||||
from ..output import FormattedOutput
|
from ..output import FormattedOutput
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@ from typing import TYPE_CHECKING, assert_never, override
|
||||||
|
|
||||||
from archinstall.lib.models.device_model import SubvolumeModification
|
from archinstall.lib.models.device_model import SubvolumeModification
|
||||||
from archinstall.tui.curses_menu import EditMenu
|
from archinstall.tui.curses_menu import EditMenu
|
||||||
from archinstall.tui.types import Alignment, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment
|
||||||
|
|
||||||
from ..menu.list_manager import ListManager
|
from ..menu.list_manager import ListManager
|
||||||
from ..utils.util import prompt_dir
|
from ..utils.util import prompt_dir
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,8 @@ from archinstall.lib.models.device_model import (
|
||||||
from archinstall.lib.output import debug
|
from archinstall.lib.output import debug
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle
|
||||||
|
|
||||||
from ..output import FormattedOutput
|
from ..output import FormattedOutput
|
||||||
from ..utils.util import prompt_dir
|
from ..utils.util import prompt_dir
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ from archinstall.lib.models.packages import Repository
|
||||||
from archinstall.lib.packages.packages import list_available_packages
|
from archinstall.lib.packages.packages import list_available_packages
|
||||||
from archinstall.tui.curses_menu import EditMenu, SelectMenu, Tui
|
from archinstall.tui.curses_menu import EditMenu, SelectMenu, Tui
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties, Orientation, PreviewStyle
|
||||||
|
|
||||||
from ..locale.utils import list_timezones
|
from ..locale.utils import list_timezones
|
||||||
from ..models.audio_configuration import Audio, AudioConfiguration
|
from ..models.audio_configuration import Audio, AudioConfiguration
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import EditMenu, SelectMenu
|
from archinstall.tui.curses_menu import EditMenu, SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, Orientation, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, Orientation
|
||||||
|
|
||||||
from ..menu.list_manager import ListManager
|
from ..menu.list_manager import ListManager
|
||||||
from ..models.users import User
|
from ..models.users import User
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, assert_never, override
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import EditMenu, SelectMenu
|
from archinstall.tui.curses_menu import EditMenu, SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
from ..menu.list_manager import ListManager
|
from ..menu.list_manager import ListManager
|
||||||
from ..models.network_configuration import NetworkConfiguration, Nic, NicType
|
from ..models.network_configuration import NetworkConfiguration, Nic, NicType
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,8 @@ from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, FrameStyle, Orientation, PreviewStyle, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties, FrameStyle, Orientation, PreviewStyle
|
||||||
|
|
||||||
from ..hardware import GfxDriver, SysInfo
|
from ..hardware import GfxDriver, SysInfo
|
||||||
from ..models.bootloader import Bootloader
|
from ..models.bootloader import Bootloader
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,8 @@ from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
from ..menu.abstract_menu import AbstractSubMenu
|
from ..menu.abstract_menu import AbstractSubMenu
|
||||||
from ..models.locale import LocaleConfiguration
|
from ..models.locale import LocaleConfiguration
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, Any, Self
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import SelectMenu, Tui
|
from archinstall.tui.curses_menu import SelectMenu, Tui
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Chars, FrameProperties, FrameStyle, PreviewStyle, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Chars, FrameProperties, FrameStyle, PreviewStyle
|
||||||
|
|
||||||
from ..output import error
|
from ..output import error
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@ from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment
|
||||||
|
|
||||||
from ..output import FormattedOutput
|
from ..output import FormattedOutput
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from archinstall.tui.curses_menu import EditMenu, SelectMenu, Tui
|
from archinstall.tui.curses_menu import EditMenu, SelectMenu, Tui
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties
|
||||||
|
|
||||||
from .menu.abstract_menu import AbstractSubMenu
|
from .menu.abstract_menu import AbstractSubMenu
|
||||||
from .menu.list_manager import ListManager
|
from .menu.list_manager import ListManager
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ from typing import TYPE_CHECKING, override
|
||||||
from archinstall.default_profiles.profile import GreeterType, Profile
|
from archinstall.default_profiles.profile import GreeterType, Profile
|
||||||
from archinstall.tui.curses_menu import SelectMenu
|
from archinstall.tui.curses_menu import SelectMenu
|
||||||
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
from archinstall.tui.menu_item import MenuItem, MenuItemGroup
|
||||||
from archinstall.tui.types import Alignment, FrameProperties, Orientation, ResultType
|
from archinstall.tui.result import ResultType
|
||||||
|
from archinstall.tui.types import Alignment, FrameProperties, Orientation
|
||||||
|
|
||||||
from ..hardware import GfxDriver
|
from ..hardware import GfxDriver
|
||||||
from ..interactions.system_conf import select_driver
|
from ..interactions.system_conf import select_driver
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
from .curses_menu import EditMenu, SelectMenu, Tui
|
from .curses_menu import EditMenu, SelectMenu, Tui
|
||||||
from .menu_item import MenuItem, MenuItemGroup
|
from .menu_item import MenuItem, MenuItemGroup
|
||||||
from .types import Alignment, Chars, FrameProperties, FrameStyle, Orientation, PreviewStyle, Result, ResultType
|
from .result import Result, ResultType
|
||||||
|
from .types import Alignment, Chars, FrameProperties, FrameStyle, Orientation, PreviewStyle
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'Alignment',
|
'Alignment',
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ from typing import TYPE_CHECKING, Literal, override
|
||||||
from ..lib.output import debug
|
from ..lib.output import debug
|
||||||
from .help import Help
|
from .help import Help
|
||||||
from .menu_item import MenuItem, MenuItemGroup, MenuItemsState
|
from .menu_item import MenuItem, MenuItemGroup, MenuItemsState
|
||||||
|
from .result import Result, ResultType
|
||||||
from .types import (
|
from .types import (
|
||||||
SCROLL_INTERVAL,
|
SCROLL_INTERVAL,
|
||||||
STYLE,
|
STYLE,
|
||||||
|
|
@ -24,8 +25,6 @@ from .types import (
|
||||||
MenuKeys,
|
MenuKeys,
|
||||||
Orientation,
|
Orientation,
|
||||||
PreviewStyle,
|
PreviewStyle,
|
||||||
Result,
|
|
||||||
ResultType,
|
|
||||||
ViewportEntry,
|
ViewportEntry,
|
||||||
_FrameDim,
|
_FrameDim,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from enum import Enum, auto
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from .menu_item import MenuItem
|
||||||
|
|
||||||
|
|
||||||
|
class ResultType(Enum):
|
||||||
|
Selection = auto()
|
||||||
|
Skip = auto()
|
||||||
|
Reset = auto()
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Result:
|
||||||
|
type_: ResultType
|
||||||
|
_item: MenuItem | list[MenuItem] | str | None
|
||||||
|
|
||||||
|
def has_item(self) -> bool:
|
||||||
|
return self._item is not None
|
||||||
|
|
||||||
|
def get_value(self) -> Any:
|
||||||
|
return self.item().get_value()
|
||||||
|
|
||||||
|
def get_values(self) -> list[Any]:
|
||||||
|
return [i.get_value() for i in self.items()]
|
||||||
|
|
||||||
|
def item(self) -> MenuItem:
|
||||||
|
assert self._item is not None and isinstance(self._item, MenuItem)
|
||||||
|
return self._item
|
||||||
|
|
||||||
|
def items(self) -> list[MenuItem]:
|
||||||
|
assert self._item is not None and isinstance(self._item, list)
|
||||||
|
return self._item
|
||||||
|
|
||||||
|
def text(self) -> str:
|
||||||
|
assert self._item is not None and isinstance(self._item, str)
|
||||||
|
return self._item
|
||||||
|
|
@ -1,9 +1,6 @@
|
||||||
import curses
|
import curses
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from .menu_item import MenuItem
|
|
||||||
|
|
||||||
SCROLL_INTERVAL = 10
|
SCROLL_INTERVAL = 10
|
||||||
|
|
||||||
|
|
@ -94,23 +91,11 @@ class FrameProperties:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class ResultType(Enum):
|
|
||||||
Selection = auto()
|
|
||||||
Skip = auto()
|
|
||||||
Reset = auto()
|
|
||||||
|
|
||||||
|
|
||||||
class Orientation(Enum):
|
class Orientation(Enum):
|
||||||
VERTICAL = auto()
|
VERTICAL = auto()
|
||||||
HORIZONTAL = auto()
|
HORIZONTAL = auto()
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class MenuCell:
|
|
||||||
item: MenuItem
|
|
||||||
text: str
|
|
||||||
|
|
||||||
|
|
||||||
class PreviewStyle(Enum):
|
class PreviewStyle(Enum):
|
||||||
NONE = auto()
|
NONE = auto()
|
||||||
BOTTOM = auto()
|
BOTTOM = auto()
|
||||||
|
|
@ -135,33 +120,6 @@ class Chars:
|
||||||
Right_arrow = "←"
|
Right_arrow = "←"
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class Result:
|
|
||||||
type_: ResultType
|
|
||||||
_item: MenuItem | list[MenuItem] | str | None
|
|
||||||
|
|
||||||
def has_item(self) -> bool:
|
|
||||||
return self._item is not None
|
|
||||||
|
|
||||||
def get_value(self) -> Any:
|
|
||||||
return self.item().get_value()
|
|
||||||
|
|
||||||
def get_values(self) -> list[Any]:
|
|
||||||
return [i.get_value() for i in self.items()]
|
|
||||||
|
|
||||||
def item(self) -> MenuItem:
|
|
||||||
assert self._item is not None and isinstance(self._item, MenuItem)
|
|
||||||
return self._item
|
|
||||||
|
|
||||||
def items(self) -> list[MenuItem]:
|
|
||||||
assert self._item is not None and isinstance(self._item, list)
|
|
||||||
return self._item
|
|
||||||
|
|
||||||
def text(self) -> str:
|
|
||||||
assert self._item is not None and isinstance(self._item, str)
|
|
||||||
return self._item
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class ViewportEntry:
|
class ViewportEntry:
|
||||||
text: str
|
text: str
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue