Add widget-control logic action and multi-column CSV / multi-field dialogs

Extend the panel logic editor with two capabilities:

- action.widget: drive a panel widget by id from a flow — enable/disable,
  show/hide, and (for plot widgets) clear, pause, or resume the live plot.
  Wired via a per-widget command store consumed by a Canvas WidgetView wrapper
  (disable overlay / hide) and PlotWidget (pause/clear), reset on panel unmount.
- action.export now emits multiple named arrays as CSV columns with per-column
  labels and an alignment mode (common/any/interpolate); dialogs support asking
  for and displaying multiple values per dialog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martino Ferrari
2026-06-19 07:51:18 +02:00
parent afefba3184
commit ba836f00e6
9 changed files with 668 additions and 102 deletions
+67 -1
View File
@@ -399,6 +399,16 @@ body {
white-space: nowrap;
}
/* Overlay shown over a widget disabled via action.widget logic: dims it and
blocks interaction while still surfacing the right-click context menu. */
.widget-disable-overlay {
position: absolute;
z-index: 10;
background: rgba(20, 25, 35, 0.45);
cursor: not-allowed;
box-sizing: border-box;
}
/* ── Unknown widget ────────────────────────────────────────────────────────── */
.unknown-widget {
@@ -1361,6 +1371,44 @@ body {
}
.flow-localvar-actions .panel-btn { flex: 1; }
/* Repeated rows in inspector editors (export columns, dialog fields). */
.flow-row-edit {
display: flex;
align-items: center;
gap: 0.35rem;
margin-bottom: 0.35rem;
}
.flow-row-edit .prop-input { flex: 1; min-width: 0; }
.flow-row-add {
width: 100%;
margin-top: 0.15rem;
}
.flow-field-edit {
border: 1px solid #2a3548;
border-radius: 4px;
padding: 0.4rem;
margin-bottom: 0.4rem;
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.flow-field-head {
display: flex;
align-items: center;
gap: 0.35rem;
}
.flow-field-head .prop-input { flex: 1; min-width: 0; }
.flow-field-kind {
font-size: 0.75rem;
color: #94a3b8;
flex: 0 0 auto;
}
.flow-field-add {
display: flex;
gap: 0.35rem;
}
/* ── History pane ───────────────────────────────────────────────────────── */
.history-pane {
@@ -3570,7 +3618,25 @@ kbd {
.logic-dialog-input {
width: 100%;
margin-bottom: 0.75rem;
margin-bottom: 0;
}
/* A single field row (input or display) in a multi-value dialog. */
.logic-dialog-field {
display: flex;
flex-direction: column;
gap: 0.2rem;
margin-bottom: 0.6rem;
}
.logic-dialog-label {
font-size: 0.8rem;
color: #94a3b8;
}
.logic-dialog-value {
font-size: 0.9rem;
font-weight: 600;
color: #e2e8f0;
padding: 0.2rem 0;
}
.logic-dialog-actions {