rsdeps

Cargo.lock visualizer (mirror)
Log | Files | Refs | README | LICENSE

commit 3d9df83809175c6962ca2366e266e47e08e8d4ae
parent d21294fe151cadbc9f195c294544221ba9ce8392
Author: Andy Khramtsov <>
Date:   Sat, 30 May 2026 03:20:27 +0300

feat: deselect on second click

Diffstat:
Msrc/deps/pages/home.py | 9+++++++++
1 file changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/deps/pages/home.py b/src/deps/pages/home.py @@ -35,6 +35,7 @@ class ids: selected_node_details: str = "selected-node-details" cache_store: str = "cache-store" + selected_node_store: str = "selected-node-store" class colors: @@ -81,6 +82,7 @@ def layout(): children=[ html.H2("Cargo dependency visualisation"), dcc.Store(id=ids.cache_store, storage_type="memory"), + dcc.Store(id=ids.selected_node_store, storage_type="memory"), html.Div( className="vertical-content", children=[ @@ -598,6 +600,7 @@ def display_cargo_lock_packages(inputs, state): dict( graph=Output(ids.dependency_graph, "figure"), cache=Output(ids.cache_store, "data"), + selected_node_store=Output(ids.selected_node_store, "data"), details=Output(ids.selected_node_details, "children"), ), dict( @@ -609,6 +612,8 @@ def display_cargo_lock_packages(inputs, state): cargo_toml=State(ids.cargo_toml_textarea, "value"), cargo_lock=State(ids.cargo_lock_textarea, "value"), cache=State(ids.cache_store, "data"), + selected_node_store=State(ids.selected_node_store, "data"), + figure=State(ids.dependency_graph, "figure"), ), prevent_initial_call=True, ) @@ -632,6 +637,8 @@ def visualize(inputs, state): selected = point.get("customdata", None) else: selected = None + if state["selected_node_store"] and state["selected_node_store"].get("selected") == selected: + selected = None if clean: if not state["cargo_lock"]: @@ -670,9 +677,11 @@ def visualize(inputs, state): ] fig = draw_graph_figure(df_graph, positions, selected) + fig.update_layout(uirevision="1") return dict( graph=fig, cache=cache, details=details, + selected_node_store=dict(selected=selected), )