fix: page-named toolbar title + ellipsized needs-modules chip (0.21.1)

With no flow open the toolbar header said 'Kein Flow geöffnet' and
read as the page title (usertest finding); it now names the page
('Flows') while the empty state keeps the explanatory sentence. The
'needs N modules' chip ellipsizes in the narrow flow list instead of
overflowing its row on longer German labels.

Signed-off-by: flemming-it <sf@flemming.it>
This commit is contained in:
flemming-it 2026-07-11 02:37:01 +02:00
parent fb41a518c9
commit c4d3751e85
4 changed files with 35 additions and 10 deletions

View file

@ -4,6 +4,19 @@ All notable changes to `chain_studio_flow_editor` recorded here.
Studio bumps its `pubspec.yaml` git ref to a specific release Studio bumps its `pubspec.yaml` git ref to a specific release
of this package on every editor change. of this package on every editor change.
## 0.21.1 — 2026-07-11
### Fixed
- **Toolbar names the page, not the missing state.** With no flow
open the header said "No flow open" / "Kein Flow geöffnet" — the
usertest read it as a confusing page title. It now says "Flows";
the state sentence stays in the centered empty state.
- **"Needs N modules" chip no longer overflows the flow list.** The
label ellipsizes inside the narrow sidebar (the tooltip keeps the
full text); previously it tripped a RenderFlex overflow by a few
pixels on longer German labels.
## 0.21.0 — 2026-06-09 ## 0.21.0 — 2026-06-09
### Added ### Added

View file

@ -925,10 +925,13 @@ class _Toolbar extends StatelessWidget {
), ),
const SizedBox(width: FaiSpace.xs), const SizedBox(width: FaiSpace.xs),
], ],
// With no flow open the toolbar acts as the page header, so
// it says what the page IS ("Flows"), not what it lacks
// the state sentence stays in the centered empty state.
Text( Text(
activeName == null ? strings.emptyTitle : '${activeName!}.yaml', activeName == null ? strings.pageTitle : '${activeName!}.yaml',
style: theme.textTheme.titleSmall?.copyWith( style: theme.textTheme.titleSmall?.copyWith(
fontFamily: 'monospace', fontFamily: activeName == null ? null : 'monospace',
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
// Dirty file name renders in the primary accent // Dirty file name renders in the primary accent
// so the operator sees "this file has unsaved // so the operator sees "this file has unsaved
@ -1486,8 +1489,13 @@ class _MissingModulesBadge extends StatelessWidget {
children: [ children: [
const Icon(Icons.extension_off_outlined, size: 10, color: warn), const Icon(Icons.extension_off_outlined, size: 10, color: warn),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( // Flexible + ellipsis: the chip sits in the narrow flow
// list, where the full label otherwise overflows by a few
// pixels (the tooltip still carries the complete text).
Flexible(
child: Text(
label, label,
overflow: TextOverflow.ellipsis,
style: theme.textTheme.labelSmall?.copyWith( style: theme.textTheme.labelSmall?.copyWith(
color: warn, color: warn,
fontSize: 10, fontSize: 10,
@ -1495,6 +1503,7 @@ class _MissingModulesBadge extends StatelessWidget {
letterSpacing: 0.2, letterSpacing: 0.2,
), ),
), ),
),
], ],
), ),
); );

View file

@ -20,6 +20,9 @@ class FlowEditorStrings {
String get listHeader => _t('FLOWS', 'FLOWS'); String get listHeader => _t('FLOWS', 'FLOWS');
String get copy => _t('Copy', 'Kopieren'); String get copy => _t('Copy', 'Kopieren');
String get runOutput => _t('RUN OUTPUT', 'LAUF-ERGEBNIS'); String get runOutput => _t('RUN OUTPUT', 'LAUF-ERGEBNIS');
/// Toolbar title while no flow is open names the page, never
/// the missing state (that sentence lives in the empty state).
String get pageTitle => _t('Flows', 'Flows');
String get emptyTitle => _t('No flow open', 'Kein Flow geöffnet'); String get emptyTitle => _t('No flow open', 'Kein Flow geöffnet');
String get emptyBody => _t( String get emptyBody => _t(
'Pick one from the left, or click New flow to start a fresh one.', 'Pick one from the left, or click New flow to start a fresh one.',

View file

@ -1,6 +1,6 @@
name: chain_studio_flow_editor name: chain_studio_flow_editor
description: Swappable inline YAML editor for F∆I Studio flows. description: Swappable inline YAML editor for F∆I Studio flows.
version: 0.21.0 version: 0.21.1
publish_to: 'none' publish_to: 'none'
repository: https://git.flemming.ai/fai/studio-flow-editor repository: https://git.flemming.ai/fai/studio-flow-editor