UNPKG

@ng-dnd/sortable

Version:
67 lines 7.64 kB
import { HoverTrigger } from './types'; // ~ List ~ // [ // [ index 0 ] // [ index 1 ] <-- index 1 gets picked up // [ index 2 ] // ] // // We want to emit a hover when: // - the mouse moves over the top half of 0 // - the mouse moves over the bottom half of 2 // // ,----------------------, // | target 0 top half | => emits 0 // |----------------------| // | target 0 bottom half | => computes 1, doesn't emit // '----------------------' // ,----------------------, // | target 1 (inert) | => computes 1, doesn't emit // '----------------------' // ,----------------------, // | target 2 top half | => computes 1, doesn't emit // |----------------------| // | target 2 bottom half | => emits 2 // '----------------------' // export function suggestHalfway(ctx, item, rect, clientOffset) { const { hover } = item; const dim = ctx.horizontal ? rect.width || rect.right - rect.left : rect.height || rect.bottom - rect.top; const start = ctx.horizontal ? rect.left : rect.top; const targetCentre = start + dim / 2.0; const mouse = ctx.horizontal ? clientOffset.x : clientOffset.y; const topHalf = mouse < targetCentre; let suggestedIndex; if (ctx.listId === hover.listId) { if (ctx.index < hover.index) { suggestedIndex = topHalf ? ctx.index : ctx.index + 1; } else { suggestedIndex = topHalf ? ctx.index - 1 : ctx.index; // Fix rare issue when trying to drag too high if (suggestedIndex < 0) { suggestedIndex = 0; } } } else { // first hover on a different list; // there is no relevant hover.index to compare to suggestedIndex = topHalf ? ctx.index : ctx.index + 1; } return suggestedIndex; } export function suggestFixed(ctx) { return ctx.index; } export function getSuggester(trigger) { switch (trigger) { case HoverTrigger.fixed: return suggestFixed; default: return suggestHalfway; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXJUcmlnZ2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob3ZlclRyaWdnZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxZQUFZLEVBQWlCLE1BQU0sU0FBUyxDQUFDO0FBRW5FLGVBQWU7QUFDZixJQUFJO0FBQ0osZ0JBQWdCO0FBQ2hCLDJDQUEyQztBQUMzQyxnQkFBZ0I7QUFDaEIsSUFBSTtBQUNKLEVBQUU7QUFDRixnQ0FBZ0M7QUFDaEMsNkNBQTZDO0FBQzdDLGdEQUFnRDtBQUNoRCxFQUFFO0FBQ0YsMkJBQTJCO0FBQzNCLHNDQUFzQztBQUN0QywyQkFBMkI7QUFDM0IsdURBQXVEO0FBQ3ZELDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsdURBQXVEO0FBQ3ZELDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsdURBQXVEO0FBQ3ZELDJCQUEyQjtBQUMzQixzQ0FBc0M7QUFDdEMsMkJBQTJCO0FBQzNCLEVBQUU7QUFFRixNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUF3QixFQUN4QixJQUF1QixFQUN2QixJQUEwQixFQUMxQixZQUFvQjtJQUVwQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxVQUFVO1FBQ3hCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUk7UUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDcEQsTUFBTSxZQUFZLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDO0lBQ3JDLElBQUksY0FBc0IsQ0FBQztJQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hDLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsY0FBYyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLENBQUM7WUFDTixjQUFjLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUNyRCw4Q0FBOEM7WUFDOUMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLG1DQUFtQztRQUNuQyxpREFBaUQ7UUFDakQsY0FBYyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUNELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFPLEdBQXdCO0lBQ3pELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFxQjtJQUNoRCxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssWUFBWSxDQUFDLEtBQUs7WUFDckIsT0FBTyxZQUFZLENBQUM7UUFDdEI7WUFDRSxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9mZnNldCB9IGZyb20gJ0BuZy1kbmQvY29yZSc7XG5pbXBvcnQgeyBEcmFnZ2VkSXRlbSwgSG92ZXJUcmlnZ2VyLCBSZW5kZXJDb250ZXh0IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vICAgICB+IExpc3QgflxuLy8gW1xuLy8gICBbIGluZGV4IDAgXVxuLy8gICBbIGluZGV4IDEgXSA8LS0gaW5kZXggMSBnZXRzIHBpY2tlZCB1cFxuLy8gICBbIGluZGV4IDIgXVxuLy8gXVxuLy9cbi8vIFdlIHdhbnQgdG8gZW1pdCBhIGhvdmVyIHdoZW46XG4vLyAgIC0gdGhlIG1vdXNlIG1vdmVzIG92ZXIgdGhlIHRvcCBoYWxmIG9mIDBcbi8vICAgLSB0aGUgbW91c2UgbW92ZXMgb3ZlciB0aGUgYm90dG9tIGhhbGYgb2YgMlxuLy9cbi8vICwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLFxuLy8gfCB0YXJnZXQgMCB0b3AgaGFsZiAgICB8ID0+IGVtaXRzIDBcbi8vIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuLy8gfCB0YXJnZXQgMCBib3R0b20gaGFsZiB8ID0+IGNvbXB1dGVzIDEsIGRvZXNuJ3QgZW1pdFxuLy8gJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nXG4vLyAsLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSxcbi8vIHwgdGFyZ2V0IDEgKGluZXJ0KSAgICAgfCA9PiBjb21wdXRlcyAxLCBkb2Vzbid0IGVtaXRcbi8vICctLS0tLS0tLS0tLS0tLS0tLS0tLS0tJ1xuLy8gLC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0sXG4vLyB8IHRhcmdldCAyIHRvcCBoYWxmICAgIHwgPT4gY29tcHV0ZXMgMSwgZG9lc24ndCBlbWl0XG4vLyB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbi8vIHwgdGFyZ2V0IDIgYm90dG9tIGhhbGYgfCA9PiBlbWl0cyAyXG4vLyAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSdcbi8vXG5cbmV4cG9ydCBmdW5jdGlvbiBzdWdnZXN0SGFsZndheTxEYXRhPihcbiAgY3R4OiBSZW5kZXJDb250ZXh0PERhdGE+LFxuICBpdGVtOiBEcmFnZ2VkSXRlbTxEYXRhPixcbiAgcmVjdDogRE9NUmVjdCB8IENsaWVudFJlY3QsXG4gIGNsaWVudE9mZnNldDogT2Zmc2V0XG4pIHtcbiAgY29uc3QgeyBob3ZlciB9ID0gaXRlbTtcbiAgY29uc3QgZGltID0gY3R4Lmhvcml6b250YWxcbiAgICA/IHJlY3Qud2lkdGggfHwgcmVjdC5yaWdodCAtIHJlY3QubGVmdFxuICAgIDogcmVjdC5oZWlnaHQgfHwgcmVjdC5ib3R0b20gLSByZWN0LnRvcDtcbiAgY29uc3Qgc3RhcnQgPSBjdHguaG9yaXpvbnRhbCA/IHJlY3QubGVmdCA6IHJlY3QudG9wO1xuICBjb25zdCB0YXJnZXRDZW50cmUgPSBzdGFydCArIGRpbSAvIDIuMDtcbiAgY29uc3QgbW91c2UgPSBjdHguaG9yaXpvbnRhbCA/IGNsaWVudE9mZnNldC54IDogY2xpZW50T2Zmc2V0Lnk7XG4gIGNvbnN0IHRvcEhhbGYgPSBtb3VzZSA8IHRhcmdldENlbnRyZTtcbiAgbGV0IHN1Z2dlc3RlZEluZGV4OiBudW1iZXI7XG4gIGlmIChjdHgubGlzdElkID09PSBob3Zlci5saXN0SWQpIHtcbiAgICBpZiAoY3R4LmluZGV4IDwgaG92ZXIuaW5kZXgpIHtcbiAgICAgIHN1Z2dlc3RlZEluZGV4ID0gdG9wSGFsZiA/IGN0eC5pbmRleCA6IGN0eC5pbmRleCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Z2dlc3RlZEluZGV4ID0gdG9wSGFsZiA/IGN0eC5pbmRleCAtIDEgOiBjdHguaW5kZXg7XG4gICAgICAvLyBGaXggcmFyZSBpc3N1ZSB3aGVuIHRyeWluZyB0byBkcmFnIHRvbyBoaWdoXG4gICAgICBpZiAoc3VnZ2VzdGVkSW5kZXggPCAwKSB7XG4gICAgICAgIHN1Z2dlc3RlZEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gZmlyc3QgaG92ZXIgb24gYSBkaWZmZXJlbnQgbGlzdDtcbiAgICAvLyB0aGVyZSBpcyBubyByZWxldmFudCBob3Zlci5pbmRleCB0byBjb21wYXJlIHRvXG4gICAgc3VnZ2VzdGVkSW5kZXggPSB0b3BIYWxmID8gY3R4LmluZGV4IDogY3R4LmluZGV4ICsgMTtcbiAgfVxuICByZXR1cm4gc3VnZ2VzdGVkSW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWdnZXN0Rml4ZWQ8RGF0YT4oY3R4OiBSZW5kZXJDb250ZXh0PERhdGE+KSB7XG4gIHJldHVybiBjdHguaW5kZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdWdnZXN0ZXIodHJpZ2dlcjogSG92ZXJUcmlnZ2VyKSB7XG4gIHN3aXRjaCAodHJpZ2dlcikge1xuICAgIGNhc2UgSG92ZXJUcmlnZ2VyLmZpeGVkOlxuICAgICAgcmV0dXJuIHN1Z2dlc3RGaXhlZDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN1Z2dlc3RIYWxmd2F5O1xuICB9XG59XG4iXX0=