Skip to content

feat(visualization): migrate legend panel to feature architecture - #4491

Merged
ChristianHuehn merged 4 commits into
mainfrom
feature/redesign-legend-panel
Jun 12, 2026
Merged

feat(visualization): migrate legend panel to feature architecture#4491
ChristianHuehn merged 4 commits into
mainfrom
feature/redesign-legend-panel

Conversation

@ChristianHuehn

@ChristianHuehn ChristianHuehn commented Jun 12, 2026

Copy link
Copy Markdown
Collaborator

Rebuild the legend as features/legend with OnPush signal components, daisyui/tailwind styling and the components -> services -> stores layering. The legend is now read-only: map colors are no longer editable from it, folder markings are no longer listed, metric titles lose their external links and the panel has no header. Edge metric rows/swatches and delta mode swatches are kept; the panel renders above the floating metrics bar.

Move mapColorLabel.pipe to util/pipes, extract the shared HexMapColor type to codeCharta.model.ts and delete the old ui/legendPanel including its marked-packages e2e tests (folder colors are managed via the Color settings popover's folder overrides now).

{Meaningful title}

Please read the CONTRIBUTING.md before opening a PR.

Closes: #

Description

Descriptive pull request text, answering:

  • What problem/issue are you fixing?
  • What does this PR implement and how?

Definition of Done

A PR is only ready for merge once all the following acceptance criteria are fulfilled:

  • Changes have been manually tested
  • All TODOs related to this PR have been closed
  • There are automated tests for newly written code and bug fixes
  • All bugs discovered while working on this PR have been submitted as issues (if not already an open issue)
  • Documentation (GH-pages, analysis/visualization READMEs, parser READMEs, --help, etc.) has been updated (almost always necessary except for bug fixes)
  • CHANGELOG.md has been updated

Screenshots or gifs

Summary by CodeRabbit

  • Changed

    • Legend panel redesigned as informational-only: shows metric mappings, read-only swatches and ranges; removed in-panel editing, marked-folder listings, and external metric links
    • Panel now renders above the metrics bar with a rotated toggle and outside-click close behavior
  • New Features

    • New compact legend sections for metrics, color scale, edge and delta colors; updated toggle positioning/behavior
  • Documentation

    • Changelog entry and design plan added
  • Tests

    • New and improved unit tests and accessibility attributes for legend UI elements

Rebuild the legend as features/legend with OnPush signal components,
daisyui/tailwind styling and the components -> services -> stores
layering. The legend is now read-only: map colors are no longer
editable from it, folder markings are no longer listed, metric titles
lose their external links and the panel has no header. Edge metric
rows/swatches and delta mode swatches are kept; the panel renders
above the floating metrics bar.

Move mapColorLabel.pipe to util/pipes, extract the shared HexMapColor
type to codeCharta.model.ts and delete the old ui/legendPanel including
its marked-packages e2e tests (folder colors are managed via the Color
settings popover's folder overrides now).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fa172562-5b2b-4b1a-9c3f-6d6c1711cf46

📥 Commits

Reviewing files that changed from the base of the PR and between 502a7e6 and 490d0e1.

📒 Files selected for processing (3)
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPanel.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendToggleButton.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendToggleButton.component.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendToggleButton.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendToggleButton.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPanel.component.html

📝 Walkthrough

Walkthrough

The PR migrates the legacy legend into a new zoneless, signals-based features/legend module: adds HexMapColor typing, NgRx store wrappers and root services, standalone row and section components (color/metric/delta/edge), a positioned panel with rotated LEGEND toggle and outside-click close, facade/app wiring, tests, and removes the legacy ui/legendPanel implementation.

Changes

Legend Panel Redesign & Migration

Layer / File(s) Summary
Planning & Documentation
plans/legend/redesign-legend.md, visualization/CHANGELOG.md
Complete plan document detailing UX decisions, implementation tasks, and completion checklist. Changelog entry documents the new informational-only legend behavior with read-only swatches and removal of editable colors.
HexMapColor Type
visualization/app/codeCharta/codeCharta.model.ts
New exported type HexMapColor extracted from MapColors, excluding label/marking/inversion fields; used throughout legend and color picker components.
Store & Service Wrappers
visualization/app/codeCharta/features/legend/stores/*, visualization/app/codeCharta/features/legend/services/*
NgRx store wrappers and matching injectable services providing observable access to legend-related state (area/height/color/edge metrics, map colors, color ranges, delta state, attribute descriptors, selected color metric data).
Core Legend Components
visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.*, visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricRow.component.*
Standalone components display color swatches and metric rows using signals to bridge service observables and compute labels/titles with fallbacks; tests cover rendering and fallback behaviors.
Panel, Sections & Positioning
visualization/app/codeCharta/features/legend/components/legendPanel/*
Main legend container and sectional components (color scale, delta colors, edge colors, metrics) with computed positioning (LEGEND_BARS_OFFSET, inspector visibility), a rotated LEGEND toggle button, and outside-click close behavior.
Unit Tests & Specs
visualization/app/codeCharta/features/legend/**/.spec.ts, visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/colorBandRow.component.spec.ts
Unit tests cover color/metric rendering, descriptor fallback, panel toggling and outside-click handling, delta-mode switching, inspector-aware positioning, and updated typings in color band/picker tests.
Facade & App Wiring
visualization/app/codeCharta/features/legend/facade.ts, visualization/app/codeCharta/codeCharta.component.ts
Facade re-export for LegendPanelComponent; app import updated to use new facade; color components now use HexMapColor and shared pipe path.
Legacy Legend Panel Cleanup
visualization/app/codeCharta/ui/legendPanel/*
Removal of legacy legend templates, stylesheets, components (LegendBlock, LegendMarkedPackages), selectors, e2e tests, and page objects.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 A little rabbit hops with glee,
Signals, stores, and HexMapKey.
A rotated button, panel bright,
Read-only swatches in plain sight.
The legend hops — the UI’s free.

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The PR description provides a clear explanation of what is being fixed/implemented, but the Definition of Done checklist items are unchecked and appear to be a template placeholder that wasn't properly filled in. Complete the Definition of Done checklist by checking off items that apply or providing explanations for any that don't. Verify that manual testing, automated tests, documentation, and CHANGELOG updates have been completed.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: migrating the legend panel to a feature architecture, which aligns with the substantial refactoring detailed in the PR description and file summaries.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/redesign-legend-panel

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 and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
visualization/app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component.ts (1)

20-33: ⚠️ Potential issue | 🟡 Minor

Enforce mapColorFor as a required input in ColorPickerForMapColorComponent to prevent undefined dispatch keys.

visualization/app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component.ts currently declares mapColorFor as @Input() mapColorFor: HexMapColor and uses it as an object key in setMapColors({ value: { [this.mapColorFor]: newHexColor }}). Unlike ColorBandRowComponent’s readonly mapColorFor = input.required<HexMapColor>(), this component doesn’t enforce presence at the input boundary; switching to input.required<HexMapColor>() (or decorator-required inputs if you keep @Input) would align the public contract and avoid accidental undefined keys.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@visualization/app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component.ts`
around lines 20 - 33, The `@Input`() property mapColorFor on
ColorPickerForMapColorComponent can be undefined and is later used as an object
key in handleColorChange when dispatching setMapColors; change the declaration
to enforce a required input (mirror ColorBandRowComponent) by using readonly
mapColorFor = input.required<HexMapColor>() (or an equivalent required-input
helper) instead of `@Input`() mapColorFor: HexMapColor so the component guarantees
mapColorFor is present before handleColorChange dispatches setMapColors({ value:
{ [this.mapColorFor]: newHexColor } }).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.ts`:
- Around line 11-16: The `@Component` metadata for the legend row components is
missing standalone: true; update the decorators for LegendColorRowComponent
(legendColorRow.component.ts) and LegendMetricRowComponent
(legendMetricRow.component.ts) by adding standalone: true to the `@Component`({
... }) object alongside the existing imports: [MapColorLabelPipe] so the
metadata becomes valid for standalone Angular components.

---

Outside diff comments:
In
`@visualization/app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component.ts`:
- Around line 20-33: The `@Input`() property mapColorFor on
ColorPickerForMapColorComponent can be undefined and is later used as an object
key in handleColorChange when dispatching setMapColors; change the declaration
to enforce a required input (mirror ColorBandRowComponent) by using readonly
mapColorFor = input.required<HexMapColor>() (or an equivalent required-input
helper) instead of `@Input`() mapColorFor: HexMapColor so the component guarantees
mapColorFor is present before handleColorChange dispatches setMapColors({ value:
{ [this.mapColorFor]: newHexColor } }).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c187172e-a4b7-453d-8f5d-84a94d424fd6

📥 Commits

Reviewing files that changed from the base of the PR and between 29227f2 and 78126bb.

⛔ Files ignored due to path filters (1)
  • plans/legend/redesign-legend.png is excluded by !**/*.png
📒 Files selected for processing (51)
  • plans/legend/redesign-legend.md
  • visualization/CHANGELOG.md
  • visualization/app/codeCharta/codeCharta.component.ts
  • visualization/app/codeCharta/codeCharta.model.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.spec.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricRow.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricRow.component.spec.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricRow.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPanel.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPanel.component.spec.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPanel.component.ts
  • visualization/app/codeCharta/features/legend/facade.ts
  • visualization/app/codeCharta/features/legend/services/areaMetric.service.ts
  • visualization/app/codeCharta/features/legend/services/attributeDescriptors.service.ts
  • visualization/app/codeCharta/features/legend/services/colorMetric.service.ts
  • visualization/app/codeCharta/features/legend/services/colorRange.service.ts
  • visualization/app/codeCharta/features/legend/services/edgeMetric.service.ts
  • visualization/app/codeCharta/features/legend/services/heightMetric.service.ts
  • visualization/app/codeCharta/features/legend/services/isDeltaState.service.ts
  • visualization/app/codeCharta/features/legend/services/mapColors.service.ts
  • visualization/app/codeCharta/features/legend/services/selectedColorMetricData.service.ts
  • visualization/app/codeCharta/features/legend/stores/areaMetric.store.ts
  • visualization/app/codeCharta/features/legend/stores/attributeDescriptors.store.ts
  • visualization/app/codeCharta/features/legend/stores/colorMetric.store.ts
  • visualization/app/codeCharta/features/legend/stores/colorRange.store.ts
  • visualization/app/codeCharta/features/legend/stores/edgeMetric.store.ts
  • visualization/app/codeCharta/features/legend/stores/heightMetric.store.ts
  • visualization/app/codeCharta/features/legend/stores/isDeltaState.store.ts
  • visualization/app/codeCharta/features/legend/stores/mapColors.store.ts
  • visualization/app/codeCharta/features/legend/stores/selectedColorMetricData.store.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/colorBandRow.component.spec.ts
  • visualization/app/codeCharta/features/metricsBar/components/colorSettingsPopover/colorBandRow.component.ts
  • visualization/app/codeCharta/ui/colorPickerForMapColor/colorPickerForMapColor.component.ts
  • visualization/app/codeCharta/ui/legendPanel/legendBlock/legendBlock.component.html
  • visualization/app/codeCharta/ui/legendPanel/legendBlock/legendBlock.component.scss
  • visualization/app/codeCharta/ui/legendPanel/legendBlock/legendBlock.component.ts
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.html
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.scss
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.spec.ts
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.ts
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.selector.ts
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.html
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.scss
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.spec.ts
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.ts
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.e2e.ts
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.po.ts
  • visualization/app/codeCharta/util/pipes/mapColorLabel.pipe.spec.ts
  • visualization/app/codeCharta/util/pipes/mapColorLabel.pipe.ts
💤 Files with no reviewable changes (14)
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.selector.ts
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.html
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.po.ts
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.spec.ts
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.ts
  • visualization/app/codeCharta/ui/legendPanel/legendBlock/legendBlock.component.scss
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.e2e.ts
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.scss
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.ts
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.scss
  • visualization/app/codeCharta/ui/legendPanel/legendMarkedPackages/legendMarkedPackages.component.html
  • visualization/app/codeCharta/ui/legendPanel/legendBlock/legendBlock.component.ts
  • visualization/app/codeCharta/ui/legendPanel/legendBlock/legendBlock.component.html
  • visualization/app/codeCharta/ui/legendPanel/legendPanel.component.spec.ts

Comment on lines +11 to +16
@Component({
selector: "cc-legend-color-row",
templateUrl: "./legendColorRow.component.html",
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [MapColorLabelPipe]
})

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Fix missing standalone metadata in legend row components
@Component metadata in visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.ts and visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricRow.component.ts uses imports: [...] but lacks standalone: true. Add standalone: true to both @Component({ ... }) decorators to restore valid Angular component metadata.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.ts`
around lines 11 - 16, The `@Component` metadata for the legend row components is
missing standalone: true; update the decorators for LegendColorRowComponent
(legendColorRow.component.ts) and LegendMetricRowComponent
(legendMetricRow.component.ts) by adding standalone: true to the `@Component`({
... }) object alongside the existing imports: [MapColorLabelPipe] so the
metadata becomes valid for standalone Angular components.

christian-huehn-mw and others added 2 commits June 12, 2026 14:09
Extract the metric rows, color scale, delta colors, and edge colors
blocks plus the rotated toggle button from legendPanel into dedicated
section components, mirroring the colorSettingsPopover structure. The
panel now only owns open/close state, outside-click handling, and its
positioning; each section pulls its own data from the legend services.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Render the legend color swatch as a real svg instead of a span with an
img role, and replace the event.target Node assertion in the
outside-click guard with instanceof narrowing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricsSection.component.html (1)

5-5: 💤 Low value

Consider using a distinct alias name for clarity.

The as edgeMetric alias shadows the signal property edgeMetric, making it less obvious that references inside the @if block use the unwrapped value rather than the signal. A distinct name like as edge would improve readability.

♻️ Suggested refactor
-    `@if` (edgeMetric(); as edgeMetric) {
-        <cc-legend-metric-row label="Edge" [metricName]="edgeMetric"></cc-legend-metric-row>
+    `@if` (edgeMetric(); as edge) {
+        <cc-legend-metric-row label="Edge" [metricName]="edge"></cc-legend-metric-row>
    }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricsSection.component.html`
at line 5, The `@if` block currently aliases the unwrapped signal using the same
name `edgeMetric` which shadows the signal; change the alias in the template
from `as edgeMetric` to a distinct name (for example `as edge`) and update all
references inside that `@if` block to use the new alias (`edge`) instead of
`edgeMetric()` or the original signal, ensuring any property or method accesses
inside the block refer to the unwrapped alias.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In
`@visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricsSection.component.html`:
- Line 5: The `@if` block currently aliases the unwrapped signal using the same
name `edgeMetric` which shadows the signal; change the alias in the template
from `as edgeMetric` to a distinct name (for example `as edge`) and update all
references inside that `@if` block to use the new alias (`edge`) instead of
`edgeMetric()` or the original signal, ensuring any property or method accesses
inside the block refer to the unwrapped alias.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 2dbf80d3-a9dd-40f6-a306-e57e2a727dd1

📥 Commits

Reviewing files that changed from the base of the PR and between 78126bb and 502a7e6.

📒 Files selected for processing (14)
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorScaleSection.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorScaleSection.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendDeltaColorsSection.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendDeltaColorsSection.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendEdgeColorsSection.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendEdgeColorsSection.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricsSection.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendMetricsSection.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPanel.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPanel.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPosition.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendToggleButton.component.html
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendToggleButton.component.ts
✅ Files skipped from review due to trivial changes (2)
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorScaleSection.component.ts
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendPosition.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • visualization/app/codeCharta/features/legend/components/legendPanel/legendColorRow.component.html

Sonar S7651 blocker: outputs must not shadow standard DOM events, so
the legend toggle button now emits togglePanel instead of toggle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@ChristianHuehn
ChristianHuehn merged commit 972f1bd into main Jun 12, 2026
8 checks passed
@ChristianHuehn
ChristianHuehn deleted the feature/redesign-legend-panel branch June 12, 2026 13:32
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.

2 participants