1export default class ClipboardManager{constructor(buttonSelector){this.copyButtons=document.querySelectorAll(buttonSelector);this.init()}init(){this.copyButtons.forEach(button=>{button.addEventListener("click",()=>this.copyToClipboard(button))})}copyToClipboard(button){const voucherText=button.textContent.trim();navigator.clipboard.writeText(voucherText).then(()=>{const originalText=button.innerHTML;const replacementText=button.getAttribute("data-replacement-text");button.innerHTML=replacementText; 2button.style.pointerEvents="none";button.style.fontWeight=700;button.style.textDecoration="none";setTimeout(()=>{button.innerHTML=originalText;button.style.pointerEvents="all";button.style.fontWeight=700;button.style.textDecoration="underline"},2E3)}).catch(err=>{console.error("Failed to copy: ",err)})}};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.