Skip to content

feat(dashboard): add 6 new widget types (Phase B)#34

Merged
HanSur94 merged 12 commits into
mainfrom
feature/dashboard-new-widgets
Mar 18, 2026
Merged

feat(dashboard): add 6 new widget types (Phase B)#34
HanSur94 merged 12 commits into
mainfrom
feature/dashboard-new-widgets

Conversation

@HanSur94
Copy link
Copy Markdown
Owner

Summary

  • HeatmapWidget — 2D color grid via imagesc + colorbar, with DataFcn or Sensor binding
  • BarChartWidget — Horizontal/vertical bars via bar/barh, DataFcn with categories+values
  • HistogramWidget — Value distributions using histcounts + bar (Octave-compatible), optional normal fit overlay
  • ScatterWidget — X vs Y correlation using dual SensorX/SensorY, optional color-coding by third sensor
  • ImageWidget — Static image display from file (PNG/JPG) or ImageFcn callback, with caption support
  • MultiStatusWidget — Grid of colored status indicators for monitoring many sensors at a glance
  • All 6 registered in DashboardEngine, DashboardSerializer, and web bridge

Test plan

  • Run TestHeatmapWidget, TestBarChartWidget, TestHistogramWidget, TestScatterWidget, TestImageWidget, TestMultiStatusWidget in MATLAB
  • Run TestDashboardEngine — no regressions
  • Verify d.addWidget('heatmap', ...) etc. work via engine API

🤖 Generated with Claude Code

Copy link
Copy Markdown
Contributor

@ghost ghost left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark 'FastSense Performance'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 1.10.

Benchmark suite Current: 02be3c6 Previous: 58157fc Ratio
Downsample mean std(5M) 0.105 ms 0.049 ms 2.14
Instantiation mean std(5M) 0.676 ms 0.396 ms 1.71
Instantiation mean std10M) 1.423 ms 0.417 ms 3.41
Render mean std10M) 1.86 ms 1.316 ms 1.41
Downsample mean std50M) 4.408 ms 0.51 ms 8.64
Instantiation mean std50M) 120.054 ms 83.755 ms 1.43
Render mean std50M) 22.064 ms 1.396 ms 15.81
Instantiation mean ( std00M) 182.399 ms 164.458 ms 1.11
Zoom cycle mean ( std00M) 1.04 ms 0.432 ms 2.41
Downsample mean ( std00M) 13.14 ms 0.665 ms 19.76
Instantiation mean ( std00M) 1018.04 ms 164.458 ms 6.19
Render mean (500M) 618.457 ms 545.29 ms 1.13
Render mean ( std00M) 513.817 ms 4.26 ms 120.61
Zoom cycle mean ( std00M) 0.986 ms 0.432 ms 2.28

This comment was automatically generated by workflow using github-action-benchmark.

CC: @HanSur94

HanSur94 and others added 12 commits March 18, 2026 23:08
Defines a standalone registry class for integrating external .mat
data into the FastSense pipeline without modifying existing APIs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix Sensor/StateChannel constructor calls (key is positional)
- Clarify cross-file state channel wiring (StateChannel loads its own data)
- Fix LiveEventPipeline parameter name (EventFile, not EventStorePath)
- Document struct() as unconditional threshold convention
- Clarify duplicate key warning behavior
- Fix "mirrors SensorRegistry" claim for new methods

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Clarify which methods are new vs mirrored from SensorRegistry
- Make wireStateChannel signature explicit (no NV... ambiguity)
- Specify handle mutation for same-file state wiring

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 7 tasks across 3 chunks (core registry, data wiring, viewer+integration)
- TDD approach with 24 tests covering happy path and error cases
- Fixes from review: count() returns double, getAll() returns copy,
  added tests for non-Sensor register, nonexistent unregister

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
7-task plan covering HeatmapWidget, BarChartWidget, HistogramWidget,
ScatterWidget, ImageWidget, MultiStatusWidget + engine/serializer/bridge
registration. Tasks 1-6 are parallelizable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…r, and bridge

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Create standalone runnable example scripts for the 6 Phase B widgets
(HeatmapWidget, BarChartWidget, HistogramWidget, ScatterWidget,
ImageWidget, MultiStatusWidget) and a documented placeholder for the
planned GroupWidget.  Also extend example_dashboard_all_widgets.m to
include all 6 new widget types in the all-in-one demo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Extract threshold color derivation into private deriveColor method
to stay within the project's max control nesting depth of 5.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@HanSur94 HanSur94 force-pushed the feature/dashboard-new-widgets branch from 27770bd to 02be3c6 Compare March 18, 2026 22:12
@HanSur94 HanSur94 merged commit 8776ee6 into main Mar 18, 2026
9 checks 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