Skip to content

Releases: ShawnMcCool/talk-framework

v0.3.0 — sane default for step reveals

Choose a tag to compare

@ShawnMcCool ShawnMcCool released this 19 Apr 20:40

Changed (BREAKING)

  • Reveal-step semantics flipped. A slide is now one reveal step by default — every block appears at once — instead of one step per block. Authors who want progressive reveal put +++ on its own line where they want the break. Leading, trailing, and consecutive +++s are elided. +++ inside a fenced code block is literal text.
  • Scene-contract data shape. A slide is now Array<Array<Block>> (outer = reveal steps, inner = blocks shown together). The runtime (content-slide's renderSlide), the linter's per-block dispatch (bin/talk-lint.js), and the Vite plugin's collectSceneDiagnostics all updated for the extra nesting level. Any external code that iterated slide.map(block => …) now needs a second loop.

Example

Before — three blocks, three clicks to reveal:

# Principles
A short intro.
- bullet one
- bullet two

After — same markdown, one click reveals the whole slide:

# Principles
A short intro.
- bullet one
- bullet two

Want the old progressive reveal? Add +++:

# Principles

+++

A short intro.

+++

- bullet one
- bullet two

v0.2.0

Choose a tag to compare

@ShawnMcCool ShawnMcCool released this 19 Apr 20:29

Added

  • Syntax highlighting for fenced code blocks via highlight.js (core + 10 languages). Token colours map to the framework palette — no external theme CSS. Lazy-loaded so the linter and tests stay dependency-free.
  • examples/ directory — five runnable mini-decks (essentials, box-diagrams, 3d-scene, svg-scene, title-animation) covering every registered component. Each is served with talk serve examples/<name>/.
  • Top-level README.md — public-facing overview: install, quick start, concepts (deck / scene / slide / step), authoring approach, CLI reference, dev-mode UX, and per-component documentation.

Changed (BREAKING)

  • three-scene renamed to 3d-scene. Author-facing surface affected: the directory (src/components/3d-scene/), the registry descriptor, the factory function (create3DScene — createThreeScene is gone), the example deck, and the typedefs (Scene3DConfig etc.). The renderer implementation file src/rendering/three-scene.js and its createThreeRenderer stay as-is — that layer is a thin Three.js wrapper and the old name reflects what it literally is.

Fixed

  • Stage-proportional typography. Root font-size now scales with the 16:9 stage, so all rem-based typography fits the viewport proportionally instead of overflowing on small screens or leaving huge gutters on large ones. 1rem = 16px at the canonical 1920px stage width.
  • Browser tab title reflects the current deck's talk.toml title instead of the hardcoded legacy string.
  • Saved navigation state is scoped per deck. Loading a different deck starts fresh at scene 1 / slide 1 instead of restoring the prior deck's coordinates.
  • talk serve no longer force-rebuilds. The framework source is bind-mounted, so the built image was always shadowed; the --build flag just added latency. Run docker compose run --rm app npm install when you add or bump a dependency.
  • examples/svg-scene/ redesigned as a memory-hierarchy bar chart (L1 / L2 / main memory drawn to linear scale). Replaces an earlier three-dots-and-a-line that didn't demonstrate anything the box-diagram component couldn't do.

Repo hygiene

  • Added LICENSE (MIT).
  • package.json gained description, keywords, author, repository, homepage, bugs, and engines fields; dropped "private": true; renamed to talk-framework.
  • .gitignore excludes AI/tool-specific state and internal planning docs.
  • Added .nvmrc pinning Node 22.
  • Removed the legacy archive/ directory.

See CHANGELOG.md and the README for details.

v0.1.0 — initial public release

Choose a tag to compare

@ShawnMcCool ShawnMcCool released this 19 Apr 19:52

Initial public release of talk-framework. Two sub-projects have landed.

Sub-project A — content-folder foundation

  • talk CLI dispatcher with subcommands: new, add, remove, rename, move, list, serve, lint, test, version, help.
  • Content folders are free-standing; each is marked by a talk.toml at its root. The CLI walks up from $PWD to find it.
  • Structural edits (add, remove, rename, move) are atomic and support --dry-run.
  • Numeric-prefixed scene directories (01-welcome/, 02-intro/, …).
  • Vite content-loader plugin exposes the mounted content folder via virtual:content-manifest.
  • Bad scenes render as error-placeholder cards; the rest of the deck stays navigable.

Sub-project B — component registry + content-aware linter + edge banner

  • Component registry at `src/authoring/component-registry.js` with 12 descriptors: two scene types (`content-slide`, `section-slide`), six markdown-block built-ins (`heading`, `paragraph`, `bullet-list`, `quote`, `code-fence`, `spacer`), three JS factories (`three-scene`, `svg-scene`, `title-animation`), and the `box-diagram` DSL component.
  • `box-diagram` shipped end-to-end: parser, validator with Levenshtein "did you mean" hints, DOM renderer, descriptor, bootstrap registration.
  • `bin/talk-lint.js` rewritten to dispatch through the registry. Produces file:line:column diagnostics with fixed-width column alignment. Fixture-based integration tests cover clean + bad cases.
  • Dev-mode edge banner surfaces diagnostics over the last-good render. HMR `talk:diagnostics` channel emitted from the Vite plugin. First-render failures still fall back to the full-screen placeholder.
  • 242 tests passing.

Infrastructure

  • MIT license.
  • Docker-based toolchain (`node:22-alpine`); host Node is optional.
  • jujutsu as the primary VCS; `.git/` exists for tooling compatibility.

See `CHANGELOG.md` and the README for installation and usage.