| export const qs = (selector, scope = document) => scope.querySelector(selector); | |
| export const qsa = (selector, scope = document) => Array.from(scope.querySelectorAll(selector)); | |
| export function createFragment(nodes = []) { | |
| const fragment = document.createDocumentFragment(); | |
| nodes.forEach(node => fragment.appendChild(node)); | |
| return fragment; | |
| } | |
| export function debounce(fn, delay = 200) { | |
| let timer; | |
| return (...args) => { | |
| clearTimeout(timer); | |
| timer = setTimeout(() => fn(...args), delay); | |
| }; | |
| } | |
| export function formatBytes(bytes) { | |
| if (!bytes && bytes !== 0) return '-'; | |
| const units = ['B', 'KB', 'MB', 'GB']; | |
| const base = Math.floor(Math.log(bytes) / Math.log(1024)); | |
| const value = bytes / Math.pow(1024, base); | |
| return `${value.toFixed(value >= 10 ? 0 : 1)} ${units[base]}`; | |
| } | |
| export function toggleElement(el, show) { | |
| if (!el) return; | |
| el.style.display = show ? '' : 'none'; | |
| } | |