Commit afe1ae6
refactor(onboarding): migrate to Nuxt UI + browser history support (#1949)
## Summary
- Standardize the onboarding flow on Nuxt UI primitives across all steps
(Core Settings, Plugins, Internal Boot, License, Summary, Next Steps)
- Replace HeadlessUI Disclosure components with @unraid/ui Accordion
(enhanced with v-model and open state slot props)
- Integrate browser back/forward navigation support and "No Updates
Needed" messaging (from #1964)
- Polish UX: disabled button states, alert styling, skip button
behavior, radio button boot mode selection
## What Changed
### HeadlessUI → Nuxt UI Migration
- **All onboarding steps** now use Nuxt UI components (`USelectMenu`,
`UInput`, `UCheckbox`, `UAlert`, `UModal`, `UButton`, `URadioGroup`)
instead of HeadlessUI or native HTML elements
- **All `@headlessui/vue` imports removed from onboarding**
- Custom `<transition>` wrappers removed — Accordion uses Reka UI's
built-in animations
### Accordion Enhancement (@unraid/ui)
- Extended `Accordion` component with optional `v-model` support,
`itemClass` prop, and `{ open }` boolean in scoped slots
- Changes are **additive** — existing accordion usage is unaffected (no
global style changes)
### UX Polish
- Radio buttons for boot mode selection (USB vs Storage)
- Disabled state on BrandButton via `aria-disabled` with
`pointer-events-none`
- `cursor-not-allowed` on disabled Back/Skip navigation buttons
- Neutral-colored UAlerts for info panels and warnings
- Solid green UAlert for initialization ready state
- Outline variant for Skip button in license step
- Placeholder text in empty device select menus
- Guard against `slotCount` NaN from undefined USelectMenu values
- `:disabled` on reboot modal buttons to prevent double-click
### Browser History + No-Changes Messaging (from #1964)
- Browser back/forward navigation support within onboarding flows
- "No Updates Needed" messaging when no configuration changes are
applied
- Enhanced session handling with improved distinction between automatic
and manual onboarding modes
### Test Updates
- Replaced HeadlessUI Disclosure mocks with Accordion stubs
- Fixed auto-import bypass: tests use VM state for USelectMenu
interaction (Nuxt UI auto-imports bypass `global.stubs`)
- Updated "Setup Applied" → "No Updates Needed" assertions for
no-changes path
- All 618 web tests pass, all 1962 API tests pass
## Why
- The onboarding flow mixed native controls, HeadlessUI components, and
older modal patterns — making the UI feel uneven
- HeadlessUI was an unnecessary dependency when @unraid/ui (backed by
Reka UI) provides equivalent components
- Disabled states were not communicated visually to users
## Includes
- #1964 (feat: onboarding use history) — merged into this branch
## Verification
```bash
pnpm --dir web test -- --run
pnpm --dir web lint
pnpm --dir web type-check
pnpm --dir api test -- --run
pnpm --dir api lint
pnpm --dir api type-check
```
## Smoke Test
1. Walk the full onboarding flow — confirm all controls use consistent
Nuxt UI styling
2. Setup Boot: verify radio buttons for USB/Storage selection, disabled
states on Back/Skip during load
3. Internal Boot: expand/collapse eligibility details, verify device
selects have placeholder text
4. License: test Skip dialog with solid info alert and outline Skip
button
5. Summary: expand/collapse plugins accordion, verify "No Updates
Needed" when no changes apply
6. Next Steps: verify reboot confirmation modal buttons disable during
submission
7. Browser back/forward: navigate between steps using browser history
buttons
---------
Co-authored-by: Eli Bosley <eli@bosley.dev>1 parent 9e0e89e commit afe1ae6
File tree
23 files changed
+1325
-695
lines changed- plugin/source/dynamix.unraid.net/install
- unraid-ui/src/components
- brand
- common/accordion
- web
- __test__/components/Onboarding
- src
- components/Onboarding
- standalone
- steps
- store
- locales
23 files changed
+1325
-695
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
4 | | - | |
| 4 | + | |
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| 22 | + | |
21 | 23 | | |
| 24 | + | |
| 25 | + | |
22 | 26 | | |
23 | 27 | | |
24 | 28 | | |
25 | 29 | | |
26 | 30 | | |
27 | 31 | | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
28 | 56 | | |
29 | 57 | | |
30 | 58 | | |
31 | 59 | | |
32 | 60 | | |
33 | 61 | | |
34 | 62 | | |
| 63 | + | |
35 | 64 | | |
| 65 | + | |
36 | 66 | | |
37 | 67 | | |
38 | 68 | | |
| |||
44 | 74 | | |
45 | 75 | | |
46 | 76 | | |
| 77 | + | |
47 | 78 | | |
48 | | - | |
49 | | - | |
| 79 | + | |
| 80 | + | |
50 | 81 | | |
51 | 82 | | |
52 | 83 | | |
53 | 84 | | |
54 | | - | |
| 85 | + | |
55 | 86 | | |
56 | 87 | | |
57 | 88 | | |
| |||
Lines changed: 29 additions & 30 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | | - | |
80 | | - | |
81 | | - | |
82 | | - | |
83 | | - | |
84 | | - | |
85 | | - | |
86 | | - | |
87 | | - | |
88 | | - | |
89 | | - | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
95 | | - | |
96 | | - | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | 72 | | |
103 | 73 | | |
104 | 74 | | |
| |||
173 | 143 | | |
174 | 144 | | |
175 | 145 | | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
176 | 175 | | |
177 | 176 | | |
178 | 177 | | |
| |||
Lines changed: 133 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
14 | 22 | | |
15 | 23 | | |
16 | 24 | | |
| |||
129 | 137 | | |
130 | 138 | | |
131 | 139 | | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
132 | 179 | | |
133 | 180 | | |
134 | 181 | | |
135 | 182 | | |
| 183 | + | |
136 | 184 | | |
137 | 185 | | |
138 | 186 | | |
| |||
182 | 230 | | |
183 | 231 | | |
184 | 232 | | |
185 | | - | |
186 | | - | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
187 | 236 | | |
188 | 237 | | |
189 | 238 | | |
| |||
278 | 327 | | |
279 | 328 | | |
280 | 329 | | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
281 | 391 | | |
| 392 | + | |
282 | 393 | | |
283 | 394 | | |
284 | 395 | | |
| |||
287 | 398 | | |
288 | 399 | | |
289 | 400 | | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
290 | 405 | | |
291 | 406 | | |
292 | 407 | | |
293 | 408 | | |
| 409 | + | |
294 | 410 | | |
295 | 411 | | |
296 | 412 | | |
297 | 413 | | |
298 | 414 | | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
299 | 419 | | |
300 | 420 | | |
301 | 421 | | |
302 | 422 | | |
| 423 | + | |
303 | 424 | | |
304 | 425 | | |
305 | 426 | | |
306 | 427 | | |
307 | 428 | | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
308 | 433 | | |
309 | 434 | | |
310 | 435 | | |
| |||
337 | 462 | | |
338 | 463 | | |
339 | 464 | | |
| 465 | + | |
340 | 466 | | |
341 | 467 | | |
342 | 468 | | |
| |||
347 | 473 | | |
348 | 474 | | |
349 | 475 | | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
350 | 479 | | |
351 | 480 | | |
352 | 481 | | |
0 commit comments