feat(editor): per-field input/output ports + i18n tooltips + 4 jai_client patterns
Phase A of the per-field-output-ports roadmap. FlowRunDriver gains optional moduleInfo(capability) hook that returns a ModuleSpec carrying declared inputs + outputs (each ModuleField has name, type, locale-> description map). Default returns null so legacy hosts that didn't implement the hook keep compiling — the editor falls back to YAML-reference-derived ports. FlowCanvas caches ModuleSpec per step capability, kicked off lazily on each build. When the spec lands, the canvas rebuilds with: - Per-field input ports on the LEFT (declared input names, in stable manifest order) — replaces the with_-keys-as- port-labels shape. - Per-field output ports on the RIGHT — one anchor per declared output field. A flow like summarize that declares response/model_endpoint/model_name/model_digest now exposes four distinct anchors instead of fanning every downstream reference out of one collapsed point. - Tooltips on each port label, picked from the field's description.<locale> with English fallback. NodeGeometry refactored: heightFor(inputs, outputs) takes max(inputs, outputs); outputPortY(index) for the new multi-port output side; outputAnchorY() preserves the legacy single-anchor fallback so edges still draw before the spec resolves. Edges + hit-tester now use _outputPortPosition(stepId, fieldName: edge.fromField). Field index lookup falls through to outputAnchorY when the spec isn't loaded yet. Patterns: ported modern, classic, blueprint, minimal from jai_client's CanvasPatternPainter. Dropdown now has seven choices (dots, grid, modern, classic, blueprint, minimal, blank). Bumps fai_studio_flow_editor to 0.9.0. Signed-off-by: flemming-it <sf@flemming.it>
This commit is contained in:
parent
1f5601a461
commit
b1fe765468
6 changed files with 505 additions and 87 deletions
|
|
@ -503,7 +503,12 @@ outputs:
|
|||
return Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: FlowCanvas(controller: _controller, style: style),
|
||||
child: FlowCanvas(
|
||||
controller: _controller,
|
||||
style: style,
|
||||
driver: widget.runDriver,
|
||||
locale: widget.locale,
|
||||
),
|
||||
),
|
||||
if (!hasSteps) emptyOverlay(),
|
||||
if (hasSelection)
|
||||
|
|
@ -548,7 +553,12 @@ outputs:
|
|||
Expanded(
|
||||
child: Stack(
|
||||
children: [
|
||||
FlowCanvas(controller: _controller, style: style),
|
||||
FlowCanvas(
|
||||
controller: _controller,
|
||||
style: style,
|
||||
driver: widget.runDriver,
|
||||
locale: widget.locale,
|
||||
),
|
||||
if (!hasSteps) emptyOverlay(),
|
||||
],
|
||||
),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue