@@ -22,6 +22,13 @@ emitRequestTokenMetaTag();
2222<div id="fv-settings-root" class="fv-theme-safe">
2323<div id="fv-settings-topbar"></div>
2424<div id="fv-update-notes-panel" class="fv-update-notes-panel" style="display:none"></div>
25+ <div id="fv-activity-feed-panel" class="fv-activity-feed-panel" style="display:none;">
26+ <div class="fv-activity-feed-head">
27+ <strong>Recent activity</strong>
28+ <button type="button" onclick="clearActivityFeed()"><i class="fa fa-times"></i> Clear</button>
29+ </div>
30+ <ul id="fv-activity-feed-list" class="fv-activity-feed-list"></ul>
31+ </div>
2532
2633<div class="fv-customizations-header" data-fv-section-row="1">
2734 <h2 data-i18n="customizations" data-fv-section="customizations">Customizations</h2>
@@ -30,6 +37,13 @@ emitRequestTokenMetaTag();
3037<button onclick="checkForUpdatesNow()"><i class="fa fa-refresh" aria-hidden="true"></i> Check for updates now</button>
3138<button onclick="createRollbackCheckpoint()"><i class="fa fa-life-ring" aria-hidden="true"></i> Create rollback checkpoint</button>
3239<button onclick="rollbackLatestCheckpoint()"><i class="fa fa-undo" aria-hidden="true"></i> Rollback to previous snapshot</button>
40+ <div class="fv-quick-presets">
41+ <span class="fv-quick-presets-title">Quick profile presets</span>
42+ <button type="button" onclick="applyQuickProfilePreset('balanced')"><i class="fa fa-sliders"></i> Balanced</button>
43+ <button type="button" onclick="applyQuickProfilePreset('minimal')"><i class="fa fa-leaf"></i> Minimal</button>
44+ <button type="button" onclick="applyQuickProfilePreset('power')"><i class="fa fa-bolt"></i> Power</button>
45+ <button type="button" onclick="applyQuickProfilePreset('media_stack')"><i class="fa fa-play-circle"></i> Media Stack</button>
46+ </div>
3347<span id="update-check-status" class="status-line"></span>
3448<span id="rollback-status" class="status-line"></span>
3549
@@ -60,6 +74,14 @@ emitRequestTokenMetaTag();
6074 <span class="sort-hint-chip" title="Use manual mode and the up/down buttons in the first column to set custom order."><i class="fa fa-info-circle"></i> Manual uses up/down in Order column</span>
6175 </div>
6276 <input id="docker-folder-filter" type="text" placeholder="Search Docker folders" oninput="setFilterQuery('folders','docker',this.value)">
77+ <div id="docker-quick-filters" class="folder-quick-filters">
78+ <button type="button" data-filter="all" onclick="setQuickFolderFilter('docker','all')">All</button>
79+ <button type="button" data-filter="pinned" onclick="setQuickFolderFilter('docker','pinned')">Pinned</button>
80+ <button type="button" data-filter="stopped" onclick="setQuickFolderFilter('docker','stopped')">Stopped</button>
81+ <button type="button" data-filter="empty" onclick="setQuickFolderFilter('docker','empty')">Empty</button>
82+ <button type="button" data-filter="no-rules" onclick="setQuickFolderFilter('docker','no-rules')">No rules</button>
83+ <button type="button" data-filter="has-updates" onclick="setQuickFolderFilter('docker','has-updates')">Has updates</button>
84+ </div>
6385 <div class="settings-cards-grid">
6486 <div class="settings-mini-card">
6587 <div class="settings-mini-title">Layout</div>
@@ -166,6 +188,13 @@ emitRequestTokenMetaTag();
166188 <span class="sort-hint-chip" title="Use manual mode and the up/down buttons in the first column to set custom order."><i class="fa fa-info-circle"></i> Manual uses up/down in Order column</span>
167189 </div>
168190 <input id="vm-folder-filter" type="text" placeholder="Search VM folders" oninput="setFilterQuery('folders','vm',this.value)">
191+ <div id="vm-quick-filters" class="folder-quick-filters">
192+ <button type="button" data-filter="all" onclick="setQuickFolderFilter('vm','all')">All</button>
193+ <button type="button" data-filter="pinned" onclick="setQuickFolderFilter('vm','pinned')">Pinned</button>
194+ <button type="button" data-filter="stopped" onclick="setQuickFolderFilter('vm','stopped')">Stopped</button>
195+ <button type="button" data-filter="empty" onclick="setQuickFolderFilter('vm','empty')">Empty</button>
196+ <button type="button" data-filter="no-rules" onclick="setQuickFolderFilter('vm','no-rules')">No rules</button>
197+ </div>
169198 <div class="settings-cards-grid">
170199 <div class="settings-mini-card">
171200 <div class="settings-mini-title">Layout</div>
@@ -277,8 +306,14 @@ emitRequestTokenMetaTag();
277306 <input id="docker-rule-test-label-value" type="text" placeholder="Test label value (optional)">
278307 <input id="docker-rule-test-image" type="text" placeholder="Test image (optional, example: linuxserver/sonarr)">
279308 <input id="docker-rule-test-compose" type="text" placeholder="Test compose project (optional)">
309+ <div class="rule-test-samples">
310+ <button type="button" onclick="applyRuleTestSample('docker','media')"><i class="fa fa-flask"></i> Media sample</button>
311+ <button type="button" onclick="applyRuleTestSample('docker','network')"><i class="fa fa-flask"></i> Network sample</button>
312+ <button type="button" onclick="applyRuleTestSample('docker','database')"><i class="fa fa-flask"></i> Database sample</button>
313+ </div>
280314 <button onclick="testAutoRule('docker')"><i class="fa fa-flask"></i> Test rule priority</button>
281315 <button onclick="runRuleSimulator('docker')"><i class="fa fa-list-alt"></i> Simulate all items</button>
316+ <div id="docker-rule-validation" class="inline-validation-hint"></div>
282317 <div id="docker-rule-test-output" class="rule-test-output"></div>
283318 </div>
284319 <input id="docker-rules-filter" type="text" placeholder="Search Docker rules" oninput="setFilterQuery('rules','docker',this.value)">
@@ -322,8 +357,13 @@ emitRequestTokenMetaTag();
322357 </div>
323358 <div class="rule-tester">
324359 <input id="vm-rule-test-name" type="text" placeholder="Test VM name (example: prod-db)">
360+ <div class="rule-test-samples">
361+ <button type="button" onclick="applyRuleTestSample('vm','production')"><i class="fa fa-flask"></i> Production sample</button>
362+ <button type="button" onclick="applyRuleTestSample('vm','desktop')"><i class="fa fa-flask"></i> Desktop sample</button>
363+ </div>
325364 <button onclick="testAutoRule('vm')"><i class="fa fa-flask"></i> Test rule priority</button>
326365 <button onclick="runRuleSimulator('vm')"><i class="fa fa-list-alt"></i> Simulate all items</button>
366+ <div id="vm-rule-validation" class="inline-validation-hint"></div>
327367 <div id="vm-rule-test-output" class="rule-test-output"></div>
328368 </div>
329369 <input id="vm-rules-filter" type="text" placeholder="Search VM rules" oninput="setFilterQuery('rules','vm',this.value)">
@@ -514,6 +554,7 @@ emitRequestTokenMetaTag();
514554 <input id="docker-template-name" type="text" placeholder="Template name">
515555 <button onclick="createTemplateFromFolder('docker')"><i class="fa fa-save"></i> Save template from folder</button>
516556 </div>
557+ <div id="docker-template-validation" class="inline-validation-hint"></div>
517558 <input id="docker-templates-filter" type="text" placeholder="Search Docker templates" oninput="setFilterQuery('templates','docker',this.value)">
518559 <div class="selection-actions">
519560 <button onclick="bulkTemplateAction('docker','delete')"><i class="fa fa-trash"></i> Delete selected</button>
@@ -542,6 +583,7 @@ emitRequestTokenMetaTag();
542583 <input id="vm-template-name" type="text" placeholder="Template name">
543584 <button onclick="createTemplateFromFolder('vm')"><i class="fa fa-save"></i> Save template from folder</button>
544585 </div>
586+ <div id="vm-template-validation" class="inline-validation-hint"></div>
545587 <input id="vm-templates-filter" type="text" placeholder="Search VM templates" oninput="setFilterQuery('templates','vm',this.value)">
546588 <div class="selection-actions">
547589 <button onclick="bulkTemplateAction('vm','delete')"><i class="fa fa-trash"></i> Delete selected</button>
@@ -658,6 +700,8 @@ emitRequestTokenMetaTag();
658700 </select>
659701 <div id="import-mode-help">Optional dry run: enable preview-only mode if you want to review without applying changes.</div>
660702 <label id="import-dry-run-row"><input id="import-dry-run-only" type="checkbox"> Dry run only (preview changes, do not modify folders)</label>
703+ <label id="import-preview-first-row"><input id="import-preview-first-toggle" type="checkbox" checked> Preview diff first (recommended)</label>
704+ <label id="import-review-ack-row" style="display:none;"><input id="import-review-ack" type="checkbox"> I reviewed the diff and selected operations</label>
661705 </div>
662706 </div>
663707 <div class="import-preview-card">
@@ -701,6 +745,7 @@ emitRequestTokenMetaTag();
701745<div id="fv-setup-assistant-dialog" style="display:none;" role="dialog" aria-modal="true" aria-labelledby="fv-setup-assistant-title">
702746 <div id="fv-setup-assistant-content"></div>
703747</div>
748+ <div id="fv-toast-host" class="fv-toast-host" aria-live="polite" aria-atomic="false"></div>
704749
705750<div id="fv-settings-action-bar"></div>
706751</div>
0 commit comments