Skip to content

Dev - #2

Draft
breezykermo wants to merge 69 commits into
mainfrom
dev
Draft

Dev#2
breezykermo wants to merge 69 commits into
mainfrom
dev

Conversation

@breezykermo

Copy link
Copy Markdown
Contributor

No description provided.

@breezykermo
breezykermo force-pushed the dev branch 18 times, most recently from 7571baa to f3a638e Compare September 22, 2026 05:57
0.1.0 is released, so its directory is immutable and stays in the tree; 0.1.1
is where core is authored from here. Every version this repo writes out by
hand follows the cut, including the paths `.github/workflows/check.yml` tests
and the `lib.typ` reference in CLAUDE.md, which `check-versions` cannot see.
A window's ground and a window's hover were both `--idea-fold-color`, so a
hovered body promised a click it does not have and a folded window never
reached the fill every other rookery control answers a pointer with.

- `--idea-link-color` now paints only where a click really is: a folded
  window's whole box, and an open window's header. The header's background
  reaches the frame, as the folded wash already did.
- `--idea-fold-color` becomes the resting ground of an open window, kept
  under the pointer over its body, so reading a note no longer flickers.
- A non-foldable window takes neither, having no control at all.
…the same rename core already made on #idea and #window
… to rookery-search-name-color, across the CSS consumers that read core's theme property
…'s two states

Every package on this line now reports one version, so nothing has to be
remembered about which coordinate a given package answers to. The eight that
have never been released are RENAMED rather than copied — there is no
immutable release directory to preserve, and a dead 0.1.0 beside each of them
would be the discrepancy this is meant to remove. core keeps both, 0.1.0 being
released.

Every cross-package pin follows, so a project importing several of these gets
one copy of core rather than two, and `check.yml` tests the directories that
now exist.

search separates the row under the pointer from the row the arrow keys are
on: the first keeps the fill that means a click is here, and the second takes
a new `--rookery-search-selected` — half the pointer's fill where a site names
no value — so a result stops claiming the pointer once the mouse has left it.
A hat is a nowrap flex row whose items each floor at their own content
width, so a long tag or a long id ran off the right edge of a narrow
column and took the document's scroll width with it.

The permalink now holds its closing bracket in a span of its own, so a
clipped id reads `[idea:26w29-typst-...]` rather than hanging open
where text-overflow ate the `]`. Both halves stay real text, so the
permalink still copies whole.
…phies

Adds core/0.1.1/demo/notes, a small rheo project with footnotes: "horizontal"
and a chicago-notes bibliography, which rheo compile . fails on with
"failed to determine link anchor" / "failed to resolve cross-link".

Adds docs/spikes/note-style-bibliography.md recording where the failure sits:
plain Typst 0.15.1's own HTML export hard-errors the same way with no rheo
present at all (a correction to the original recon, which reported only a
warning), and the same failure class rheo's own docs already name for
std.outline() in multi-page HTML output — an upstream Location-anchor
convergence ceiling. A scratch restructuring of core (outside this
repository) confirms that collapsing core's several per-idea/per-window
state-gated bibliography() calls down to one page-level, state-independent
call removes the convergence error, at the cost of breaking core's own
full-form citation lookups, which need a bibliography() call placed nearer
each citation than a single trailing one provides. The doc recommends
fixing this in two independent pieces in @rookery/core (one
state-independent bibliography call per page, and an explicit note-style
switch instead of style: name-sniffing) and lists four implementation birds
this spike does not file.
A note-class bibliography style (chicago-notes and its siblings) mints a
native Typst footnote for every normal-form citation, whose HTML-export link
anchor never converges. citations: "notes" (new, and what citations: auto
now picks under a built-in note style) promotes each such citation into one
of this package's own footnotes instead, so it follows footnotes: like any
hand-written #footnote and never reaches Typst's own footnote machinery. A
citation inside an author's own #footnote, or elsewhere the promotion walk
cannot reach, renders full-form with no margin span via a safety net in
_margin-cite rather than surviving as a bare normal-form citation.

demo/notes is now a passing fixture (was a known-failing one) exercising a
bare citation, a supplement, a citation inside a hand-written footnote, and
an ordinary note-to-note link, wired into CI. The spike record is corrected
to match: the shipped fix never needed to collapse core's per-idea
bibliography plumbing to one page-level call, and the note-style-name
detection it once recommended against turned out safe for Typst's own
built-ins specifically.
Chromium snaps a border's rendered width down to a whole device pixel at
a fractional DPR, but the hat's margin-left calc subtracted the unsnapped
CSS value, so the id tab sat up to 0.4px left of the box's own edge at
DPR 1.25 and 1.75. Drawing the left rule as a background strip instead of
a border removes the rounding mismatch: both the box's own edge and the
hat share the same unsnapped arithmetic at every DPR.

Adds a geometry check (demo/rheo/geom.sh, just geom) that measures the
hat against its host across DPR 1, 1.25, 1.5, 1.75 and 2 in headless
Chromium.
The open summary now carries the same 0.25em padding-bottom the closed
summary always had, so opening or closing a window no longer shrinks or
grows its header row by 4px. geom.sh gains a second measurement, over
index/relations/tags at DPR 1 and 1.25, comparing each window's closed
interior height against its open header height.
A Typst label placed inside an #idea body, and referenced anywhere, failed
the whole compile with a 'label occurs multiple times' error, because the
body is placed once at its own site and again wherever it is transcluded
(a minted page, a #window). @rookery/core:0.1.1 adds labelled(name, it), a
public helper that attaches a real label to it only at the body's own
canonical site; every copy renders it unlabelled, so a reference to name
resolves to the one canonical element wherever it is written.

Internally, _flatten now rewrites a copy's body with a plain content-tree
walk that drops labelled's own marker figure, rather than deciding this at
layout time through a context-held counter — the demo under demo/rheo
measures that the counter approach does not reliably converge within
Typst's own five-attempt introspection budget once a referenced label is
involved, so the fix follows the same construction-time rewrite bib.typ
already uses for footnote and citation promotion.
Hovering anywhere on the row tints it, clicking anywhere follows the title
link, and display-background: false turns the tint off. The row now carries
the note's tag classes and data, matching a full window's root, gated by a
new data-rookery-window-link marker so the Context/Backlinks page rows on
minted pages are untouched.
Gives #window two new named arguments so a list of windows can carry its own
filter controls: display-filter wraps the emitted figures in a container with
a text box and one toggle pill per display-filter-tags, hidden until a script
marks it ready. HTML/EPUB only; a paged target renders unaffected.
search.js imports ./window-filter.js, but the source js_scripts list did
not name it, so rheo never copied it. A project resolving the package from
a repository ref (where dist/lib.js is gitignored and absent) got a 404 on
that import, which failed search.js as a whole and took the search modal
down with it.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant