Repository navigation
Releases: ShawnMcCool/talk-framework
Releases · ShawnMcCool/talk-framework
Release list
v0.3.0 — sane default for step reveals
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'srenderSlide), the linter's per-block dispatch (bin/talk-lint.js), and the Vite plugin'scollectSceneDiagnosticsall updated for the extra nesting level. Any external code that iteratedslide.map(block => …)now needs a second loop.
Example
Before — three blocks, three clicks to reveal:
# Principles
A short intro.
- bullet one
- bullet twoAfter — same markdown, one click reveals the whole slide:
# Principles
A short intro.
- bullet one
- bullet twoWant the old progressive reveal? Add +++:
# Principles
+++
A short intro.
+++
- bullet one
- bullet twov0.2.0
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 withtalk 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-scenerenamed to3d-scene. Author-facing surface affected: the directory (src/components/3d-scene/), the registry descriptor, the factory function (create3DScene—createThreeSceneis gone), the example deck, and the typedefs (Scene3DConfigetc.). The renderer implementation filesrc/rendering/three-scene.jsand itscreateThreeRendererstay 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.tomltitle 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 serveno longer force-rebuilds. The framework source is bind-mounted, so the built image was always shadowed; the--buildflag just added latency. Rundocker compose run --rm app npm installwhen 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.jsongained description, keywords, author, repository, homepage, bugs, andenginesfields; dropped"private": true; renamed totalk-framework..gitignoreexcludes AI/tool-specific state and internal planning docs.- Added
.nvmrcpinning Node 22. - Removed the legacy
archive/directory.
See CHANGELOG.md and the README for details.
v0.1.0 — initial public release
Initial public release of talk-framework. Two sub-projects have landed.
Sub-project A — content-folder foundation
talkCLI 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.tomlat its root. The CLI walks up from$PWDto 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.