Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions packages/preview/pepentation/0.4.0/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Changelog

All notable changes to this project are documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.4.0] - 2026-10-18

### Added

- `card` and `card-grid`: tinted panels with an accent bar, laid out the way
`grid` places its cells (`colspan`, `rowspan`, `x`, `y`), with per-row
equal-height cards, reading-order numbering, a cycling `edge`/`accent`/`fill`,
and passthrough of `grid.cell`, `grid.hline`, `grid.header` and `grid.footer`.
- Theme color API: `resolve-theme`, `active-theme`, `theme-color`, `theme-text`,
`theme-box`, `with-theme`, `theme-block-code-background`,
`theme-card-code-background` and `theme-header-dim-color` let user content read
the resolved theme.
- The theme dictionaries now expose every color the template uses, including
`dark`, `toc-background`, `toc-text`, `toc-stroke` and `card-background`.
- `tracker: false` disables the header progress dots while keeping the header.
- Header links: section names jump to the first slide of their section, and
progress dots jump to the slide they mark. The collapsed glyphs of an
overlong tracker (a trailing ellipsis or a run marker) are not clickable.
Header links stay plain even when the document styles links.

### Changed

- The footer no longer truncates: it shrinks its text toward
`footer.min-text-size` and grows the band within `footer.max-lines`, and fails
the build with a message instead of dropping information when it cannot fit.
- Header sizing now matches the footer, so the two bands scale together.
- Configuration dictionaries (`title-slide`, `footer`, `theme`) now reject
unknown keys with a build error naming the key and listing the valid ones,
instead of silently ignoring them.
- The theme accessors were renamed for a consistent `theme-*` namespace:
`block-code-background` is now `theme-block-code-background`,
`card-code-background` is now `theme-card-code-background`, and
`header-dim-color` is now `theme-header-dim-color`.

### Removed

- The top-level `theme-state` binding is no longer exported; read the live theme
with `active-theme()` (or the `theme-color`, `theme-text` and `theme-box`
helpers).
- The internal modules (`utils`, `layout`, `blocks`, `cards`, `toc`) are no
longer part of the public surface: `import ...: *` brings the documented API
and the `themes` presets only.

### Fixed

- Section slide titles are no longer hyphenated or justified.
- Footer and bullet-point tracker misalignment.
- A `card-grid` `none` placed after cells with explicit coordinates no longer
collides with them.
- The package now compiles on its declared minimum compiler (0.13.0):
`array.join`'s `default` parameter is not used.
- Package hygiene: the template imports the registry path, and the README
examples compile.

### Documentation

- Rewrote the README and refreshed the screenshots.

## [0.3.0] - 2026-09-30

### Added

- Section subtitles, set through heading metadata or `section-slide`.
- A `section-slide: false` opt-out and per-section header labels.
- A bounded header: titles wrap to at most two lines and the tracker to three
rows, so the slide body stays in place on every page.

### Changed

- Section heading metadata is parsed in one place.
- Table of contents and section slides use the full title, falling back to the
header label for a titleless section.

### Fixed

- Section slide titles no longer hyphenated or justified.
- Footer and bullet-point tracker misalignment.

## [0.2.0] - 2026-05-09

### Added

- Improved table of contents.
- Heavily reworked slide styling.

### Fixed

- Spacing on slides without a title.

## [0.1.0] - 2025-11-27

### Added

- Initial release: title slide, navigation header with a progress tracker,
interactive table of contents, three-column footer and nine styled content
blocks.

[0.4.0]: https://github.com/Pepengu/pepentation/releases/tag/v0.4.0
[0.3.0]: https://github.com/Pepengu/pepentation/releases/tag/0.3.0
[0.2.0]: https://github.com/Pepengu/pepentation/releases/tag/0.2.0
[0.1.0]: https://github.com/Pepengu/pepentation/releases/tag/0.1.0
21 changes: 21 additions & 0 deletions packages/preview/pepentation/0.4.0/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2025 Plotnikov Daniil

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
227 changes: 227 additions & 0 deletions packages/preview/pepentation/0.4.0/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,227 @@
# Pepentation

*Simple slides for your university presentations*

Pepentation is a Typst template for clean, academic presentations.

| Title Slide | Table of Contents | Section Slide |
| - | - | - |
| ![Title slide](screenshots/TitleSlide.png) | ![Table of contents](screenshots/ToC.png) | ![Section slide](screenshots/SectionSlide.png) |

| Content Blocks | Cards |
| - | - |
| ![Content blocks](screenshots/ContentBlocks.png) | ![Cards](screenshots/Cards.png) |

Check warning on line 13 in packages/preview/pepentation/0.4.0/README.md

View check run for this annotation

Typst package check / @preview/pepentation:0.4.0

packages/preview/pepentation/0.4.0/README.md#L13

Possibly inadequate alternative description for image: `Cards`. Please add a short description to make this image more accessible.

- Theming with presets and full color overrides.
- Navigation header with a progress tracker and an interactive table of contents.
- Automatic 3-column footer: authors, title, date/page.
- Nine styled content blocks and grid-based cards.

## Setup

Import the published package:

```typst
#import "@preview/pepentation:0.4.0": *
```

For local development, place the repository in your Typst package directory at
`{data-dir}/typst/packages/local/pepentation/0.4.0` and import it with
`#import "@local/pepentation:0.4.0": *`. `{data-dir}` is `$XDG_DATA_HOME` (or
`~/.local/share`) on Linux, `~/Library/Application Support` on macOS, and
`%APPDATA%` on Windows.

## Quick Start

`template/main.typ` is a fully configured example deck. Copy it into your
project and start editing.

## Usage

Configure the deck once at the top of the file:

```typst
#import "@preview/pepentation:0.4.0": *

#show: setup-presentation.with(
title-slide: (
enable: true,
title: "Presentation Title",
authors: ("Author One", "Author Two"),
institute: "University of Typst",
),
footer: (
enable: true,
title: "Short Title",
institute: "Short Inst.",
authors: ("A. One", "A. Two"),
),
table-of-contents: "detailed",
header: true,
locale: "EN",
)

// Your content here...
```

### Slide structure

Structure the deck with headings:

- `= Section` — a dedicated section title slide.
- `== Slide Title` — a new slide.
- `== ` (empty) — a slide without a title.
- `=== Subsection` — a titled slide excluded from the table of contents.

```typst
= Introduction

== Motivation
First slide of the introduction.

==
A slide without a title.

=== Detail View
Titled, but not in the outline.
```

A heading can carry metadata that never shows as text: `metadata("subtitle")`
sets the section subtitle, and `metadata((header: "Label", subtitle: "Subtitle"))`
also sets a shorter header label. A section can appear in the header and ToC
without its own slide with `section-slide: false`. For the programmatic form,
use `#section-slide(title: "Title", subtitle: "Subtitle")`.

### Table of contents

- `"detailed"` (default): section titles and their subsections.
- `"simple"`: only section titles, in styled boxes.
- `"none"`: no table of contents.

## Content Blocks

Nine styled blocks highlight common kinds of content:

- `#definition[..]` (gray) — definitions, theorems
- `#warning[..]` (red) — warnings, cautions
- `#remark[..]` (orange) — remarks, notes
- `#hint[..]` (green) — hints, tips
- `#info[..]` (blue) — facts, details
- `#example[..]` (purple) — examples, demonstrations
- `#quote[..]` (neutral gray) — quotations, citations
- `#success[..]` (green) — achievements, positive results
- `#failure[..]` (red) — errors, issues

## Cards

A card is a small panel with an accent bar on one edge, for laying a slide out
in pieces. `#card(title, body)` draws one; `#card-grid(..)` lays cells out the
way `#grid` does, drawing each as a card and giving every card in a row the
height of the tallest. Cards also support numbering, per-cell options,
`colspan`/`rowspan`, `x`/`y` placement and `grid` passthrough — see
`template/main.typ` and the `#card` / `#card-grid` docstrings for the full set.

```typst
#card-grid(
columns: 3,
numbered: true,
("Ownership", [every value has exactly one owner]),
("Borrowing", [many readers, or one writer]),
("Lifetimes", [a reference cannot outlive its subject]),
)
```

## Themes

Pepentation resolves a theme dictionary over its defaults. Presets (each with a
`-dark` variant): `theme-azure-breeze`, `theme-crimson-dawn`,
`theme-forest-canopy`, `theme-deep-ocean`, `theme-twilight-violet`,
`theme-golden-hour`, `theme-emerald-glow`. Customize by merging over a preset:

```typst
#show: setup-presentation.with(
theme: (
..themes.theme-azure-breeze,
primary: rgb("#FF0000"),
),
)
```

A theme has the keys `primary`, `secondary`, `background`, `main-text`,
`sub-text`, `sub-text-dimmed`, `code-background`, `code-text`, `card-background`,
`section-subtitle-size`, `section-subtitle-position`, and a `blocks` dictionary
with `definition-color`, `warning-color`, `remark-color`, `hint-color`,
`info-color`, `example-color`, `quote-color`, `success-color`,
`failure-color`.

To color your own content, resolve the theme once and read plain values from it:

```typst
#let my-theme = resolve-theme(themes.theme-azure-breeze)
#show: setup-presentation.with(theme: my-theme)

#rect(fill: my-theme.primary, width: 2em)
```

| Function | Description |
| :--- | :--- |
| `resolve-theme(theme)` | The full theme as plain values; no `context` needed. |
| `active-theme()` | The resolved theme; requires `context`. |
| `theme-color(key, fallback: none)` | One color by dotted key; requires `context`. |
| `theme-text(key)[..]` | Text in a theme color. |
| `theme-box(key)[..]` | Box filled with a theme color. |
| `with-theme(t => ..)` | Runs a function with the theme, supplying `context`. |
| `theme-block-code-background(type)` | Inline-code background a block uses; `context`. |
| `theme-card-code-background()` | Inline-code background a card uses; `context`. |
| `theme-header-dim-color()` | Dimmed color of inactive header entries; `context`. |

## Header and Footer

The header is a fixed-height navigation aid: one left-aligned column per
section, the current section highlighted and the rest dimmed, with dots tracking
position within a section. Titles are typeset at a fixed size, wrap to at most
two lines and are truncated after that; shorten one with a header label via
`metadata((header: ".."))`. Clicking a section name jumps to that section's first
slide, and clicking a dot jumps to the slide it marks; the collapsed glyphs of
an overlong tracker (a trailing ellipsis or a run marker) are not clickable.
Disable the header with `header: false`, or just the dots with `tracker: false`.

The footer is a band of three blocks — authors and institute (left, widest),
title (center), date and page (right). It shrinks text before wrapping and grows
to fit rather than clipping; if it cannot fit within `max-lines`, the build fails
instead of dropping information.

## Configuration Options

| Keyword | Description | Default |
| :--- | :--- | :--- |
| `title-slide` | Title-slide dictionary | `(enable: false)` |
| `title-slide.enable` | Show the title slide | `false` |
| `title-slide.title` | Full title | `none` |
| `title-slide.authors` | Author names | `()` |
| `title-slide.institute` | Institute name | `none` |
| `footer` | Footer dictionary | `(enable: false)` |
| `footer.enable` | Show the footer | `false` |
| `footer.title` | Short title (center) | `none` |
| `footer.authors` | Short author names (left) | `()` |
| `footer.institute` | Short institute (left) | `none` |
| `footer.date` | Date (right) | `Today` |
| `footer.text-size` | Font size of the names and title | `9pt` |
| `footer.secondary-size` | Font size of institute, date, page | `7.5pt` |
| `footer.min-text-size` | Smallest size before text may wrap | `7pt` |
| `footer.line-height` | Height of one footer row | `13pt` |
| `footer.max-lines` | Rows allowed before the build fails (also reserved) | `2` |
| `theme` | Color dictionary (see Themes) | defaults |
| `table-of-contents` | `"none"`, `"detailed"`, `"simple"` | `"detailed"` |
| `header` | Show the navigation header | `true` |
| `tracker` | Show progress dots in the header | `true` |
| `locale` | Language, `"EN"` or `"RU"` | `"EN"` |
| `height` | Slide height (aspect ratio fixed at 16:10) | `12cm` |

Configuration dictionaries are checked strictly: a key that the package does not
define — usually a typo — fails the build with a message naming the key and
listing the valid ones, instead of being ignored.

## License

MIT — see [LICENSE](LICENSE).
10 changes: 10 additions & 0 deletions packages/preview/pepentation/0.4.0/lib.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// The package entrypoint. Typst re-exports every top-level binding, so this
// file imports only the names the package means to expose: the public API from
// `src/api.typ` and the theme presets. The modules `utils`, `layout`, `blocks`,
// `cards` and `toc` are implementation detail and stay out of the surface.
#import "src/api.typ": definition, warning, remark, hint, info, example, quote, success, failure
#import "src/api.typ": card, card-grid
#import "src/api.typ": resolve-theme, active-theme, theme-color, theme-text, theme-box, with-theme
#import "src/api.typ": theme-block-code-background, theme-card-code-background, theme-header-dim-color
#import "src/api.typ": section-slide, setup-presentation
#import "src/themes.typ" as themes
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading