diff --git a/web/linker.js b/web/linker.js
index 99c40bf..2a3c673 100644
--- a/web/linker.js
+++ b/web/linker.js
@@ -1413,6 +1413,75 @@ class LinkerManagerDialog extends ComfyDialog {
} catch (e) { /* ignore */ }
}
+ // Update selected bar for a specific missing model slot
+ updateSelectedBarForMissing(missing) {
+ if (!missing) return;
+ const nodeId = missing.node_id;
+ const widgetIndex = missing.widget_index;
+ const subgraphId = missing.subgraph_id || '';
+ const isTopLevel = missing.is_top_level !== false;
+ const key = `${nodeId}:${widgetIndex}:${subgraphId}:${isTopLevel ? 'T' : 'F'}`;
+
+ const selectedBar = document.getElementById(`selected-bar-${nodeId}-${widgetIndex}`);
+ if (!selectedBar) return;
+
+ // Find selection for this slot
+ let selection = null;
+ let selectionIdx = -1;
+ if (this.pendingIndex.has(key)) {
+ const idx = this.pendingIndex.get(key);
+ if (idx >= 0 && idx < this.pendingResolutions.length) {
+ selection = this.pendingResolutions[idx];
+ selectionIdx = idx;
+ }
+ }
+
+ if (!selection) {
+ selectedBar.style.display = 'none';
+ selectedBar.innerHTML = '';
+ return;
+ }
+
+ // Build selected bar content
+ const label = selection.resolved_model?.relative_path || selection.resolved_model?.filename || selection.resolved_path || '';
+ const resolveBtnId = `selected-remove-${nodeId}-${widgetIndex}`;
+
+ selectedBar.innerHTML = `
`;
@@ -2222,12 +2339,14 @@ class LinkerManagerDialog extends ComfyDialog {
html += `
${otherMatches.length} other match${otherMatches.length > 1 ? 'es' : ''} below 100%
`;
// Hidden container with other matches
html += `
`;
- for (const match of otherMatches) {
+ for (let mIdx = 0; mIdx < otherMatches.length; mIdx++) {
+ const match = otherMatches[mIdx];
const confClass = match.confidence >= 70 ? 'ml-badge-medium' : 'ml-badge-low';
+ const altBtnId = `resolve-alt-${missingIndex}-${missing.node_id}-${missing.widget_index}-${mIdx}`;
html += `
`;
html += `${match.confidence}%`;
html += `${match.filename || match.path?.split(/[/\\]/).pop()}`;
- html += ``;
+ html += ``;
html += `
`;
}
html += `
`;
@@ -2238,15 +2357,15 @@ class LinkerManagerDialog extends ComfyDialog {
html += `
No local matches found
`;
}
- // Add all-models search picker
- const searchId = `search-all-${missing.node_id}-${missing.widget_index}`;
- const selectAllId = `select-all-${missing.node_id}-${missing.widget_index}`;
- const resolveAllId = `resolve-all-${missing.node_id}-${missing.widget_index}`;
- html += `
`;
- html += `
Search all models:
`;
- html += `
`;
- html += `
`;
- html += `
`;
+ // Add all-models search picker - combo-style dropdown
+ const comboId = `combo-${missing.node_id}-${missing.widget_index}`;
+ html += `
`;
+ html += `
`;
+ html += ``;
+ html += ``;
+ html += ``;
+ html += `
`;
+ html += `
`;
html += `
`;
html += `
`; // End left column