// Compare the wsids the user pasted (input order, deduped) against the wsids // in WORKSHOP_ITEMS_LINE (sort order). Always available - no "previous sort" // required. Surfaces drops (banned / missing mod.info / unknown / collection // IDs that expanded), additions (collection expansion, branch picks), and // position changes. function computeDiff(inputWsids, outputWsids) { if (!inputWsids || !outputWsids) return null; const inSet = new Set(inputWsids); const outSet = new Set(outputWsids); const added = outputWsids.filter(w => !inSet.has(w)); const removed = inputWsids.filter(w => !outSet.has(w)); const inPos = new Map(inputWsids.map((w, i) => [w, i])); const movers = []; outputWsids.forEach((w, oi) => { if (!inSet.has(w)) return; const ii = inPos.get(w); if (ii !== oi) movers.push({ wsid: w, from: ii, to: oi, delta: oi - ii }); }); movers.sort((a, b) => Math.abs(b.delta) - Math.abs(a.delta)); return { added, removed, movers }; } function DiffPanel({ inputWsids, outputWsids, onClose }) { const diff = computeDiff(inputWsids, outputWsids); if (!diff) { return (