Metadata-Version: 2.4
Name: curry-leaves-presenter
Version: 1.1.0
Summary: Turn markdown into a presentation — a small, dependency-light Python library and CLI. Plain markdown works out of the box; an optional directive dialect adds charts, columns, callouts, timelines, and more.
Project-URL: Homepage, https://github.com/Curry-Leaves/curry-leaves-presenter
Project-URL: Repository, https://github.com/Curry-Leaves/curry-leaves-presenter
Project-URL: Issues, https://github.com/Curry-Leaves/curry-leaves-presenter/issues
Project-URL: Changelog, https://github.com/Curry-Leaves/curry-leaves-presenter/blob/main/CHANGELOG.md
Author: Ilayanambi Ponramu
License-Expression: MIT
License-File: LICENSE
Keywords: cli,deck,html,markdown,marp,pandoc,presentation,reveal.js,slides,slideshow,static-site
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Text Processing :: Markup :: Markdown
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: jinja2>=3.1
Requires-Dist: markdown-it-py>=3.0
Requires-Dist: pydantic>=2.7
Requires-Dist: pyyaml>=6.0
Provides-Extra: dev
Requires-Dist: build>=1.2; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest>=8.2; extra == 'dev'
Requires-Dist: ruff>=0.4; extra == 'dev'
Requires-Dist: twine>=5.0; extra == 'dev'
Requires-Dist: types-pyyaml>=6.0; extra == 'dev'
Provides-Extra: pdf
Requires-Dist: playwright>=1.44; extra == 'pdf'
Provides-Extra: pptx
Requires-Dist: python-pptx>=0.6.23; extra == 'pptx'
Description-Content-Type: text/markdown

<p align="center">
  <img src="assets/logo.png" alt="Curry Leaves logo" width="128" height="128">
</p>

<h1 align="center">Curry Leaves Presenter</h1>

<p align="center">Turn markdown into a presentation — a small, dependency-light Python library and CLI with self-contained HTML output, keyboard navigation, transitions, and charts.</p>

<p align="center">
  <a href="https://pypi.org/project/curry-leaves-presenter/"><img src="https://img.shields.io/pypi/v/curry-leaves-presenter.svg" alt="PyPI version"></a>
  <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="license: MIT"></a>
  <a href="https://www.python.org"><img src="https://img.shields.io/badge/python-%3E%3D3.11-brightgreen.svg" alt="python: >=3.11"></a>
  <a href="./src/curry_leaves_presenter/py.typed"><img src="https://img.shields.io/badge/types-included-blue.svg" alt="types included"></a>
  <a href="https://github.com/Curry-Leaves/curry-leaves-presenter"><img src="https://img.shields.io/badge/github-repo-181717.svg?logo=github" alt="GitHub repo"></a>
</p>

Plain markdown works out of the box. An optional directive dialect adds columns, charts,
callouts, timelines, and more for when you want finer control.

<p align="center">
  <img src="assets/demo.gif" alt="curry-leaves-presenter demo" width="720">
</p>

## Install

```bash
pip install curry-leaves-presenter
```

## CLI

```bash
curry-presenter build talk.md              # writes talk.html
curry-presenter build talk.md -o out.html --theme minimal-dark --open
curry-presenter validate talk.md            # print diagnostics, exit 1 on errors
curry-presenter themes                      # list built-in themes
```

## Library

```python
from curry_leaves_presenter import Deck

deck = Deck.from_file("talk.md")
deck.validate()              # -> list[Diagnostic]
deck.to_html("talk.html", theme="minimal-dark")

html = deck.render_html()    # in-memory string, no file written
```

## Plain markdown mode

Any markdown file works. Slides are separated by `---` on its own line; the first
heading on a slide becomes its title. A `<!-- notes: ... -->` comment becomes speaker
notes.

```markdown
---
title: My Talk
theme: minimal-dark
---

# My Talk
A subtitle line here

---

## Agenda

- Point one
- Point two

<!-- notes: remember to slow down here -->

---

> A pull-quote slide
> renders in the "quote" layout automatically
```

Layout is chosen automatically: a lone H1 + short subtitle → title slide; a heading with
no body → section slide; an all-blockquote body → quote slide; anything else → content
slide.

## Directive mode

Wrap slides in `:::slide ... :::` to unlock layouts, charts, columns, callouts,
timelines, textboxes, and more:

```markdown
---
title: Quarterly Review
theme: enterprise-blue
---

:::slide layout="two-column"
# Results

:::column
Revenue grew 40% quarter over quarter, driven mostly by the new
enterprise tier.
|
:::chart type="bar"
- Q1: 40
- Q2: 65
- Q3: 82
- Q4: 110
:::
:::
:::

:::slide layout="content"
# Key Risks

:::callout type="warning"
Churn ticked up 2pts in the SMB segment.
:::
:::
```

Directive blocks: `slide`, `column`, `notes`, `chart` (bar/pie/line/doughnut),
`wordart` (gradient/shadow/outline), `callout` (info/warning/error/success), `timeline`,
`compare`, `image`, `textbox`, `clock`, `timer`.

Layouts: `title`, `content`, `two-column`, `three-column`, `section`, `blank`,
`big-stat`, `quote`, `agenda`, `image-split`.

Both modes can appear in the same deck — if any `:::slide` block is found, directive
mode is used for the whole file.

See **[docs/syntax-reference.md](docs/syntax-reference.md)** for the full front matter
field list, every directive's attributes and defaults, the auto-layout rules, the theme
YAML schema, and every diagnostic code.

## Themes

Eight built-in themes: `enterprise-blue`, `minimal-dark`, `clean-white`,
`executive-navy`, `startup-violet`, `nature-green`, `warm-coral`, `high-contrast`.
Pass a path to a custom theme YAML to `--theme` / `theme=` — schema documented in
[docs/syntax-reference.md](docs/syntax-reference.md#themes).

## Diagnostics

Parsing and validation never raise on malformed input — they collect `Diagnostic`
objects instead (`severity`, `code`, `message`, `slide_index`). `curry-presenter build`
prints these to stderr and exits non-zero on errors (or on warnings with `--strict`).
Full code list in [docs/syntax-reference.md](docs/syntax-reference.md#diagnostics).

## What's not in v1

PPTX and PDF export are planned (`pip install curry-leaves-presenter[pptx]` / `[pdf]`
are reserved) but not wired up yet — v1 ships self-contained HTML only.

## License

MIT
