Skip to content

Commit a5a546f

Browse files
Improve setup wizard navigation presets and review flow
1 parent 8a008e5 commit a5a546f

7 files changed

Lines changed: 329 additions & 24 deletions

File tree

CHANGELOG-fixes.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# FolderView Plus Changelog
22

3+
## Version 2026.03.08.12
4+
5+
- Improve Setup Assistant with in-wizard quick start bundles (Balanced, Minimal, Power, Media Stack).
6+
- Add clickable wizard sidebar step navigation and a one-click Review jump action.
7+
- Add Copy Summary action in wizard review to export the full plan snapshot to clipboard.
8+
- Add setup keyboard shortcuts: Alt+Left/Right for step movement, Ctrl+Enter to apply from review, Ctrl+Shift+C to copy summary.
9+
- Add UI regression checks for new wizard controls and styles.
10+
311
## Version 2026.03.06.8
412

513
- Add full rules simulator for Docker/VM to preview assignment outcomes across all items.
13.9 MB
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
043db09524842d3dc7693c2ac817a43a09127deb860e62d10ce91fe418781f4c folderview.plus-2026.03.08.12.txz

folderview.plus.plg

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,21 @@
66
<!ENTITY launch "Settings/FolderViewPlus">
77
<!ENTITY plugdir "/usr/local/emhttp/plugins/&name;">
88
<!ENTITY pluginURL "https://raw.githubusercontent.com/&github;/main/folderview.plus.plg">
9-
<!ENTITY version "2026.03.08.11">
10-
<!ENTITY md5 "6d5298fbc83f5664ebaf629d164f3530">
9+
<!ENTITY version "2026.03.08.12">
10+
<!ENTITY md5 "f68aa27b853abcd8dbf1736e54fdd953">
1111
]>
1212

1313
<PLUGIN name="&name;" author="&author;" version="&version;" launch="&launch;" pluginURL="&pluginURL;" icon="folder-icon.png" support="https://github.com/alexphillips-dev/FolderView-Plus/issues" min="7.0.0">
1414
<CHANGES>
1515

16+
###2026.03.08.12
17+
- Wizard UX: added quick start bundles directly in the Welcome step (Balanced, Minimal, Power, Media Stack) with state-aware preset tracking.
18+
- Wizard navigation: sidebar steps are now clickable for faster navigation, plus a one-click `Review` footer action to jump to the final step.
19+
- Wizard review polish: added `Copy summary` action to export a full plan snapshot (route, mode, imports, rules, warnings) to clipboard for support/debug sharing.
20+
- Wizard accessibility: added keyboard shortcuts (`Alt+Left/Right` step navigation, `Ctrl+Enter` apply on review, `Ctrl+Shift+C` copy summary).
21+
- Regression guard: expanded UI smoke assertions for new wizard controls and styling hooks.
22+
23+
1624
###2026.03.08.11
1725
- UI fix: force-compact sizing for advanced module action buttons so `Add rule`, `Test rule priority`, and `Simulate all items` no longer render oversized.
1826
- Styling hardening: added high-priority button sizing overrides to prevent theme/CSS inheritance from stretching action controls.

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/scripts/folderviewplus.js

Lines changed: 232 additions & 18 deletions
Large diffs are not rendered by default.

src/folderview.plus/usr/local/emhttp/plugins/folderview.plus/styles/folderviewplus.css

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1611,6 +1611,7 @@ h2[data-fv-advanced="1"] + .template-grid .rules-panel {
16111611
.fv-setup-route-grid,
16121612
.fv-setup-profile-grid,
16131613
.fv-setup-env-grid,
1614+
.fv-setup-quick-preset-grid,
16141615
.fv-setup-impact-grid,
16151616
.fv-setup-field-grid {
16161617
grid-template-columns: 1fr;
@@ -2020,15 +2021,30 @@ h2[data-fv-advanced="1"] + .template-grid .rules-panel {
20202021
}
20212022

20222023
.fv-setup-step-list li {
2024+
padding: 0;
2025+
border-radius: 8px;
2026+
border: 1px solid rgba(255, 255, 255, 0.08);
2027+
font-size: 1.03rem;
2028+
opacity: 0.84;
2029+
}
2030+
2031+
.fv-setup-step-jump {
2032+
width: 100%;
2033+
min-width: 0;
2034+
border: 0;
2035+
border-radius: 8px;
2036+
background: transparent;
2037+
color: inherit;
20232038
display: grid;
20242039
grid-template-columns: 24px minmax(0, 1fr);
20252040
align-items: center;
20262041
gap: 0.45rem;
20272042
padding: 0.24rem 0.3rem;
2028-
border-radius: 8px;
2029-
border: 1px solid rgba(255, 255, 255, 0.08);
2030-
font-size: 1.03rem;
2031-
opacity: 0.84;
2043+
text-align: left;
2044+
}
2045+
2046+
.fv-setup-step-jump:disabled {
2047+
opacity: 0.9;
20322048
}
20332049

20342050
.fv-setup-step-list li.is-active {
@@ -2152,6 +2168,42 @@ h2[data-fv-advanced="1"] + .template-grid .rules-panel {
21522168
gap: 0.45rem;
21532169
}
21542170

2171+
.fv-setup-quick-preset-grid {
2172+
display: grid;
2173+
grid-template-columns: repeat(2, minmax(0, 1fr));
2174+
gap: 0.45rem;
2175+
}
2176+
2177+
.fv-setup-quick-preset {
2178+
min-width: 0;
2179+
width: 100%;
2180+
border: 1px solid rgba(255, 255, 255, 0.12);
2181+
border-radius: 8px;
2182+
background: rgba(255, 255, 255, 0.03);
2183+
color: inherit;
2184+
display: grid;
2185+
gap: 0.18rem;
2186+
text-align: left;
2187+
padding: 0.42rem 0.5rem;
2188+
}
2189+
2190+
.fv-setup-quick-preset.is-active {
2191+
border-color: rgba(77, 163, 255, 0.6);
2192+
background: rgba(77, 163, 255, 0.16);
2193+
color: #d8ebff;
2194+
}
2195+
2196+
.fv-setup-quick-preset-title {
2197+
font-size: 1.03rem;
2198+
font-weight: 700;
2199+
}
2200+
2201+
.fv-setup-quick-preset-help {
2202+
font-size: 1.03rem;
2203+
opacity: 0.82;
2204+
line-height: 1.3;
2205+
}
2206+
21552207
.fv-setup-route-option,
21562208
.fv-setup-profile-option {
21572209
border: 1px solid rgba(255, 255, 255, 0.12);
@@ -2274,6 +2326,19 @@ h2[data-fv-advanced="1"] + .template-grid .rules-panel {
22742326
font-size: 1.03rem;
22752327
}
22762328

2329+
.fv-setup-assistant-body kbd {
2330+
display: inline-flex;
2331+
align-items: center;
2332+
justify-content: center;
2333+
min-width: 1.5em;
2334+
padding: 0.05rem 0.3rem;
2335+
border: 1px solid rgba(255, 255, 255, 0.24);
2336+
border-radius: 6px;
2337+
background: rgba(255, 255, 255, 0.08);
2338+
font-size: 1.03rem;
2339+
line-height: 1.2;
2340+
}
2341+
22772342
.fv-setup-rule-list {
22782343
max-height: 270px;
22792344
overflow: auto;

tests/ui-smoke-layout.test.mjs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,18 @@ test('settings runtime uses extracted chrome module and shared request wrapper',
108108
assert.match(settingsJs, /const getSetupAssistantStepValidation = \(stepKey = currentSetupAssistantStepKey\(\)\) =>/);
109109
assert.match(settingsJs, /const previewSetupAssistantRuleMatches = \(type, pattern\) =>/);
110110
assert.match(settingsJs, /const handleSetupAssistantDialogKeydown = \(event\) =>/);
111+
assert.match(settingsJs, /const jumpSetupAssistantToStep = \(targetIndex\) =>/);
112+
assert.match(settingsJs, /const buildSetupAssistantClipboardSummary = \(\) =>/);
113+
assert.match(settingsJs, /const copySetupAssistantSummaryToClipboard = async \(\) =>/);
111114
assert.match(settingsJs, /runQuickSetupWizard = \(force = false\) => \{/);
112115
assert.match(settingsJs, /openSetupAssistant\(force === true\);/);
113116
assert.match(settingsJs, /const bindSetupAssistantEvents = \(\) =>/);
114117
assert.match(settingsJs, /markSetupAssistantCompletedLocal\(\);/);
115118
assert.match(settingsJs, /id="fv-setup-dry-run"/);
119+
assert.match(settingsJs, /id="fv-setup-copy-summary"/);
116120
assert.match(settingsJs, /id="fv-setup-discard-draft"/);
121+
assert.match(settingsJs, /id="fv-setup-skip-review"/);
122+
assert.match(settingsJs, /data-fv-setup-quick-preset=/);
117123
assert.match(settingsJs, /Dry run only \(preview changes, do not modify folders or settings\)/);
118124
assert.match(settingsJs, /const shouldRunWizard = !isWizardCompletedServerSide\(\) && !isSetupAssistantCompletedLocal\(\);/);
119125
assert.match(settingsJs, /const apiPostJson = async \(url, data = \{\}, options = \{\}\) =>/);
@@ -163,6 +169,9 @@ test('settings runtime uses extracted chrome module and shared request wrapper',
163169
assert.match(settingsCss, /\.fv-setup-validation-box\s*\{/);
164170
assert.match(settingsCss, /\.fv-setup-impact-grid\s*\{/);
165171
assert.match(settingsCss, /\.fv-setup-env-grid\s*\{/);
172+
assert.match(settingsCss, /\.fv-setup-step-jump\s*\{/);
173+
assert.match(settingsCss, /\.fv-setup-quick-preset-grid\s*\{/);
174+
assert.match(settingsCss, /\.fv-setup-quick-preset\.is-active\s*\{/);
166175
assert.match(settingsCss, /\.fv-setup-rule-preview\.is-match\s*\{/);
167176
assert.match(settingsCss, /--fv-advanced-module-height:\s*clamp\(/);
168177
assert.match(settingsCss, /h2\[data-fv-advanced="1"\] \+ \.backup-grid \.rules-panel[\s\S]*overflow-y:\s*auto/);

0 commit comments

Comments
 (0)