diff --git a/app.py b/app.py
index 8c01357..0557d3a 100644
--- a/app.py
+++ b/app.py
@@ -1517,6 +1517,18 @@ def r_config():
return jsonify(ok=True)
return jsonify(load_cfg())
+@app.route('/api/config/ports/reset', methods=['POST'])
+def r_ports_reset():
+ cfg = load_cfg()
+ cfg['source_ports'] = []
+ cfg['source_port'] = None
+ cfg['source_label'] = ''
+ cfg['dest_port'] = None
+ cfg['dest_label'] = ''
+ cfg['dest_type'] = 'usb'
+ save_cfg(cfg)
+ return jsonify(ok=True)
+
@app.route('/api/history')
def r_history():
return jsonify(load_history())
@@ -2336,6 +2348,7 @@ body{background:var(--bg);color:var(--txt);font-family:-apple-system,BlinkMacSys
@@ -2973,6 +2986,15 @@ async function addSource(){
renderSources(); populateSel(); renderUnassigned();
}
+async function resetPorts(){
+ if(!confirm('Alle Port-Zuweisungen (Quellen & Ziel) zurücksetzen?'))return;
+ await api('/config/ports/reset','POST');
+ cfg.source_ports=[]; cfg.dest_port=null; cfg.dest_label=''; cfg.dest_type='usb';
+ selectedPortSet.clear();
+ renderSources(); renderSlot('dst',null,''); populateSel(); renderUnassigned();
+ renderExplorerTabs(); expl.role='dst'; expl.load('');
+}
+
async function removeSource(port){
cfg.source_ports = (cfg.source_ports||[]).filter(sp=>sp.port!==port);
selectedPortSet.delete(port);
diff --git a/version.txt b/version.txt
index 1b5deea..633e893 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-1.0.59
\ No newline at end of file
+1.0.60
\ No newline at end of file