Metadata-Version: 2.4
Name: curry-leaves-presenter
Version: 1.0.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

# curry-leaves-presenter

Turn markdown into a presentation. A small, dependency-light Python library and CLI —
self-contained HTML output with keyboard navigation, transitions, and charts.

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

## 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
