[tool.poetry]
name = "textual"
version = "8.0.0"
homepage = "https://github.com/Textualize/textual"
repository = "https://github.com/Textualize/textual"
documentation = "https://textual.textualize.io/"

description = "Modern Text User Interface framework"
authors = ["Will McGugan <will@textualize.io>"]
license = "MIT"
readme = "README.md"
classifiers = [
    "Development Status :: 5 - Production/Stable",
    "Environment :: Console",
    "Intended Audience :: Developers",
    "Operating System :: Microsoft :: Windows :: Windows 10",
    "Operating System :: Microsoft :: Windows :: Windows 11",
    "Operating System :: MacOS",
    "Operating System :: POSIX :: Linux",
    "Programming Language :: Python :: 3.9",
    "Programming Language :: Python :: 3.10",
    "Programming Language :: Python :: 3.11",
    "Programming Language :: Python :: 3.12",
    "Programming Language :: Python :: 3.13",
    "Programming Language :: Python :: 3.14",
    "Typing :: Typed",
]
include = [
    "src/textual/py.typed",
    { path = "docs/examples", format = "sdist" },
    { path = "tests", format = "sdist" },
    # The reason for the slightly convoluted path specification here is that
    # poetry populates the exclude list with the content of .gitignore, and
    # it also seems like exclude trumps include. So here we specify that we
    # want to package up the content of the docs-offline directory in a way
    # that works around that.
    { path = "docs-offline/**/*", format = "sdist" },
]

[tool.poetry.urls]
"Bug Tracker" = "https://github.com/Textualize/textual/issues"

[tool.ruff]
target-version = "py39"

[tool.poetry.dependencies]
python = "^3.9"
markdown-it-py = { extras = ["linkify"], version = ">=2.1.0" }
mdit-py-plugins = "*"
rich = ">=14.2.0"
#rich = {path="../rich", develop=true}
typing-extensions = "^4.4.0"
platformdirs = ">=3.6.0,<5"

# start of [syntax] extras
# Require tree-sitter >= 0.25.0 and python >= 3.10
# Windows, MacOS and Linux binary wheels are available for all of the languages below.
tree-sitter = { version = ">=0.25.0", optional = true, python = ">=3.10" }
tree-sitter-python = { version = ">=0.23.0", optional = true, python = ">=3.10" }
tree-sitter-markdown = { version = ">=0.3.0", optional = true, python = ">=3.10"}
tree-sitter-json = { version = ">=0.24.0", optional = true, python = ">=3.10" }
tree-sitter-toml = { version = ">=0.6.0", optional = true, python = ">=3.10" }
tree-sitter-yaml = { version = ">=0.6.0", optional = true, python = ">=3.10" }
tree-sitter-html = { version = ">=0.23.0", optional = true, python = ">=3.10" }
tree-sitter-css = { version = ">=0.23.0", optional = true, python = ">=3.10" }
tree-sitter-javascript = { version = ">=0.23.0", optional = true, python = ">=3.10" }
tree-sitter-rust = { version = ">=0.23.0", optional = true, python = ">=3.10" }
tree-sitter-go = { version = ">=0.23.0", optional = true, python = ">=3.10" }
tree-sitter-regex = { version = ">=0.24.0", optional = true, python = ">=3.10" }
tree-sitter-xml = { version = ">=0.7.0", optional = true, python = ">=3.10" }
tree-sitter-sql = { version = ">=0.3.11", optional = true, python = ">=3.10" }
tree-sitter-java = { version = ">=0.23.0", optional = true, python = ">=3.10" }
tree-sitter-bash = { version = ">=0.23.0", optional = true, python = ">=3.10" }
# end of [syntax] extras
pygments = "^2.19.2"

[tool.poetry.extras]
syntax = [
    "tree-sitter",
    "tree-sitter-python",
    "tree-sitter-markdown",
    "tree-sitter-json",
    "tree-sitter-toml",
    "tree-sitter-yaml",
    "tree-sitter-html",
    "tree-sitter-css",
    "tree-sitter-javascript",
    "tree-sitter-rust",
    "tree-sitter-go",
    "tree-sitter-regex",
    "tree-sitter-xml",
    "tree-sitter-sql",
    "tree-sitter-java",
    "tree-sitter-bash",
]

[tool.poetry.group.dev.dependencies]
black = "24.4.2"
griffe = "0.32.3"
httpx = "^0.23.1"
mkdocs = "^1.3.0"
mkdocs-exclude = "^1.0.2"
mkdocs-git-revision-date-localized-plugin = "^1.2.5"
mkdocs-material = "^9.0.11"
mkdocs-rss-plugin = "^1.5.0"
mkdocstrings = { extras = ["python"], version = "^0.20.0" }
mkdocstrings-python = "^1.0.0"
mypy = "^1.0.0"
pre-commit = "^2.13.0"
pytest = "^8.3.1"
pytest-xdist = "^3.6.1"
pytest-asyncio = "*"
pytest-cov = "^5.0.0"
textual-dev = "^1.7.0"
types-setuptools = "^67.2.0.1"
isort = "^5.13.2"
pytest-textual-snapshot = "^1.0.0"

[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
addopts = "--strict-markers"
markers = [
    "syntax: marks tests that require syntax highlighting (deselect with '-m \"not syntax\"')",
]
asyncio_default_fixture_loop_scope = "function"

[build-system]
requires = ["poetry-core>=1.2.0"]
build-backend = "poetry.core.masonry.api"
