fix(ux): quick wins from the usertest medium list
Some checks are pending
Security / Security check (push) Waiting to run

- audit type filter: 'Alle'/'All' capitalized like every other label
- settings -> setup wizard: close Settings first (one modal layer),
  stronger wizard scrim
- try-out setup profile discloses the upgrade path to a regulated
  profile
- store maturity pills explain themselves on hover (experimental/
  published/planned)

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-18 00:24:13 +02:00
parent ae97b88257
commit eab58c0b68
8 changed files with 93 additions and 26 deletions

View file

@ -897,6 +897,25 @@ String _statusDisplayName(BuildContext ctx, String wire) {
}
}
/// Maturity pill with an inline explanation on hover "experimental"
/// alone left buyers guessing what it means for production use
/// (usertest finding). Unknown wire values get a plain pill.
Widget _statusPill(BuildContext ctx, String wire) {
final l = AppLocalizations.of(ctx)!;
final pill = ChainPill(
label: _statusDisplayName(ctx, wire),
tone: _toneForStatus(wire),
);
final help = switch (wire) {
'published' => l.storeStatusPublishedHelp,
'alpha' => l.storeStatusAlphaHelp,
'planned' => l.storeStatusPlannedHelp,
_ => null,
};
if (help == null) return pill;
return Tooltip(message: help, child: pill);
}
/// Multi-line ask-and-search input. Drives the toolbar's
/// primary action: substring keyword search on every keystroke
/// (cheap, identical to the legacy `_SearchField`) plus an
@ -1925,10 +1944,7 @@ class _FeaturedTile extends StatelessWidget {
),
const SizedBox(width: ChainSpace.xs),
if (item.status.isNotEmpty)
ChainPill(
label: _statusDisplayName(context, item.status),
tone: _toneForStatus(item.status),
),
_statusPill(context, item.status),
const Spacer(),
if (item.installed)
ChainPill(
@ -2114,10 +2130,7 @@ class _StoreCardState extends State<_StoreCard> {
icon: Icons.check,
)
else if (item.status.isNotEmpty)
ChainPill(
label: _statusDisplayName(context, item.status),
tone: _toneForStatus(item.status),
),
_statusPill(context, item.status),
],
),
const SizedBox(height: ChainSpace.sm),
@ -2490,13 +2503,7 @@ class _StoreDetailSheetState extends State<_StoreDetailSheet> {
),
),
if (item.status.isNotEmpty)
ChainPill(
label: _statusDisplayName(
context,
item.status,
),
tone: _toneForStatus(item.status),
),
_statusPill(context, item.status),
if (item.category.isNotEmpty)
ChainPill(
label: _categoryDisplayName(