@nhtio/lucid-resourceful-vue-components 0.1.0-master-e14740ea → 0.1.0-master-dc6af70b
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.
- package/{VBtn-DhfYEt9V.mjs → VBtn-CEYzcx0y.mjs} +8 -8
- package/{VBtn-DhfYEt9V.mjs.map → VBtn-CEYzcx0y.mjs.map} +1 -1
- package/{VDatePicker-D0OTAyvJ.mjs → VDatePicker-BHcvHHhM.mjs} +133 -133
- package/{VDatePicker-D0OTAyvJ.mjs.map → VDatePicker-BHcvHHhM.mjs.map} +1 -1
- package/{VEmptyState-BFrXSTJ-.mjs → VEmptyState-CkYtN0q5.mjs} +84 -84
- package/{VEmptyState-BFrXSTJ-.mjs.map → VEmptyState-CkYtN0q5.mjs.map} +1 -1
- package/{VHover-DLvOmsjv.mjs → VHover-Bj6QrQff.mjs} +3 -3
- package/{VHover-DLvOmsjv.mjs.map → VHover-Bj6QrQff.mjs.map} +1 -1
- package/{VListItem-LNaoM8S4.mjs → VListItem-BnxAmKd_.mjs} +55 -55
- package/{VListItem-LNaoM8S4.mjs.map → VListItem-BnxAmKd_.mjs.map} +1 -1
- package/{VMenu-9rTbTKtH.mjs → VMenu-BSB7YSpb.mjs} +28 -28
- package/{VMenu-9rTbTKtH.mjs.map → VMenu-BSB7YSpb.mjs.map} +1 -1
- package/{VPicker-BGuRD0KW.mjs → VPicker-DMOVvCIE.mjs} +5 -5
- package/{VPicker-BGuRD0KW.mjs.map → VPicker-DMOVvCIE.mjs.map} +1 -1
- package/{VRadioGroup-Dx_wEqzl.mjs → VRadioGroup-ByydeX8x.mjs} +21 -21
- package/{VRadioGroup-Dx_wEqzl.mjs.map → VRadioGroup-ByydeX8x.mjs.map} +1 -1
- package/{VRow-DaLdbIGw.mjs → VRow-Dmn82Xaa.mjs} +18 -18
- package/{VRow-DaLdbIGw.mjs.map → VRow-Dmn82Xaa.mjs.map} +1 -1
- package/{VSheet-DnIfs-1c.mjs → VSheet-B9ALb0PQ.mjs} +14 -14
- package/{VSheet-DnIfs-1c.mjs.map → VSheet-B9ALb0PQ.mjs.map} +1 -1
- package/{actions-8bWGsB-p.mjs → actions-BEmdy8bu.mjs} +11 -11
- package/{actions-8bWGsB-p.mjs.map → actions-BEmdy8bu.mjs.map} +1 -1
- package/{alert-IW1AIWZw.mjs → alert-DftADRGk.mjs} +13 -13
- package/{alert-IW1AIWZw.mjs.map → alert-DftADRGk.mjs.map} +1 -1
- package/{bigint-Jmfa2L4S.mjs → bigint-DiC37zMo.mjs} +6 -6
- package/{bigint-Jmfa2L4S.mjs.map → bigint-DiC37zMo.mjs.map} +1 -1
- package/{boolean-BEY7eBxf.mjs → boolean-DZDryWHA.mjs} +74 -74
- package/{boolean-BEY7eBxf.mjs.map → boolean-DZDryWHA.mjs.map} +1 -1
- package/{clipboard-BoKd7mFG.mjs → clipboard--JAZokR3.mjs} +14 -14
- package/{clipboard-BoKd7mFG.mjs.map → clipboard--JAZokR3.mjs.map} +1 -1
- package/{colorUtils-DmtKYNgW.mjs → colorUtils-I1lKouL3.mjs} +3 -3
- package/{colorUtils-DmtKYNgW.mjs.map → colorUtils-I1lKouL3.mjs.map} +1 -1
- package/{common-BeDAn4wu.mjs → common-BDwb9uGU.mjs} +8881 -8880
- package/common-BDwb9uGU.mjs.map +1 -0
- package/{component-CjPpW_A2.mjs → component-C-qp70Rp.mjs} +2 -2
- package/{component-CjPpW_A2.mjs.map → component-C-qp70Rp.mjs.map} +1 -1
- package/components/autorefresh_controller.mjs +1 -1
- package/components/control_button.mjs +1 -1
- package/components/control_button_bar.mjs +2 -2
- package/components/control_menu.mjs +1 -1
- package/components/custom_field.mjs +1 -1
- package/components/exporter.mjs +1 -1
- package/components/fields/bigint.mjs +1 -1
- package/components/fields/boolean.mjs +1 -1
- package/components/fields/date.mjs +1 -1
- package/components/fields/date_time.mjs +1 -1
- package/components/fields/enum.mjs +1 -1
- package/components/fields/integer.mjs +1 -1
- package/components/fields/number.mjs +1 -1
- package/components/fields/string.mjs +1 -1
- package/components/fields/unsigned_integer.mjs +1 -1
- package/components/fields.mjs +9 -9
- package/components/form_with_validation.mjs +1 -1
- package/components/resourceful_alerter.mjs +1 -1
- package/components/resourceful_index.mjs +1 -1
- package/components/resourceful_record.mjs +2 -2
- package/components/resourceful_record_default_form.mjs +1 -1
- package/components/resourceful_record_form.mjs +1 -1
- package/components/sortable.mjs +1 -1
- package/components/svg_icon.mjs +1 -1
- package/components/timezone_picker.mjs +1 -1
- package/components.mjs +23 -23
- package/composables.mjs +11 -11
- package/{console-CRXioSFP.mjs → console-CAez8ceh.mjs} +2 -2
- package/{console-CRXioSFP.mjs.map → console-CAez8ceh.mjs.map} +1 -1
- package/{custom-Y1WJVKP9.mjs → custom-Tm6_792A.mjs} +12 -12
- package/{custom-Y1WJVKP9.mjs.map → custom-Tm6_792A.mjs.map} +1 -1
- package/{date-BxEeCNWD.mjs → date-CxaBVvlO.mjs} +10 -10
- package/{date-BxEeCNWD.mjs.map → date-CxaBVvlO.mjs.map} +1 -1
- package/{date_time-6kpv7eDF.mjs → date_time-DhABUkGT.mjs} +169 -169
- package/{date_time-6kpv7eDF.mjs.map → date_time-DhABUkGT.mjs.map} +1 -1
- package/{display-DvzWa1QO.mjs → display-BdjbLG1_.mjs} +32 -32
- package/{display-DvzWa1QO.mjs.map → display-BdjbLG1_.mjs.map} +1 -1
- package/{display-CO0pTIEs.mjs → display-DPktlWOz.mjs} +42 -42
- package/{display-CO0pTIEs.mjs.map → display-DPktlWOz.mjs.map} +1 -1
- package/{display-kAyhIPBH.mjs → display-DazBkrbZ.mjs} +7 -7
- package/{display-kAyhIPBH.mjs.map → display-DazBkrbZ.mjs.map} +1 -1
- package/{elevation-CMzO50xm.mjs → elevation-DFBVIqom.mjs} +56 -56
- package/{elevation-CMzO50xm.mjs.map → elevation-DFBVIqom.mjs.map} +1 -1
- package/{enum-noYU2Cqh.mjs → enum-KB4xPkOL.mjs} +9 -9
- package/{enum-noYU2Cqh.mjs.map → enum-KB4xPkOL.mjs.map} +1 -1
- package/factories.mjs +1 -1
- package/{field_composer-DpJx0Oz1.mjs → field_composer-CLJuJevf.mjs} +7 -7
- package/{field_composer-DpJx0Oz1.mjs.map → field_composer-CLJuJevf.mjs.map} +1 -1
- package/{form-CDLcDPyU.mjs → form-9YRVcrxM.mjs} +17 -17
- package/{form-CDLcDPyU.mjs.map → form-9YRVcrxM.mjs.map} +1 -1
- package/{guards-B99p3BPj.mjs → guards-BrpRx6ly.mjs} +2 -2
- package/{guards-B99p3BPj.mjs.map → guards-BrpRx6ly.mjs.map} +1 -1
- package/guards.mjs +4 -4
- package/helpers.mjs +6 -6
- package/{index-B2rKM3mR.mjs → index-BaOM0Cyz.mjs} +8 -8
- package/{index-B2rKM3mR.mjs.map → index-BaOM0Cyz.mjs.map} +1 -1
- package/{index-C9UuBVyI.mjs → index-BkjiQEyJ.mjs} +12 -12
- package/{index-C9UuBVyI.mjs.map → index-BkjiQEyJ.mjs.map} +1 -1
- package/{index-slHxe6b-.mjs → index-Bs4A8qUO.mjs} +2 -2
- package/{index-slHxe6b-.mjs.map → index-Bs4A8qUO.mjs.map} +1 -1
- package/{index-BUpccfIz.mjs → index-BsazeUn6.mjs} +3 -3
- package/{index-BUpccfIz.mjs.map → index-BsazeUn6.mjs.map} +1 -1
- package/{index-BaWthszI.mjs → index-CWwCXXNl.mjs} +2 -2
- package/{index-BaWthszI.mjs.map → index-CWwCXXNl.mjs.map} +1 -1
- package/{index-Bi050X9r.mjs → index-DBXOwXpe.mjs} +6 -6
- package/{index-Bi050X9r.mjs.map → index-DBXOwXpe.mjs.map} +1 -1
- package/{index-CzI9mHIx.mjs → index-DDobJ49b.mjs} +7 -7
- package/{index-CzI9mHIx.mjs.map → index-DDobJ49b.mjs.map} +1 -1
- package/{index-CIvylvfa.mjs → index-DwOjHbRP.mjs} +44 -44
- package/{index-CIvylvfa.mjs.map → index-DwOjHbRP.mjs.map} +1 -1
- package/{index-bXmNb9jX.mjs → index-UxsEIZVi.mjs} +4 -4
- package/{index-bXmNb9jX.mjs.map → index-UxsEIZVi.mjs.map} +1 -1
- package/index.mjs +47 -47
- package/{integer-BIJ4_I8y.mjs → integer-uzh0nwpb.mjs} +3 -3
- package/{integer-BIJ4_I8y.mjs.map → integer-uzh0nwpb.mjs.map} +1 -1
- package/{mdi-CqMJqgQi.mjs → mdi-C9DbASEx.mjs} +40 -40
- package/{mdi-CqMJqgQi.mjs.map → mdi-C9DbASEx.mjs.map} +1 -1
- package/{number-z_LAINPM.mjs → number-CfHLDQFY.mjs} +28 -28
- package/{number-z_LAINPM.mjs.map → number-CfHLDQFY.mjs.map} +1 -1
- package/package.json +46 -46
- package/{position-Ai5XksAO.mjs → position-CPuNp03H.mjs} +2 -2
- package/{position-Ai5XksAO.mjs.map → position-CPuNp03H.mjs.map} +1 -1
- package/{props-BYX22zcE.mjs → props-Cq9daNwa.mjs} +4 -4
- package/{props-BYX22zcE.mjs.map → props-Cq9daNwa.mjs.map} +1 -1
- package/{props-p4f5Pa5h.mjs → props-KPFuptNy.mjs} +8 -8
- package/{props-p4f5Pa5h.mjs.map → props-KPFuptNy.mjs.map} +1 -1
- package/{renderers-BKUvrrVm.mjs → renderers-COT3aAu3.mjs} +13 -13
- package/{renderers-BKUvrrVm.mjs.map → renderers-COT3aAu3.mjs.map} +1 -1
- package/{string-Dmr8SRMf.mjs → string-DvwPf_Ob.mjs} +61 -61
- package/{string-Dmr8SRMf.mjs.map → string-DvwPf_Ob.mjs.map} +1 -1
- package/{unsigned_integer-BliPiCXO.mjs → unsigned_integer-C9nrNAn_.mjs} +4 -4
- package/{unsigned_integer-BliPiCXO.mjs.map → unsigned_integer-C9nrNAn_.mjs.map} +1 -1
- package/useRender-Dpj9Jrbr.mjs +9 -0
- package/{useRender-BD1xw5zG.mjs.map → useRender-Dpj9Jrbr.mjs.map} +1 -1
- package/{utils-DqXWb-4f.mjs → utils-DxV2ZNaE.mjs} +10 -10
- package/{utils-DqXWb-4f.mjs.map → utils-DxV2ZNaE.mjs.map} +1 -1
- package/{validation-DS3tTSk5.mjs → validation-CZ6xx4aX.mjs} +4 -4
- package/{validation-DS3tTSk5.mjs.map → validation-CZ6xx4aX.mjs.map} +1 -1
- package/VBtn.css +0 -1
- package/VDatePicker.css +0 -1
- package/VEmptyState.css +0 -1
- package/VListItem.css +0 -1
- package/VMenu.css +0 -1
- package/VPicker.css +0 -1
- package/VRadioGroup.css +0 -1
- package/VSheet.css +0 -1
- package/actions.css +0 -1
- package/boolean.css +0 -1
- package/clipboard.css +0 -1
- package/common-BeDAn4wu.mjs.map +0 -1
- package/common.css +0 -1
- package/date_time.css +0 -1
- package/display.css +0 -1
- package/display2.css +0 -1
- package/elevation.css +0 -1
- package/index.css +0 -1
- package/mdi.css +0 -1
- package/number.css +0 -1
- package/string.css +0 -1
- package/useRender-BD1xw5zG.mjs +0 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-slHxe6b-.mjs","sources":["../node_modules/.pnpm/ordinal@1.0.3/node_modules/ordinal/indicator.js","../node_modules/.pnpm/ordinal@1.0.3/node_modules/ordinal/index.js","../src/private/sortable/_item.ts","../node_modules/.pnpm/deep-object-diff@1.1.9/node_modules/deep-object-diff/mjs/utils.js","../node_modules/.pnpm/deep-object-diff@1.1.9/node_modules/deep-object-diff/mjs/diff.js","../node_modules/.pnpm/sortablejs@1.15.6/node_modules/sortablejs/modular/sortable.esm.js","../src/private/sortable/_bridge.ts","../src/private/sortable/_wrapper.ts","../src/private/sortable/props.ts","../src/private/sortable/index.ts"],"sourcesContent":["module.exports = function indicator (i) {\n i = Math.abs(i)\n var cent = i % 100\n if (cent >= 10 && cent <= 20) return 'th'\n var dec = i % 10\n if (dec === 1) return 'st'\n if (dec === 2) return 'nd'\n if (dec === 3) return 'rd'\n return 'th'\n}\n","var indicator = require('./indicator')\n\nfunction ordinal (i) {\n if (typeof i !== 'number') throw new TypeError('Expected Number, got ' + (typeof i) + ' ' + i)\n\n if (!Number.isFinite(i)) return i\n return i + indicator(i)\n}\n\nordinal.indicator = indicator\nmodule.exports = ordinal\n","import { deepmerge } from 'deepmerge-ts'\nimport { emitsFactory } from '../common/factories'\nimport { default as formatAsOrdinal } from 'ordinal'\nimport { decode } from '@nhtio/lucid-resourceful/encoding'\nimport { computed, defineComponent, toRaw, toRefs, h } from 'vue'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport type { PropType, SlotsType } from 'vue'\nimport type { SortableSlotBindings } from './index'\nimport type { Renderable, RenderableProps } from './props'\n\nexport interface SortableItemSlotBindings<T = any> extends SortableSlotBindings<T> {\n item: T\n index: number\n order: number\n ordinal: string\n first: boolean\n last: boolean\n props: {\n 'data-sortable': Readonly<string>\n }\n remove: () => void\n moveUp: () => void\n moveDown: () => void\n disabled: boolean\n sortingDisabled: boolean\n}\n\nexport const makeSortableItemProps = propsFactory(\n {\n encoded: {\n type: String as PropType<string>,\n required: true,\n },\n value: {\n type: Array as PropType<any[]>,\n required: true,\n },\n wrapperEl: {\n type: Object as PropType<HTMLElement | null | undefined>,\n default: undefined,\n },\n itemTag: {\n type: [String, Object, Function] as PropType<Renderable>,\n default: 'li',\n },\n itemTagProps: {\n type: Object as PropType<RenderableProps>,\n default: () => ({}),\n },\n onRemove: {\n type: Function as PropType<((index: number, item: any) => void) | undefined>,\n default: undefined,\n },\n onMoveUp: {\n type: Function as PropType<((index: number, item: any) => void) | undefined>,\n default: undefined,\n },\n onMoveDown: {\n type: Function as PropType<((index: number, item: any) => void) | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n sortingDisabled: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n },\n 'SortableItem'\n)\n\ntype SortableItemSlots = SlotsType<{\n default: (props: SortableItemSlotBindings) => any\n}>\n\nexport const SortableItem = defineComponent({\n name: 'SortableItem',\n props: makeSortableItemProps(),\n emits: emitsFactory({\n remove: (index: number, item: any) => index >= 0 && item !== undefined,\n moveUp: (index: number, item: any) => index >= 0 && item !== undefined,\n moveDown: (index: number, item: any) => index >= 0 && item !== undefined,\n }),\n slots: Object as SortableItemSlots,\n setup(props, { emit, slots }) {\n const { value, wrapperEl, encoded, itemTag, itemTagProps, disabled, sortingDisabled } =\n toRefs(props)\n const item = computed(() => decode(toRaw(encoded.value)))\n const index = computed(() => toRaw(value.value).indexOf(toRaw(item.value)))\n const order = computed(() => index.value + 1)\n const ordinal = computed(() => formatAsOrdinal(order.value))\n const itemProps = computed(() => ({\n 'data-sortable': toRaw(encoded.value),\n }))\n const remove = () => {\n if (disabled.value) return\n if (props.onRemove) {\n props.onRemove(index.value, toRaw(item.value))\n } else {\n emit('remove', index.value, toRaw(item.value))\n }\n }\n const moveUp = () => {\n if (disabled.value || sortingDisabled.value) return\n if (props.onMoveUp) {\n props.onMoveUp(index.value, toRaw(item.value))\n } else {\n emit('moveUp', index.value, toRaw(item.value))\n }\n }\n const moveDown = () => {\n if (disabled.value || sortingDisabled.value) return\n if (props.onMoveDown) {\n props.onMoveDown(index.value, toRaw(item.value))\n } else {\n emit('moveDown', index.value, toRaw(item.value))\n }\n }\n const itemSlotBindings = computed(() =>\n deepmerge(\n {\n props: itemProps.value,\n },\n {\n value: toRaw(value.value),\n wrapperEl: toRaw(wrapperEl.value),\n },\n {\n item: toRaw(item.value),\n index: toRaw(index.value),\n first: index.value === 0,\n last: index.value === toRaw(value.value).length - 1,\n order: toRaw(order.value),\n ordinal: toRaw(ordinal.value),\n remove,\n moveUp,\n moveDown,\n disabled: toRaw(disabled.value),\n sortingDisabled: toRaw(sortingDisabled.value),\n }\n )\n )\n const itemTagBindings = computed(() => deepmerge(itemTagProps.value, itemProps.value))\n return () =>\n slots.default\n ? slots.default(itemSlotBindings.value)\n : h(itemTag.value, itemTagBindings.value)\n },\n})\n","export const isDate = d => d instanceof Date;\nexport const isEmpty = o => Object.keys(o).length === 0;\nexport const isObject = o => o != null && typeof o === 'object';\nexport const hasOwnProperty = (o, ...args) => Object.prototype.hasOwnProperty.call(o, ...args)\nexport const isEmptyObject = (o) => isObject(o) && isEmpty(o);\nexport const makeObjectWithoutPrototype = () => Object.create(null);\n","import { isDate, isEmptyObject, isObject, hasOwnProperty, makeObjectWithoutPrototype } from './utils.js';\n\nconst diff = (lhs, rhs) => {\n if (lhs === rhs) return {}; // equal return no diff\n\n if (!isObject(lhs) || !isObject(rhs)) return rhs; // return updated rhs\n\n const deletedValues = Object.keys(lhs).reduce((acc, key) => {\n if (!hasOwnProperty(rhs, key)) {\n acc[key] = undefined;\n \n }\n\n return acc;\n }, makeObjectWithoutPrototype());\n\n if (isDate(lhs) || isDate(rhs)) {\n if (lhs.valueOf() == rhs.valueOf()) return {};\n return rhs;\n }\n\n return Object.keys(rhs).reduce((acc, key) => {\n if (!hasOwnProperty(lhs, key)){\n acc[key] = rhs[key]; // return added r key\n return acc;\n } \n\n const difference = diff(lhs[key], rhs[key]);\n\n // If the difference is empty, and the lhs is an empty object or the rhs is not an empty object\n if (isEmptyObject(difference) && !isDate(difference) && (isEmptyObject(lhs[key]) || !isEmptyObject(rhs[key])))\n return acc; // return no diff\n\n acc[key] = difference // return updated key\n return acc; // return updated key\n }, deletedValues);\n};\n\nexport default diff;\n","/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { diff } from 'deep-object-diff'\nimport { default as SortableJS } from 'sortablejs'\nimport { encode } from '@nhtio/lucid-resourceful/encoding'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { shallowReactive, watch, nextTick, toRaw } from 'vue'\nimport type { Ref, ComputedRef, WatchStopHandle } from 'vue'\nimport type { SortableInstance, RawSortableOptions } from './props'\n\nconst WATCHED_REACTIVE_OPTIONS = [\n 'animation',\n 'chosenClass',\n 'delay',\n 'delayOnTouchOnly',\n 'direction',\n 'disabled',\n 'dragClass',\n 'dragoverBubble',\n 'dropBubble',\n 'emptyInsertThreshold',\n 'easing',\n 'fallbackClass',\n 'fallbackOnBody',\n 'fallbackTolerance',\n 'fallbackOffset',\n 'filter',\n 'forceFallback',\n 'ghostClass',\n 'group',\n 'handle',\n 'ignore',\n 'invertSwap',\n 'invertedSwapThreshold',\n 'preventOnFilter',\n 'removeCloneOnHide',\n 'sort',\n 'swapThreshold',\n 'touchStartThreshold',\n]\n\ninterface SortableBridgeInternals {\n wrapperRef: Ref<HTMLElement | null | undefined>\n sortableProps: ComputedRef<RawSortableOptions>\n mountAbortController: AbortController | undefined\n watchStopHandles: Set<WatchStopHandle>\n modelValue: Ref<any[]>\n renderable: ComputedRef<any[]>\n}\n\nexport class SortableBridge {\n instance: SortableInstance | undefined\n isRemounting: boolean\n\n constructor(\n wrapperRef: Ref<HTMLElement | null | undefined>,\n sortableProps: ComputedRef<RawSortableOptions>,\n modelValue: Ref<any[]>,\n renderable: ComputedRef<any[]>\n ) {\n this.isRemounting = false\n const internals: SortableBridgeInternals = {\n wrapperRef,\n sortableProps,\n mountAbortController: undefined,\n watchStopHandles: new Set(),\n modelValue,\n renderable,\n }\n Object.defineProperties(this, {\n $wrapperRef: {\n get: () => wrapperRef,\n enumerable: false,\n configurable: false,\n },\n $sortableProps: {\n get: () => sortableProps,\n enumerable: false,\n configurable: false,\n },\n $mountAbortController: {\n get: () => internals.mountAbortController,\n set: (value) => {\n internals.mountAbortController = value\n },\n enumerable: false,\n configurable: false,\n },\n $watchStopHandles: {\n get: () => internals.watchStopHandles,\n enumerable: false,\n configurable: false,\n },\n $modelValue: {\n get: () => modelValue,\n enumerable: false,\n configurable: false,\n },\n $renderable: {\n get: () => renderable,\n enumerable: false,\n configurable: false,\n },\n sort: {\n value: debounce(() => {\n if (\n !this.instance ||\n !this.$wrapperRef.value ||\n !this.$sortableProps.value ||\n !this.$renderable.value\n )\n return\n const sortedRaw = Array.from(this.$modelValue.value)\n const ordered = sortedRaw.map((v) => encode(v))\n this.instance.sort(ordered, false)\n }, 100),\n },\n })\n return shallowReactive(this)\n }\n\n init() {\n this.$watchStopHandles.add(\n watch(\n this.$sortableProps,\n (is, was) => {\n if (!this.instance) return\n const changedKeys = was\n ? Object.keys(diff(toRaw(was), toRaw(is)))\n : Object.keys(toRaw(is))\n const updatable = changedKeys.filter((k) => WATCHED_REACTIVE_OPTIONS.includes(k))\n updatable.forEach((k) => {\n if (!this.instance) return\n const v = toRaw(is)[k as keyof RawSortableOptions]\n this.instance.option(k as keyof RawSortableOptions, v)\n })\n },\n { deep: true, immediate: true }\n )\n )\n this.$watchStopHandles.add(\n watch(\n this.$modelValue,\n (is, was) => {\n // if there is no instance, there is nothing to do\n if (!this.instance) return\n // if the number of items has been changed, the \"renderable\" watcher will handle the update\n if (!toRaw(was) || toRaw(is).length !== toRaw(was || []).length) return\n const newOrder = Array.from(is).map((v) => encode(v))\n this.instance.sort(newOrder, false)\n },\n { deep: true, immediate: true }\n )\n )\n this.$watchStopHandles.add(\n watch(\n this.$renderable,\n (is, was) => {\n if (encode(toRaw(is)) === encode(toRaw(was || []))) return\n this.remount().then(() => {\n if (\n !this.instance ||\n (this.$mountAbortController && this.$mountAbortController.signal.aborted)\n )\n return\n const newOrder = toRaw(is).map((v) => encode(v))\n this.instance.sort(newOrder, false)\n })\n },\n { deep: true, immediate: true }\n )\n )\n this.$watchStopHandles.add(\n watch(\n this.$wrapperRef,\n (is) => {\n if (is) {\n this.mount()\n } else {\n if (this.$mountAbortController) {\n this.$mountAbortController.abort()\n }\n this.unmount()\n }\n },\n { immediate: true }\n )\n )\n if (this.$wrapperRef.value) {\n this.mount()\n }\n }\n\n declare private $wrapperRef: Ref<HTMLElement | null | undefined>\n declare private $sortableProps: ComputedRef<RawSortableOptions>\n declare private $mountAbortController: AbortController | undefined\n declare private $watchStopHandles: Set<WatchStopHandle>\n declare private $modelValue: Ref<any[]>\n declare private $renderable: ComputedRef<any[]>\n declare sort: () => void\n\n async mount() {\n if (this.instance) return\n if (!this.$wrapperRef.value) return\n if (!this.$sortableProps.value) return\n if (this.$mountAbortController) {\n this.$mountAbortController.abort()\n }\n this.$mountAbortController = new AbortController()\n await nextTick()\n if (!this.$wrapperRef.value) return\n if (!this.$sortableProps.value) return\n if (this.$mountAbortController.signal.aborted) return\n this.instance = new SortableJS(toRaw(this.$wrapperRef.value), toRaw(this.$sortableProps.value))\n await nextTick()\n this.sort()\n }\n\n async unmount() {\n if (!this.instance) return\n this.instance.destroy()\n this.instance = undefined\n }\n\n async remount(callback?: () => any | Promise<any>) {\n if (this.$mountAbortController) {\n this.$mountAbortController.abort()\n }\n await this.unmount()\n this.isRemounting = true\n if (this.$wrapperRef.value) {\n Array.from(this.$wrapperRef.value.children).forEach((child) => {\n child.remove()\n })\n }\n if (callback) {\n await callback()\n }\n await nextTick()\n this.isRemounting = false\n await this.mount()\n }\n\n moveUpByIndex(index: number) {\n if (!this.instance || this.$sortableProps.value.disabled || index <= 0) return\n const updated = this.instance.toArray()\n if (!updated || !updated[index]) return\n const itemToMoveDown = updated[index - 1]\n const itemToMoveUp = updated[index]\n updated.splice(index - 1, 2, itemToMoveUp, itemToMoveDown)\n this.instance.sort(updated, true)\n this.instance.save()\n }\n\n moveDownByIndex(index: number) {\n if (\n !this.instance ||\n this.$sortableProps.value.disabled ||\n index >= this.$modelValue.value.length - 1\n )\n return\n const updated = this.instance.toArray()\n if (!updated || !updated[index]) return\n const itemToMoveDown = updated[index]\n const itemToMoveUp = updated[index + 1]\n updated.splice(index, 2, itemToMoveUp, itemToMoveDown)\n this.instance.sort(updated, true)\n this.instance.save()\n }\n\n moveUpByItem(item: any) {\n if (!this.instance || this.$sortableProps.value.disabled) return\n const index = this.$modelValue.value.indexOf(item)\n return this.moveUpByIndex(index)\n }\n\n moveDownByItem(item: any) {\n if (!this.instance || this.$sortableProps.value.disabled) return\n const index = this.$modelValue.value.indexOf(item)\n return this.moveDownByIndex(index)\n }\n\n destroy() {\n this.unmount()\n this.$watchStopHandles.forEach((stop) => {\n stop()\n this.$watchStopHandles.delete(stop)\n })\n }\n}\n","import { ref, computed } from 'vue'\nimport { deepmerge } from 'deepmerge-ts'\nimport type { Ref } from 'vue'\nimport type { RenderableProps } from './props'\n\nexport const useSortableWrapperRef = (props: Ref<RenderableProps>) => {\n const wrapperRef = ref<HTMLElement | null>()\n const wrapperBindings = computed(() =>\n deepmerge(props.value, {\n ref: (val: any) => {\n wrapperRef.value =\n val && val.$el ? (val.$el as HTMLElement | null) : (val as HTMLElement | null)\n },\n })\n )\n return { wrapperRef, wrapperBindings }\n}\n","import { deepmerge } from 'deepmerge-ts'\nimport { computed, toRaw, watch, ref } from 'vue'\nimport { encode, decode } from '@nhtio/lucid-resourceful/encoding'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { getDefaultsForPropFactory, stripUndefinedValuesFromObject } from '../common/utils'\nimport type { default as Sortable } from 'sortablejs'\nimport type {\n h,\n ExtractPublicPropTypes,\n ExtractPropTypes,\n PropType,\n StyleValue,\n ToRefs,\n WritableComputedRef,\n} from 'vue'\n\n/**\n * Type alias for the raw, unmodified SortableJS options interface.\n * This represents the complete SortableJS options as provided by the library,\n * including all event handlers and internal options that may conflict with Vue.\n *\n * Use this type when you need access to the original SortableJS interface,\n * such as when creating SortableJS instances directly or for type compatibility\n * with third-party libraries that expect the raw SortableJS types.\n *\n * @example\n * ```typescript\n * // When creating a SortableJS instance directly\n * const rawOptions: RawSortableOptions = {\n * animation: 150,\n * onStart: (evt) => console.log('Started dragging'),\n * onEnd: (evt) => console.log('Finished dragging')\n * }\n * const sortable = Sortable.create(element, rawOptions)\n *\n * // For type compatibility with SortableJS utilities\n * function processSortableConfig(options: RawSortableOptions) {\n * // Handle raw SortableJS configuration\n * }\n * ```\n */\nexport type RawSortableOptions = Sortable.SortableOptions\n\n/**\n * Options that are excluded from the sortable props to prevent conflicts with Vue's event system\n * and internal SortableJS functionality.\n */\ntype SortableExcludedOptions = `on${string}` | 'store' | 'setData' | 'draggable'\n\n/**\n * Combined SortableJS options from the core library, excluding Vue-incompatible options.\n * This type ensures type safety while maintaining compatibility with Vue's prop system\n * by removing event handlers and internal options that would conflict with Vue's reactivity.\n *\n * Note: Plugin options (MultiDrag, Swap, OnSpill) have been excluded for compatibility reasons.\n */\nexport type SortableOptions = Omit<Sortable.SortableOptions, SortableExcludedOptions>\n\n/**\n * Valid Vue render function component types (string, component, or function).\n */\nexport type Renderable = NonNullable<Parameters<typeof h>[0]>\n\n/**\n * Props that can be passed to the rendered component element.\n */\nexport type RenderableProps = Record<string, any> & {\n class?: any\n style?: StyleValue\n}\n\nexport type SortableEvent = Sortable.SortableEvent\n\nexport type SortableMoveEvent = Sortable.MoveEvent\n\n/**\n * Type definition for all sortable prop definitions including SortableJS options\n * and Vue-specific rendering props.\n */\ntype SortablePropDefinitions = {\n [K in keyof SortableOptions]: {\n type: PropType<SortableOptions[K]>\n default: SortableOptions[K] | undefined\n }\n} & {\n /** The reactive array of items to be sorted */\n modelValue: {\n type: PropType<Array<any>>\n default: () => []\n }\n /** The HTML tag or Vue component to render as the sortable container */\n tag: {\n type: PropType<Renderable>\n default: 'ul'\n }\n /** Props to pass to the rendered tag/component */\n tagProps: {\n type: PropType<RenderableProps>\n default: () => {}\n }\n tagSlot: {\n type: PropType<string>\n default: 'default'\n }\n /** The HTML tag or Vue component to render as the sortable item */\n itemTag: {\n type: PropType<Renderable>\n default: 'li'\n }\n /** Props to pass to the rendered item tag/component */\n itemTagProps: {\n type: PropType<RenderableProps>\n default: () => {}\n }\n} & {\n 'onUpdate:modelValue': {\n type: PropType<((value: Array<any>) => void) | undefined>\n default: undefined\n }\n 'onError': {\n type: PropType<((error: unknown) => void) | undefined>\n default: undefined\n }\n // 'onError:setData': {\n // type: PropType<((error: unknown) => void) | undefined>\n // default: undefined\n // }\n 'onSortableChoose': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableUnchoose': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableStart': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableEnd': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableAdd': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableUpdate': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableSort': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableRemove': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableFilter': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableMove': {\n type: PropType<((evt: SortableMoveEvent, event: Event) => void) | undefined>\n default: undefined\n }\n 'onSortableClone': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableChange': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n}\n\nconst sortablePropDefinitions: SortablePropDefinitions = {\n /**\n * The reactive array of items that represents the current sort order.\n * This is the v-model binding for the component.\n * @default []\n */\n modelValue: {\n type: Array as PropType<Array<any>>,\n default: () => [],\n },\n /**\n * The HTML tag or Vue component to render as the sortable container.\n * @default 'div'\n * @example 'ul', 'ol', 'div', MyCustomComponent\n */\n tag: {\n type: [String, Object, Function] as PropType<Renderable>,\n default: 'ul',\n },\n /**\n * Props to pass to the rendered tag/component.\n * Useful for adding classes, styles, or other attributes.\n * @default {}\n * @example { class: 'my-sortable-list', style: { minHeight: '100px' } }\n */\n tagProps: {\n type: Object as PropType<RenderableProps>,\n default: () => ({}),\n },\n tagSlot: {\n type: String as PropType<string>,\n default: 'default',\n },\n /**\n * The HTML tag or Vue component to render as each sortable item.\n * @default 'li'\n * @example 'li', 'div', 'tr', MyCustomItemComponent\n */\n itemTag: {\n type: [String, Object, Function] as PropType<Renderable>,\n default: 'li',\n },\n /**\n * Props to pass to each rendered item tag/component.\n * Useful for adding classes, styles, or other attributes to individual items.\n * @default {}\n * @example { class: 'sortable-item', 'data-testid': 'item' }\n */\n itemTagProps: {\n type: Object as PropType<RenderableProps>,\n default: () => ({}),\n },\n /**\n * Animation speed in milliseconds when moving items during sorting.\n * Set to 0 to disable animations.\n * @default undefined\n * @example 150, 300, 0\n */\n animation: {\n type: Number as PropType<SortableOptions['animation']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the chosen (actively dragged) item.\n * @default undefined\n * @example 'sortable-chosen', 'active-item'\n */\n chosenClass: {\n type: String as PropType<SortableOptions['chosenClass']>,\n default: undefined,\n },\n /**\n * Time in milliseconds to define when the sorting should start.\n * Unfortunately, due to browser restrictions, delaying is not possible on IE or Edge with native drag & drop.\n * @default undefined\n * @example 500, 1000\n */\n delay: {\n type: Number as PropType<SortableOptions['delay']>,\n default: undefined,\n },\n /**\n * Whether the delay should be applied only if the user is using touch (e.g., on mobile devices).\n * No delay will be applied in any other case.\n * @default undefined\n */\n delayOnTouchOnly: {\n type: Boolean as PropType<SortableOptions['delayOnTouchOnly']>,\n default: undefined,\n },\n /**\n * Direction of the sortable. Can be 'vertical', 'horizontal', or a function that returns the direction.\n * Will be detected automatically if not specified.\n * @default undefined\n * @example 'vertical', 'horizontal'\n */\n direction: {\n type: [String, Function] as PropType<SortableOptions['direction']>,\n default: undefined,\n },\n /**\n * Disables the sortable if set to true.\n * @default undefined\n */\n disabled: {\n type: Boolean as PropType<SortableOptions['disabled']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the item being dragged.\n * @default undefined\n * @example 'sortable-drag', 'dragging'\n */\n dragClass: {\n type: String as PropType<SortableOptions['dragClass']>,\n default: undefined,\n },\n /**\n * Whether the dragover event should bubble to parent sortables.\n * @default undefined\n */\n dragoverBubble: {\n type: Boolean as PropType<SortableOptions['dragoverBubble']>,\n default: undefined,\n },\n /**\n * Whether the drop event should bubble.\n * @default undefined\n */\n dropBubble: {\n type: Boolean as PropType<SortableOptions['dropBubble']>,\n default: undefined,\n },\n /**\n * Distance in pixels the mouse must be from an empty sortable while dragging\n * for the drag element to be inserted into that sortable.\n * @default undefined\n * @example 5, 10, 0\n */\n emptyInsertThreshold: {\n type: Number as PropType<SortableOptions['emptyInsertThreshold']>,\n default: undefined,\n },\n /**\n * CSS animation easing function for sorting animations.\n * @default undefined\n * @example 'ease', 'ease-in-out', 'cubic-bezier(0.68, -0.55, 0.265, 1.55)'\n */\n easing: {\n type: String as PropType<SortableOptions['easing']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the cloned DOM element when using forceFallback.\n * @default undefined\n * @example 'sortable-fallback', 'dragging-fallback'\n */\n fallbackClass: {\n type: String as PropType<SortableOptions['fallbackClass']>,\n default: undefined,\n },\n /**\n * Whether to append the cloned DOM element to the document's body when using fallback.\n * @default undefined\n */\n fallbackOnBody: {\n type: Boolean as PropType<SortableOptions['fallbackOnBody']>,\n default: undefined,\n },\n /**\n * Specify in pixels how far the mouse should move before it's considered a drag.\n * Useful if items are also clickable (like links).\n * @default undefined\n * @example 3, 5, 10\n */\n fallbackTolerance: {\n type: Number as PropType<SortableOptions['fallbackTolerance']>,\n default: undefined,\n },\n /**\n * Offset for the fallback element position.\n * @default undefined\n * @example { x: 5, y: 5 }\n */\n fallbackOffset: {\n type: Object as PropType<SortableOptions['fallbackOffset']>,\n default: undefined,\n },\n /**\n * CSS selector or function to define elements that should not trigger dragging.\n * @default undefined\n * @example '.no-drag', '.button', (evt) => evt.target.tagName === 'BUTTON'\n */\n filter: {\n type: [String, Function] as PropType<SortableOptions['filter']>,\n default: undefined,\n },\n /**\n * Ignore HTML5 drag and drop behavior and force the fallback to kick in.\n * @default undefined\n */\n forceFallback: {\n type: Boolean as PropType<SortableOptions['forceFallback']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the drop placeholder (ghost element).\n * @default undefined\n * @example 'sortable-ghost', 'drop-placeholder'\n */\n ghostClass: {\n type: String as PropType<SortableOptions['ghostClass']>,\n default: undefined,\n },\n /**\n * Group configuration for dragging elements between lists.\n * Can be a string (group name) or an object with advanced options.\n * @default undefined\n * @example 'shared', { name: 'shared', pull: true, put: false }\n */\n group: {\n type: [String, Object] as PropType<SortableOptions['group']>,\n default: undefined,\n },\n /**\n * CSS selector for drag handles within list items.\n * Only elements matching this selector will initiate dragging.\n * @default undefined\n * @example '.drag-handle', '.grip'\n */\n handle: {\n type: String as PropType<SortableOptions['handle']>,\n default: undefined,\n },\n /**\n * CSS selector for elements to ignore during sorting.\n * @default undefined\n * @example '.ignore', 'input, textarea'\n */\n ignore: {\n type: String as PropType<SortableOptions['ignore']>,\n default: undefined,\n },\n /**\n * Always use inverted swap zone if set to true.\n * @default undefined\n */\n invertSwap: {\n type: Boolean as PropType<SortableOptions['invertSwap']>,\n default: undefined,\n },\n /**\n * Threshold of the inverted swap zone as a float between 0 and 1.\n * Will default to swapThreshold value if not specified.\n * @default undefined\n * @example 0.1, 0.5, 0.8\n */\n invertedSwapThreshold: {\n type: Number as PropType<SortableOptions['invertedSwapThreshold']>,\n default: undefined,\n },\n /**\n * Call `event.preventDefault()` when a filtered element is triggered.\n * @default undefined\n */\n preventOnFilter: {\n type: Boolean as PropType<SortableOptions['preventOnFilter']>,\n default: undefined,\n },\n /**\n * Remove the clone element when it's not showing, rather than just hiding it.\n * @default undefined\n */\n removeCloneOnHide: {\n type: Boolean as PropType<SortableOptions['removeCloneOnHide']>,\n default: undefined,\n },\n /**\n * Allow sorting inside the list.\n * @default undefined\n */\n sort: {\n type: Boolean as PropType<SortableOptions['sort']>,\n default: undefined,\n },\n /**\n * Percentage of the target that the swap zone will take up as a float between 0 and 1.\n * @default undefined\n * @example 0.65, 1, 0.5\n */\n swapThreshold: {\n type: Number as PropType<SortableOptions['swapThreshold']>,\n default: undefined,\n },\n /**\n * How many pixels the point should move before cancelling a delayed drag event.\n * @default undefined\n * @example 3, 5\n */\n touchStartThreshold: {\n type: Number as PropType<SortableOptions['touchStartThreshold']>,\n default: undefined,\n },\n // Vue Event Handlers\n ...{\n /**\n * Callback fired when the model value changes (v-model update).\n * This is the primary way to respond to sorting changes in the component.\n * @default undefined\n * @example (newValue) => { console.log('New order:', newValue) }\n */\n 'onUpdate:modelValue': {\n type: Function as PropType<((value: Array<any>) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when any error occurs during sortable operations.\n * This is a general error handler that catches errors from various sortable operations.\n * @default undefined\n * @example (error) => { console.error('Sortable error:', error) }\n */\n 'onError': {\n type: Function as PropType<((error: unknown) => void) | undefined>,\n default: undefined,\n },\n // /**\n // * Callback fired when an error occurs specifically during the setData operation.\n // * This handler is called when encoding or serializing drag data fails.\n // * @default undefined\n // * @example (error) => { console.error('SetData error:', error); fallbackToSimpleDrag() }\n // */\n // 'onError:setData': {\n // type: Function as PropType<((error: unknown) => void) | undefined>,\n // default: undefined,\n // },\n /**\n * Callback fired when an element is chosen for dragging.\n * This event occurs when a user starts selecting an item for drag operation.\n * @default undefined\n * @example (evt) => { console.log('Item chosen:', evt.item) }\n */\n 'onSortableChoose': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is unchosen (deselected).\n * This event occurs when a previously chosen item is deselected.\n * @default undefined\n * @example (evt) => { console.log('Item unchosen:', evt.item) }\n */\n 'onSortableUnchoose': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when dragging starts.\n * This is the beginning of a drag operation after the delay period (if any).\n * @default undefined\n * @example (evt) => { console.log('Drag started from index:', evt.oldIndex) }\n */\n 'onSortableStart': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when dragging ends.\n * This occurs when the user releases the dragged item, regardless of whether the position changed.\n * @default undefined\n * @example (evt) => { console.log('Drag ended at index:', evt.newIndex) }\n */\n 'onSortableEnd': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n 'onSortableAdd': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when the list order is updated within the same sortable.\n * This event only fires for internal reordering, not for items moved between lists.\n * @default undefined\n * @example (evt) => { console.log('Item moved from', evt.oldIndex, 'to', evt.newIndex) }\n */\n 'onSortableUpdate': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when any sorting operation occurs (internal reordering or between lists).\n * This is a more general event that fires for all sorting changes.\n * @default undefined\n * @example (evt) => { console.log('Sort operation occurred:', evt) }\n */\n 'onSortableSort': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is removed from the current list.\n * This occurs when an item is dragged out to another sortable list.\n * @default undefined\n * @example (evt) => { console.log('Item removed from index:', evt.oldIndex) }\n */\n 'onSortableRemove': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when dragging is prevented due to the filter option.\n * This occurs when a user tries to drag an element that matches the filter criteria.\n * @default undefined\n * @example (evt) => { console.log('Drag filtered on element:', evt.item) }\n */\n 'onSortableFilter': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is moved during dragging.\n * This provides fine-grained control and can be used to prevent certain moves by returning false.\n * @default undefined\n * @example (evt) => { return evt.related.classList.contains('allowed-drop-zone') }\n */\n 'onSortableMove': {\n type: Function as PropType<((evt: SortableMoveEvent, event: Event) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is cloned during multi-list operations.\n * This occurs when moving items between lists that use clone mode.\n * @default undefined\n * @example (evt) => { console.log('Item cloned:', evt.clone) }\n */\n 'onSortableClone': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when any change occurs to the sortable list.\n * This is a catch-all event for monitoring any modifications to the list state.\n * @default undefined\n * @example (evt) => { console.log('List changed:', evt) }\n */\n 'onSortableChange': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n },\n}\n\n/**\n * Factory function to create sortable props with proper defaults and validation.\n * Integrates with the Vuetifiable props factory system for consistent prop handling.\n *\n * @returns A props factory function that generates Vue component props with proper typing\n */\nexport const makeSortableProps = propsFactory(sortablePropDefinitions, 'Sortable')\n\n/**\n * Type representing the public props interface for the Sortable component.\n * This type extracts only the publicly available props from the props factory,\n * excluding any internal or private props marked with special flags.\n *\n * Use this type when you need to:\n * - Type component props in parent components\n * - Create prop interfaces for composition\n * - Validate prop types in TypeScript\n * - Generate documentation for component APIs\n *\n * @example\n * ```typescript\n * // Using in a parent component\n * const sortableProps: Partial<SortableProps> = {\n * modelValue: items,\n * animation: 150,\n * ghostClass: 'sortable-ghost'\n * }\n *\n * // Type checking function parameters\n * function configureSortable(props: SortableProps) {\n * // props are fully typed with intellisense\n * }\n *\n * // Extending for custom wrapper components\n * interface MySortableProps extends SortableProps {\n * customFeature?: boolean\n * }\n * ```\n */\nexport type SortableProps = ExtractPublicPropTypes<ReturnType<typeof makeSortableProps>>\n\n/**\n * Pre-computed default values for all sortable props that have defaults.\n * This provides runtime access to default values for component initialization and testing.\n *\n * @example\n * ```typescript\n * console.log(sortablePropDefaults.modelValue) // []\n * console.log(sortablePropDefaults.tag) // 'ul'\n * console.log(sortablePropDefaults.itemTag) // 'li'\n * ```\n */\nexport const sortablePropDefaults = getDefaultsForPropFactory(makeSortableProps)\n\n/**\n * Type alias for the SortableJS constructor.\n * Useful for type annotations when working with the SortableJS instance directly.\n *\n * @example\n * ```typescript\n * const sortableInstance: InstanceType<SortableCtor> = Sortable.create(element, options)\n * ```\n */\nexport type SortableCtor = typeof Sortable\n\n/**\n * Type representing an instance of a SortableJS sortable list.\n * This type provides access to all SortableJS instance methods and properties\n * for programmatic control of the sortable behavior.\n *\n * @example\n * ```typescript\n * // Create a sortable instance\n * const sortable: SortableInstance = Sortable.create(element, options)\n *\n * // Use instance methods\n * sortable.destroy()\n * sortable.option('disabled', true)\n * const order = sortable.toArray()\n * ```\n */\nexport type SortableInstance = InstanceType<SortableCtor>\n\ntype SortableSetupProps = ExtractPropTypes<ReturnType<typeof makeSortableProps>>\n\nexport const useSortableProps = (\n props: ToRefs<SortableSetupProps>,\n value: WritableComputedRef<any[], any[]>\n) => {\n const {\n // modelValue,\n // tag,\n // tagProps,\n // tagSlot,\n // itemTag,\n // itemTagProps,\n animation,\n chosenClass,\n delay,\n delayOnTouchOnly,\n direction,\n disabled,\n dragClass,\n dragoverBubble,\n dropBubble,\n emptyInsertThreshold,\n easing,\n fallbackClass,\n fallbackOnBody,\n fallbackTolerance,\n fallbackOffset,\n filter,\n forceFallback,\n ghostClass,\n group,\n handle,\n ignore,\n invertSwap,\n invertedSwapThreshold,\n preventOnFilter,\n removeCloneOnHide,\n sort,\n swapThreshold,\n touchStartThreshold,\n // onSortableChoose,\n // onSortableUnchoose,\n // onSortableStart,\n // onSortableEnd,\n // onSortableAdd,\n // onSortableUpdate,\n // onSortableSort,\n // onSortableRemove,\n // onSortableFilter,\n // onSortableMove,\n // onSortableClone,\n // onSortableChange,\n } = props\n\n const internalRenderableCache = ref<string[]>([])\n const updateInternalRenderableCache = () => {\n internalRenderableCache.value = Array.from(value.value)\n .map((v: any) => encode(v))\n .sort()\n }\n watch(value, updateInternalRenderableCache, { deep: true, immediate: true })\n\n const renderable = computed(() => internalRenderableCache.value)\n const sortableStoreGet = () => toRaw(value.value).map((v) => encode(v))\n const sortableStoreSet = (sortable: SortableInstance) => {\n const decoded = sortable.toArray().map((v) => decode(v))\n value.value = decoded\n }\n const computedSortableProps = computed<RawSortableOptions>(() =>\n stripUndefinedValuesFromObject({\n animation: animation.value,\n chosenClass: chosenClass.value,\n delay: delay.value,\n delayOnTouchOnly: delayOnTouchOnly.value,\n direction: direction.value,\n disabled: disabled.value,\n dragClass: dragClass.value,\n dragoverBubble: dragoverBubble.value,\n dropBubble: dropBubble.value,\n emptyInsertThreshold: emptyInsertThreshold.value,\n easing: easing.value,\n fallbackClass: fallbackClass.value,\n fallbackOnBody: fallbackOnBody.value,\n fallbackTolerance: fallbackTolerance.value,\n fallbackOffset: fallbackOffset.value,\n filter: filter.value,\n forceFallback: forceFallback.value,\n ghostClass: ghostClass.value,\n group: group.value,\n handle: handle.value,\n ignore: ignore.value || '',\n invertSwap: invertSwap.value,\n invertedSwapThreshold: invertedSwapThreshold.value,\n preventOnFilter: preventOnFilter.value,\n removeCloneOnHide: removeCloneOnHide.value,\n sort: sort.value,\n swapThreshold: swapThreshold.value,\n touchStartThreshold: touchStartThreshold.value,\n })\n )\n const sortableStaticProps: RawSortableOptions = {\n dataIdAttr: 'data-sortable',\n draggable: '[data-sortable]',\n store: {\n get: () => sortableStoreGet(),\n set: (sortable: SortableInstance) => sortableStoreSet(sortable),\n },\n }\n const sortableProps = computed<RawSortableOptions>(() =>\n deepmerge(computedSortableProps.value, sortableStaticProps)\n )\n return {\n renderable,\n sortableProps,\n forceUpdate: updateInternalRenderableCache,\n }\n}\n","import { SortableItem } from './_item'\nimport { SortableBridge } from './_bridge'\nimport { useSortableWrapperRef } from './_wrapper'\nimport { emitsFactory } from '../common/factories'\nimport { encode } from '@nhtio/lucid-resourceful/encoding'\nimport { makeSortableProps, useSortableProps } from './props'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport {\n defineComponent,\n h,\n ref,\n toRefs,\n computed,\n onMounted,\n onBeforeUnmount,\n toRaw,\n watch,\n nextTick,\n} from 'vue'\nimport type { SlotsType } from 'vue'\nimport type { SortableItemSlotBindings } from './_item'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\n\nexport type { SortableItemSlotBindings }\n\nexport interface SortableSlotBindings<T = any> {\n value: Readonly<Array<T>>\n wrapperEl: Readonly<HTMLElement | null | undefined>\n}\n\ntype SortableComponentSlots = SlotsType<{\n before: (props: SortableSlotBindings) => any\n after: (props: SortableSlotBindings) => any\n item: (props: SortableItemSlotBindings) => any\n}>\n\ntype SortableBusEventMap = EventMap<{\n 'update:modelValue': [val: Array<any>]\n}>\n\nexport const Sortable = defineComponent({\n // eslint-disable-next-line vue/multi-word-component-names\n name: 'Sortable',\n props: makeSortableProps(),\n emits: emitsFactory({\n 'update:modelValue': (value: Array<any>) => Array.isArray(value),\n 'update:model-value': (value: Array<any>) => Array.isArray(value),\n 'error': () => true,\n }),\n slots: Object as SortableComponentSlots,\n setup(props, { emit, slots }) {\n const bus = new TypedEventEmitter<SortableBusEventMap>()\n const referencedProps = toRefs(props)\n const { modelValue, tag, tagProps, tagSlot, itemTag, itemTagProps } = toRefs(props)\n const localModelValue = ref<Array<any>>(toRaw(modelValue.value))\n const doUpdateModelValue = (val: Array<any>) => {\n if (props['onUpdate:modelValue']) {\n props['onUpdate:modelValue'](val)\n }\n localModelValue.value = toRaw(val)\n emit('update:modelValue', val)\n emit('update:model-value', val)\n bus.emit('update:modelValue', val)\n }\n watch(\n modelValue,\n (val) => {\n localModelValue.value = toRaw(val)\n },\n { deep: true, immediate: true }\n )\n const value = computed({\n get: () => localModelValue.value,\n set: (val: Array<any>) => {\n if (encode(val) === encode(toRaw(localModelValue.value))) return\n doUpdateModelValue(val)\n },\n })\n const { renderable, sortableProps, forceUpdate } = useSortableProps(referencedProps, value)\n const { wrapperRef, wrapperBindings } = useSortableWrapperRef(tagProps as any)\n const slotBindings = computed<SortableSlotBindings>(() => ({\n value: toRaw(value.value),\n wrapperEl: toRaw(wrapperRef.value),\n }))\n bus.on('update:modelValue', () => nextTick().then(() => forceUpdate()))\n const bridge = new SortableBridge(wrapperRef, sortableProps, value, renderable)\n onMounted(() => {\n bridge.init()\n })\n onBeforeUnmount(() => {\n bridge.destroy()\n })\n return () => [\n slots.before ? slots.before(slotBindings.value) : null,\n h(tag.value, wrapperBindings.value, {\n [tagSlot.value]: () =>\n bridge.isRemounting\n ? []\n : renderable.value.map((i) =>\n h(\n SortableItem,\n {\n encoded: i,\n value: toRaw(value.value),\n wrapperEl: toRaw(wrapperRef.value),\n itemTag: itemTag.value,\n itemTagProps: itemTagProps.value,\n onMoveUp: (indx) => bridge.moveUpByIndex(indx),\n onMoveDown: (indx) => bridge.moveDownByIndex(indx),\n onRemove: (indx) => {\n const current = Array.from(toRaw(value.value))\n current.splice(indx, 1)\n doUpdateModelValue(current)\n },\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n stripUndefinedValuesFromObject({\n default: slots.item\n ? (itemProps: SortableItemSlotBindings) => slots.item!(itemProps)\n : undefined,\n })\n )\n ),\n }),\n slots.after ? slots.after(slotBindings.value) : null,\n ]\n },\n})\n"],"names":["indicator","i","cent","dec","require$$0","ordinal","ordinal_1","makeSortableItemProps","propsFactory","SortableItem","defineComponent","emitsFactory","index","item","props","emit","slots","value","wrapperEl","encoded","itemTag","itemTagProps","disabled","sortingDisabled","toRefs","computed","decode","toRaw","order","formatAsOrdinal","itemProps","remove","moveUp","moveDown","itemSlotBindings","deepmerge","itemTagBindings","h","isDate","d","isEmpty","o","isObject","hasOwnProperty","args","isEmptyObject","makeObjectWithoutPrototype","diff","lhs","rhs","deletedValues","acc","key","difference","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","source","_defineProperty","_typeof","obj","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","el","event","fn","off","matches","selector","getParentOrHost","closest","ctx","includeCTX","R_SPACE","toggleClass","name","state","className","css","prop","val","style","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","n","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","elRect","top","left","bottom","right","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","options","includeDragEl","currentChild","children","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","arr","includeSelf","elem","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","callback","ms","_this","cancelThrottle","scrollBy","x","y","clone","Polymer","$","getChildContainingRectFromElement","ghostEl","rect","child","_rect$left","_rect$top","_rect$right","_rect$bottom","childRect","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","duration","translateX","translateY","repaint","plugins","defaults","PluginManager","plugin","option","p","eventName","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","data","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","type","touch","originalTarget","filter","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","_generateId","useAnimation","items","id","store","willInsertAfter","onMoveFn","retVal","firstElRect","childContainingRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","element","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","WATCHED_REACTIVE_OPTIONS","SortableBridge","wrapperRef","sortableProps","modelValue","renderable","internals","debounce","ordered","v","encode","shallowReactive","watch","is","was","k","newOrder","nextTick","SortableJS","updated","itemToMoveDown","itemToMoveUp","stop","useSortableWrapperRef","ref","wrapperBindings","sortablePropDefinitions","makeSortableProps","getDefaultsForPropFactory","useSortableProps","animation","chosenClass","delay","delayOnTouchOnly","dragClass","dragoverBubble","dropBubble","emptyInsertThreshold","easing","fallbackClass","fallbackOnBody","forceFallback","ghostClass","handle","ignore","removeCloneOnHide","sort","touchStartThreshold","internalRenderableCache","updateInternalRenderableCache","sortableStoreGet","sortableStoreSet","decoded","computedSortableProps","stripUndefinedValuesFromObject","sortableStaticProps","bus","TypedEventEmitter","referencedProps","tag","tagProps","tagSlot","localModelValue","doUpdateModelValue","forceUpdate","slotBindings","bridge","onMounted","onBeforeUnmount","indx","current"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5]}
|
|
1
|
+
{"version":3,"file":"index-Bs4A8qUO.mjs","sources":["../node_modules/.pnpm/ordinal@1.0.3/node_modules/ordinal/indicator.js","../node_modules/.pnpm/ordinal@1.0.3/node_modules/ordinal/index.js","../src/private/sortable/_item.ts","../node_modules/.pnpm/deep-object-diff@1.1.9/node_modules/deep-object-diff/mjs/utils.js","../node_modules/.pnpm/deep-object-diff@1.1.9/node_modules/deep-object-diff/mjs/diff.js","../node_modules/.pnpm/sortablejs@1.15.6/node_modules/sortablejs/modular/sortable.esm.js","../src/private/sortable/_bridge.ts","../src/private/sortable/_wrapper.ts","../src/private/sortable/props.ts","../src/private/sortable/index.ts"],"sourcesContent":["module.exports = function indicator (i) {\n i = Math.abs(i)\n var cent = i % 100\n if (cent >= 10 && cent <= 20) return 'th'\n var dec = i % 10\n if (dec === 1) return 'st'\n if (dec === 2) return 'nd'\n if (dec === 3) return 'rd'\n return 'th'\n}\n","var indicator = require('./indicator')\n\nfunction ordinal (i) {\n if (typeof i !== 'number') throw new TypeError('Expected Number, got ' + (typeof i) + ' ' + i)\n\n if (!Number.isFinite(i)) return i\n return i + indicator(i)\n}\n\nordinal.indicator = indicator\nmodule.exports = ordinal\n","import { deepmerge } from 'deepmerge-ts'\nimport { emitsFactory } from '../common/factories'\nimport { default as formatAsOrdinal } from 'ordinal'\nimport { decode } from '@nhtio/lucid-resourceful/encoding'\nimport { computed, defineComponent, toRaw, toRefs, h } from 'vue'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport type { PropType, SlotsType } from 'vue'\nimport type { SortableSlotBindings } from './index'\nimport type { Renderable, RenderableProps } from './props'\n\nexport interface SortableItemSlotBindings<T = any> extends SortableSlotBindings<T> {\n item: T\n index: number\n order: number\n ordinal: string\n first: boolean\n last: boolean\n props: {\n 'data-sortable': Readonly<string>\n }\n remove: () => void\n moveUp: () => void\n moveDown: () => void\n disabled: boolean\n sortingDisabled: boolean\n}\n\nexport const makeSortableItemProps = propsFactory(\n {\n encoded: {\n type: String as PropType<string>,\n required: true,\n },\n value: {\n type: Array as PropType<any[]>,\n required: true,\n },\n wrapperEl: {\n type: Object as PropType<HTMLElement | null | undefined>,\n default: undefined,\n },\n itemTag: {\n type: [String, Object, Function] as PropType<Renderable>,\n default: 'li',\n },\n itemTagProps: {\n type: Object as PropType<RenderableProps>,\n default: () => ({}),\n },\n onRemove: {\n type: Function as PropType<((index: number, item: any) => void) | undefined>,\n default: undefined,\n },\n onMoveUp: {\n type: Function as PropType<((index: number, item: any) => void) | undefined>,\n default: undefined,\n },\n onMoveDown: {\n type: Function as PropType<((index: number, item: any) => void) | undefined>,\n default: undefined,\n },\n disabled: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n sortingDisabled: {\n type: Boolean as PropType<boolean>,\n default: false,\n },\n },\n 'SortableItem'\n)\n\ntype SortableItemSlots = SlotsType<{\n default: (props: SortableItemSlotBindings) => any\n}>\n\nexport const SortableItem = defineComponent({\n name: 'SortableItem',\n props: makeSortableItemProps(),\n emits: emitsFactory({\n remove: (index: number, item: any) => index >= 0 && item !== undefined,\n moveUp: (index: number, item: any) => index >= 0 && item !== undefined,\n moveDown: (index: number, item: any) => index >= 0 && item !== undefined,\n }),\n slots: Object as SortableItemSlots,\n setup(props, { emit, slots }) {\n const { value, wrapperEl, encoded, itemTag, itemTagProps, disabled, sortingDisabled } =\n toRefs(props)\n const item = computed(() => decode(toRaw(encoded.value)))\n const index = computed(() => toRaw(value.value).indexOf(toRaw(item.value)))\n const order = computed(() => index.value + 1)\n const ordinal = computed(() => formatAsOrdinal(order.value))\n const itemProps = computed(() => ({\n 'data-sortable': toRaw(encoded.value),\n }))\n const remove = () => {\n if (disabled.value) return\n if (props.onRemove) {\n props.onRemove(index.value, toRaw(item.value))\n } else {\n emit('remove', index.value, toRaw(item.value))\n }\n }\n const moveUp = () => {\n if (disabled.value || sortingDisabled.value) return\n if (props.onMoveUp) {\n props.onMoveUp(index.value, toRaw(item.value))\n } else {\n emit('moveUp', index.value, toRaw(item.value))\n }\n }\n const moveDown = () => {\n if (disabled.value || sortingDisabled.value) return\n if (props.onMoveDown) {\n props.onMoveDown(index.value, toRaw(item.value))\n } else {\n emit('moveDown', index.value, toRaw(item.value))\n }\n }\n const itemSlotBindings = computed(() =>\n deepmerge(\n {\n props: itemProps.value,\n },\n {\n value: toRaw(value.value),\n wrapperEl: toRaw(wrapperEl.value),\n },\n {\n item: toRaw(item.value),\n index: toRaw(index.value),\n first: index.value === 0,\n last: index.value === toRaw(value.value).length - 1,\n order: toRaw(order.value),\n ordinal: toRaw(ordinal.value),\n remove,\n moveUp,\n moveDown,\n disabled: toRaw(disabled.value),\n sortingDisabled: toRaw(sortingDisabled.value),\n }\n )\n )\n const itemTagBindings = computed(() => deepmerge(itemTagProps.value, itemProps.value))\n return () =>\n slots.default\n ? slots.default(itemSlotBindings.value)\n : h(itemTag.value, itemTagBindings.value)\n },\n})\n","export const isDate = d => d instanceof Date;\nexport const isEmpty = o => Object.keys(o).length === 0;\nexport const isObject = o => o != null && typeof o === 'object';\nexport const hasOwnProperty = (o, ...args) => Object.prototype.hasOwnProperty.call(o, ...args)\nexport const isEmptyObject = (o) => isObject(o) && isEmpty(o);\nexport const makeObjectWithoutPrototype = () => Object.create(null);\n","import { isDate, isEmptyObject, isObject, hasOwnProperty, makeObjectWithoutPrototype } from './utils.js';\n\nconst diff = (lhs, rhs) => {\n if (lhs === rhs) return {}; // equal return no diff\n\n if (!isObject(lhs) || !isObject(rhs)) return rhs; // return updated rhs\n\n const deletedValues = Object.keys(lhs).reduce((acc, key) => {\n if (!hasOwnProperty(rhs, key)) {\n acc[key] = undefined;\n \n }\n\n return acc;\n }, makeObjectWithoutPrototype());\n\n if (isDate(lhs) || isDate(rhs)) {\n if (lhs.valueOf() == rhs.valueOf()) return {};\n return rhs;\n }\n\n return Object.keys(rhs).reduce((acc, key) => {\n if (!hasOwnProperty(lhs, key)){\n acc[key] = rhs[key]; // return added r key\n return acc;\n } \n\n const difference = diff(lhs[key], rhs[key]);\n\n // If the difference is empty, and the lhs is an empty object or the rhs is not an empty object\n if (isEmptyObject(difference) && !isDate(difference) && (isEmptyObject(lhs[key]) || !isEmptyObject(rhs[key])))\n return acc; // return no diff\n\n acc[key] = difference // return updated key\n return acc; // return updated key\n }, deletedValues);\n};\n\nexport default diff;\n","/**!\n * Sortable 1.15.6\n * @author\tRubaXa <trash@rubaxa.org>\n * @author\towenm <owen23355@gmail.com>\n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.6\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n // Disabled on Safari: #1571; Enabled on Safari IOS: #2244\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && (!Safari || IOS),\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._onDrop);\n // Native D&D triggers pointercancel\n !this.nativeDraggable && on(ownerDocument, 'pointercancel', _this._onDrop);\n } else {\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n }\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n if (options.supportPointer) {\n on(ownerDocument, 'pointerup', _this._disableDelayedDrag);\n on(ownerDocument, 'pointercancel', _this._disableDelayedDrag);\n } else {\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n }\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'pointerup', this._disableDelayedDrag);\n off(ownerDocument, 'pointercancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n window.getSelection().removeAllRanges();\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'pointercancel', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n (function () {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n var filter = options.filter;\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n // Check if element is draggable\n if (!closest(children[i], options.draggable, parentEl, false)) continue;\n // Check if element is filtered\n var filtered = filter && (typeof filter === 'function' ? filter.call(sortable, evt, children[i], sortable) : filter.split(',').some(function (criteria) {\n return closest(children[i], criteria.trim(), parentEl, false);\n }));\n if (filtered) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n })();\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","import { diff } from 'deep-object-diff'\nimport { default as SortableJS } from 'sortablejs'\nimport { encode } from '@nhtio/lucid-resourceful/encoding'\nimport { debounce } from '@nhtio/vuetifiable/util/helpers'\nimport { shallowReactive, watch, nextTick, toRaw } from 'vue'\nimport type { Ref, ComputedRef, WatchStopHandle } from 'vue'\nimport type { SortableInstance, RawSortableOptions } from './props'\n\nconst WATCHED_REACTIVE_OPTIONS = [\n 'animation',\n 'chosenClass',\n 'delay',\n 'delayOnTouchOnly',\n 'direction',\n 'disabled',\n 'dragClass',\n 'dragoverBubble',\n 'dropBubble',\n 'emptyInsertThreshold',\n 'easing',\n 'fallbackClass',\n 'fallbackOnBody',\n 'fallbackTolerance',\n 'fallbackOffset',\n 'filter',\n 'forceFallback',\n 'ghostClass',\n 'group',\n 'handle',\n 'ignore',\n 'invertSwap',\n 'invertedSwapThreshold',\n 'preventOnFilter',\n 'removeCloneOnHide',\n 'sort',\n 'swapThreshold',\n 'touchStartThreshold',\n]\n\ninterface SortableBridgeInternals {\n wrapperRef: Ref<HTMLElement | null | undefined>\n sortableProps: ComputedRef<RawSortableOptions>\n mountAbortController: AbortController | undefined\n watchStopHandles: Set<WatchStopHandle>\n modelValue: Ref<any[]>\n renderable: ComputedRef<any[]>\n}\n\nexport class SortableBridge {\n instance: SortableInstance | undefined\n isRemounting: boolean\n\n constructor(\n wrapperRef: Ref<HTMLElement | null | undefined>,\n sortableProps: ComputedRef<RawSortableOptions>,\n modelValue: Ref<any[]>,\n renderable: ComputedRef<any[]>\n ) {\n this.isRemounting = false\n const internals: SortableBridgeInternals = {\n wrapperRef,\n sortableProps,\n mountAbortController: undefined,\n watchStopHandles: new Set(),\n modelValue,\n renderable,\n }\n Object.defineProperties(this, {\n $wrapperRef: {\n get: () => wrapperRef,\n enumerable: false,\n configurable: false,\n },\n $sortableProps: {\n get: () => sortableProps,\n enumerable: false,\n configurable: false,\n },\n $mountAbortController: {\n get: () => internals.mountAbortController,\n set: (value) => {\n internals.mountAbortController = value\n },\n enumerable: false,\n configurable: false,\n },\n $watchStopHandles: {\n get: () => internals.watchStopHandles,\n enumerable: false,\n configurable: false,\n },\n $modelValue: {\n get: () => modelValue,\n enumerable: false,\n configurable: false,\n },\n $renderable: {\n get: () => renderable,\n enumerable: false,\n configurable: false,\n },\n sort: {\n value: debounce(() => {\n if (\n !this.instance ||\n !this.$wrapperRef.value ||\n !this.$sortableProps.value ||\n !this.$renderable.value\n )\n return\n const sortedRaw = Array.from(this.$modelValue.value)\n const ordered = sortedRaw.map((v) => encode(v))\n this.instance.sort(ordered, false)\n }, 100),\n },\n })\n return shallowReactive(this)\n }\n\n init() {\n this.$watchStopHandles.add(\n watch(\n this.$sortableProps,\n (is, was) => {\n if (!this.instance) return\n const changedKeys = was\n ? Object.keys(diff(toRaw(was), toRaw(is)))\n : Object.keys(toRaw(is))\n const updatable = changedKeys.filter((k) => WATCHED_REACTIVE_OPTIONS.includes(k))\n updatable.forEach((k) => {\n if (!this.instance) return\n const v = toRaw(is)[k as keyof RawSortableOptions]\n this.instance.option(k as keyof RawSortableOptions, v)\n })\n },\n { deep: true, immediate: true }\n )\n )\n this.$watchStopHandles.add(\n watch(\n this.$modelValue,\n (is, was) => {\n // if there is no instance, there is nothing to do\n if (!this.instance) return\n // if the number of items has been changed, the \"renderable\" watcher will handle the update\n if (!toRaw(was) || toRaw(is).length !== toRaw(was || []).length) return\n const newOrder = Array.from(is).map((v) => encode(v))\n this.instance.sort(newOrder, false)\n },\n { deep: true, immediate: true }\n )\n )\n this.$watchStopHandles.add(\n watch(\n this.$renderable,\n (is, was) => {\n if (encode(toRaw(is)) === encode(toRaw(was || []))) return\n this.remount().then(() => {\n if (\n !this.instance ||\n (this.$mountAbortController && this.$mountAbortController.signal.aborted)\n )\n return\n const newOrder = toRaw(is).map((v) => encode(v))\n this.instance.sort(newOrder, false)\n })\n },\n { deep: true, immediate: true }\n )\n )\n this.$watchStopHandles.add(\n watch(\n this.$wrapperRef,\n (is) => {\n if (is) {\n this.mount()\n } else {\n if (this.$mountAbortController) {\n this.$mountAbortController.abort()\n }\n this.unmount()\n }\n },\n { immediate: true }\n )\n )\n if (this.$wrapperRef.value) {\n this.mount()\n }\n }\n\n declare private $wrapperRef: Ref<HTMLElement | null | undefined>\n declare private $sortableProps: ComputedRef<RawSortableOptions>\n declare private $mountAbortController: AbortController | undefined\n declare private $watchStopHandles: Set<WatchStopHandle>\n declare private $modelValue: Ref<any[]>\n declare private $renderable: ComputedRef<any[]>\n declare sort: () => void\n\n async mount() {\n if (this.instance) return\n if (!this.$wrapperRef.value) return\n if (!this.$sortableProps.value) return\n if (this.$mountAbortController) {\n this.$mountAbortController.abort()\n }\n this.$mountAbortController = new AbortController()\n await nextTick()\n if (!this.$wrapperRef.value) return\n if (!this.$sortableProps.value) return\n if (this.$mountAbortController.signal.aborted) return\n this.instance = new SortableJS(toRaw(this.$wrapperRef.value), toRaw(this.$sortableProps.value))\n await nextTick()\n this.sort()\n }\n\n async unmount() {\n if (!this.instance) return\n this.instance.destroy()\n this.instance = undefined\n }\n\n async remount(callback?: () => any | Promise<any>) {\n if (this.$mountAbortController) {\n this.$mountAbortController.abort()\n }\n await this.unmount()\n this.isRemounting = true\n if (this.$wrapperRef.value) {\n Array.from(this.$wrapperRef.value.children).forEach((child) => {\n child.remove()\n })\n }\n if (callback) {\n await callback()\n }\n await nextTick()\n this.isRemounting = false\n await this.mount()\n }\n\n moveUpByIndex(index: number) {\n if (!this.instance || this.$sortableProps.value.disabled || index <= 0) return\n const updated = this.instance.toArray()\n if (!updated || !updated[index]) return\n const itemToMoveDown = updated[index - 1]\n const itemToMoveUp = updated[index]\n updated.splice(index - 1, 2, itemToMoveUp, itemToMoveDown)\n this.instance.sort(updated, true)\n this.instance.save()\n }\n\n moveDownByIndex(index: number) {\n if (\n !this.instance ||\n this.$sortableProps.value.disabled ||\n index >= this.$modelValue.value.length - 1\n )\n return\n const updated = this.instance.toArray()\n if (!updated || !updated[index]) return\n const itemToMoveDown = updated[index]\n const itemToMoveUp = updated[index + 1]\n updated.splice(index, 2, itemToMoveUp, itemToMoveDown)\n this.instance.sort(updated, true)\n this.instance.save()\n }\n\n moveUpByItem(item: any) {\n if (!this.instance || this.$sortableProps.value.disabled) return\n const index = this.$modelValue.value.indexOf(item)\n return this.moveUpByIndex(index)\n }\n\n moveDownByItem(item: any) {\n if (!this.instance || this.$sortableProps.value.disabled) return\n const index = this.$modelValue.value.indexOf(item)\n return this.moveDownByIndex(index)\n }\n\n destroy() {\n this.unmount()\n this.$watchStopHandles.forEach((stop) => {\n stop()\n this.$watchStopHandles.delete(stop)\n })\n }\n}\n","import { ref, computed } from 'vue'\nimport { deepmerge } from 'deepmerge-ts'\nimport type { Ref } from 'vue'\nimport type { RenderableProps } from './props'\n\nexport const useSortableWrapperRef = (props: Ref<RenderableProps>) => {\n const wrapperRef = ref<HTMLElement | null>()\n const wrapperBindings = computed(() =>\n deepmerge(props.value, {\n ref: (val: any) => {\n wrapperRef.value =\n val && val.$el ? (val.$el as HTMLElement | null) : (val as HTMLElement | null)\n },\n })\n )\n return { wrapperRef, wrapperBindings }\n}\n","import { deepmerge } from 'deepmerge-ts'\nimport { computed, toRaw, watch, ref } from 'vue'\nimport { encode, decode } from '@nhtio/lucid-resourceful/encoding'\nimport { propsFactory } from '@nhtio/vuetifiable/util/propsFactory'\nimport { getDefaultsForPropFactory, stripUndefinedValuesFromObject } from '../common/utils'\nimport type { default as Sortable } from 'sortablejs'\nimport type {\n h,\n ExtractPublicPropTypes,\n ExtractPropTypes,\n PropType,\n StyleValue,\n ToRefs,\n WritableComputedRef,\n} from 'vue'\n\n/**\n * Type alias for the raw, unmodified SortableJS options interface.\n * This represents the complete SortableJS options as provided by the library,\n * including all event handlers and internal options that may conflict with Vue.\n *\n * Use this type when you need access to the original SortableJS interface,\n * such as when creating SortableJS instances directly or for type compatibility\n * with third-party libraries that expect the raw SortableJS types.\n *\n * @example\n * ```typescript\n * // When creating a SortableJS instance directly\n * const rawOptions: RawSortableOptions = {\n * animation: 150,\n * onStart: (evt) => console.log('Started dragging'),\n * onEnd: (evt) => console.log('Finished dragging')\n * }\n * const sortable = Sortable.create(element, rawOptions)\n *\n * // For type compatibility with SortableJS utilities\n * function processSortableConfig(options: RawSortableOptions) {\n * // Handle raw SortableJS configuration\n * }\n * ```\n */\nexport type RawSortableOptions = Sortable.SortableOptions\n\n/**\n * Options that are excluded from the sortable props to prevent conflicts with Vue's event system\n * and internal SortableJS functionality.\n */\ntype SortableExcludedOptions = `on${string}` | 'store' | 'setData' | 'draggable'\n\n/**\n * Combined SortableJS options from the core library, excluding Vue-incompatible options.\n * This type ensures type safety while maintaining compatibility with Vue's prop system\n * by removing event handlers and internal options that would conflict with Vue's reactivity.\n *\n * Note: Plugin options (MultiDrag, Swap, OnSpill) have been excluded for compatibility reasons.\n */\nexport type SortableOptions = Omit<Sortable.SortableOptions, SortableExcludedOptions>\n\n/**\n * Valid Vue render function component types (string, component, or function).\n */\nexport type Renderable = NonNullable<Parameters<typeof h>[0]>\n\n/**\n * Props that can be passed to the rendered component element.\n */\nexport type RenderableProps = Record<string, any> & {\n class?: any\n style?: StyleValue\n}\n\nexport type SortableEvent = Sortable.SortableEvent\n\nexport type SortableMoveEvent = Sortable.MoveEvent\n\n/**\n * Type definition for all sortable prop definitions including SortableJS options\n * and Vue-specific rendering props.\n */\ntype SortablePropDefinitions = {\n [K in keyof SortableOptions]: {\n type: PropType<SortableOptions[K]>\n default: SortableOptions[K] | undefined\n }\n} & {\n /** The reactive array of items to be sorted */\n modelValue: {\n type: PropType<Array<any>>\n default: () => []\n }\n /** The HTML tag or Vue component to render as the sortable container */\n tag: {\n type: PropType<Renderable>\n default: 'ul'\n }\n /** Props to pass to the rendered tag/component */\n tagProps: {\n type: PropType<RenderableProps>\n default: () => {}\n }\n tagSlot: {\n type: PropType<string>\n default: 'default'\n }\n /** The HTML tag or Vue component to render as the sortable item */\n itemTag: {\n type: PropType<Renderable>\n default: 'li'\n }\n /** Props to pass to the rendered item tag/component */\n itemTagProps: {\n type: PropType<RenderableProps>\n default: () => {}\n }\n} & {\n 'onUpdate:modelValue': {\n type: PropType<((value: Array<any>) => void) | undefined>\n default: undefined\n }\n 'onError': {\n type: PropType<((error: unknown) => void) | undefined>\n default: undefined\n }\n // 'onError:setData': {\n // type: PropType<((error: unknown) => void) | undefined>\n // default: undefined\n // }\n 'onSortableChoose': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableUnchoose': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableStart': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableEnd': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableAdd': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableUpdate': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableSort': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableRemove': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableFilter': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableMove': {\n type: PropType<((evt: SortableMoveEvent, event: Event) => void) | undefined>\n default: undefined\n }\n 'onSortableClone': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n 'onSortableChange': {\n type: PropType<((evt: SortableEvent) => void) | undefined>\n default: undefined\n }\n}\n\nconst sortablePropDefinitions: SortablePropDefinitions = {\n /**\n * The reactive array of items that represents the current sort order.\n * This is the v-model binding for the component.\n * @default []\n */\n modelValue: {\n type: Array as PropType<Array<any>>,\n default: () => [],\n },\n /**\n * The HTML tag or Vue component to render as the sortable container.\n * @default 'div'\n * @example 'ul', 'ol', 'div', MyCustomComponent\n */\n tag: {\n type: [String, Object, Function] as PropType<Renderable>,\n default: 'ul',\n },\n /**\n * Props to pass to the rendered tag/component.\n * Useful for adding classes, styles, or other attributes.\n * @default {}\n * @example { class: 'my-sortable-list', style: { minHeight: '100px' } }\n */\n tagProps: {\n type: Object as PropType<RenderableProps>,\n default: () => ({}),\n },\n tagSlot: {\n type: String as PropType<string>,\n default: 'default',\n },\n /**\n * The HTML tag or Vue component to render as each sortable item.\n * @default 'li'\n * @example 'li', 'div', 'tr', MyCustomItemComponent\n */\n itemTag: {\n type: [String, Object, Function] as PropType<Renderable>,\n default: 'li',\n },\n /**\n * Props to pass to each rendered item tag/component.\n * Useful for adding classes, styles, or other attributes to individual items.\n * @default {}\n * @example { class: 'sortable-item', 'data-testid': 'item' }\n */\n itemTagProps: {\n type: Object as PropType<RenderableProps>,\n default: () => ({}),\n },\n /**\n * Animation speed in milliseconds when moving items during sorting.\n * Set to 0 to disable animations.\n * @default undefined\n * @example 150, 300, 0\n */\n animation: {\n type: Number as PropType<SortableOptions['animation']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the chosen (actively dragged) item.\n * @default undefined\n * @example 'sortable-chosen', 'active-item'\n */\n chosenClass: {\n type: String as PropType<SortableOptions['chosenClass']>,\n default: undefined,\n },\n /**\n * Time in milliseconds to define when the sorting should start.\n * Unfortunately, due to browser restrictions, delaying is not possible on IE or Edge with native drag & drop.\n * @default undefined\n * @example 500, 1000\n */\n delay: {\n type: Number as PropType<SortableOptions['delay']>,\n default: undefined,\n },\n /**\n * Whether the delay should be applied only if the user is using touch (e.g., on mobile devices).\n * No delay will be applied in any other case.\n * @default undefined\n */\n delayOnTouchOnly: {\n type: Boolean as PropType<SortableOptions['delayOnTouchOnly']>,\n default: undefined,\n },\n /**\n * Direction of the sortable. Can be 'vertical', 'horizontal', or a function that returns the direction.\n * Will be detected automatically if not specified.\n * @default undefined\n * @example 'vertical', 'horizontal'\n */\n direction: {\n type: [String, Function] as PropType<SortableOptions['direction']>,\n default: undefined,\n },\n /**\n * Disables the sortable if set to true.\n * @default undefined\n */\n disabled: {\n type: Boolean as PropType<SortableOptions['disabled']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the item being dragged.\n * @default undefined\n * @example 'sortable-drag', 'dragging'\n */\n dragClass: {\n type: String as PropType<SortableOptions['dragClass']>,\n default: undefined,\n },\n /**\n * Whether the dragover event should bubble to parent sortables.\n * @default undefined\n */\n dragoverBubble: {\n type: Boolean as PropType<SortableOptions['dragoverBubble']>,\n default: undefined,\n },\n /**\n * Whether the drop event should bubble.\n * @default undefined\n */\n dropBubble: {\n type: Boolean as PropType<SortableOptions['dropBubble']>,\n default: undefined,\n },\n /**\n * Distance in pixels the mouse must be from an empty sortable while dragging\n * for the drag element to be inserted into that sortable.\n * @default undefined\n * @example 5, 10, 0\n */\n emptyInsertThreshold: {\n type: Number as PropType<SortableOptions['emptyInsertThreshold']>,\n default: undefined,\n },\n /**\n * CSS animation easing function for sorting animations.\n * @default undefined\n * @example 'ease', 'ease-in-out', 'cubic-bezier(0.68, -0.55, 0.265, 1.55)'\n */\n easing: {\n type: String as PropType<SortableOptions['easing']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the cloned DOM element when using forceFallback.\n * @default undefined\n * @example 'sortable-fallback', 'dragging-fallback'\n */\n fallbackClass: {\n type: String as PropType<SortableOptions['fallbackClass']>,\n default: undefined,\n },\n /**\n * Whether to append the cloned DOM element to the document's body when using fallback.\n * @default undefined\n */\n fallbackOnBody: {\n type: Boolean as PropType<SortableOptions['fallbackOnBody']>,\n default: undefined,\n },\n /**\n * Specify in pixels how far the mouse should move before it's considered a drag.\n * Useful if items are also clickable (like links).\n * @default undefined\n * @example 3, 5, 10\n */\n fallbackTolerance: {\n type: Number as PropType<SortableOptions['fallbackTolerance']>,\n default: undefined,\n },\n /**\n * Offset for the fallback element position.\n * @default undefined\n * @example { x: 5, y: 5 }\n */\n fallbackOffset: {\n type: Object as PropType<SortableOptions['fallbackOffset']>,\n default: undefined,\n },\n /**\n * CSS selector or function to define elements that should not trigger dragging.\n * @default undefined\n * @example '.no-drag', '.button', (evt) => evt.target.tagName === 'BUTTON'\n */\n filter: {\n type: [String, Function] as PropType<SortableOptions['filter']>,\n default: undefined,\n },\n /**\n * Ignore HTML5 drag and drop behavior and force the fallback to kick in.\n * @default undefined\n */\n forceFallback: {\n type: Boolean as PropType<SortableOptions['forceFallback']>,\n default: undefined,\n },\n /**\n * CSS class name applied to the drop placeholder (ghost element).\n * @default undefined\n * @example 'sortable-ghost', 'drop-placeholder'\n */\n ghostClass: {\n type: String as PropType<SortableOptions['ghostClass']>,\n default: undefined,\n },\n /**\n * Group configuration for dragging elements between lists.\n * Can be a string (group name) or an object with advanced options.\n * @default undefined\n * @example 'shared', { name: 'shared', pull: true, put: false }\n */\n group: {\n type: [String, Object] as PropType<SortableOptions['group']>,\n default: undefined,\n },\n /**\n * CSS selector for drag handles within list items.\n * Only elements matching this selector will initiate dragging.\n * @default undefined\n * @example '.drag-handle', '.grip'\n */\n handle: {\n type: String as PropType<SortableOptions['handle']>,\n default: undefined,\n },\n /**\n * CSS selector for elements to ignore during sorting.\n * @default undefined\n * @example '.ignore', 'input, textarea'\n */\n ignore: {\n type: String as PropType<SortableOptions['ignore']>,\n default: undefined,\n },\n /**\n * Always use inverted swap zone if set to true.\n * @default undefined\n */\n invertSwap: {\n type: Boolean as PropType<SortableOptions['invertSwap']>,\n default: undefined,\n },\n /**\n * Threshold of the inverted swap zone as a float between 0 and 1.\n * Will default to swapThreshold value if not specified.\n * @default undefined\n * @example 0.1, 0.5, 0.8\n */\n invertedSwapThreshold: {\n type: Number as PropType<SortableOptions['invertedSwapThreshold']>,\n default: undefined,\n },\n /**\n * Call `event.preventDefault()` when a filtered element is triggered.\n * @default undefined\n */\n preventOnFilter: {\n type: Boolean as PropType<SortableOptions['preventOnFilter']>,\n default: undefined,\n },\n /**\n * Remove the clone element when it's not showing, rather than just hiding it.\n * @default undefined\n */\n removeCloneOnHide: {\n type: Boolean as PropType<SortableOptions['removeCloneOnHide']>,\n default: undefined,\n },\n /**\n * Allow sorting inside the list.\n * @default undefined\n */\n sort: {\n type: Boolean as PropType<SortableOptions['sort']>,\n default: undefined,\n },\n /**\n * Percentage of the target that the swap zone will take up as a float between 0 and 1.\n * @default undefined\n * @example 0.65, 1, 0.5\n */\n swapThreshold: {\n type: Number as PropType<SortableOptions['swapThreshold']>,\n default: undefined,\n },\n /**\n * How many pixels the point should move before cancelling a delayed drag event.\n * @default undefined\n * @example 3, 5\n */\n touchStartThreshold: {\n type: Number as PropType<SortableOptions['touchStartThreshold']>,\n default: undefined,\n },\n // Vue Event Handlers\n ...{\n /**\n * Callback fired when the model value changes (v-model update).\n * This is the primary way to respond to sorting changes in the component.\n * @default undefined\n * @example (newValue) => { console.log('New order:', newValue) }\n */\n 'onUpdate:modelValue': {\n type: Function as PropType<((value: Array<any>) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when any error occurs during sortable operations.\n * This is a general error handler that catches errors from various sortable operations.\n * @default undefined\n * @example (error) => { console.error('Sortable error:', error) }\n */\n 'onError': {\n type: Function as PropType<((error: unknown) => void) | undefined>,\n default: undefined,\n },\n // /**\n // * Callback fired when an error occurs specifically during the setData operation.\n // * This handler is called when encoding or serializing drag data fails.\n // * @default undefined\n // * @example (error) => { console.error('SetData error:', error); fallbackToSimpleDrag() }\n // */\n // 'onError:setData': {\n // type: Function as PropType<((error: unknown) => void) | undefined>,\n // default: undefined,\n // },\n /**\n * Callback fired when an element is chosen for dragging.\n * This event occurs when a user starts selecting an item for drag operation.\n * @default undefined\n * @example (evt) => { console.log('Item chosen:', evt.item) }\n */\n 'onSortableChoose': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is unchosen (deselected).\n * This event occurs when a previously chosen item is deselected.\n * @default undefined\n * @example (evt) => { console.log('Item unchosen:', evt.item) }\n */\n 'onSortableUnchoose': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when dragging starts.\n * This is the beginning of a drag operation after the delay period (if any).\n * @default undefined\n * @example (evt) => { console.log('Drag started from index:', evt.oldIndex) }\n */\n 'onSortableStart': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when dragging ends.\n * This occurs when the user releases the dragged item, regardless of whether the position changed.\n * @default undefined\n * @example (evt) => { console.log('Drag ended at index:', evt.newIndex) }\n */\n 'onSortableEnd': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n 'onSortableAdd': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when the list order is updated within the same sortable.\n * This event only fires for internal reordering, not for items moved between lists.\n * @default undefined\n * @example (evt) => { console.log('Item moved from', evt.oldIndex, 'to', evt.newIndex) }\n */\n 'onSortableUpdate': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when any sorting operation occurs (internal reordering or between lists).\n * This is a more general event that fires for all sorting changes.\n * @default undefined\n * @example (evt) => { console.log('Sort operation occurred:', evt) }\n */\n 'onSortableSort': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is removed from the current list.\n * This occurs when an item is dragged out to another sortable list.\n * @default undefined\n * @example (evt) => { console.log('Item removed from index:', evt.oldIndex) }\n */\n 'onSortableRemove': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when dragging is prevented due to the filter option.\n * This occurs when a user tries to drag an element that matches the filter criteria.\n * @default undefined\n * @example (evt) => { console.log('Drag filtered on element:', evt.item) }\n */\n 'onSortableFilter': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is moved during dragging.\n * This provides fine-grained control and can be used to prevent certain moves by returning false.\n * @default undefined\n * @example (evt) => { return evt.related.classList.contains('allowed-drop-zone') }\n */\n 'onSortableMove': {\n type: Function as PropType<((evt: SortableMoveEvent, event: Event) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when an element is cloned during multi-list operations.\n * This occurs when moving items between lists that use clone mode.\n * @default undefined\n * @example (evt) => { console.log('Item cloned:', evt.clone) }\n */\n 'onSortableClone': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n /**\n * Callback fired when any change occurs to the sortable list.\n * This is a catch-all event for monitoring any modifications to the list state.\n * @default undefined\n * @example (evt) => { console.log('List changed:', evt) }\n */\n 'onSortableChange': {\n type: Function as PropType<((evt: SortableEvent) => void) | undefined>,\n default: undefined,\n },\n },\n}\n\n/**\n * Factory function to create sortable props with proper defaults and validation.\n * Integrates with the Vuetifiable props factory system for consistent prop handling.\n *\n * @returns A props factory function that generates Vue component props with proper typing\n */\nexport const makeSortableProps = propsFactory(sortablePropDefinitions, 'Sortable')\n\n/**\n * Type representing the public props interface for the Sortable component.\n * This type extracts only the publicly available props from the props factory,\n * excluding any internal or private props marked with special flags.\n *\n * Use this type when you need to:\n * - Type component props in parent components\n * - Create prop interfaces for composition\n * - Validate prop types in TypeScript\n * - Generate documentation for component APIs\n *\n * @example\n * ```typescript\n * // Using in a parent component\n * const sortableProps: Partial<SortableProps> = {\n * modelValue: items,\n * animation: 150,\n * ghostClass: 'sortable-ghost'\n * }\n *\n * // Type checking function parameters\n * function configureSortable(props: SortableProps) {\n * // props are fully typed with intellisense\n * }\n *\n * // Extending for custom wrapper components\n * interface MySortableProps extends SortableProps {\n * customFeature?: boolean\n * }\n * ```\n */\nexport type SortableProps = ExtractPublicPropTypes<ReturnType<typeof makeSortableProps>>\n\n/**\n * Pre-computed default values for all sortable props that have defaults.\n * This provides runtime access to default values for component initialization and testing.\n *\n * @example\n * ```typescript\n * console.log(sortablePropDefaults.modelValue) // []\n * console.log(sortablePropDefaults.tag) // 'ul'\n * console.log(sortablePropDefaults.itemTag) // 'li'\n * ```\n */\nexport const sortablePropDefaults = getDefaultsForPropFactory(makeSortableProps)\n\n/**\n * Type alias for the SortableJS constructor.\n * Useful for type annotations when working with the SortableJS instance directly.\n *\n * @example\n * ```typescript\n * const sortableInstance: InstanceType<SortableCtor> = Sortable.create(element, options)\n * ```\n */\nexport type SortableCtor = typeof Sortable\n\n/**\n * Type representing an instance of a SortableJS sortable list.\n * This type provides access to all SortableJS instance methods and properties\n * for programmatic control of the sortable behavior.\n *\n * @example\n * ```typescript\n * // Create a sortable instance\n * const sortable: SortableInstance = Sortable.create(element, options)\n *\n * // Use instance methods\n * sortable.destroy()\n * sortable.option('disabled', true)\n * const order = sortable.toArray()\n * ```\n */\nexport type SortableInstance = InstanceType<SortableCtor>\n\ntype SortableSetupProps = ExtractPropTypes<ReturnType<typeof makeSortableProps>>\n\nexport const useSortableProps = (\n props: ToRefs<SortableSetupProps>,\n value: WritableComputedRef<any[], any[]>\n) => {\n const {\n // modelValue,\n // tag,\n // tagProps,\n // tagSlot,\n // itemTag,\n // itemTagProps,\n animation,\n chosenClass,\n delay,\n delayOnTouchOnly,\n direction,\n disabled,\n dragClass,\n dragoverBubble,\n dropBubble,\n emptyInsertThreshold,\n easing,\n fallbackClass,\n fallbackOnBody,\n fallbackTolerance,\n fallbackOffset,\n filter,\n forceFallback,\n ghostClass,\n group,\n handle,\n ignore,\n invertSwap,\n invertedSwapThreshold,\n preventOnFilter,\n removeCloneOnHide,\n sort,\n swapThreshold,\n touchStartThreshold,\n // onSortableChoose,\n // onSortableUnchoose,\n // onSortableStart,\n // onSortableEnd,\n // onSortableAdd,\n // onSortableUpdate,\n // onSortableSort,\n // onSortableRemove,\n // onSortableFilter,\n // onSortableMove,\n // onSortableClone,\n // onSortableChange,\n } = props\n\n const internalRenderableCache = ref<string[]>([])\n const updateInternalRenderableCache = () => {\n internalRenderableCache.value = Array.from(value.value)\n .map((v: any) => encode(v))\n .sort()\n }\n watch(value, updateInternalRenderableCache, { deep: true, immediate: true })\n\n const renderable = computed(() => internalRenderableCache.value)\n const sortableStoreGet = () => toRaw(value.value).map((v) => encode(v))\n const sortableStoreSet = (sortable: SortableInstance) => {\n const decoded = sortable.toArray().map((v) => decode(v))\n value.value = decoded\n }\n const computedSortableProps = computed<RawSortableOptions>(() =>\n stripUndefinedValuesFromObject({\n animation: animation.value,\n chosenClass: chosenClass.value,\n delay: delay.value,\n delayOnTouchOnly: delayOnTouchOnly.value,\n direction: direction.value,\n disabled: disabled.value,\n dragClass: dragClass.value,\n dragoverBubble: dragoverBubble.value,\n dropBubble: dropBubble.value,\n emptyInsertThreshold: emptyInsertThreshold.value,\n easing: easing.value,\n fallbackClass: fallbackClass.value,\n fallbackOnBody: fallbackOnBody.value,\n fallbackTolerance: fallbackTolerance.value,\n fallbackOffset: fallbackOffset.value,\n filter: filter.value,\n forceFallback: forceFallback.value,\n ghostClass: ghostClass.value,\n group: group.value,\n handle: handle.value,\n ignore: ignore.value || '',\n invertSwap: invertSwap.value,\n invertedSwapThreshold: invertedSwapThreshold.value,\n preventOnFilter: preventOnFilter.value,\n removeCloneOnHide: removeCloneOnHide.value,\n sort: sort.value,\n swapThreshold: swapThreshold.value,\n touchStartThreshold: touchStartThreshold.value,\n })\n )\n const sortableStaticProps: RawSortableOptions = {\n dataIdAttr: 'data-sortable',\n draggable: '[data-sortable]',\n store: {\n get: () => sortableStoreGet(),\n set: (sortable: SortableInstance) => sortableStoreSet(sortable),\n },\n }\n const sortableProps = computed<RawSortableOptions>(() =>\n deepmerge(computedSortableProps.value, sortableStaticProps)\n )\n return {\n renderable,\n sortableProps,\n forceUpdate: updateInternalRenderableCache,\n }\n}\n","import { SortableItem } from './_item'\nimport { SortableBridge } from './_bridge'\nimport { useSortableWrapperRef } from './_wrapper'\nimport { emitsFactory } from '../common/factories'\nimport { encode } from '@nhtio/lucid-resourceful/encoding'\nimport { makeSortableProps, useSortableProps } from './props'\nimport { TypedEventEmitter } from '@nhtio/tiny-typed-emitter'\nimport { stripUndefinedValuesFromObject } from '../common/utils'\nimport {\n defineComponent,\n h,\n ref,\n toRefs,\n computed,\n onMounted,\n onBeforeUnmount,\n toRaw,\n watch,\n nextTick,\n} from 'vue'\nimport type { SlotsType } from 'vue'\nimport type { SortableItemSlotBindings } from './_item'\nimport type { EventMap } from '@nhtio/tiny-typed-emitter'\n\nexport type { SortableItemSlotBindings }\n\nexport interface SortableSlotBindings<T = any> {\n value: Readonly<Array<T>>\n wrapperEl: Readonly<HTMLElement | null | undefined>\n}\n\ntype SortableComponentSlots = SlotsType<{\n before: (props: SortableSlotBindings) => any\n after: (props: SortableSlotBindings) => any\n item: (props: SortableItemSlotBindings) => any\n}>\n\ntype SortableBusEventMap = EventMap<{\n 'update:modelValue': [val: Array<any>]\n}>\n\nexport const Sortable = defineComponent({\n // eslint-disable-next-line vue/multi-word-component-names\n name: 'Sortable',\n props: makeSortableProps(),\n emits: emitsFactory({\n 'update:modelValue': (value: Array<any>) => Array.isArray(value),\n 'update:model-value': (value: Array<any>) => Array.isArray(value),\n 'error': () => true,\n }),\n slots: Object as SortableComponentSlots,\n setup(props, { emit, slots }) {\n const bus = new TypedEventEmitter<SortableBusEventMap>()\n const referencedProps = toRefs(props)\n const { modelValue, tag, tagProps, tagSlot, itemTag, itemTagProps } = toRefs(props)\n const localModelValue = ref<Array<any>>(toRaw(modelValue.value))\n const doUpdateModelValue = (val: Array<any>) => {\n if (props['onUpdate:modelValue']) {\n props['onUpdate:modelValue'](val)\n }\n localModelValue.value = toRaw(val)\n emit('update:modelValue', val)\n emit('update:model-value', val)\n bus.emit('update:modelValue', val)\n }\n watch(\n modelValue,\n (val) => {\n localModelValue.value = toRaw(val)\n },\n { deep: true, immediate: true }\n )\n const value = computed({\n get: () => localModelValue.value,\n set: (val: Array<any>) => {\n if (encode(val) === encode(toRaw(localModelValue.value))) return\n doUpdateModelValue(val)\n },\n })\n const { renderable, sortableProps, forceUpdate } = useSortableProps(referencedProps, value)\n const { wrapperRef, wrapperBindings } = useSortableWrapperRef(tagProps as any)\n const slotBindings = computed<SortableSlotBindings>(() => ({\n value: toRaw(value.value),\n wrapperEl: toRaw(wrapperRef.value),\n }))\n bus.on('update:modelValue', () => nextTick().then(() => forceUpdate()))\n const bridge = new SortableBridge(wrapperRef, sortableProps, value, renderable)\n onMounted(() => {\n bridge.init()\n })\n onBeforeUnmount(() => {\n bridge.destroy()\n })\n return () => [\n slots.before ? slots.before(slotBindings.value) : null,\n h(tag.value, wrapperBindings.value, {\n [tagSlot.value]: () =>\n bridge.isRemounting\n ? []\n : renderable.value.map((i) =>\n h(\n SortableItem,\n {\n encoded: i,\n value: toRaw(value.value),\n wrapperEl: toRaw(wrapperRef.value),\n itemTag: itemTag.value,\n itemTagProps: itemTagProps.value,\n onMoveUp: (indx) => bridge.moveUpByIndex(indx),\n onMoveDown: (indx) => bridge.moveDownByIndex(indx),\n onRemove: (indx) => {\n const current = Array.from(toRaw(value.value))\n current.splice(indx, 1)\n doUpdateModelValue(current)\n },\n },\n // eslint-disable-next-line @nht/require-function-slots-for-programmatic-components\n stripUndefinedValuesFromObject({\n default: slots.item\n ? (itemProps: SortableItemSlotBindings) => slots.item!(itemProps)\n : undefined,\n })\n )\n ),\n }),\n slots.after ? slots.after(slotBindings.value) : null,\n ]\n },\n})\n"],"names":["indicator","i","cent","dec","require$$0","ordinal","ordinal_1","makeSortableItemProps","propsFactory","SortableItem","defineComponent","emitsFactory","index","item","props","emit","slots","value","wrapperEl","encoded","itemTag","itemTagProps","disabled","sortingDisabled","toRefs","computed","decode","toRaw","order","formatAsOrdinal","itemProps","remove","moveUp","moveDown","itemSlotBindings","deepmerge","itemTagBindings","h","isDate","d","isEmpty","o","isObject","hasOwnProperty","args","isEmptyObject","makeObjectWithoutPrototype","diff","lhs","rhs","deletedValues","acc","key","difference","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","source","_defineProperty","_typeof","obj","_extends","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","version","userAgent","pattern","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","on","el","event","fn","off","matches","selector","getParentOrHost","closest","ctx","includeCTX","R_SPACE","toggleClass","name","state","className","css","prop","val","style","matrix","selfOnly","appliedTransforms","transform","matrixFn","find","tagName","iterator","list","n","getWindowScrollingElement","scrollingElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","elRect","top","left","bottom","right","height","width","containerRect","elMatrix","scaleX","scaleY","isScrolledPast","elSide","parentSide","parent","getParentAutoScrollElement","elSideVal","parentSideVal","visible","getChild","childNum","options","includeDragEl","currentChild","children","Sortable","lastChild","last","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","indexOfObject","arr","includeSelf","elem","gotSelf","elemCSS","extend","dst","src","isRectEqual","rect1","rect2","_throttleTimeout","throttle","callback","ms","_this","cancelThrottle","scrollBy","x","y","clone","Polymer","$","getChildContainingRectFromElement","ghostEl","rect","child","_rect$left","_rect$top","_rect$right","_rect$bottom","childRect","expando","AnimationStateManager","animationStates","animationCallbackId","fromRect","childMatrix","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","calculateRealTime","currentRect","duration","translateX","translateY","repaint","plugins","defaults","PluginManager","plugin","option","p","eventName","sortable","evt","eventNameGlobal","pluginName","initialized","modified","eventProperties","modifiedValue","dispatchEvent","_ref","rootEl","targetEl","cloneEl","toEl","fromEl","oldIndex","newIndex","oldDraggableIndex","newDraggableIndex","originalEvent","putSortable","extraEventProperties","onName","allEventProperties","_excluded","pluginEvent","data","dragEl","parentEl","nextEl","lastDownEl","cloneHidden","moved","_hideGhostForTarget","_unhideGhostForTarget","_dispatchEvent","info","activeGroup","awaitingDragStarted","ignoreNextClick","sortables","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","pastFirstInvertThresh","isCircumstantialInvert","targetMoveDistance","ghostRelativeParent","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","supportCssPointerEvents","_detectDirection","elCSS","elWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","secondChildWidth","touchingSideChild2","_dragElInRowColumn","dragRect","targetRect","vertical","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_detectNearestEmptySortable","ret","threshold","insideHorizontally","insideVertically","_prepareGroup","toFn","pull","to","from","sameGroup","otherGroup","group","originalGroup","nearestEmptyInsertDetectEvent","nearest","_checkOutsideTargetEl","dataTransfer","preventOnFilter","type","touch","originalTarget","filter","_saveInputCheckedState","criteria","ownerDocument","dragStartFn","_disableDraggable","_nextTick","fallback","inserted","fallbackTolerance","fallbackOffset","ghostMatrix","relativeScrollOffset","dx","dy","cssMatrix","revert","activeSortable","isOwner","canSort","fromSortable","completedFired","dragOverEvent","extra","completed","after","_onMove","changed","capture","insertion","elLastChild","_ghostIsLast","_ghostIsFirst","firstChild","direction","targetBeforeFirstSwap","differentLevel","differentRowCol","side1","scrolledPastTop","scrollBefore","_getSwapDirection","sibling","dragIndex","nextSibling","moveVector","_unsilent","_cancelNextTick","_globalDragOver","_generateId","useAnimation","items","id","store","willInsertAfter","onMoveFn","retVal","firstElRect","childContainingRect","spacer","lastElRect","swapThreshold","invertedSwapThreshold","invertSwap","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","str","sum","root","inputs","idx","element","_len","_key","autoScrolls","scrollEl","scrollRootEl","scrolling","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","AutoScrollPlugin","AutoScroll","_ref2","clearPointerElemChangedInterval","clearAutoScrolls","autoScroll","ogElemScroller","newElem","isFallback","sens","speed","scrollThisInstance","scrollCustomFn","layersOut","currentParent","canScrollX","canScrollY","scrollWidth","scrollHeight","scrollPosX","scrollPosY","vx","vy","scrollOffsetY","scrollOffsetX","drop","dispatchSortableEvent","hideGhostForTarget","unhideGhostForTarget","toSortable","Revert","_ref3","Remove","_ref4","parentSortable","WATCHED_REACTIVE_OPTIONS","SortableBridge","wrapperRef","sortableProps","modelValue","renderable","internals","debounce","ordered","v","encode","shallowReactive","watch","is","was","k","newOrder","nextTick","SortableJS","updated","itemToMoveDown","itemToMoveUp","stop","useSortableWrapperRef","ref","wrapperBindings","sortablePropDefinitions","makeSortableProps","getDefaultsForPropFactory","useSortableProps","animation","chosenClass","delay","delayOnTouchOnly","dragClass","dragoverBubble","dropBubble","emptyInsertThreshold","easing","fallbackClass","fallbackOnBody","forceFallback","ghostClass","handle","ignore","removeCloneOnHide","sort","touchStartThreshold","internalRenderableCache","updateInternalRenderableCache","sortableStoreGet","sortableStoreSet","decoded","computedSortableProps","stripUndefinedValuesFromObject","sortableStaticProps","bus","TypedEventEmitter","referencedProps","tag","tagProps","tagSlot","localModelValue","doUpdateModelValue","forceUpdate","slotBindings","bridge","onMounted","onBeforeUnmount","indx","current"],"mappings":"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","x_google_ignoreList":[0,1,3,4,5]}
|