feat(studio): clearer store + channel switcher + approvals & welcome polish
Some checks failed
Security / Security check (push) Failing after 2s

- store: repair the filter dialog crash (a Spacer lived directly in
  AlertDialog.actions, which is an OverflowBar, not a Flex — it threw
  and rendered a broken dialog). Buttons now sit in a Row.
- store: promote the module-store manager from a bare icon to a
  labelled 'Add store' button, and fully localize the dialog (DE/EN).
- store: add a curated 'Suggested stores' shelf with one-click
  add/remove (first entry: Recl∆Im). Each suggestion is probed for
  reachability and shows 'not available yet' until its index is
  published, instead of failing only on click. Fail-open on network
  errors so a transient hiccup never hides a real store.
- sidebar: the channel pill is now a one-click channel switcher
  (menu with per-channel running state + active check; switching
  writes ~/.chain/current-channel, restarts the daemon, and Studio
  repoints to the new channel).
- approvals: lead the card with the human prompt ('what am I
  releasing?') and demote the flow/step id to a metadata line; clear
  fallback when the step left the prompt empty.
- welcome: tidy the docs grid into equal-height paired rows with a
  full-width trailing card for the odd one out.

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-06-18 21:29:39 +02:00
parent 62ed3951e5
commit 5220f19ff8
10 changed files with 865 additions and 148 deletions

View file

@ -260,7 +260,7 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get sidebarChannelTooltip =>
'Active channel — click to switch in Settings (⌘;).\nproduction = stable · beta = pre-release · dev = rolling · local = workspace';
'Active channel — click to switch.\nproduction = stable · beta = pre-release · dev = rolling · local = workspace';
@override
String get buttonCancel => 'Cancel';
@ -789,6 +789,61 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get storeReloadTooltip => 'Reload';
@override
String get storesManagerButton => 'Add store';
@override
String get storesManagerTitle => 'Module stores';
@override
String get storesManagerIntro =>
'The hub merges the modules from every store below into one index. Add a store\'s index URL to make its modules installable here.';
@override
String get storesManagerAddSection => 'Add a store';
@override
String get storesManagerNameLabel => 'Name';
@override
String get storesManagerUrlLabel => 'Index URL (https:// or file://)';
@override
String get storesManagerAddAction => 'Add store';
@override
String storesManagerBundled(int count) {
return '$count modules · bundled';
}
@override
String storesManagerModuleCount(int count) {
return '$count modules';
}
@override
String get storesManagerAddFailed => 'Could not add store';
@override
String get storesManagerRemoveFailed => 'Could not remove store';
@override
String get storesManagerSuggested => 'Suggested stores';
@override
String get storesManagerAddShort => 'Add';
@override
String get storesManagerNotAvailable => 'Not available yet';
@override
String get storesManagerNotAvailableHint =>
'The provider hasn\'t published this store index yet. It will become installable once they do.';
@override
String get storesSuggestedReclaimDesc =>
'Recl∆Im — modules for law & duty reform-mapping';
@override
String get storeTodayBadge => 'TODAY';
@ -1722,7 +1777,15 @@ class AppLocalizationsEn extends AppLocalizations {
String get approvalsPillExpired => 'expired';
@override
String get approvalsPayloadPreview => 'PAYLOAD PREVIEW';
String get approvalsPayloadPreview => 'DATA TO BE RELEASED';
@override
String get approvalsRequestFallback => 'Approval required for this step';
@override
String approvalsFlowStepMeta(String flow, String step) {
return 'Flow: $flow · Step: $step';
}
@override
String get approvalsApproveButton => 'Approve';