from collections.abc import Callable
from typing import Any

from django.http.response import HttpResponseBase
from django.urls import URLPattern
from django.utils.functional import cached_property
from wagtail.admin.menu import WagtailMenuRegisterable, WagtailMenuRegisterableGroup

class ViewSet(WagtailMenuRegisterable):
    UNDEFINED: object
    name: str | None
    icon: str
    def __init__(self, name: str | None = None, **kwargs: Any) -> None: ...
    def get_common_view_kwargs(self, **kwargs: Any) -> dict[str, Any]: ...
    def construct_view(self, view_class: type, **kwargs: Any) -> Callable[..., HttpResponseBase]: ...
    def inject_view_methods(self, view_class: type, method_names: list[str]) -> type: ...
    @cached_property
    def url_prefix(self) -> str: ...
    @cached_property
    def url_namespace(self) -> str: ...
    def on_register(self) -> None: ...
    def get_urlpatterns(self) -> list[URLPattern]: ...
    def get_url_name(self, view_name: str) -> str: ...
    @cached_property
    def menu_icon(self) -> str: ...
    @cached_property
    def menu_url(self) -> str: ...

class ViewSetGroup(WagtailMenuRegisterableGroup):
    def on_register(self) -> None: ...
