Skip to content

feat: add 8.12 annotation layout opt-ins - #135

Merged
rileyhilliard merged 3 commits into
feat/8.11-geometry-gesturesfrom
feat/8.12-layout-opt-ins
Oct 17, 2026
Merged

rileyhilliard merged 3 commits into
feat/8.11-geometry-gesturesfrom
feat/8.12-layout-opt-ins

Conversation

@rileyhilliard

Copy link
Copy Markdown
Member

Authors can opt into wrapped callouts, compact callout limits, and contained reference labels without changing charts that omit the new fields. Faceted grow layouts now preserve the plot budget and count chrome and notes once through rendering, auto-height mounting, and export.

Stacked on #134, which is stacked on #133. Together these PRs cover Track A phases 1–3; this diff completes the 8.12 phase.

Implementation checklist

  • Optional maxWidth, subtitleFontSize, and responsive.compactAnnotationLimit, preserving omitted/null behavior, rich text identity, priority/source ordering, pinned exemptions, and D15 compact opt-outs.
  • Optional reference labelPlacement with start/end, auto containment, and outside gutters/lanes. Facet cells reserve their own space before axes/scales/marks; displaced horizontal leaders stay in the gutter during layout and animation. Authored offsets remain pinned.
  • Seven annotation color tokens, CSS/theme parity, light/dark pairs, and explicit-ink precedence. The approved D19 correction uses the existing compiled rule/range colors (#666666/#000000) in both modes.
  • Reuse resolved noteBandHeight; deprecate both footnoteBandHeight helpers with JSDoc and once-per-process warnings, preserving compatibility and migrating internal callers. Framework wrapper lifecycle/sizing coverage is included.
  • Facet grow and optional growth metadata, with exactly-once mounting/export and singular layer/facet note ownership.
  • Pure/idempotent migrateSpecV8 default materialization, with all-example and targeted render-parity fixtures.
  • Authored mark-option warnings before shorthand expansion, with exact paths and repair suggestions.
  • New annotation stories and both dedicated invariant projects; existing invariants projects and visual baseline membership stay unchanged.
  • Codebase map, migration/spec/theme documentation, unreleased 8.12 changelog, and generated artifacts updated.

Validation

  • bun run test: 322 files, 5,786 passed tests, 3 existing expected failures.
  • bun run lint, bun run typecheck, bun run build, bun run check:generated: pass.
  • bun run test:visual: 106/106 passed, zero baseline changes.
  • Dedicated Chromium/WebKit annotation invariants: 90/90 passed across four widths in light/dark mode.
  • Manual playwright-cli preview scans at 390px and 1280px covered chrome, axes, plot, legends, and edges; reference colors were also checked in both modes.
  • ce:code-reviewer approved the complete phase and the final D19 correction with no remaining findings; its final correction pass independently ran 323 tests including all-example migration parity.

Plan corrections and limits

The D19 table originally quoted resolver fallback colors that normalization bypassed. The user approved matching actual compiled ink instead, preserving zero visual diff while making the new tokens effective. Existing subdued dark reference ink is intentionally retained.

noteBandHeight already exists from 8.11 and is reused. Core's legacy helper retains its numeric signature; the new nondeprecated arithmetic helper also accepts resolved metadata. Root LayerSpec has no chromeLayout, so layered sizing remains authored on the first leaf or compile options. Range labels retain their existing behavior because this phase adds no range-placement opt-in.

Three structural snapshots add only resolved theme metadata. No 8.12 visual baselines are changed. The screenshot harness repeats its existing development-toolbar hiding during capture to prevent intermittent overlays, without masking chart content or loosening thresholds. No v9/D14 retunes, Studio work, release/publishing, or external skill sync is included.

Checkpoint reviewed 8.12 implementation and regressions. D19 rule/range defaults remain pending a binding-plan clarification: legacy normalization still overrides these two tokens, and the custom-token test intentionally remains failing until that decision. Do not open the phase PR until all gates pass.
Use the approved existing rule and range colors in both modes. Resolve omitted ink through theme tokens instead of stamping it during normalization, preserving explicit annotation overrides and default visual output.
@coderabbitai

coderabbitai Bot commented Oct 17, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: tryopendata/openchart/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: e11fd1a4-71e4-4c46-a434-99b6b11e867e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@rileyhilliard
rileyhilliard merged commit e35670a into feat/8.11-geometry-gestures Oct 17, 2026
1 check passed
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