From fdc28ac68664c7342a8940a8f7d69f31f0e3a28d Mon Sep 17 00:00:00 2001 From: Justin Visser Date: Wed, 10 Jun 2026 17:45:29 +0200 Subject: [PATCH] web: world controls, slice 6 of M3 The lower grid completes: reach chart left, World card right. Two headline levers (chance to forward, education budget as count plus share) move instantly and rerun through the store's debounce; the advanced disclosure holds students, friends per student, clique tendency, first poster, and the three named seeds, each seed with a dice reroll plus a Reroll world button (one coalesced run). Engine 400s render inline under the card header in rose with the offending field marked by name match; network failures keep using the banner with retry. A graph-seed reroll remounts the network svg keyed by graph hash, fading the new layout in over 200 ms. --- web/src/App.vue | 18 +- web/src/components/AdvancedFields.vue | 248 ++++++++++++++++++++++++++ web/src/components/ControlsCard.vue | 84 +++++++++ web/src/components/LeverSlider.vue | 154 ++++++++++++++++ web/src/components/NetworkView.vue | 17 +- web/src/components/ReachChart.vue | 5 +- 6 files changed, 520 insertions(+), 6 deletions(-) create mode 100644 web/src/components/AdvancedFields.vue create mode 100644 web/src/components/ControlsCard.vue create mode 100644 web/src/components/LeverSlider.vue diff --git a/web/src/App.vue b/web/src/App.vue index f136fc3..0f4a719 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -1,6 +1,7 @@ + + + + diff --git a/web/src/components/ControlsCard.vue b/web/src/components/ControlsCard.vue new file mode 100644 index 0000000..81fcd4d --- /dev/null +++ b/web/src/components/ControlsCard.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/web/src/components/LeverSlider.vue b/web/src/components/LeverSlider.vue new file mode 100644 index 0000000..0c6f70e --- /dev/null +++ b/web/src/components/LeverSlider.vue @@ -0,0 +1,154 @@ + + + + + diff --git a/web/src/components/NetworkView.vue b/web/src/components/NetworkView.vue index 7f08ee6..374912a 100644 --- a/web/src/components/NetworkView.vue +++ b/web/src/components/NetworkView.vue @@ -16,7 +16,8 @@ const props = defineProps<{ panel: PanelSpec }>() const store = useSimStore() const effectiveConfig = computed(() => store.effectiveConfig(props.panel)) -const edges = computed(() => store.state.edgesByGraphHash[graphKey(effectiveConfig.value)] ?? []) +const panelGraphKey = computed(() => graphKey(effectiveConfig.value)) +const edges = computed(() => store.state.edgesByGraphHash[panelGraphKey.value] ?? []) const result = computed(() => store.state.resultsByPanelId[props.panel.id]) const layout = computed(() => layoutForGraph(effectiveConfig.value, edges.value)) @@ -64,6 +65,7 @@ function popDelay(nodeIndex: number): string {