feat(studio): plain-language store, bottom-anchored ask bar (v0.33.0)
The store had three structural problems flagged in user feedback: 1. "Lernkurve zu hoch — alle bridge, debug, alpha, planned, keiner weiß was das heißt." Wire-level enum values bled through into the UI: `bridge`, `debug`, `published`, `alpha`, `planned`. Operators don't share the data model. 2. "Filter / Kategorien sollten oben in die Leiste neben Store zum ausklappen, der Body soll übersichtlicher werden." A chip-row plus category strip plus result-count line ate a full row of viewport on every screen. 3. "Suche passt besser an den unteren Bildschirmrand." The chat-style ask bar belongs at the bottom — Claude / ChatGPT / Slack pattern — not at the top where it competes with the Today hero. Plus: "Es gibt noch ganz viele overflows in den Beschreibungen." Changes: - Plain-language display names. New ARB keys for category labels (Connectors / Sample modules / AI models / Storage / Channels / Authentication / Orchestration / …) and updated status values (stable / experimental / coming soon). Wire ids stay in StoreEntry, RPCs, seed.yaml — only the rendered pills and dropdowns get translated. Helpers `_categoryDisplayName` and `_statusDisplayName` keep the mapping in one place. - Toolbar moves into the AppBar. The new `_CategoryDropdown` hosts the category picker as a popup-menu with localised labels; the existing `_FilterButton` lives next to it; the reload icon stays where it always was. The body no longer carries any chip strip or result-count line. - Bottom-anchored `_AskBar`. The Scaffold body becomes a Column of `Expanded(scrollable content)` plus a pinned composer row at the foot of the viewport, with a top divider matching the chat-input pattern of modern AI assistants. AI answers now render at the top of the scroll (above the Today-Hero) so the operator sees them right after submitting the question at the bottom. - Overflow sweep on descriptions. Today-Hero header row becomes a Wrap (badge + deck flow naturally on narrow windows), the title is bound to 3 lines, the body to 6. Card category text gets `maxLines: 1, ellipsis` in both StoreCard and FeaturedTile. Recommended-source card title gets the same treatment. - Better toast for the "added but zero capabilities" path. When MCP discovery succeeds but returns no tools (typical Streamable-HTTP servers without Mcp-Session-Id support, or servers that need `notifications/initialized`), the toast now explains the situation in plain language and points the operator at Settings → MCP Clients to retry. Old pluralised toast still fires when N > 0. Hub-side `notifications/initialized` for HTTP MCP and Mcp-Session-Id support are out of scope for this commit; tracked as a separate fai_hub follow-up. Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
c7869870c4
commit
de22791e86
8 changed files with 434 additions and 143 deletions
|
|
@ -761,19 +761,19 @@ abstract class AppLocalizations {
|
|||
/// No description provided for @storeStatusPublished.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Published'**
|
||||
/// **'stable'**
|
||||
String get storeStatusPublished;
|
||||
|
||||
/// No description provided for @storeStatusAlpha.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Alpha'**
|
||||
/// **'experimental'**
|
||||
String get storeStatusAlpha;
|
||||
|
||||
/// No description provided for @storeStatusPlanned.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Planned'**
|
||||
/// **'coming soon'**
|
||||
String get storeStatusPlanned;
|
||||
|
||||
/// No description provided for @storeInstalledOnly.
|
||||
|
|
@ -782,6 +782,78 @@ abstract class AppLocalizations {
|
|||
/// **'Installed'**
|
||||
String get storeInstalledOnly;
|
||||
|
||||
/// No description provided for @storeCategoryLabel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Category'**
|
||||
String get storeCategoryLabel;
|
||||
|
||||
/// No description provided for @storeCategoryAll.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'All categories'**
|
||||
String get storeCategoryAll;
|
||||
|
||||
/// No description provided for @storeCategoryBridge.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Connectors'**
|
||||
String get storeCategoryBridge;
|
||||
|
||||
/// No description provided for @storeCategoryDebug.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Sample modules'**
|
||||
String get storeCategoryDebug;
|
||||
|
||||
/// No description provided for @storeCategoryText.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Text'**
|
||||
String get storeCategoryText;
|
||||
|
||||
/// No description provided for @storeCategoryLlm.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'AI models'**
|
||||
String get storeCategoryLlm;
|
||||
|
||||
/// No description provided for @storeCategorySystem.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'System'**
|
||||
String get storeCategorySystem;
|
||||
|
||||
/// No description provided for @storeCategoryAuth.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Authentication'**
|
||||
String get storeCategoryAuth;
|
||||
|
||||
/// No description provided for @storeCategoryStorage.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Storage'**
|
||||
String get storeCategoryStorage;
|
||||
|
||||
/// No description provided for @storeCategoryChannel.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Channels'**
|
||||
String get storeCategoryChannel;
|
||||
|
||||
/// No description provided for @storeCategoryWeb.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Web'**
|
||||
String get storeCategoryWeb;
|
||||
|
||||
/// No description provided for @storeCategoryOrchestrator.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'Orchestration'**
|
||||
String get storeCategoryOrchestrator;
|
||||
|
||||
/// No description provided for @storeNResults.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
@ -1100,6 +1172,12 @@ abstract class AppLocalizations {
|
|||
/// **'Added {name} — {n} federated {n, plural, =1{capability} other{capabilities}}.'**
|
||||
String storeProviderAddedToast(String name, int n);
|
||||
|
||||
/// No description provided for @storeProviderAddedZeroToast.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
/// **'{name} registered, but the server returned no capabilities yet. Open Settings → MCP Clients to retry discovery or check the server.'**
|
||||
String storeProviderAddedZeroToast(String name);
|
||||
|
||||
/// No description provided for @storeProviderAddFailed.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue