Extracted from fai/studio's lib/pages/flow_editor.dart so the editor can be swapped out independently of the host. Public surface kept minimal — a single FlowEditorPage widget with three named parameters (initialFlowName, locale, onRun). The package brings its own design tokens, empty/error widgets, l10n table; no host-internal types leak through. Studio depends on this repo via pubspec.yaml git reference. Forks point Studio at a different URL and rebuild. See README.md for the swap recipe. Signed-off-by: F∆I Platform <platform@flemming.ai>
90 lines
2.6 KiB
Markdown
90 lines
2.6 KiB
Markdown
# 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/<name>.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.
|