feat(studio): brand-agnostic onboarding hints + clickable checklist + theme-picker clarity
Some checks failed
Security / Security check (push) Failing after 2s
Some checks failed
Security / Security check (push) Failing after 2s
Three changes:
1. Onboarding checklist hints no longer mention DeepWiki,
Semgrep, text.extract, or extract-summarize.yaml by
name. Brand- and file-specific copy moved to neutral
feature pointers ('add an MCP source', 'install a
module'). Brand names belong on the welcome page only
if they're load-bearing for understanding, which they
aren't.
2. Checklist rows are now clickable. Tapping a row navigates
to the page where the operator can complete it — MCP +
AI open Settings, Module opens Store, Flow opens Flows.
StudioShellState gains a public navigateTo(pageId) helper
so descendants can drive sidebar selection without
plumbing a controller through props.
3. Theme picker hint copy rewritten. Old hint suggested
'Custom' was a single-colour tweak; new copy spells out
that Material 3 derives a full palette (primary,
secondary, tertiary, surface, …) from one seed colour.
The Custom tile shows a small tune icon so its
open-the-picker semantics is visually distinct from the
apply-immediately plugin tiles.
Editor bumped to 0.12.0 (panel toggle + LabVIEW-style port
colours).
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
c1c60d5434
commit
3db875c903
10 changed files with 105 additions and 31 deletions
|
|
@ -149,6 +149,10 @@ class _ThemePickerGridState extends State<ThemePickerGrid> {
|
|||
final seed = seedHex != null
|
||||
? _parseHexColor(seedHex)
|
||||
: theme.colorScheme.primary;
|
||||
// Material 3 derives a full ColorScheme from one seed —
|
||||
// primary, secondary, tertiary, surface, outline, on-*.
|
||||
// The custom tile previews that full palette so it reads
|
||||
// visually as a complete theme, NOT a single colour.
|
||||
final scheme = ColorScheme.fromSeed(
|
||||
seedColor: seed ?? theme.colorScheme.primary,
|
||||
brightness: theme.brightness,
|
||||
|
|
@ -157,6 +161,11 @@ class _ThemePickerGridState extends State<ThemePickerGrid> {
|
|||
label: l.themePluginCustom,
|
||||
swatches: [scheme.primary, scheme.secondary, scheme.tertiary],
|
||||
selected: isCustom,
|
||||
// Slight visual cue that this tile is a different
|
||||
// *source* of theme (seed-derived) compared to the
|
||||
// plugin tiles (hand-curated palette). Same widget, the
|
||||
// dashed border separates the concept.
|
||||
editable: true,
|
||||
onTap: () async {
|
||||
final picked = await _showColorPickerDialog(
|
||||
context,
|
||||
|
|
@ -195,6 +204,11 @@ class _Tile extends StatelessWidget {
|
|||
final List<Color> swatches;
|
||||
final bool selected;
|
||||
final bool loading;
|
||||
/// Adds a small tune icon at the top-right, telegraphing
|
||||
/// "this tile opens an editor instead of applying
|
||||
/// immediately". Used for the Custom tile so the operator
|
||||
/// knows clicking it will open the colour-picker dialog.
|
||||
final bool editable;
|
||||
final VoidCallback onTap;
|
||||
const _Tile({
|
||||
required this.label,
|
||||
|
|
@ -202,6 +216,7 @@ class _Tile extends StatelessWidget {
|
|||
required this.selected,
|
||||
required this.onTap,
|
||||
this.loading = false,
|
||||
this.editable = false,
|
||||
});
|
||||
|
||||
@override
|
||||
|
|
@ -273,6 +288,12 @@ class _Tile extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
if (editable && !selected)
|
||||
Icon(
|
||||
Icons.tune,
|
||||
size: 14,
|
||||
color: theme.colorScheme.onSurfaceVariant,
|
||||
),
|
||||
if (selected)
|
||||
Icon(
|
||||
Icons.check_circle,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue