[project]
name = "painted"
version = "0.1.7"
description = "A cell-buffer terminal UI framework"
readme = "README.md"
license = "MIT"
authors = [{ name = "Kyle Gruel", email = "kylegruel@gmail.com" }]
requires-python = ">=3.11"
dependencies = ["wcwidth>=0.2"]
classifiers = [
    "Development Status :: 3 - Alpha",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "License :: OSI Approved :: MIT License",
    "Programming Language :: Python :: 3",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Topic :: Terminals",
    "Typing :: Typed",
]

[project.scripts]
painted = "painted.__main__:main"

[project.urls]
Homepage = "https://github.com/kgruel/painted"
Repository = "https://github.com/kgruel/painted"
Issues = "https://github.com/kgruel/painted/issues"

[dependency-groups]
dev = [
    "pytest>=8.0",
    "pytest-asyncio>=0.23",
    "pytest-cov>=6.0",
    "ruff>=0.8",
    "ty>=0.0.1a11",
]

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["src/painted"]

[tool.pytest.ini_options]
testpaths = ["tests"]

[tool.coverage.run]
source = ["src/painted"]
branch = true

[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "@overload",
    "\\.\\.\\.",  # Protocol method stubs
]

[tool.ruff]
line-length = 100
target-version = "py311"

[tool.ty.rules]
unresolved-attribute = "ignore"  # Block uses object.__setattr__ + __slots__ for immutability

[tool.ty.environment]
python-version = "3.11"
