def METHOD_NAME(
    cls: Type[Object[S_co, P]],
    # only for input validation
    base_cls: Type[BaseSelect[Any, Any, Any]],
    /,
    *args: P.args,
    **kwargs: P.kwargs,
) -> Callable[[ItemCallbackType[S_co]], DecoratedItem[S_co]]:
    if args:
        # the `*args` def above is just to satisfy the typechecker
        raise RuntimeError("expected no *args")
    if (origin := get_origin(cls)) is not None:
        cls = origin
    if not isinstance(cls, type) or not issubclass(cls, base_cls):
        raise TypeError(f"cls argument must be a subclass of {base_cls.__name__}, got {cls!r}")
    def decorator(func: ItemCallbackType[S_co]) -> DecoratedItem[S_co]:
        if not asyncio.iscoroutinefunction(func):
            raise TypeError("select function must be a coroutine function")
        func.__discord_ui_model_type__ = cls
        func.__discord_ui_model_kwargs__ = kwargs
        return func  # type: ignore
    return decorator