toolkit: a chart's series can be bound - #453
Merged
Merged
Conversation
A host had to assign a field and hope something repainted. That is not a binding, and it is why a queue window watching a live rate had to poke the chart on a timer. The reason none of them had one is worth writing down: mvvm.Observable is constrained to COMPARABLE types, so it can skip a notification when nothing changed — and a slice is not comparable. The vehicle for a series is ObservableList, which also says what changed rather than only that something did. TimeSeriesChart.Series and LineChart.Values are that list, created on first use and seeded from the existing field. From then on the LIST is what the chart draws: two sources for one truth is how a chart comes to show last minute's data. A chart nobody binds keeps working exactly as it did, which is what the field is still for. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3 tasks
tannevaled
added a commit
that referenced
this pull request
Sep 6, 2026
…cal gridlines (#455) TimeSeriesChart gains Threshold ([]TimePoint, a second reference series drawn as a dashed line) and OverInk (the color a Points segment switches to for any stretch ending above the Threshold in effect at that time) — for a caller charting quota usage against the pace that would exhaust it exactly at reset, materializing whether it's on track rather than requiring a visual comparison. Also adds vertical gridlines at an auto-picked "nice" time interval (hourly for a short span, daily for a long one, via verticalGridInterval/verticalGridTicks) alongside the existing three horizontal value gridlines, so the time axis reads at a glance without depending only on the two start/end labels. Rebased onto #453 (bindable Series) and #454 (FollowPeak/NiceCeiling) — both land in Draw's own body, so this reapplies cleanly against c.points() rather than the old direct c.Points access. Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A host had to assign a field and hope something repainted. That is not a binding, and it is why a queue window watching a live rate had to poke the chart on a timer.
The reason none of them had one is worth writing down:
mvvm.Observableis constrained to comparable types, so it can skip a notification when nothing changed — and a slice is not comparable. The vehicle for a series isObservableList, which also says what changed rather than only that something did.TimeSeriesChart.SeriesandLineChart.Valuesare that list, created on first use and seeded from the existing field. From then on the list is what the chart draws: two sources for one truth is how a chart comes to show last minute data. A chart nobody binds keeps working exactly as it did, which is what the field is still for.Consumer:
godl queue window, whose rate charts follow a live queue.🤖 Generated with Claude Code