# fai_studio_flow_editor Swappable inline YAML editor for F∆I Studio flows. ## Public surface ```dart import 'package:fai_studio_flow_editor/fai_studio_flow_editor.dart'; // Studio embeds the page as one of its destinations: FlowEditorPage( initialFlowName: 'hello', // optional locale: FlowEditorLocale.de, // or .en onRun: (name) => // optional callback HubService.instance.runSavedFlow(name: name), ) ``` - **`initialFlowName`** — when set, the page loads that flow from `~/.fai/data/flows/.yaml` on first build. Used by Studio's Flows-page pencil → editor route push. - **`locale`** — picks EN or DE for the editor's internal string table. Studio passes its active locale through. - **`onRun`** — async callback that runs the named flow against the host hub and returns the typed outputs map. When null, the Run button is disabled (e.g. when the editor is embedded in a context without hub access). ## Behaviour - File browser (left, 240 px) lists `*.yaml` in `~/.fai/data/flows/`. - Code field (right) ships YAML syntax highlighting via `flutter_code_editor` + the highlight package's yaml grammar. - Save writes directly to disk via `dart:io`; the hub picks up the change on its next `ListFlows` / `RunSavedFlow` call. - Cmd+S / Ctrl+S — save. Cmd+Enter / Ctrl+Enter — run. ## Swap it Studio depends on this package via `pubspec.yaml` git reference: ```yaml dependencies: fai_studio_flow_editor: git: url: https://git.flemming.ai/fai/studio-flow-editor ref: main ``` To use a different editor: 1. Fork this repo (or write your own from scratch). 2. Keep the `FlowEditorPage` constructor signature (`initialFlowName`, `locale`, `onRun`) — that's the stable host contract. 3. Point Studio's pubspec at your fork (or local-path during development): ```yaml fai_studio_flow_editor: git: url: https://your-host/your/flow-editor ref: main ``` 4. Rebuild Studio. Done. The contract is intentionally minimal: a single page widget with three parameters. The package brings its own tokens, its own empty/error widgets, its own l10n table, so the host doesn't have to share internals. The trade-off is visual drift if Studio's design tokens change — that's the deal you accept for a swappable module. ## Develop ```bash flutter pub get flutter analyze flutter test ``` The package's own widget tests live in `test/`. End-to-end tests against a live hub stay in the host repo (Studio). ## License Apache-2.0. Same as the rest of the F∆I platform.