feat: initial scaffold — swappable flow editor
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>
This commit is contained in:
commit
51f9a1d2b1
8 changed files with 1128 additions and 0 deletions
90
README.md
Normal file
90
README.md
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
# 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.
|
||||
Loading…
Add table
Add a link
Reference in a new issue