from _typeshed import Self
from collections.abc import Iterable
from typing import Any, ClassVar

_Element = Any  # actually lxml.etree._Element

class BaseElement:
    tag: ClassVar[str | None]
    children: list[BaseElement]
    value: str | None
    attributes: Any | None
    caldav_class: Any | None
    def __init__(self, name: str | None = ..., value: str | bytes | None = ...) -> None: ...
    def __add__(self: Self, other: BaseElement) -> Self: ...
    def xmlelement(self) -> _Element: ...
    def xmlchildren(self, root: _Element) -> None: ...
    def append(self: Self, element: BaseElement | Iterable[BaseElement]) -> Self: ...

class NamedBaseElement(BaseElement):
    def __init__(self, name: str | None = ...) -> None: ...

class ValuedBaseElement(BaseElement):
    def __init__(self, value: str | bytes | None = ...) -> None: ...
