diff --git a/beads-ide/apps/frontend/src/components/formulas/formula-flow-view.tsx b/beads-ide/apps/frontend/src/components/formulas/formula-flow-view.tsx
index 3c7a17c..34d848d 100644
--- a/beads-ide/apps/frontend/src/components/formulas/formula-flow-view.tsx
+++ b/beads-ide/apps/frontend/src/components/formulas/formula-flow-view.tsx
@@ -290,7 +290,7 @@ export function FormulaFlowView({ result, selectedStepId, onStepSelect }: Formul
{waves.map((waveSteps, waveIndex) => (
-
s.id).join('-')}`}>
+
Wave {waveIndex + 1}
diff --git a/beads-ide/apps/frontend/src/components/formulas/pour-dialog.tsx b/beads-ide/apps/frontend/src/components/formulas/pour-dialog.tsx
index 14b6122..8ab46ec 100644
--- a/beads-ide/apps/frontend/src/components/formulas/pour-dialog.tsx
+++ b/beads-ide/apps/frontend/src/components/formulas/pour-dialog.tsx
@@ -218,7 +218,7 @@ function BeadPreviewList({ beads }: BeadPreviewListProps) {
return (
{beads.map((bead, index) => (
- -
+
-
{bead.title}
{bead.type && {bead.type}}
diff --git a/beads-ide/apps/frontend/src/components/results/graph-view.tsx b/beads-ide/apps/frontend/src/components/results/graph-view.tsx
index 9557d9b..69ec4c4 100644
--- a/beads-ide/apps/frontend/src/components/results/graph-view.tsx
+++ b/beads-ide/apps/frontend/src/components/results/graph-view.tsx
@@ -108,6 +108,27 @@ const controlsPanelStyle: CSSProperties = {
maxWidth: '280px',
}
+const emptyStateStyle: CSSProperties = {
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ justifyContent: 'center',
+ height: '100%',
+ color: '#888',
+ gap: '12px',
+}
+
+const emptyStateIconStyle: CSSProperties = {
+ fontSize: '48px',
+ opacity: 0.5,
+}
+
+const emptyStateTextStyle: CSSProperties = {
+ fontSize: '14px',
+ textAlign: 'center',
+ lineHeight: '1.5',
+}
+
// Zoom thresholds for semantic zoom
const ZOOM_THRESHOLD_LABELS = 0.5 // Hide labels below this zoom
const ZOOM_THRESHOLD_DETAILS = 0.3 // Simplify further below this zoom
@@ -1290,81 +1311,94 @@ export function GraphView({
onMouseMove={handleMouseMove}
onMouseLeave={handleMouseLeave}
>
- {/* View mode toggle for accessibility */}
-
-
-
-
-
- {viewMode === 'list' ? (
-
+ {rawNodes.length === 0 ? (
+
+
+ ◇
+
+
+ No beads to display. Pour a formula to create beads.
+
+
) : (
-
-
-
- {
- const data = node.data as NodeData
- if (data.isCluster) return '#007acc'
- const beadData = data as BeadData
- if (beadData.hasMetric && beadData.metricValue !== undefined) {
- return metricColor(beadData.metricValue)
- }
- return getStatusColor(beadData.status)
- }}
- maskColor="rgba(30, 30, 30, 0.8)"
- style={{ backgroundColor: '#252526' }}
- />
-
-
+ {/* View mode toggle for accessibility */}
+
+
+
+
+
+ {viewMode === 'list' ? (
+
-
-
+ ) : (
+
+
+
+ {
+ const data = node.data as NodeData
+ if (data.isCluster) return '#007acc'
+ const beadData = data as BeadData
+ if (beadData.hasMetric && beadData.metricValue !== undefined) {
+ return metricColor(beadData.metricValue)
+ }
+ return getStatusColor(beadData.status)
+ }}
+ maskColor="rgba(30, 30, 30, 0.8)"
+ style={{ backgroundColor: '#252526' }}
+ />
+
+
+
+
+ )}
+ >
)}
)