content: [build-system]
  requires = ["hatchling"]
  build-backend = "hatchling.build"
  
  [project]
  name = "vcal"
  version = "0.1.0"
  description = "vCalendar/iCalendar management tool for creating, importing, and replying to calendar invitations"
  readme = "README.md"
  requires-python = ">=3.9"
  license = {text = "MIT"}
  authors = [
      {name = "Joerg Thalheim", email = "joerg@thalheim.io"},
  ]
  classifiers = [
      "Development Status :: 4 - Beta",
      "Environment :: Console",
      "Intended Audience :: End Users/Desktop",
      "License :: OSI Approved :: MIT License",
      "Programming Language :: Python :: 3",
      "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",
      "Topic :: Communications :: Email",
      "Topic :: Office/Business :: Scheduling",
  ]
  dependencies = [
      "icalendar>=5.0.0",
      "python-dateutil>=2.8.0",
      "pytz",
  ]
  
  [project.optional-dependencies]
  dev = [
      "types-pytz",
      "types-icalendar",
      "types-python-dateutil",
  ]
  
  [project.scripts]
  vcal = "vcal_cli.main:main"
  
  [tool.hatch.build.targets.wheel]
  packages = ["vcal_cli"]
  
  [tool.mypy]
  python_version = "3.13"
  warn_return_any = true
  warn_unused_configs = true
  disallow_untyped_defs = true
  disallow_incomplete_defs = true
  check_untyped_defs = true
  disallow_untyped_decorators = true
  no_implicit_optional = true
  warn_redundant_casts = true
  warn_unused_ignores = true
  warn_no_return = true
  warn_unreachable = true
  strict_equality = true
  
  [tool.ruff]
  target-version = "py313"
  line-length = 100
  
  [tool.ruff.lint]
  select = ["ALL"]
  ignore = [
      "D203",    # one-blank-line-before-class (conflicts with D211)
      "D213",    # multi-line-summary-second-line (conflicts with D212)
      "T201",    # print found (needed for CLI tools)
      "S603",    # subprocess without shell equals true (controlled input)
  ]
  
  [tool.ruff.lint.per-file-ignores]
  "test_*.py" = ["S101", "PLR2004"]
  