ludic/changes
Orkuncakilkaya a4c7a756f0 feat(ui): a scrollbar held where it was taken, a popover that keeps the mouse, easing that lands
- the scrollbar is .ui-scrollbar with a .ui-thumb, styled by the default sheet or a theme; a press
  on the thumb holds it at the point it was taken and the pointer moves it in proportion, a press on
  the track jumps the thumb's middle there and holds it, and neither presses what is under the bar
  (it used to centre the thumb on the pointer and press the row beneath as well);
- while a popover is up only scroll boxes inside it take the pointer, and a press outside it that
  closes it forgets any press in progress;
- a transition ends exactly on its value (it stopped a rounding error short, at every frame rate).

Tests: ui_popover_mouse, ui_scrollbar, ui_ease (60/120/180/240 Hz).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 21:39:28 +03:00
..
a-hidden-body-still-stands-in-the-sun.md fix(render3d): a body hidden from the camera still stands in the sun 2026-09-19 21:32:11 +03:00
a-leaf-is-not-matte.md fix(render3d): a leaf is not matte 2026-09-19 16:41:33 +03:00
a-lens-and-an-edge.md feat(render3d): anti-aliasing that exists, and a lens for the viewfinder 2026-09-19 17:38:25 +03:00
an-aspen-quakes.md feat(render3d): an aspen quakes, and a tree is no longer bent like a bow 2026-09-19 21:13:42 +03:00
build-ir-in-temp.md fix(cli): build's IR goes to the run's temp directory, not the project 2026-09-23 17:29:55 +03:00
contact-darkening.md feat(render3d): the lake answers to a body standing in it 2026-09-19 20:23:27 +03:00
declared-namespaces.md feat(lang): L6 namespaces declared in Ludic - alias 2026-09-24 02:40:57 +03:00
defaults-views-templates.md feat(ui): a scrollbar held where it was taken, a popover that keeps the mouse, easing that lands 2026-09-24 21:39:28 +03:00
duplicate-definitions.md feat(lang): a name is defined once, a local once per block, and a result is always returned 2026-09-23 23:55:20 +03:00
function-values.md feat(lang): functions are values (L2), and render3d takes its scene as callbacks 2026-09-24 00:27:26 +03:00
generics.md feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
leaves-light-and-the-bole.md fix(runtime): the wheel on macOS did nothing, or everything 2026-09-20 01:24:37 +03:00
light-air-and-the-hour.md feat(render3d): the air and the light are the hour's, not one constant apiece 2026-09-19 14:42:30 +03:00
light-you-can-see.md feat(render3d): light you can see - sun shafts and valley mist 2026-09-19 16:06:16 +03:00
lint.md feat(tools): L10 ludic-fmt enforces a project's style 2026-09-24 14:38:35 +03:00
listener-return.md fix(events): a listener's return ends that listener, not the dispatch 2026-09-23 17:42:18 +03:00
module-scope.md feat(lang): L3 module scope - module, export, friend module 2026-09-24 00:52:12 +03:00
numbers-float-strict.md feat(lang): strict numbers in float files; render3d on float 2026-09-23 17:13:25 +03:00
numbers-float.md feat(lang): numbers float - a module whose decimal literals are float 2026-09-23 16:02:11 +03:00
one-wind.md feat(render3d): one wind, and everything in the valley is moved by it 2026-09-19 18:24:43 +03:00
rain-that-leaves-something.md feat(render3d): rain that leaves something behind 2026-09-19 19:43:29 +03:00
README.md refactor(cli)!: split the contributor tool out of the ludic CLI 2026-09-05 23:15:12 +03:00
redeclared-local-missing-return.md feat(lang): a name is defined once, a local once per block, and a result is always returned 2026-09-23 23:55:20 +03:00
registries.md feat(lang): L8 registries by declaration - registry and def 2026-09-24 13:34:51 +03:00
render3d-hooks.md feat(lang): functions are values (L2), and render3d takes its scene as callbacks 2026-09-24 00:27:26 +03:00
resources.md feat(lang): L9 resource files - registry ... from 2026-09-24 14:00:20 +03:00
still-water.md fix(render3d): the meadow is vegetation, and still water reads as water 2026-09-19 18:07:01 +03:00
text-to-float.md feat(text): Text.to_float; a void function's return <value> is an error 2026-09-23 19:19:28 +03:00
the-ground-up-close.md fix(render3d): the ground keeps more of its own colour, and the rock keeps all of it 2026-09-19 16:29:17 +03:00
the-world-knows-you-are-there.md feat(render3d): the lake answers to a body standing in it 2026-09-19 20:23:27 +03:00
type-checker.md feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00
unsafe.md feat(lang): L7 memory is safe unless it says unsafe 2026-09-24 12:53:27 +03:00
void-return-error.md feat(text): Text.to_float; a void function's return <value> is an error 2026-09-23 19:19:28 +03:00

Changesets

A changeset is one small Markdown file describing a single user-facing change, dropped in this directory. ludic-dev release consumes every changeset here into a new CHANGELOG.md section, bumps VERSION, and deletes the consumed files.

Format

bump: minor
type: feat
One or more lines describing the change, in the past-agnostic imperative used in
the changelog. Markdown is fine.
  • bump: — major, minor, or patch (SemVer). The release version is bumped by the highest level among the pending changesets (unless ludic-dev release <level> overrides it).
  • type: — the Conventional Commit type (feat, fix, perf, docs, …). It decides which group the change lands in: feat → Features, fix → Fixes, perf → Performance, and so on, in that order. A type with no known heading gets one named after itself.

Writing the body

The body is markdown and reaches the changelog as markdown: it becomes one list item, with continuation lines indented to stay inside it. Nested bullets, blank lines between paragraphs and inline code all survive.

bump: minor
type: feat
**Tiled map support** — load and draw Tiled maps.

- **TMX/TSX** — the XML formats, decoded to the same intermediate as JSON.
- **Collision** — the `collision` layer projects onto the engine tilemap.

Lead with the thing that changed, not with the mechanism. A reader scanning the release should be able to stop after your first clause.

Adding one

Create a file with a short, unique name, e.g. changes/regex-namespace.md. Any filename works except this README.md, which the release step always skips.

Preview how the next release will read before cutting it — this writes nothing:

ludic-dev release --dry-run