"""Lux — the paintbrush for Claude. Visual output surface for AI agents."""

from __future__ import annotations

from importlib.metadata import PackageNotFoundError, version

try:
    __version__ = version("punt-lux")
except PackageNotFoundError:  # pragma: no cover
    __version__ = "0.0.0"

from punt_lux.client import LuxClient
from punt_lux.paths import default_socket_path, ensure_display
from punt_lux.protocol import (
    AckMessage,
    ButtonElement,
    CheckboxElement,
    ClearMessage,
    CollapsingHeaderElement,
    ColorPickerElement,
    ComboElement,
    DrawElement,
    FrameReader,
    GroupElement,
    ImageElement,
    InputTextElement,
    InteractionMessage,
    MarkdownElement,
    MenuMessage,
    PingMessage,
    PlotElement,
    PongMessage,
    ProgressElement,
    RadioElement,
    ReadyMessage,
    RenderFunctionElement,
    SceneMessage,
    SelectableElement,
    SeparatorElement,
    SliderElement,
    SpinnerElement,
    TabBarElement,
    TableElement,
    TextElement,
    TreeElement,
    UpdateMessage,
    WindowElement,
    WindowMessage,
    decode_frame,
    element_from_dict,
    encode_frame,
    encode_message,
    message_from_dict,
    message_to_dict,
    recv_message,
    send_message,
)
from punt_lux.runtime import CodeExecutor, RenderContext

__all__ = [
    "AckMessage",
    "ButtonElement",
    "CheckboxElement",
    "ClearMessage",
    "CodeExecutor",
    "CollapsingHeaderElement",
    "ColorPickerElement",
    "ComboElement",
    "DrawElement",
    "FrameReader",
    "GroupElement",
    "ImageElement",
    "InputTextElement",
    "InteractionMessage",
    "LuxClient",
    "MarkdownElement",
    "MenuMessage",
    "PingMessage",
    "PlotElement",
    "PongMessage",
    "ProgressElement",
    "RadioElement",
    "ReadyMessage",
    "RenderContext",
    "RenderFunctionElement",
    "SceneMessage",
    "SelectableElement",
    "SeparatorElement",
    "SliderElement",
    "SpinnerElement",
    "TabBarElement",
    "TableElement",
    "TextElement",
    "TreeElement",
    "UpdateMessage",
    "WindowElement",
    "WindowMessage",
    "decode_frame",
    "default_socket_path",
    "element_from_dict",
    "encode_frame",
    "encode_message",
    "ensure_display",
    "message_from_dict",
    "message_to_dict",
    "recv_message",
    "send_message",
]
