[build-system]
requires = [
  "sphinx-theme-builder>=0.3.2"
]
build-backend = "sphinx_theme_builder"

[tool.sphinx-theme-builder]
node-version = "22.9.0"
theme-name = "pydata_sphinx_theme"
additional-compiled-static-assets = [
  "webpack-macros.html",
  "vendor/",
  "scripts/bootstrap.js",
  "scripts/fontawesome.js",
  "locale/",
]

[project]
name = "pydata-sphinx-theme"
description = "Bootstrap-based Sphinx theme from the PyData community"
dynamic = ["version"]
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
  "sphinx>=7.0,<10",
  "beautifulsoup4",
  "docutils!=0.17.0",
  "Babel",
  "pygments>=2.7",
  "accessible-pygments",
  "typing-extensions",
]
license = { file = "LICENSE" }
maintainers = [
  { name = "Joris Van den Bossche", email = "jorisvandenbossche@gmail.com" },
]
classifiers = [
  "Development Status :: 5 - Production/Stable",
  "Programming Language :: Python :: 3",
  "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",
  "Framework :: Sphinx",
  "Framework :: Sphinx :: Theme",
  "License :: OSI Approved :: BSD License",
  "Operating System :: OS Independent",
]

[project.urls]
"Source" = "https://github.com/pydata/pydata-sphinx-theme"

[project.optional-dependencies]
doc = [
  "astroid>=3,!=4.0.3", # fix for sphinx.autoapi and read the docs, should be reverted at a later date - see issue #2125
  "numpydoc",
  "linkify-it-py", # for link shortening
  "rich",
  "sphinxext-rediraffe",
  # TODO: unpin sphinx-sitemap once a solution is offered for https://github.com/jdillard/sphinx-sitemap/issues/109
  "sphinx-sitemap<2.7.0",
  "sphinx-autoapi==3.6.1",
  # For examples section
  "myst-parser",
  "ablog>=0.11.8",
  "jupyter_sphinx",
  "pandas",
  "plotly",
  "matplotlib",
  "numpy",
  "xarray",
  "sphinx-copybutton",
  "sphinx-design",
  "sphinx-togglebutton",
  "jupyterlite-sphinx",
  "sphinxcontrib-mermaid",
  "sphinxcontrib-youtube>=1.4.1",
  "sphinx-favicon>=1.0.1",
  "ipykernel",
  "nbsphinx",
  "ipyleaflet",
  "colorama",
  "ipywidgets",
  "graphviz",
]
dev = [
  "pyyaml",
  "pre-commit",
  "pydata-sphinx-theme[doc,test]",
  "tox",
  "pandoc",
  "sphinx-theme-builder[cli]",
]
test = [
  "pytest",
  "pytest-cov",
  "pytest-regressions",
  "sphinx[test]",
  "pytest-playwright"
]
a11y = ["pydata-sphinx-theme[test]"]
i18n = ["Babel", "jinja2"]

[project.entry-points]
"sphinx.html_themes" = { pydata_sphinx_theme = "pydata_sphinx_theme" }

[tool.doc8]
ignore = ["D001"] # we follow a 1 line = 1 paragraph style

[tool.ruff]
fix = true
# keep consistent with black
line-length = 88
indent-width = 4

[tool.ruff.lint]
ignore = [
  "D107", # Missing docstring in `__init__` | set the docstring in the class
  "D205", # 1 blank line required between summary line and description,
  "D212", # docstring summary must be on first physical line
  "W291", # let pre-commit handle trailing whitespace

]
select = ["E", "F", "W", "I", "D", "RUF", "G"]

[tool.ruff.lint.flake8-quotes]
docstring-quotes = "double"

[tool.ruff.lint.pydocstyle]
convention = "google"

[tool.ruff.lint.isort]
lines-between-types = 1
lines-after-imports = 2

[tool.djlint]
profile = "jinja"
extension = "html"
indent = 2
max_line_length = 120
use_gitignore = true
format_js = true
format_css = true
ignore = "H006,J018,T003,H025"

[tool.pytest.ini_options]
markers = "a11y: mark a test as an accessibility test"
addopts = "--durations=10"

[tool.coverage.run]
source = ["pydata_sphinx_theme"]
branch = true
relative_files = true

[tool.coverage.report]
fail_under = 80
show_missing = true
skip_covered = true

[tool.coverage.paths]
source = ["src", ".tox/py*/**/site-packages"]
