feat(dac-wizard): redesign welcome step and fix stepper navigation

Welcome step changes:
- Add comprehensive disclaimer with bullet points
- Add system requirements caveats (custom configs, manual mods, etc.)
- Add recovery information
- Update translations for EN/ES/FR/DE

Bug fixes:
- Fix stepper not updating when navigating backwards
  (current step now always shows as 'active')

UI changes:
- Replace Wand2 icon with gandalf.svg for DAC wizard button
This commit is contained in:
vicrodh committed 2026-02-03 02:59:34 -06:00
1 parent e6d5c1ae7d
commit 8ef38c67e0
7 files changed
+305 -18

No files matched your search

+86 -3
View File
@@ -197,7 +197,7 @@
const steps = $derived<Step[]>(STEPS.map((step, index) => ({
id: step,
label: $t(`dacWizard.steps.${toCamelCase(step)}`) || step,
status: completedSteps.has(step) ? 'complete' : index === currentIndex ? 'active' : 'upcoming'
status: index === currentIndex ? 'active' : completedSteps.has(step) ? 'complete' : 'upcoming'
})));
// Navigation
@@ -362,8 +362,28 @@
<div class="wizard-content">
{#if currentStep === 'welcome'}
<div class="step-content">
<p class="body-text">{$t('dacWizard.welcome.body')}</p>
<div class="step-content welcome-content">
<p class="body-text intro-text">{$t('dacWizard.welcome.intro')}</p>
<div class="disclaimer-section">
<p class="disclaimer-title">{$t('dacWizard.welcome.disclaimerTitle')}</p>
<ul class="disclaimer-list">
<li>{$t('dacWizard.welcome.bulletResponsibility')}</li>
<li>
{$t('dacWizard.welcome.bulletNoGuarantee')}
<ul class="system-issues">
<li>{$t('dacWizard.welcome.systemIssue1')}</li>
<li>{$t('dacWizard.welcome.systemIssue2')}</li>
<li>{$t('dacWizard.welcome.systemIssue3')}</li>
</ul>
</li>
<li>{$t('dacWizard.welcome.bulletHelper')}</li>
</ul>
</div>
<p class="body-text recovery-text">{$t('dacWizard.welcome.recovery')}</p>
<p class="body-text ready-text">{$t('dacWizard.welcome.readyText')}</p>
<label class="checkbox-row">
<input type="checkbox" bind:checked={welcomeConfirmed} />
@@ -814,6 +834,69 @@
color: var(--text-secondary);
line-height: 1.6;
margin: 0;
white-space: pre-line;
}
/* Welcome step styles */
.welcome-content {
gap: 20px;
}
.intro-text {
color: var(--text-primary);
font-weight: 500;
}
.disclaimer-section {
background: var(--bg-tertiary);
border-radius: 8px;
padding: 16px;
border-left: 3px solid var(--warning, #fbbf24);
}
.disclaimer-title {
font-size: 14px;
font-weight: 600;
color: var(--text-primary);
margin: 0 0 12px 0;
}
.disclaimer-list {
margin: 0;
padding-left: 20px;
display: flex;
flex-direction: column;
gap: 8px;
}
.disclaimer-list > li {
font-size: 13px;
color: var(--text-secondary);
line-height: 1.5;
}
.system-issues {
margin: 8px 0 0 0;
padding-left: 16px;
list-style-type: disc;
}
.system-issues li {
font-size: 12px;
color: var(--text-muted);
line-height: 1.4;
}
.recovery-text {
padding: 12px;
background: rgba(34, 197, 94, 0.1);
border-radius: 6px;
border-left: 3px solid var(--color-success, #22c55e);
}
.ready-text {
font-style: italic;
color: var(--text-muted);
}
.checkbox-row {
+8 -2
View File
@@ -4,7 +4,7 @@
import ViewTransition from '../ViewTransition.svelte';
import { getCurrentWebview } from '@tauri-apps/api/webview';
import { writeText as copyToClipboard } from '@tauri-apps/plugin-clipboard-manager';
import { ArrowLeft, ChevronRight, ChevronDown, ChevronUp, Loader2, Sun, Moon, SunMoon, HelpCircle, Ban, Wand2 } from 'lucide-svelte';
import { ArrowLeft, ChevronRight, ChevronDown, ChevronUp, Loader2, Sun, Moon, SunMoon, HelpCircle, Ban } from 'lucide-svelte';
import Toggle from '../Toggle.svelte';
import Dropdown from '../Dropdown.svelte';
import DeviceDropdown from '../DeviceDropdown.svelte';
@@ -2022,7 +2022,7 @@
onclick={() => showDACWizardModal = true}
title={$t('dacWizard.title')}
>
<Wand2 size={16} />
<img src="/gandalf.svg" alt="DAC Setup" class="gandalf-icon" />
</button>
{/if}
</div>
@@ -3003,6 +3003,12 @@ flatpak override --user --filesystem=/home/USUARIO/Música com.blitzfc.qbz</pre>
transform: scale(1.05);
}
.dac-setup-btn .gandalf-icon {
width: 18px;
height: 18px;
filter: invert(1);
}
.loading-overlay {
position: fixed;
top: 0;
+12 -3
View File
@@ -965,9 +965,18 @@
"triggerTooltip": "DAC-Einrichtungshilfe",
"welcome": {
"title": "Geführte DAC-Einrichtung",
"subtitle": "Schritt-für-Schritt-Anleitung.",
"body": "Sie werden Befehle kopieren und im Terminal ausführen. QBZ führt Sie durch jeden Schritt und erklärt alles. Vor Änderungen wird eine Sicherung erstellt.",
"checkbox": "Ich verstehe, dass diese Anleitung die System-Audiokonfiguration ändert",
"subtitle": "Dieser Assistent hilft Ihnen, Ihren DAC für bit-perfekte Wiedergabe unter Linux zu konfigurieren.",
"intro": "QBZ nimmt keine automatischen Änderungen an Ihrem System vor.\nJeder Schritt zeigt die exakten Befehle, erklärt deren Funktion und überlässt Ihnen die Entscheidung, wann Sie fortfahren.",
"disclaimerTitle": "Bitte beachten Sie vor dem Fortfahren:",
"bulletResponsibility": "Sie sind selbst verantwortlich für das Erstellen, Aufbewahren und Wiederherstellen Ihrer Backups",
"bulletNoGuarantee": "QBZ basiert auf offizieller Dokumentation und empfohlenen Vorgehensweisen, kann jedoch keine Garantie bieten bei Systemen mit:",
"bulletHelper": "Diese Anleitung ist als Hilfestellung gedacht, nicht als System-Recovery-Werkzeug",
"systemIssue1": "Bereits vorhandenen benutzerdefinierten Audio-Konfigurationen",
"systemIssue2": "Manuell angepassten PipeWire-, Pulse- oder WirePlumber-Setups",
"systemIssue3": "Übersprungenen oder in falscher Reihenfolge ausgeführten Befehlen",
"recovery": "Sollte etwas nicht wie erwartet funktionieren, können Sie Ihre vorherige Konfiguration jederzeit aus dem erstellten Backup wiederherstellen.",
"readyText": "Gehen Sie Schritt für Schritt vor.\nNichts wird ausgeführt, solange Sie es nicht selbst tun.",
"checkbox": "Ich verstehe und akzeptiere diese Bedingungen",
"start": "Starten"
},
"precheck": {
+12 -3
View File
@@ -1024,9 +1024,18 @@
"triggerTooltip": "DAC Setup Guide",
"welcome": {
"title": "Guided DAC Setup",
"subtitle": "Step-by-step instructions.",
"body": "You will copy and run commands in a terminal. QBZ will guide you and explain each step. A backup will be created before any changes.",
"checkbox": "I understand this guide modifies system audio configuration",
"subtitle": "This wizard helps you configure your DAC for bit-perfect playback on Linux.",
"intro": "QBZ will not modify your system automatically.\nEach step shows the exact commands to run, explains what they do, and lets you decide when to proceed.",
"disclaimerTitle": "Before continuing, please note:",
"bulletResponsibility": "You are responsible for creating, keeping, and restoring your own backups",
"bulletNoGuarantee": "QBZ follows official documentation and recommended practices, but cannot guarantee results on systems with:",
"bulletHelper": "This guide is provided as a helper, not a system recovery tool",
"systemIssue1": "Previous custom audio configurations",
"systemIssue2": "Manually modified PipeWire, Pulse, or WirePlumber setups",
"systemIssue3": "Commands skipped or executed out of order",
"recovery": "If anything goes wrong, you can restore your previous configuration using the backup created during this process.",
"readyText": "When you're ready, continue step by step.\nNothing will run unless you run it.",
"checkbox": "I understand and accept these terms",
"start": "Start"
},
"precheck": {
+12 -3
View File
@@ -1024,9 +1024,18 @@
"triggerTooltip": "Guía de Configuración de DAC",
"welcome": {
"title": "Configuración Guiada de DAC",
"subtitle": "Instrucciones paso a paso.",
"body": "Copiarás y ejecutarás comandos en una terminal. QBZ te guiará y explicará cada paso. Se creará un backup antes de cualquier cambio.",
"checkbox": "Entiendo que esta guía modifica la configuración de audio del sistema",
"subtitle": "Este asistente te ayuda a configurar tu DAC para una reproducción bit-perfect en Linux.",
"intro": "QBZ no realiza cambios automáticos en tu sistema.\nCada paso muestra los comandos exactos que debes ejecutar, explica qué hacen y te permite decidir cuándo continuar.",
"disclaimerTitle": "Antes de seguir, ten en cuenta lo siguiente:",
"bulletResponsibility": "Tú eres responsable de crear, conservar y restaurar tus propios respaldos",
"bulletNoGuarantee": "QBZ se basa en documentación oficial y prácticas recomendadas, pero no puede garantizar resultados en sistemas con:",
"bulletHelper": "Esta guía es solo una ayuda, no una herramienta de recuperación del sistema",
"systemIssue1": "Configuraciones de audio personalizadas previas",
"systemIssue2": "Modificaciones manuales en PipeWire, Pulse o WirePlumber",
"systemIssue3": "Comandos omitidos o ejecutados fuera de orden",
"recovery": "Si algo sale mal, siempre puedes restaurar tu configuración anterior usando el respaldo creado durante este proceso.",
"readyText": "Cuando estés listo, avanza paso a paso.\nNada se ejecuta si tú no lo ejecutas.",
"checkbox": "Entiendo y acepto estos términos",
"start": "Comenzar"
},
"precheck": {
+13 -4
View File
@@ -964,10 +964,19 @@
"title": "Assistant Configuration DAC",
"triggerTooltip": "Guide de configuration DAC",
"welcome": {
"title": "Configuration guidée du DAC",
"subtitle": "Instructions étape par étape.",
"body": "Vous allez copier et exécuter des commandes dans un terminal. QBZ vous guidera et expliquera chaque étape. Une sauvegarde sera créée avant toute modification.",
"checkbox": "Je comprends que ce guide modifie la configuration audio du système",
"title": "Configuration Guidée du DAC",
"subtitle": "Cet assistant vous aide à configurer votre DAC pour une lecture bit-perfect sous Linux.",
"intro": "QBZ n'applique aucune modification automatiquement.\nChaque étape affiche les commandes exactes à exécuter, explique leur fonctionnement et vous laisse décider quand continuer.",
"disclaimerTitle": "Avant de poursuivre, veuillez noter :",
"bulletResponsibility": "Vous êtes responsable de la création, de la conservation et de la restauration de vos sauvegardes",
"bulletNoGuarantee": "QBZ s'appuie sur la documentation officielle et les bonnes pratiques, sans pouvoir garantir le bon fonctionnement sur des systèmes ayant :",
"bulletHelper": "Ce guide est une aide, et non un outil de récupération système",
"systemIssue1": "Des configurations audio personnalisées existantes",
"systemIssue2": "Des modifications manuelles de PipeWire, Pulse ou WirePlumber",
"systemIssue3": "Des commandes ignorées ou exécutées dans un ordre différent",
"recovery": "En cas de problème, vous pourrez restaurer votre configuration précédente à l'aide de la sauvegarde créée durant ce processus.",
"readyText": "Lorsque vous êtes prêt, avancez étape par étape.\nRien ne s'exécute sans votre action.",
"checkbox": "Je comprends et j'accepte ces conditions",
"start": "Commencer"
},
"precheck": {
+162
View File
@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.2" baseProfile="tiny" viewBox="0.00 0.00 100.00 100.00" width="100.00" height="100.00">
<g>
<path fill="#000000" d="
M 44.00 5.56
Q 44.18 5.56 44.24 5.52
C 48.35 3.31 54.84 4.30 59.34 6.39
Q 73.67 13.03 75.28 28.51
Q 77.00 45.04 81.97 93.69
A 1.92 1.92 0.0 0 1 80.24 95.80
L 80.13 95.81
A 1.95 1.95 0.0 0 1 78.01 94.07
Q 74.00 55.61 71.84 33.50
Q 70.90 23.96 68.99 20.35
C 64.91 12.62 56.73 7.78 47.81 8.34
A 2.80 2.79 -61.0 0 0 46.66 8.67
C 45.87 9.10 44.88 9.96 44.00 9.96
C 43.12 9.96 42.13 9.10 41.34 8.67
A 2.80 2.79 61.0 0 0 40.19 8.34
C 31.27 7.78 23.09 12.62 19.01 20.35
Q 17.10 23.96 16.16 33.50
Q 14.00 55.61 9.98 94.07
A 1.95 1.95 0.0 0 1 7.86 95.81
L 7.75 95.80
A 1.92 1.92 0.0 0 1 6.02 93.69
Q 11.00 45.04 12.72 28.51
Q 14.33 13.03 28.66 6.39
C 33.16 4.30 39.65 3.31 43.76 5.52
Q 43.82 5.56 44.00 5.56
Z"
/>
<path fill="#000000" d="
M 88.00 4.33
Q 88.20 4.33 88.27 4.44
Q 97.14 18.60 97.64 19.43
A 1.75 1.67 31.1 0 1 97.89 20.35
Q 97.86 27.45 95.17 40.45
Q 93.80 47.13 90.33 51.14
A 1.37 1.34 65.9 0 0 90.00 52.03
L 90.00 95.35
A 0.65 0.65 0.0 0 1 89.35 96.00
Q 89.05 96.00 88.00 96.00
Q 86.95 96.00 86.65 96.00
A 0.65 0.65 0.0 0 1 86.00 95.35
L 86.00 52.03
A 1.37 1.34 -65.9 0 0 85.67 51.14
Q 82.19 47.13 80.82 40.45
Q 78.13 27.45 78.10 20.35
A 1.75 1.67 -31.1 0 1 78.35 19.43
Q 78.85 18.60 87.72 4.44
Q 87.79 4.33 88.00 4.33
Z
M 87.99 16.37
Q 88.16 16.37 88.95 13.91
A 1.31 1.31 0.0 0 0 88.90 12.99
Q 88.43 11.92 88.00 11.92
Q 87.58 11.92 87.10 12.98
A 1.31 1.31 0.0 0 0 87.05 13.91
Q 87.82 16.37 87.99 16.37
Z
M 83.74 18.25
L 82.28 20.78
A 1.66 1.66 0.0 0 0 82.07 21.79
L 83.34 33.00
A 0.20 0.20 0.0 0 0 83.71 33.07
Q 87.68 25.64 84.59 18.31
A 0.48 0.47 48.8 0 0 83.74 18.25
Z
M 92.26 18.20
A 0.48 0.48 0.0 0 0 91.40 18.26
Q 88.31 25.62 92.30 33.08
A 0.20 0.20 0.0 0 0 92.67 33.01
L 93.94 21.75
A 1.67 1.66 -56.9 0 0 93.73 20.74
L 92.26 18.20
Z
M 88.00 47.62
Q 88.34 47.62 89.14 46.13
Q 89.90 44.71 91.10 40.33
A 1.08 1.06 -51.2 0 0 91.03 39.62
L 88.14 33.79
A 0.09 0.08 79.5 0 0 88.07 33.73
Q 88.03 33.73 88.00 33.73
Q 87.97 33.73 87.94 33.73
A 0.09 0.08 -79.5 0 0 87.87 33.79
L 84.97 39.62
A 1.08 1.06 51.3 0 0 84.90 40.33
Q 86.09 44.71 86.85 46.13
Q 87.65 47.62 88.00 47.62
Z"
/>
<path fill="#000000" d="
M 44.00 24.65
Q 44.18 24.65 44.65 24.16
C 52.89 15.80 65.71 21.08 65.96 32.76
Q 66.04 36.51 65.99 92.81
A 2.01 2.01 0.0 0 1 64.05 94.82
L 63.97 94.82
A 1.91 1.90 -0.9 0 1 62.00 92.92
L 62.00 65.35
A 1.24 1.20 -67.8 0 0 61.66 64.50
Q 57.89 60.53 53.58 58.45
A 0.75 0.75 0.0 0 0 52.70 58.61
C 50.31 61.10 47.59 61.96 44.00 61.96
C 40.41 61.96 37.69 61.10 35.30 58.61
A 0.75 0.75 0.0 0 0 34.42 58.45
Q 30.11 60.53 26.34 64.50
A 1.24 1.20 67.8 0 0 26.00 65.35
L 26.00 92.92
A 1.91 1.90 0.9 0 1 24.03 94.82
L 23.95 94.82
A 2.01 2.01 0.0 0 1 22.01 92.81
Q 21.96 36.51 22.04 32.76
C 22.28 21.08 35.10 15.80 43.34 24.16
Q 43.82 24.65 44.00 24.65
Z
M 44.00 57.96
C 46.12 57.96 49.49 57.46 50.07 55.04
Q 50.40 53.66 51.73 53.46
A 1.97 1.91 -38.5 0 1 52.66 53.55
Q 57.64 55.37 61.44 58.95
A 0.32 0.32 0.0 0 0 61.98 58.71
Q 62.04 40.89 61.97 32.78
C 61.91 25.07 54.00 21.48 47.99 26.16
C 46.66 27.20 45.76 29.97 43.99 29.97
C 42.23 29.97 41.33 27.20 39.99 26.16
C 33.98 21.49 26.07 25.08 26.02 32.79
Q 25.95 40.90 26.02 58.72
A 0.32 0.32 0.0 0 0 26.56 58.96
Q 30.36 55.38 35.34 53.56
A 1.97 1.91 38.5 0 1 36.27 53.46
Q 37.60 53.66 37.93 55.04
C 38.51 57.46 41.89 57.96 44.00 57.96
Z"
/>
<rect fill="#000000" x="37.07" y="68.01" width="13.86" height="3.98" rx="1.92"/>
</g>
<g>
<path fill="#000000" d="
M 35.01 33.16
C 36.76 33.18 40.51 34.06 39.85 36.58
A 1.92 1.90 21.6 0 1 37.08 37.76
Q 35.98 37.17 34.97 37.16
Q 33.95 37.14 32.84 37.72
A 1.92 1.90 -20.3 0 1 30.09 36.48
C 29.49 33.94 33.26 33.14 35.01 33.16
Z"
/>
<path fill="#000000" d="
M 53.03 37.15
Q 52.02 37.17 50.91 37.76
A 1.92 1.90 -21.6 0 1 48.15 36.58
C 47.49 34.06 51.24 33.17 52.99 33.15
C 54.74 33.13 58.52 33.94 57.91 36.48
A 1.92 1.90 20.4 0 1 55.16 37.72
Q 54.05 37.14 53.03 37.15
Z"
/>
<circle fill="#000000" cx="34.75" cy="42.20" r="2.27"/>
<circle fill="#000000" cx="54.00" cy="42.00" r="1.96"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB