@fr0st/ui-sortable 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"names":["Sortable","BaseComponent","constructor","node","options","super","this","_selector","_options","items","handle","_enabled","disabled","_refreshCursors","_events","disable","dispose","$","removeEventDelegate","_node","removeEvent","_target","_currentSortable","enable","find","defaults","appendTo","axis","cancel","connectWith","cursor","dropOnEmpty","helperClass","scroll","scrollSensitivity","scrollSpeed","proto","prototype","_checkScroll","hide","originalX","getScrollX","window","originalY","getScrollY","offsetX","offsetY","_pos","y","Math","max","height","docHeight","document","boxSize","SCROLL_BOX","min","x","width","docWidth","setStyle","scrollBehavior","setScroll","show","_checkScrollTimer","setTimeout","_","dragEvent","mouseDragFactory","e","button","is","currentTarget","getDataset","hasDescendent","getPosition","setDataset","uiDragging","_startIndex","index","_currentIndex","triggerEvent","detail","target","addClass","nearestSortable","connected","filter","sortable","init","length","nearestTo","offset","nearestItems","isSame","nearestItem","_updateTarget","newIndex","type","preventDefault","removeClass","removeDataset","clearTimeout","addEventDelegate","addEvent","elements","nearestCenter","center","targetCenter","method","initComponent"],"sources":["../src/sortable.js","../src/index.js","../src/prototype/helpers.js","../src/prototype/events.js"],"sourcesContent":["import $ from '@fr0st/query';\nimport { BaseComponent } from '@fr0st/ui';\n\n/**\n * Sortable Class\n * @class\n */\nexport default class Sortable extends BaseComponent {\n /**\n * New Sortable constructor.\n * @param {HTMLElement} node The input node.\n * @param {object} [options] The options to create the Sortable with.\n */\n constructor(node, options) {\n super(node, options);\n\n this._selector = this._options.items;\n if (this._options.handle) {\n this._selector += ' ' + this._options.handle;\n }\n\n this._enabled = !this._options.disabled;\n\n this._refreshCursors();\n this._events();\n }\n\n /**\n * Disable the Sortable.\n */\n disable() {\n this._enabled = false;\n }\n\n /**\n * Dispose the Sortable.\n */\n dispose() {\n $.removeEventDelegate(this._node, 'mousedown.ui.sortable touchstart.ui.sortable');\n $.removeEvent(this._node, 'receive.ui.sortable');\n\n this._target = null;\n this._currentSortable = null;\n\n super.dispose();\n }\n\n /**\n * Enable the Sortable.\n */\n enable() {\n this._enabled = true;\n }\n\n /**\n * Get the Sortable item elements.\n * @return {array} The Sortable item elements.\n */\n items() {\n return $.find(this._options.items, this._node);\n }\n}\n","import { initComponent } from '@fr0st/ui';\nimport Sortable from './sortable.js';\nimport { _events } from './prototype/events.js';\nimport { _checkScroll, _refreshCursors, _updateTarget } from './prototype/helpers.js';\n\n// Sortable default options\nSortable.defaults = {\n appendTo: 'body',\n axis: null,\n cancel: 'input, textarea, button, select, option',\n connectWith: null,\n cursor: 'auto',\n disabled: false,\n dropOnEmpty: true,\n handle: null,\n helperClass: 'bg-body-tertiary',\n items: ':scope > li',\n scroll: true,\n scrollSensitivity: 20,\n scrollSpeed: 5,\n};\n\n// Sortable prototype\nconst proto = Sortable.prototype;\n\nproto._checkScroll = _checkScroll;\nproto._events = _events;\nproto._refreshCursors = _refreshCursors;\nproto._updateTarget = _updateTarget;\n\n// Sortable init\ninitComponent('sortable', Sortable);\n\nexport default Sortable;\n","import $ from '@fr0st/query';\n\n/**\n * Check for window scroll.\n */\nexport function _checkScroll() {\n $.hide(this._target);\n\n const originalX = $.getScrollX(window);\n const originalY = $.getScrollY(window);\n\n let offsetX = originalX;\n let offsetY = originalY;\n\n if (this._pos.y < originalY + this._options.scrollSensitivity) {\n offsetY = Math.max(0, originalY - this._options.scrollSpeed);\n } else if (this._pos.y > originalY + $.height(window) - this._options.scrollSensitivity) {\n const docHeight = $.height(document, { boxSize: $.SCROLL_BOX });\n offsetY = Math.min(docHeight, originalY + this._options.scrollSpeed);\n }\n\n if (this._pos.x < originalX + this._options.scrollSensitivity) {\n offsetX = Math.max(0, originalX - this._options.scrollSpeed);\n } else if (this._pos.x > originalX + $.width(window) - this._options.scrollSensitivity) {\n const docWidth = $.width(document, { boxSize: $.SCROLL_BOX });\n offsetX = Math.min(docWidth, originalX + this._options.scrollSpeed);\n }\n\n if (offsetX !== originalX || offsetY !== originalY) {\n $.setStyle(':root', { scrollBehavior: 'initial' });\n $.setScroll(document, offsetX, offsetY);\n $.setStyle(':root', { scrollBehavior: '' });\n\n this._pos.x += offsetX - originalX;\n this._pos.y += offsetY - originalY;\n }\n\n $.show(this._target);\n\n this._checkScrollTimer = setTimeout((_) => {\n this._checkScroll();\n }, 0);\n};\n\n/**\n * Refresh Sortable item cursors.\n */\nexport function _refreshCursors() {\n const elements = $.find(this._selector, this._node);\n\n $.setStyle(elements, { cursor: this._options.cursor });\n};\n\n/**\n * Update the target element.\n * @param {HTMLElement} nearestItem The current nearest item.\n * @param {number} x The mouse X position.\n * @param {number} y The mouse Y position.\n */\nexport function _updateTarget(nearestItem, x, y) {\n const nearestCenter = $.center(nearestItem, { offset: true });\n const targetCenter = $.center(this._target, { offset: true });\n\n let method;\n if (this._options.axis === 'y' || nearestCenter.x === targetCenter.x) {\n method = y < nearestCenter.y ?\n 'before' :\n 'after';\n } else if (this._options.axis === 'x' || nearestCenter.y === targetCenter.y) {\n method = x < nearestCenter.x ?\n 'before' :\n 'after';\n } else {\n method = x < nearestCenter.x && y < nearestCenter.y ?\n 'before' :\n 'after';\n }\n\n $[method](nearestItem, this._target);\n};\n","import $ from '@fr0st/query';\nimport { getPosition } from '@fr0st/ui';\n\n/**\n * Attach events for the Sortable.\n */\nexport function _events() {\n const downEvent = (e) => {\n if (\n e.button ||\n !this._enabled ||\n $.is(e.currentTarget, this._options.cancel) ||\n $.getDataset(this._node, 'uiDragging')\n ) {\n return false;\n }\n\n this._target = this._options.handle ?\n this.items().find((node) => $.hasDescendent(node, e.currentTarget)) :\n e.currentTarget;\n };\n\n const moveEvent = (e) => {\n this._pos = getPosition(e);\n\n if (!$.getDataset(this._node, 'uiDragging')) {\n $.setDataset(this._node, { uiDragging: true });\n\n this._startIndex = $.index(this._target);\n this._currentIndex = this._startIndex;\n\n $.triggerEvent(this._node, 'sort.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n\n if (this._options.helperClass) {\n $.addClass(this._target, this._options.helperClass);\n }\n\n this._currentSortable = this._node;\n\n if (this._options.scroll) {\n this._checkScroll();\n }\n }\n\n let nearestSortable = this._node;\n\n if (this._options.connectWith) {\n const connected = $.find(this._options.connectWith)\n .filter((node) => {\n const sortable = this.constructor.init(node);\n\n return sortable._options.dropOnEmpty || sortable.items().length;\n });\n\n if (connected.length) {\n nearestSortable = $.nearestTo([this._node, ...connected], this._pos.x, this._pos.y, { offset: true });\n }\n }\n\n const nearestItems = $.isSame(this._node, nearestSortable) ?\n this.items() :\n this.constructor.init(nearestSortable).items();\n\n const nearestItem = $.nearestTo(nearestItems, this._pos.x, this._pos.y, { offset: true });\n\n if (!nearestItem) {\n return;\n }\n\n this._updateTarget(nearestItem, this._pos.x, this._pos.y);\n\n const newIndex = $.index(this._target);\n\n if (!$.isSame(nearestSortable, this._currentSortable)) {\n $.triggerEvent(this._currentSortable, 'send.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n\n $.triggerEvent(nearestSortable, 'receive.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n } else if (this._currentIndex !== newIndex) {\n $.triggerEvent(nearestSortable, 'sorting.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n }\n\n this._currentIndex = newIndex;\n this._currentSortable = nearestSortable;\n };\n\n const upEvent = (e) => {\n if (!$.getDataset(this._node, 'uiDragging')) {\n this._target = null;\n return;\n }\n\n if (e.type === 'mouseup') {\n e.preventDefault();\n }\n\n $.triggerEvent(this._currentSortable, 'sorted.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n\n if (this._options.helperClass) {\n $.removeClass(this._target, this._options.helperClass);\n }\n\n if (this._currentIndex !== this._startIndex || !$.isSame(this._currentSortable, this._node)) {\n $.triggerEvent(this._currentSortable, 'update.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n }\n\n $.removeDataset(this._node, 'uiDragging');\n\n if (this._checkScrollTimer) {\n clearTimeout(this._checkScrollTimer);\n this._checkScrollTimer = null;\n }\n\n this._target = null;\n this._currentSortable = null;\n this._currentIndex = null;\n this._startIndex = null;\n };\n\n const dragEvent = $.mouseDragFactory(downEvent, moveEvent, upEvent);\n\n $.addEventDelegate(this._node, 'mousedown.ui.sortable touchstart.ui.sortable', this._selector, dragEvent);\n\n $.addEvent(this._node, 'receive.ui.sortable', (_) => {\n this._refreshCursors();\n });\n};\n"],"mappings":"0UAOe,MAAMA,UAAiBC,gBAMlCC,YAAYC,EAAMC,GACdC,MAAMF,EAAMC,GAEZE,KAAKC,UAAYD,KAAKE,SAASC,MAC3BH,KAAKE,SAASE,SACdJ,KAAKC,WAAa,IAAMD,KAAKE,SAASE,QAG1CJ,KAAKK,UAAYL,KAAKE,SAASI,SAE/BN,KAAKO,kBACLP,KAAKQ,SACb,CAKIC,UACIT,KAAKK,UAAW,CACxB,CAKIK,UACIC,EAAEC,oBAAoBZ,KAAKa,MAAO,gDAClCF,EAAEG,YAAYd,KAAKa,MAAO,uBAE1Bb,KAAKe,QAAU,KACff,KAAKgB,iBAAmB,KAExBjB,MAAMW,SACd,CAKIO,SACIjB,KAAKK,UAAW,CACxB,CAMIF,QACI,OAAOQ,EAAEO,KAAKlB,KAAKE,SAASC,MAAOH,KAAKa,MAChD,ECtDAnB,EAASyB,SAAW,CAChBC,SAAU,OACVC,KAAM,KACNC,OAAQ,0CACRC,YAAa,KACbC,OAAQ,OACRlB,UAAU,EACVmB,aAAa,EACbrB,OAAQ,KACRsB,YAAa,mBACbvB,MAAO,cACPwB,QAAQ,EACRC,kBAAmB,GACnBC,YAAa,GAIjB,MAAMC,EAAQpC,EAASqC,UAEvBD,EAAME,aCpBC,WACHrB,EAAEsB,KAAKjC,KAAKe,SAEZ,MAAMmB,EAAYvB,EAAEwB,WAAWC,QACzBC,EAAY1B,EAAE2B,WAAWF,QAE/B,IAAIG,EAAUL,EACVM,EAAUH,EAEd,GAAIrC,KAAKyC,KAAKC,EAAIL,EAAYrC,KAAKE,SAAS0B,kBACxCY,EAAUG,KAAKC,IAAI,EAAGP,EAAYrC,KAAKE,SAAS2B,kBAC7C,GAAI7B,KAAKyC,KAAKC,EAAIL,EAAY1B,EAAEkC,OAAOT,QAAUpC,KAAKE,SAAS0B,kBAAmB,CACrF,MAAMkB,EAAYnC,EAAEkC,OAAOE,SAAU,CAAEC,QAASrC,EAAEsC,aAClDT,EAAUG,KAAKO,IAAIJ,EAAWT,EAAYrC,KAAKE,SAAS2B,YAChE,CAEI,GAAI7B,KAAKyC,KAAKU,EAAIjB,EAAYlC,KAAKE,SAAS0B,kBACxCW,EAAUI,KAAKC,IAAI,EAAGV,EAAYlC,KAAKE,SAAS2B,kBAC7C,GAAI7B,KAAKyC,KAAKU,EAAIjB,EAAYvB,EAAEyC,MAAMhB,QAAUpC,KAAKE,SAAS0B,kBAAmB,CACpF,MAAMyB,EAAW1C,EAAEyC,MAAML,SAAU,CAAEC,QAASrC,EAAEsC,aAChDV,EAAUI,KAAKO,IAAIG,EAAUnB,EAAYlC,KAAKE,SAAS2B,YAC/D,CAEQU,IAAYL,GAAaM,IAAYH,IACrC1B,EAAE2C,SAAS,QAAS,CAAEC,eAAgB,YACtC5C,EAAE6C,UAAUT,SAAUR,EAASC,GAC/B7B,EAAE2C,SAAS,QAAS,CAAEC,eAAgB,KAEtCvD,KAAKyC,KAAKU,GAAKZ,EAAUL,EACzBlC,KAAKyC,KAAKC,GAAKF,EAAUH,GAG7B1B,EAAE8C,KAAKzD,KAAKe,SAEZf,KAAK0D,kBAAoBC,YAAYC,IACjC5D,KAAKgC,cAAc,GACpB,EACP,EDhBAF,EAAMtB,QEpBC,WACH,MAuIMqD,EAAYlD,EAAEmD,kBAvIDC,IACf,GACIA,EAAEC,SACDhE,KAAKK,UACNM,EAAEsD,GAAGF,EAAEG,cAAelE,KAAKE,SAASoB,SACpCX,EAAEwD,WAAWnE,KAAKa,MAAO,cAEzB,OAAO,EAGXb,KAAKe,QAAUf,KAAKE,SAASE,OACzBJ,KAAKG,QAAQe,MAAMrB,GAASc,EAAEyD,cAAcvE,EAAMkE,EAAEG,iBACpDH,EAAEG,aAAa,IAGJH,IACf/D,KAAKyC,KAAO4B,cAAYN,GAEnBpD,EAAEwD,WAAWnE,KAAKa,MAAO,gBAC1BF,EAAE2D,WAAWtE,KAAKa,MAAO,CAAE0D,YAAY,IAEvCvE,KAAKwE,YAAc7D,EAAE8D,MAAMzE,KAAKe,SAChCf,KAAK0E,cAAgB1E,KAAKwE,YAE1B7D,EAAEgE,aAAa3E,KAAKa,MAAO,mBAAoB,CAC3C+D,OAAQ,CACJC,OAAQ7E,KAAKe,WAIjBf,KAAKE,SAASwB,aACdf,EAAEmE,SAAS9E,KAAKe,QAASf,KAAKE,SAASwB,aAG3C1B,KAAKgB,iBAAmBhB,KAAKa,MAEzBb,KAAKE,SAASyB,QACd3B,KAAKgC,gBAIb,IAAI+C,EAAkB/E,KAAKa,MAE3B,GAAIb,KAAKE,SAASqB,YAAa,CAC3B,MAAMyD,EAAYrE,EAAEO,KAAKlB,KAAKE,SAASqB,aAClC0D,QAAQpF,IACL,MAAMqF,EAAWlF,KAAKJ,YAAYuF,KAAKtF,GAEvC,OAAOqF,EAAShF,SAASuB,aAAeyD,EAAS/E,QAAQiF,MAAM,IAGnEJ,EAAUI,SACVL,EAAkBpE,EAAE0E,UAAU,CAACrF,KAAKa,SAAUmE,GAAYhF,KAAKyC,KAAKU,EAAGnD,KAAKyC,KAAKC,EAAG,CAAE4C,QAAQ,IAE9G,CAEQ,MAAMC,EAAe5E,EAAE6E,OAAOxF,KAAKa,MAAOkE,GACtC/E,KAAKG,QACLH,KAAKJ,YAAYuF,KAAKJ,GAAiB5E,QAErCsF,EAAc9E,EAAE0E,UAAUE,EAAcvF,KAAKyC,KAAKU,EAAGnD,KAAKyC,KAAKC,EAAG,CAAE4C,QAAQ,IAElF,IAAKG,EACD,OAGJzF,KAAK0F,cAAcD,EAAazF,KAAKyC,KAAKU,EAAGnD,KAAKyC,KAAKC,GAEvD,MAAMiD,EAAWhF,EAAE8D,MAAMzE,KAAKe,SAEzBJ,EAAE6E,OAAOT,EAAiB/E,KAAKgB,kBAYzBhB,KAAK0E,gBAAkBiB,GAC9BhF,EAAEgE,aAAaI,EAAiB,sBAAuB,CACnDH,OAAQ,CACJC,OAAQ7E,KAAKe,YAdrBJ,EAAEgE,aAAa3E,KAAKgB,iBAAkB,mBAAoB,CACtD4D,OAAQ,CACJC,OAAQ7E,KAAKe,WAIrBJ,EAAEgE,aAAaI,EAAiB,sBAAuB,CACnDH,OAAQ,CACJC,OAAQ7E,KAAKe,YAWzBf,KAAK0E,cAAgBiB,EACrB3F,KAAKgB,iBAAmB+D,CAAe,IAG1BhB,IACRpD,EAAEwD,WAAWnE,KAAKa,MAAO,eAKf,YAAXkD,EAAE6B,MACF7B,EAAE8B,iBAGNlF,EAAEgE,aAAa3E,KAAKgB,iBAAkB,qBAAsB,CACxD4D,OAAQ,CACJC,OAAQ7E,KAAKe,WAIjBf,KAAKE,SAASwB,aACdf,EAAEmF,YAAY9F,KAAKe,QAASf,KAAKE,SAASwB,aAG1C1B,KAAK0E,gBAAkB1E,KAAKwE,aAAgB7D,EAAE6E,OAAOxF,KAAKgB,iBAAkBhB,KAAKa,QACjFF,EAAEgE,aAAa3E,KAAKgB,iBAAkB,qBAAsB,CACxD4D,OAAQ,CACJC,OAAQ7E,KAAKe,WAKzBJ,EAAEoF,cAAc/F,KAAKa,MAAO,cAExBb,KAAK0D,oBACLsC,aAAahG,KAAK0D,mBAClB1D,KAAK0D,kBAAoB,MAG7B1D,KAAKe,QAAU,KACff,KAAKgB,iBAAmB,KACxBhB,KAAK0E,cAAgB,KACrB1E,KAAKwE,YAAc,MApCfxE,KAAKe,QAAU,IAoCI,IAK3BJ,EAAEsF,iBAAiBjG,KAAKa,MAAO,+CAAgDb,KAAKC,UAAW4D,GAE/FlD,EAAEuF,SAASlG,KAAKa,MAAO,uBAAwB+C,IAC3C5D,KAAKO,iBAAiB,GAE9B,EF1HAuB,EAAMvB,gBCoBC,WACH,MAAM4F,EAAWxF,EAAEO,KAAKlB,KAAKC,UAAWD,KAAKa,OAE7CF,EAAE2C,SAAS6C,EAAU,CAAE3E,OAAQxB,KAAKE,SAASsB,QACjD,EDvBAM,EAAM4D,cC+BC,SAAuBD,EAAatC,EAAGT,GAC1C,MAAM0D,EAAgBzF,EAAE0F,OAAOZ,EAAa,CAAEH,QAAQ,IAChDgB,EAAe3F,EAAE0F,OAAOrG,KAAKe,QAAS,CAAEuE,QAAQ,IAEtD,IAAIiB,EAEAA,EADuB,MAAvBvG,KAAKE,SAASmB,MAAgB+E,EAAcjD,IAAMmD,EAAanD,EACtDT,EAAI0D,EAAc1D,EACvB,SACA,QAC0B,MAAvB1C,KAAKE,SAASmB,MAAgB+E,EAAc1D,IAAM4D,EAAa5D,EAC7DS,EAAIiD,EAAcjD,EACvB,SACA,QAEKA,EAAIiD,EAAcjD,GAAKT,EAAI0D,EAAc1D,EAC9C,SACA,QAGR/B,EAAE4F,GAAQd,EAAazF,KAAKe,QAChC,EDhDAyF,gBAAc,WAAY9G,G"}
1
+ {"version":3,"names":["Sortable","BaseComponent","constructor","node","options","super","this","_selector","_options","items","handle","_enabled","disabled","_refreshCursors","_events","disable","dispose","$","removeEventDelegate","_node","removeEvent","_target","_currentSortable","enable","find","defaults","appendTo","axis","cancel","connectWith","cursor","dropOnEmpty","helperClass","scroll","scrollSensitivity","scrollSpeed","proto","prototype","_checkScroll","hide","originalX","getScrollX","window","originalY","getScrollY","offsetX","offsetY","_pos","y","Math","max","height","docHeight","document","boxSize","SCROLL_BOX","min","x","width","docWidth","setStyle","scrollBehavior","setScroll","show","_checkScrollTimer","setTimeout","_","dragEvent","mouseDragFactory","e","button","is","currentTarget","getDataset","hasDescendent","getPosition","setDataset","uiDragging","_startIndex","index","_currentIndex","triggerEvent","detail","target","addClass","nearestSortable","connected","filter","sortable","init","length","nearestTo","offset","nearestItems","isSame","nearestItem","_updateTarget","newIndex","type","preventDefault","removeClass","removeDataset","clearTimeout","addEventDelegate","addEvent","elements","nearestCenter","center","targetCenter","method","initComponent"],"sources":["../src/sortable.js","../src/index.js","../src/prototype/helpers.js","../src/prototype/events.js"],"sourcesContent":["import $ from '@fr0st/query';\nimport { BaseComponent } from '@fr0st/ui';\n\n/**\n * Sortable Class\n * @class\n */\nexport default class Sortable extends BaseComponent {\n /**\n * New Sortable constructor.\n * @param {HTMLElement} node The input node.\n * @param {object} [options] The options to create the Sortable with.\n */\n constructor(node, options) {\n super(node, options);\n\n this._selector = this._options.items;\n if (this._options.handle) {\n this._selector += ' ' + this._options.handle;\n }\n\n this._enabled = !this._options.disabled;\n\n this._refreshCursors();\n this._events();\n }\n\n /**\n * Disable the Sortable.\n */\n disable() {\n this._enabled = false;\n }\n\n /**\n * Dispose the Sortable.\n */\n dispose() {\n $.removeEventDelegate(this._node, 'mousedown.ui.sortable touchstart.ui.sortable');\n $.removeEvent(this._node, 'receive.ui.sortable');\n\n this._target = null;\n this._currentSortable = null;\n\n super.dispose();\n }\n\n /**\n * Enable the Sortable.\n */\n enable() {\n this._enabled = true;\n }\n\n /**\n * Get the Sortable item elements.\n * @return {array} The Sortable item elements.\n */\n items() {\n return $.find(this._options.items, this._node);\n }\n}\n","import { initComponent } from '@fr0st/ui';\nimport Sortable from './sortable.js';\nimport { _events } from './prototype/events.js';\nimport { _checkScroll, _refreshCursors, _updateTarget } from './prototype/helpers.js';\n\n// Sortable default options\nSortable.defaults = {\n appendTo: 'body',\n axis: null,\n cancel: 'input, textarea, button, select, option',\n connectWith: null,\n cursor: 'auto',\n disabled: false,\n dropOnEmpty: true,\n handle: null,\n helperClass: 'bg-body-tertiary',\n items: ':scope > li',\n scroll: true,\n scrollSensitivity: 20,\n scrollSpeed: 5,\n};\n\n// Sortable prototype\nconst proto = Sortable.prototype;\n\nproto._checkScroll = _checkScroll;\nproto._events = _events;\nproto._refreshCursors = _refreshCursors;\nproto._updateTarget = _updateTarget;\n\n// Sortable init\ninitComponent('sortable', Sortable);\n\nexport default Sortable;\n","import $ from '@fr0st/query';\n\n/**\n * Check for window scroll.\n */\nexport function _checkScroll() {\n $.hide(this._target);\n\n const originalX = $.getScrollX(window);\n const originalY = $.getScrollY(window);\n\n let offsetX = originalX;\n let offsetY = originalY;\n\n if (this._pos.y < originalY + this._options.scrollSensitivity) {\n offsetY = Math.max(0, originalY - this._options.scrollSpeed);\n } else if (this._pos.y > originalY + $.height(window) - this._options.scrollSensitivity) {\n const docHeight = $.height(document, { boxSize: $.SCROLL_BOX });\n offsetY = Math.min(docHeight, originalY + this._options.scrollSpeed);\n }\n\n if (this._pos.x < originalX + this._options.scrollSensitivity) {\n offsetX = Math.max(0, originalX - this._options.scrollSpeed);\n } else if (this._pos.x > originalX + $.width(window) - this._options.scrollSensitivity) {\n const docWidth = $.width(document, { boxSize: $.SCROLL_BOX });\n offsetX = Math.min(docWidth, originalX + this._options.scrollSpeed);\n }\n\n if (offsetX !== originalX || offsetY !== originalY) {\n $.setStyle(':root', { scrollBehavior: 'initial' });\n $.setScroll(document, offsetX, offsetY);\n $.setStyle(':root', { scrollBehavior: '' });\n\n this._pos.x += offsetX - originalX;\n this._pos.y += offsetY - originalY;\n }\n\n $.show(this._target);\n\n this._checkScrollTimer = setTimeout((_) => {\n this._checkScroll();\n }, 0);\n};\n\n/**\n * Refresh Sortable item cursors.\n */\nexport function _refreshCursors() {\n const elements = $.find(this._selector, this._node);\n\n $.setStyle(elements, { cursor: this._options.cursor });\n};\n\n/**\n * Update the target element.\n * @param {HTMLElement} nearestItem The current nearest item.\n * @param {number} x The mouse X position.\n * @param {number} y The mouse Y position.\n */\nexport function _updateTarget(nearestItem, x, y) {\n const nearestCenter = $.center(nearestItem, { offset: true });\n const targetCenter = $.center(this._target, { offset: true });\n\n let method;\n if (this._options.axis === 'y' || nearestCenter.x === targetCenter.x) {\n method = y < nearestCenter.y ?\n 'before' :\n 'after';\n } else if (this._options.axis === 'x' || nearestCenter.y === targetCenter.y) {\n method = x < nearestCenter.x ?\n 'before' :\n 'after';\n } else {\n method = x < nearestCenter.x && y < nearestCenter.y ?\n 'before' :\n 'after';\n }\n\n $[method](nearestItem, this._target);\n};\n","import $ from '@fr0st/query';\nimport { getPosition } from '@fr0st/ui';\n\n/**\n * Attach events for the Sortable.\n */\nexport function _events() {\n const downEvent = (e) => {\n if (\n e.button ||\n !this._enabled ||\n $.is(e.currentTarget, this._options.cancel) ||\n $.getDataset(this._node, 'uiDragging')\n ) {\n return false;\n }\n\n this._target = this._options.handle ?\n this.items().find((node) => $.hasDescendent(node, e.currentTarget)) :\n e.currentTarget;\n };\n\n const moveEvent = (e) => {\n this._pos = getPosition(e);\n\n if (!$.getDataset(this._node, 'uiDragging')) {\n $.setDataset(this._node, { uiDragging: true });\n\n this._startIndex = $.index(this._target);\n this._currentIndex = this._startIndex;\n\n $.triggerEvent(this._node, 'sort.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n\n if (this._options.helperClass) {\n $.addClass(this._target, this._options.helperClass);\n }\n\n this._currentSortable = this._node;\n\n if (this._options.scroll) {\n this._checkScroll();\n }\n }\n\n let nearestSortable = this._node;\n\n if (this._options.connectWith) {\n const connected = $.find(this._options.connectWith)\n .filter((node) => {\n const sortable = this.constructor.init(node);\n\n return sortable._options.dropOnEmpty || sortable.items().length;\n });\n\n if (connected.length) {\n nearestSortable = $.nearestTo([this._node, ...connected], this._pos.x, this._pos.y, { offset: true });\n }\n }\n\n const nearestItems = $.isSame(this._node, nearestSortable) ?\n this.items() :\n this.constructor.init(nearestSortable).items();\n\n const nearestItem = $.nearestTo(nearestItems, this._pos.x, this._pos.y, { offset: true });\n\n if (!nearestItem) {\n return;\n }\n\n this._updateTarget(nearestItem, this._pos.x, this._pos.y);\n\n const newIndex = $.index(this._target);\n\n if (!$.isSame(nearestSortable, this._currentSortable)) {\n $.triggerEvent(this._currentSortable, 'send.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n\n $.triggerEvent(nearestSortable, 'receive.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n } else if (this._currentIndex !== newIndex) {\n $.triggerEvent(nearestSortable, 'sorting.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n }\n\n this._currentIndex = newIndex;\n this._currentSortable = nearestSortable;\n };\n\n const upEvent = (e) => {\n if (!$.getDataset(this._node, 'uiDragging')) {\n this._target = null;\n return;\n }\n\n if (e.type === 'mouseup') {\n e.preventDefault();\n }\n\n $.triggerEvent(this._currentSortable, 'sorted.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n\n if (this._options.helperClass) {\n $.removeClass(this._target, this._options.helperClass);\n }\n\n if (this._currentIndex !== this._startIndex || !$.isSame(this._currentSortable, this._node)) {\n $.triggerEvent(this._currentSortable, 'update.ui.sortable', {\n detail: {\n target: this._target,\n },\n });\n }\n\n $.removeDataset(this._node, 'uiDragging');\n\n if (this._checkScrollTimer) {\n clearTimeout(this._checkScrollTimer);\n this._checkScrollTimer = null;\n }\n\n this._target = null;\n this._currentSortable = null;\n this._currentIndex = null;\n this._startIndex = null;\n };\n\n const dragEvent = $.mouseDragFactory(downEvent, moveEvent, upEvent);\n\n $.addEventDelegate(this._node, 'mousedown.ui.sortable touchstart.ui.sortable', this._selector, dragEvent);\n\n $.addEvent(this._node, 'receive.ui.sortable', (_) => {\n this._refreshCursors();\n });\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fr0st/ui-sortable",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "description": "FrostUI-Sortable is a free, open-source Sortable component for Javascript.",
5
5
  "keywords": [
6
6
  "ui",
@@ -35,10 +35,10 @@
35
35
  "author": "Elusive",
36
36
  "license": "MIT",
37
37
  "devDependencies": {
38
- "@rollup/plugin-node-resolve": "^15.0.2",
39
- "eslint": "^8.41.0",
38
+ "@rollup/plugin-node-resolve": "^15.2.0",
39
+ "eslint": "^8.47.0",
40
40
  "eslint-config-google": "^0.14.0",
41
- "rollup": "^3.23.0",
42
- "terser": "^5.17.6"
41
+ "rollup": "^3.28.0",
42
+ "terser": "^5.19.2"
43
43
  }
44
44
  }