(() => {
const log = (window.__dndlog = []);
const t0 = performance.now();
const at = () => Math.round(performance.now() - t0);
const desc = (el) => (el?.tagName ? `${el.tagName}.${String(el.className).slice(0, 30)}` : String(el));
const view = () => window.debug?.editor?.view;
let overs = 0;
for (const type of ["pointerdown", "mousedown", "dragstart", "dragenter", "drop", "dragend", "mouseup"])
document.addEventListener(type, (e) => log.push([at(), type, desc(e.target)]), true);
document.addEventListener("dragover", (e) => { if (overs++ < 3) log.push([at(), "dragover", desc(e.target)]); }, true);
window.addEventListener("dragstart", (e) => log.push([at(), "dragstart-final", "prevented=" + e.defaultPrevented, "pmDragging=" + !!view()?.dragging, "slice=" + view()?.dragging?.slice?.content?.firstChild?.type?.name]));
window.addEventListener("dragover", (e) => { if (overs < 4) log.push([at(), "dragover-final", "prevented=" + e.defaultPrevented, "dropEffect=" + e.dataTransfer.dropEffect]); });
window.addEventListener("drop", (e) => log.push([at(), "drop-final", "prevented=" + e.defaultPrevented, "types=" + [...e.dataTransfer.types].join(",")]));
window.addEventListener("dragend", (e) => log.push([at(), "dragend-final", "dropEffect=" + e.dataTransfer.dropEffect]));
console.log("Перетащи элемент галереи один раз, потом выполни: copy(JSON.stringify(__dndlog))");
})();