uikit 3.11.1 → 3.11.2-dev.03e47c2ff

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.
Files changed (222) hide show
  1. package/.eslintrc.json +4 -49
  2. package/.prettierignore +14 -0
  3. package/.prettierrc.json +13 -0
  4. package/.webstorm.js +3 -3
  5. package/CHANGELOG.md +59 -17
  6. package/build/.eslintrc.json +1 -3
  7. package/build/build.js +26 -28
  8. package/build/icons.js +7 -11
  9. package/build/less.js +48 -36
  10. package/build/package.json +2 -2
  11. package/build/prefix.js +21 -18
  12. package/build/publishDev.js +6 -8
  13. package/build/release.js +20 -17
  14. package/build/scope.js +21 -11
  15. package/build/scss.js +72 -39
  16. package/build/util.js +71 -62
  17. package/build/wrapper/icons.js +0 -2
  18. package/dist/css/uikit-core-rtl.css +127 -201
  19. package/dist/css/uikit-core-rtl.min.css +1 -1
  20. package/dist/css/uikit-core.css +127 -201
  21. package/dist/css/uikit-core.min.css +1 -1
  22. package/dist/css/uikit-rtl.css +129 -207
  23. package/dist/css/uikit-rtl.min.css +1 -1
  24. package/dist/css/uikit.css +129 -207
  25. package/dist/css/uikit.min.css +1 -1
  26. package/dist/js/components/countdown.js +88 -133
  27. package/dist/js/components/countdown.min.js +1 -1
  28. package/dist/js/components/filter.js +408 -439
  29. package/dist/js/components/filter.min.js +1 -1
  30. package/dist/js/components/lightbox-panel.js +1098 -1316
  31. package/dist/js/components/lightbox-panel.min.js +1 -1
  32. package/dist/js/components/lightbox.js +1144 -1393
  33. package/dist/js/components/lightbox.min.js +1 -1
  34. package/dist/js/components/notification.js +94 -114
  35. package/dist/js/components/notification.min.js +1 -1
  36. package/dist/js/components/parallax.js +345 -362
  37. package/dist/js/components/parallax.min.js +1 -1
  38. package/dist/js/components/slider-parallax.js +343 -350
  39. package/dist/js/components/slider-parallax.min.js +1 -1
  40. package/dist/js/components/slider.js +768 -843
  41. package/dist/js/components/slider.min.js +1 -1
  42. package/dist/js/components/slideshow-parallax.js +343 -350
  43. package/dist/js/components/slideshow-parallax.min.js +1 -1
  44. package/dist/js/components/slideshow.js +645 -793
  45. package/dist/js/components/slideshow.min.js +1 -1
  46. package/dist/js/components/sortable.js +587 -621
  47. package/dist/js/components/sortable.min.js +1 -1
  48. package/dist/js/components/tooltip.js +324 -356
  49. package/dist/js/components/tooltip.min.js +1 -1
  50. package/dist/js/components/upload.js +155 -167
  51. package/dist/js/components/upload.min.js +1 -1
  52. package/dist/js/uikit-core.js +5430 -6690
  53. package/dist/js/uikit-core.min.js +1 -1
  54. package/dist/js/uikit-icons.js +7 -9
  55. package/dist/js/uikit-icons.min.js +1 -1
  56. package/dist/js/uikit.js +8143 -9784
  57. package/dist/js/uikit.min.js +1 -1
  58. package/jsconfig.json +1 -1
  59. package/package.json +64 -60
  60. package/src/js/api/boot.js +25 -32
  61. package/src/js/api/component.js +15 -28
  62. package/src/js/api/global.js +6 -12
  63. package/src/js/api/hooks.js +14 -33
  64. package/src/js/api/instance.js +7 -15
  65. package/src/js/api/state.js +79 -100
  66. package/src/js/components/countdown.js +24 -50
  67. package/src/js/components/filter.js +70 -66
  68. package/src/js/components/index.js +13 -13
  69. package/src/js/components/internal/lightbox-animations.js +14 -25
  70. package/src/js/components/internal/slider-preload.js +37 -0
  71. package/src/js/components/internal/slider-transitioner.js +66 -45
  72. package/src/js/components/internal/slideshow-animations.js +46 -64
  73. package/src/js/components/lightbox-panel.js +107 -105
  74. package/src/js/components/lightbox.js +17 -39
  75. package/src/js/components/notification.js +49 -43
  76. package/src/js/components/parallax.js +21 -46
  77. package/src/js/components/slider-parallax.js +13 -23
  78. package/src/js/components/slider.js +95 -64
  79. package/src/js/components/slideshow-parallax.js +1 -1
  80. package/src/js/components/slideshow.js +15 -13
  81. package/src/js/components/sortable.js +126 -108
  82. package/src/js/components/tooltip.js +41 -31
  83. package/src/js/components/upload.js +52 -63
  84. package/src/js/core/accordion.js +53 -48
  85. package/src/js/core/alert.js +9 -17
  86. package/src/js/core/core.js +74 -53
  87. package/src/js/core/cover.js +11 -15
  88. package/src/js/core/drop.js +107 -93
  89. package/src/js/core/form-custom.js +20 -25
  90. package/src/js/core/gif.js +3 -7
  91. package/src/js/core/grid.js +57 -58
  92. package/src/js/core/height-match.js +16 -29
  93. package/src/js/core/height-viewport.js +29 -36
  94. package/src/js/core/icon.js +47 -52
  95. package/src/js/core/img.js +156 -138
  96. package/src/js/core/index.js +39 -39
  97. package/src/js/core/leader.js +9 -18
  98. package/src/js/core/margin.js +21 -37
  99. package/src/js/core/modal.js +49 -36
  100. package/src/js/core/nav.js +2 -4
  101. package/src/js/core/navbar.js +113 -85
  102. package/src/js/core/offcanvas.js +49 -53
  103. package/src/js/core/overflow-auto.js +13 -17
  104. package/src/js/core/responsive.js +14 -12
  105. package/src/js/core/scroll.js +10 -20
  106. package/src/js/core/scrollspy-nav.js +34 -31
  107. package/src/js/core/scrollspy.js +37 -54
  108. package/src/js/core/sticky.js +194 -123
  109. package/src/js/core/svg.js +68 -83
  110. package/src/js/core/switcher.js +47 -46
  111. package/src/js/core/tab.js +7 -10
  112. package/src/js/core/toggle.js +66 -67
  113. package/src/js/core/video.js +11 -22
  114. package/src/js/mixin/animate.js +19 -20
  115. package/src/js/mixin/class.js +2 -4
  116. package/src/js/mixin/container.js +7 -11
  117. package/src/js/mixin/internal/animate-fade.js +73 -30
  118. package/src/js/mixin/internal/animate-slide.js +58 -41
  119. package/src/js/mixin/internal/slideshow-animations.js +7 -14
  120. package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
  121. package/src/js/mixin/media.js +5 -10
  122. package/src/js/mixin/modal.js +89 -66
  123. package/src/js/mixin/parallax.js +175 -121
  124. package/src/js/mixin/position.js +26 -20
  125. package/src/js/mixin/slider-autoplay.js +12 -21
  126. package/src/js/mixin/slider-drag.js +64 -65
  127. package/src/js/mixin/slider-nav.js +26 -35
  128. package/src/js/mixin/slider-reactive.js +2 -8
  129. package/src/js/mixin/slider.js +48 -55
  130. package/src/js/mixin/slideshow.js +13 -19
  131. package/src/js/mixin/togglable.js +89 -63
  132. package/src/js/uikit-core.js +2 -4
  133. package/src/js/uikit.js +2 -4
  134. package/src/js/util/ajax.js +25 -40
  135. package/src/js/util/animation.js +77 -75
  136. package/src/js/util/attr.js +17 -21
  137. package/src/js/util/class.js +14 -52
  138. package/src/js/util/dimensions.js +78 -49
  139. package/src/js/util/dom.js +39 -66
  140. package/src/js/util/env.js +7 -12
  141. package/src/js/util/event.js +60 -59
  142. package/src/js/util/fastdom.js +3 -8
  143. package/src/js/util/filter.js +17 -34
  144. package/src/js/util/index.js +0 -1
  145. package/src/js/util/lang.js +82 -121
  146. package/src/js/util/mouse.js +19 -17
  147. package/src/js/util/options.js +35 -49
  148. package/src/js/util/player.js +41 -36
  149. package/src/js/util/position.js +54 -46
  150. package/src/js/util/selector.js +43 -58
  151. package/src/js/util/style.js +39 -49
  152. package/src/js/util/viewport.js +81 -66
  153. package/src/less/components/base.less +10 -33
  154. package/src/less/components/flex.less +0 -9
  155. package/src/less/components/form-range.less +48 -95
  156. package/src/less/components/form.less +0 -1
  157. package/src/less/components/height.less +3 -0
  158. package/src/less/components/leader.less +0 -1
  159. package/src/less/components/lightbox.less +0 -1
  160. package/src/less/components/modal.less +3 -7
  161. package/src/less/components/navbar.less +0 -7
  162. package/src/less/components/progress.less +14 -36
  163. package/src/less/components/slider.less +0 -3
  164. package/src/less/components/slideshow.less +0 -3
  165. package/src/less/components/text.less +16 -32
  166. package/src/less/components/utility.less +22 -0
  167. package/src/scss/components/base.scss +10 -33
  168. package/src/scss/components/flex.scss +0 -9
  169. package/src/scss/components/form-range.scss +48 -95
  170. package/src/scss/components/form.scss +3 -4
  171. package/src/scss/components/height.scss +3 -0
  172. package/src/scss/components/icon.scss +2 -2
  173. package/src/scss/components/leader.scss +0 -1
  174. package/src/scss/components/lightbox.scss +0 -1
  175. package/src/scss/components/modal.scss +3 -7
  176. package/src/scss/components/navbar.scss +0 -7
  177. package/src/scss/components/progress.scss +14 -36
  178. package/src/scss/components/search.scss +1 -1
  179. package/src/scss/components/slider.scss +0 -3
  180. package/src/scss/components/slideshow.scss +0 -3
  181. package/src/scss/components/text.scss +16 -32
  182. package/src/scss/components/utility.scss +22 -0
  183. package/src/scss/mixins-theme.scss +1 -1
  184. package/src/scss/mixins.scss +1 -1
  185. package/src/scss/variables-theme.scss +9 -9
  186. package/src/scss/variables.scss +9 -9
  187. package/tests/align.html +10 -10
  188. package/tests/animation.html +2 -2
  189. package/tests/article.html +2 -2
  190. package/tests/base.html +3 -3
  191. package/tests/card.html +10 -10
  192. package/tests/column.html +3 -3
  193. package/tests/comment.html +9 -9
  194. package/tests/dotnav.html +3 -3
  195. package/tests/image.html +296 -64
  196. package/tests/images/image-type.avif +0 -0
  197. package/tests/images/image-type.jpeg +0 -0
  198. package/tests/images/image-type.webp +0 -0
  199. package/tests/index.html +8 -8
  200. package/tests/js/index.js +114 -85
  201. package/tests/lightbox.html +10 -10
  202. package/tests/marker.html +2 -2
  203. package/tests/modal.html +8 -9
  204. package/tests/navbar.html +2 -2
  205. package/tests/overlay.html +7 -7
  206. package/tests/parallax.html +14 -5
  207. package/tests/position.html +12 -12
  208. package/tests/slidenav.html +12 -12
  209. package/tests/slider.html +20 -20
  210. package/tests/sortable.html +1 -1
  211. package/tests/sticky-parallax.html +86 -98
  212. package/tests/sticky.html +56 -24
  213. package/tests/svg.html +6 -6
  214. package/tests/table.html +11 -11
  215. package/tests/thumbnav.html +12 -12
  216. package/tests/transition.html +30 -30
  217. package/tests/utility.html +33 -33
  218. package/tests/video.html +1 -1
  219. package/tests/width.html +1 -1
  220. package/src/js/mixin/flex-bug.js +0 -56
  221. package/src/js/util/promise.js +0 -191
  222. package/tests/images/animated.gif +0 -0
@@ -1,4 +1,4 @@
1
- /*! UIkit 3.11.1 | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
1
+ /*! UIkit 3.11.2-dev.03e47c2ff | https://www.getuikit.com | (c) 2014 - 2022 YOOtheme | MIT License */
2
2
 
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('uikit-util')) :
@@ -7,811 +7,777 @@
7
7
  })(this, (function (uikitUtil) { 'use strict';
8
8
 
9
9
  function getRows(items) {
10
- return sortBy(items, 'top', 'bottom');
10
+ return sortBy(items, 'top', 'bottom');
11
11
  }
12
12
 
13
13
  function sortBy(items, startProp, endProp) {
14
+ const sorted = [[]];
14
15
 
15
- var sorted = [[]];
16
-
17
- for (var i = 0; i < items.length; i++) {
18
-
19
- var el = items[i];
20
-
21
- if (!uikitUtil.isVisible(el)) {
22
- continue;
23
- }
24
-
25
- var dim = getOffset(el);
26
-
27
- for (var j = sorted.length - 1; j >= 0; j--) {
28
-
29
- var current = sorted[j];
30
-
31
- if (!current[0]) {
32
- current.push(el);
33
- break;
34
- }
35
-
36
- var startDim = (void 0);
37
- if (current[0].offsetParent === el.offsetParent) {
38
- startDim = getOffset(current[0]);
39
- } else {
40
- dim = getOffset(el, true);
41
- startDim = getOffset(current[0], true);
42
- }
16
+ for (const el of items) {
17
+ if (!uikitUtil.isVisible(el)) {
18
+ continue;
19
+ }
43
20
 
44
- if (dim[startProp] >= startDim[endProp] - 1 && dim[startProp] !== startDim[startProp]) {
45
- sorted.push([el]);
46
- break;
47
- }
21
+ let dim = getOffset(el);
22
+
23
+ for (let i = sorted.length - 1; i >= 0; i--) {
24
+ const current = sorted[i];
25
+
26
+ if (!current[0]) {
27
+ current.push(el);
28
+ break;
29
+ }
30
+
31
+ let startDim;
32
+ if (current[0].offsetParent === el.offsetParent) {
33
+ startDim = getOffset(current[0]);
34
+ } else {
35
+ dim = getOffset(el, true);
36
+ startDim = getOffset(current[0], true);
37
+ }
38
+
39
+ if (dim[startProp] >= startDim[endProp] - 1 && dim[startProp] !== startDim[startProp]) {
40
+ sorted.push([el]);
41
+ break;
42
+ }
43
+
44
+ if (dim[endProp] - 1 > startDim[startProp] || dim[startProp] === startDim[startProp]) {
45
+ current.push(el);
46
+ break;
47
+ }
48
+
49
+ if (i === 0) {
50
+ sorted.unshift([el]);
51
+ break;
52
+ }
53
+ }
54
+ }
48
55
 
49
- if (dim[endProp] - 1 > startDim[startProp] || dim[startProp] === startDim[startProp]) {
50
- current.push(el);
51
- break;
52
- }
56
+ return sorted;
57
+ }
53
58
 
54
- if (j === 0) {
55
- sorted.unshift([el]);
56
- break;
57
- }
59
+ function getOffset(element, offset) {if (offset === void 0) {offset = false;}
60
+ let { offsetTop, offsetLeft, offsetHeight, offsetWidth } = element;
58
61
 
59
- }
62
+ if (offset) {
63
+ [offsetTop, offsetLeft] = uikitUtil.offsetPosition(element);
64
+ }
60
65
 
61
- }
66
+ return {
67
+ top: offsetTop,
68
+ left: offsetLeft,
69
+ bottom: offsetTop + offsetHeight,
70
+ right: offsetLeft + offsetWidth };
62
71
 
63
- return sorted;
64
72
  }
65
73
 
66
- function getOffset(element, offset) {
67
- var assign;
74
+ const clsLeave = 'uk-transition-leave';
75
+ const clsEnter = 'uk-transition-enter';
68
76
 
69
- if ( offset === void 0 ) offset = false;
77
+ function fade(action, target, duration, stagger) {if (stagger === void 0) {stagger = 0;}
78
+ const index = transitionIndex(target, true);
79
+ const propsIn = { opacity: 1 };
80
+ const propsOut = { opacity: 0 };
70
81
 
71
- var offsetTop = element.offsetTop;
72
- var offsetLeft = element.offsetLeft;
73
- var offsetHeight = element.offsetHeight;
74
- var offsetWidth = element.offsetWidth;
82
+ const wrapIndexFn = (fn) => () => index === transitionIndex(target) ? fn() : Promise.reject();
75
83
 
76
- if (offset) {
77
- (assign = uikitUtil.offsetPosition(element), offsetTop = assign[0], offsetLeft = assign[1]);
78
- }
84
+ const leaveFn = wrapIndexFn(() => {
85
+ uikitUtil.addClass(target, clsLeave);
79
86
 
80
- return {
81
- top: offsetTop,
82
- left: offsetLeft,
83
- bottom: offsetTop + offsetHeight,
84
- right: offsetLeft + offsetWidth
85
- };
86
- }
87
+ return Promise.all(
88
+ getTransitionNodes(target).map(
89
+ (child, i) =>
90
+ new Promise((resolve) =>
91
+ setTimeout(
92
+ () =>
93
+ uikitUtil.Transition.start(child, propsOut, duration / 2, 'ease').then(
94
+ resolve),
87
95
 
88
- var clsLeave = 'uk-transition-leave';
89
- var clsEnter = 'uk-transition-enter';
96
+ i * stagger)))).
90
97
 
91
- function fade(action, target, duration, stagger) {
92
- if ( stagger === void 0 ) stagger = 0;
93
98
 
94
99
 
95
- var index = transitionIndex(target, true);
96
- var propsIn = {opacity: 1};
97
- var propsOut = {opacity: 0};
100
+ then(() => uikitUtil.removeClass(target, clsLeave));
101
+ });
98
102
 
99
- var wrapIndexFn = function (fn) { return function () { return index === transitionIndex(target) ? fn() : uikitUtil.Promise.reject(); }; };
103
+ const enterFn = wrapIndexFn(() => {
104
+ const oldHeight = uikitUtil.height(target);
100
105
 
101
- var leaveFn = wrapIndexFn(function () {
106
+ uikitUtil.addClass(target, clsEnter);
107
+ action();
102
108
 
103
- uikitUtil.addClass(target, clsLeave);
109
+ uikitUtil.css(uikitUtil.children(target), { opacity: 0 });
104
110
 
105
- return uikitUtil.Promise.all(getTransitionNodes(target).map(function (child, i) { return new uikitUtil.Promise(function (resolve) { return setTimeout(function () { return uikitUtil.Transition.start(child, propsOut, duration / 2, 'ease').then(resolve); }, i * stagger); }
106
- ); }
107
- )).then(function () { return uikitUtil.removeClass(target, clsLeave); });
111
+ // Ensure UIkit updates have propagated
112
+ return new Promise((resolve) =>
113
+ requestAnimationFrame(() => {
114
+ const nodes = uikitUtil.children(target);
115
+ const newHeight = uikitUtil.height(target);
108
116
 
109
- });
117
+ // Ensure Grid cells do not stretch when height is applied
118
+ uikitUtil.css(target, 'alignContent', 'flex-start');
119
+ uikitUtil.height(target, oldHeight);
110
120
 
111
- var enterFn = wrapIndexFn(function () {
121
+ const transitionNodes = getTransitionNodes(target);
122
+ uikitUtil.css(nodes, propsOut);
112
123
 
113
- var oldHeight = uikitUtil.height(target);
124
+ const transitions = transitionNodes.map(
125
+ (child, i) =>
126
+ new Promise((resolve) =>
127
+ setTimeout(
128
+ () =>
129
+ uikitUtil.Transition.start(child, propsIn, duration / 2, 'ease').then(
130
+ resolve),
114
131
 
115
- uikitUtil.addClass(target, clsEnter);
116
- action();
132
+ i * stagger)));
117
133
 
118
- uikitUtil.css(uikitUtil.children(target), {opacity: 0});
119
134
 
120
- // Ensure UIkit updates have propagated
121
- return new uikitUtil.Promise(function (resolve) { return requestAnimationFrame(function () {
122
135
 
123
- var nodes = uikitUtil.children(target);
124
- var newHeight = uikitUtil.height(target);
125
136
 
126
- // Ensure Grid cells do not stretch when height is applied
127
- uikitUtil.css(target, 'alignContent', 'flex-start');
128
- uikitUtil.height(target, oldHeight);
137
+ if (oldHeight !== newHeight) {
138
+ transitions.push(
139
+ uikitUtil.Transition.start(
140
+ target,
141
+ { height: newHeight },
142
+ duration / 2 + transitionNodes.length * stagger,
143
+ 'ease'));
129
144
 
130
- var transitionNodes = getTransitionNodes(target);
131
- uikitUtil.css(nodes, propsOut);
132
145
 
133
- var transitions = transitionNodes.map(function (child, i) { return new uikitUtil.Promise(function (resolve) { return setTimeout(function () { return uikitUtil.Transition.start(child, propsIn, duration / 2, 'ease').then(resolve); }, i * stagger); }
134
- ); }
135
- );
146
+ }
136
147
 
137
- if (oldHeight !== newHeight) {
138
- transitions.push(uikitUtil.Transition.start(target, {height: newHeight}, duration / 2 + transitionNodes.length * stagger, 'ease'));
139
- }
148
+ Promise.all(transitions).then(() => {
149
+ uikitUtil.removeClass(target, clsEnter);
150
+ if (index === transitionIndex(target)) {
151
+ uikitUtil.css(target, { height: '', alignContent: '' });
152
+ uikitUtil.css(nodes, { opacity: '' });
153
+ delete target.dataset.transition;
154
+ }
155
+ resolve();
156
+ });
157
+ }));
140
158
 
141
- uikitUtil.Promise.all(transitions).then(function () {
142
- uikitUtil.removeClass(target, clsEnter);
143
- if (index === transitionIndex(target)) {
144
- uikitUtil.css(target, {height: '', alignContent: ''});
145
- uikitUtil.css(nodes, {opacity: ''});
146
- delete target.dataset.transition;
147
- }
148
- resolve();
149
- });
150
- }); }
151
- );
152
- });
159
+ });
153
160
 
154
- return uikitUtil.hasClass(target, clsLeave)
155
- ? waitTransitionend(target).then(enterFn)
156
- : uikitUtil.hasClass(target, clsEnter)
157
- ? waitTransitionend(target).then(leaveFn).then(enterFn)
158
- : leaveFn().then(enterFn);
161
+ return uikitUtil.hasClass(target, clsLeave) ?
162
+ waitTransitionend(target).then(enterFn) :
163
+ uikitUtil.hasClass(target, clsEnter) ?
164
+ waitTransitionend(target).then(leaveFn).then(enterFn) :
165
+ leaveFn().then(enterFn);
159
166
  }
160
167
 
161
168
  function transitionIndex(target, next) {
162
- if (next) {
163
- target.dataset.transition = 1 + transitionIndex(target);
164
- }
169
+ if (next) {
170
+ target.dataset.transition = 1 + transitionIndex(target);
171
+ }
165
172
 
166
- return uikitUtil.toNumber(target.dataset.transition) || 0;
173
+ return uikitUtil.toNumber(target.dataset.transition) || 0;
167
174
  }
168
175
 
169
176
  function waitTransitionend(target) {
170
- return uikitUtil.Promise.all(uikitUtil.children(target).filter(uikitUtil.Transition.inProgress).map(function (el) { return new uikitUtil.Promise(function (resolve) { return uikitUtil.once(el, 'transitionend transitioncanceled', resolve); }); }
171
- ));
172
- }
173
-
174
- function getTransitionNodes(target) {
175
- return getRows(uikitUtil.children(target)).reduce(function (nodes, row) { return nodes.concat(uikitUtil.sortBy(row.filter(function (el) { return uikitUtil.isInView(el); }), 'offsetLeft')); }, []);
176
- }
177
-
178
- function slide (action, target, duration) {
177
+ return Promise.all(
178
+ uikitUtil.children(target).
179
+ filter(uikitUtil.Transition.inProgress).
180
+ map(
181
+ (el) =>
182
+ new Promise((resolve) => uikitUtil.once(el, 'transitionend transitioncanceled', resolve))));
179
183
 
180
- return new uikitUtil.Promise(function (resolve) { return requestAnimationFrame(function () {
181
184
 
182
- var nodes = uikitUtil.children(target);
183
-
184
- // Get current state
185
- var currentProps = nodes.map(function (el) { return getProps(el, true); });
186
- var targetProps = uikitUtil.css(target, ['height', 'padding']);
187
-
188
- // Cancel previous animations
189
- uikitUtil.Transition.cancel(target);
190
- nodes.forEach(uikitUtil.Transition.cancel);
191
- reset(target);
192
-
193
- // Adding, sorting, removing nodes
194
- action();
195
-
196
- // Find new nodes
197
- nodes = nodes.concat(uikitUtil.children(target).filter(function (el) { return !uikitUtil.includes(nodes, el); }));
198
-
199
- // Wait for update to propagate
200
- uikitUtil.Promise.resolve().then(function () {
201
-
202
- // Force update
203
- uikitUtil.fastdom.flush();
185
+ }
204
186
 
205
- // Get new state
206
- var targetPropsTo = uikitUtil.css(target, ['height', 'padding']);
207
- var ref = getTransitionProps(target, nodes, currentProps);
208
- var propsTo = ref[0];
209
- var propsFrom = ref[1];
187
+ function getTransitionNodes(target) {
188
+ return getRows(uikitUtil.children(target)).reduce(
189
+ (nodes, row) =>
190
+ nodes.concat(
191
+ uikitUtil.sortBy(
192
+ row.filter((el) => uikitUtil.isInView(el)),
193
+ 'offsetLeft')),
210
194
 
211
- // Reset to previous state
212
- nodes.forEach(function (el, i) { return propsFrom[i] && uikitUtil.css(el, propsFrom[i]); });
213
- uikitUtil.css(target, uikitUtil.assign({display: 'block'}, targetProps));
214
195
 
215
- // Start transitions on next frame
216
- requestAnimationFrame(function () {
196
+ []);
217
197
 
218
- var transitions = nodes.map(function (el, i) { return uikitUtil.parent(el) === target && uikitUtil.Transition.start(el, propsTo[i], duration, 'ease'); }
219
- ).concat(uikitUtil.Transition.start(target, targetPropsTo, duration, 'ease'));
198
+ }
220
199
 
221
- uikitUtil.Promise.all(transitions).then(function () {
222
- nodes.forEach(function (el, i) { return uikitUtil.parent(el) === target && uikitUtil.css(el, 'display', propsTo[i].opacity === 0 ? 'none' : ''); });
223
- reset(target);
224
- }, uikitUtil.noop).then(resolve);
200
+ function slide (action, target, duration) {
201
+ return new Promise((resolve) =>
202
+ requestAnimationFrame(() => {
203
+ let nodes = uikitUtil.children(target);
204
+
205
+ // Get current state
206
+ const currentProps = nodes.map((el) => getProps(el, true));
207
+ const targetProps = uikitUtil.css(target, ['height', 'padding']);
208
+
209
+ // Cancel previous animations
210
+ uikitUtil.Transition.cancel(target);
211
+ nodes.forEach(uikitUtil.Transition.cancel);
212
+ reset(target);
213
+
214
+ // Adding, sorting, removing nodes
215
+ action();
216
+
217
+ // Find new nodes
218
+ nodes = nodes.concat(uikitUtil.children(target).filter((el) => !uikitUtil.includes(nodes, el)));
219
+
220
+ // Wait for update to propagate
221
+ Promise.resolve().then(() => {
222
+ // Force update
223
+ uikitUtil.fastdom.flush();
224
+
225
+ // Get new state
226
+ const targetPropsTo = uikitUtil.css(target, ['height', 'padding']);
227
+ const [propsTo, propsFrom] = getTransitionProps(target, nodes, currentProps);
228
+
229
+ // Reset to previous state
230
+ nodes.forEach((el, i) => propsFrom[i] && uikitUtil.css(el, propsFrom[i]));
231
+ uikitUtil.css(target, { display: 'block', ...targetProps });
232
+
233
+ // Start transitions on next frame
234
+ requestAnimationFrame(() => {
235
+ const transitions = nodes.
236
+ map(
237
+ (el, i) =>
238
+ uikitUtil.parent(el) === target &&
239
+ uikitUtil.Transition.start(el, propsTo[i], duration, 'ease')).
240
+
241
+ concat(uikitUtil.Transition.start(target, targetPropsTo, duration, 'ease'));
242
+
243
+ Promise.all(transitions).
244
+ then(() => {
245
+ nodes.forEach(
246
+ (el, i) =>
247
+ uikitUtil.parent(el) === target &&
248
+ uikitUtil.css(el, 'display', propsTo[i].opacity === 0 ? 'none' : ''));
249
+
250
+ reset(target);
251
+ }, uikitUtil.noop).
252
+ then(resolve);
253
+ });
254
+ });
255
+ }));
225
256
 
226
- });
227
- });
228
- }); });
229
257
  }
230
258
 
231
259
  function getProps(el, opacity) {
232
-
233
- var zIndex = uikitUtil.css(el, 'zIndex');
234
-
235
- return uikitUtil.isVisible(el)
236
- ? uikitUtil.assign({
237
- display: '',
238
- opacity: opacity ? uikitUtil.css(el, 'opacity') : '0',
239
- pointerEvents: 'none',
240
- position: 'absolute',
241
- zIndex: zIndex === 'auto' ? uikitUtil.index(el) : zIndex
242
- }, getPositionWithMargin(el))
243
- : false;
260
+ const zIndex = uikitUtil.css(el, 'zIndex');
261
+
262
+ return uikitUtil.isVisible(el) ?
263
+ {
264
+ display: '',
265
+ opacity: opacity ? uikitUtil.css(el, 'opacity') : '0',
266
+ pointerEvents: 'none',
267
+ position: 'absolute',
268
+ zIndex: zIndex === 'auto' ? uikitUtil.index(el) : zIndex,
269
+ ...getPositionWithMargin(el) } :
270
+
271
+ false;
244
272
  }
245
273
 
246
274
  function getTransitionProps(target, nodes, currentProps) {
275
+ const propsTo = nodes.map((el, i) =>
276
+ uikitUtil.parent(el) && i in currentProps ?
277
+ currentProps[i] ?
278
+ uikitUtil.isVisible(el) ?
279
+ getPositionWithMargin(el) :
280
+ { opacity: 0 } :
281
+ { opacity: uikitUtil.isVisible(el) ? 1 : 0 } :
282
+ false);
247
283
 
248
- var propsTo = nodes.map(function (el, i) { return uikitUtil.parent(el) && i in currentProps
249
- ? currentProps[i]
250
- ? uikitUtil.isVisible(el)
251
- ? getPositionWithMargin(el)
252
- : {opacity: 0}
253
- : {opacity: uikitUtil.isVisible(el) ? 1 : 0}
254
- : false; });
255
-
256
- var propsFrom = propsTo.map(function (props, i) {
257
284
 
258
- var from = uikitUtil.parent(nodes[i]) === target && (currentProps[i] || getProps(nodes[i]));
285
+ const propsFrom = propsTo.map((props, i) => {
286
+ const from = uikitUtil.parent(nodes[i]) === target && (currentProps[i] || getProps(nodes[i]));
259
287
 
260
- if (!from) {
261
- return false;
262
- }
288
+ if (!from) {
289
+ return false;
290
+ }
263
291
 
264
- if (!props) {
265
- delete from.opacity;
266
- } else if (!('opacity' in props)) {
267
- var opacity = from.opacity;
292
+ if (!props) {
293
+ delete from.opacity;
294
+ } else if (!('opacity' in props)) {
295
+ const { opacity } = from;
268
296
 
269
- if (opacity % 1) {
270
- props.opacity = 1;
271
- } else {
272
- delete from.opacity;
273
- }
274
- }
297
+ if (opacity % 1) {
298
+ props.opacity = 1;
299
+ } else {
300
+ delete from.opacity;
301
+ }
302
+ }
275
303
 
276
- return from;
277
- });
304
+ return from;
305
+ });
278
306
 
279
- return [propsTo, propsFrom];
307
+ return [propsTo, propsFrom];
280
308
  }
281
309
 
282
310
  function reset(el) {
283
- uikitUtil.css(el.children, {
284
- height: '',
285
- left: '',
286
- opacity: '',
287
- pointerEvents: '',
288
- position: '',
289
- top: '',
290
- marginTop: '',
291
- marginLeft: '',
292
- transform: '',
293
- width: '',
294
- zIndex: ''
295
- });
296
- uikitUtil.css(el, {height: '', display: '', padding: ''});
311
+ uikitUtil.css(el.children, {
312
+ height: '',
313
+ left: '',
314
+ opacity: '',
315
+ pointerEvents: '',
316
+ position: '',
317
+ top: '',
318
+ marginTop: '',
319
+ marginLeft: '',
320
+ transform: '',
321
+ width: '',
322
+ zIndex: '' });
323
+
324
+ uikitUtil.css(el, { height: '', display: '', padding: '' });
297
325
  }
298
326
 
299
327
  function getPositionWithMargin(el) {
300
- var ref = uikitUtil.offset(el);
301
- var height = ref.height;
302
- var width = ref.width;
303
- var ref$1 = uikitUtil.position(el);
304
- var top = ref$1.top;
305
- var left = ref$1.left;
306
- var ref$2 = uikitUtil.css(el, ['marginTop', 'marginLeft']);
307
- var marginLeft = ref$2.marginLeft;
308
- var marginTop = ref$2.marginTop;
309
-
310
- return {top: top, left: left, height: height, width: width, marginLeft: marginLeft, marginTop: marginTop, transform: ''};
328
+ const { height, width } = uikitUtil.offset(el);
329
+ const { top, left } = uikitUtil.position(el);
330
+ const { marginLeft, marginTop } = uikitUtil.css(el, ['marginTop', 'marginLeft']);
331
+
332
+ return { top, left, height, width, marginLeft, marginTop, transform: '' };
311
333
  }
312
334
 
313
335
  var Animate = {
336
+ props: {
337
+ duration: Number,
338
+ animation: Boolean },
339
+
340
+
341
+ data: {
342
+ duration: 150,
343
+ animation: 'slide' },
344
+
345
+
346
+ methods: {
347
+ animate(action, target) {if (target === void 0) {target = this.$el;}
348
+ const name = this.animation;
349
+ const animationFn =
350
+ name === 'fade' ?
351
+ fade :
352
+ name === 'delayed-fade' ?
353
+ function () {for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}return fade(...args, 40);} :
354
+ name ?
355
+ slide :
356
+ () => {
357
+ action();
358
+ return Promise.resolve();
359
+ };
314
360
 
315
- props: {
316
- duration: Number,
317
- animation: Boolean
318
- },
319
-
320
- data: {
321
- duration: 150,
322
- animation: 'slide'
323
- },
324
-
325
- methods: {
326
-
327
- animate: function(action, target) {
328
- var this$1$1 = this;
329
- if ( target === void 0 ) target = this.$el;
330
-
331
-
332
- var name = this.animation;
333
- var animationFn = name === 'fade'
334
- ? fade
335
- : name === 'delayed-fade'
336
- ? function () {
337
- var args = [], len = arguments.length;
338
- while ( len-- ) args[ len ] = arguments[ len ];
361
+ return animationFn(action, target, this.duration).then(
362
+ () => this.$update(target, 'resize'),
363
+ uikitUtil.noop);
339
364
 
340
- return fade.apply(void 0, args.concat( [40] ));
341
- }
342
- : name
343
- ? slide
344
- : function () {
345
- action();
346
- return uikitUtil.Promise.resolve();
347
- };
348
-
349
- return animationFn(action, target, this.duration)
350
- .then(function () { return this$1$1.$update(target, 'resize'); }, uikitUtil.noop);
351
- }
352
-
353
- }
354
- };
365
+ } } };
355
366
 
356
367
  var Class = {
357
-
358
- connected: function() {
359
- !uikitUtil.hasClass(this.$el, this.$name) && uikitUtil.addClass(this.$el, this.$name);
360
- }
361
-
362
- };
368
+ connected() {
369
+ !uikitUtil.hasClass(this.$el, this.$name) && uikitUtil.addClass(this.$el, this.$name);
370
+ } };
363
371
 
364
372
  var Component = {
373
+ mixins: [Class, Animate],
374
+
375
+ props: {
376
+ group: String,
377
+ threshold: Number,
378
+ clsItem: String,
379
+ clsPlaceholder: String,
380
+ clsDrag: String,
381
+ clsDragState: String,
382
+ clsBase: String,
383
+ clsNoDrag: String,
384
+ clsEmpty: String,
385
+ clsCustom: String,
386
+ handle: String },
387
+
388
+
389
+ data: {
390
+ group: false,
391
+ threshold: 5,
392
+ clsItem: 'uk-sortable-item',
393
+ clsPlaceholder: 'uk-sortable-placeholder',
394
+ clsDrag: 'uk-sortable-drag',
395
+ clsDragState: 'uk-drag',
396
+ clsBase: 'uk-sortable',
397
+ clsNoDrag: 'uk-sortable-nodrag',
398
+ clsEmpty: 'uk-sortable-empty',
399
+ clsCustom: '',
400
+ handle: false,
401
+ pos: {} },
402
+
403
+
404
+ created() {
405
+ for (const key of ['init', 'start', 'move', 'end']) {
406
+ const fn = this[key];
407
+ this[key] = (e) => {
408
+ uikitUtil.assign(this.pos, uikitUtil.getEventPos(e));
409
+ fn(e);
410
+ };
411
+ }
412
+ },
365
413
 
366
- mixins: [Class, Animate],
367
-
368
- props: {
369
- group: String,
370
- threshold: Number,
371
- clsItem: String,
372
- clsPlaceholder: String,
373
- clsDrag: String,
374
- clsDragState: String,
375
- clsBase: String,
376
- clsNoDrag: String,
377
- clsEmpty: String,
378
- clsCustom: String,
379
- handle: String
380
- },
381
-
382
- data: {
383
- group: false,
384
- threshold: 5,
385
- clsItem: 'uk-sortable-item',
386
- clsPlaceholder: 'uk-sortable-placeholder',
387
- clsDrag: 'uk-sortable-drag',
388
- clsDragState: 'uk-drag',
389
- clsBase: 'uk-sortable',
390
- clsNoDrag: 'uk-sortable-nodrag',
391
- clsEmpty: 'uk-sortable-empty',
392
- clsCustom: '',
393
- handle: false,
394
- pos: {}
395
- },
414
+ events: {
415
+ name: uikitUtil.pointerDown,
416
+ passive: false,
417
+ handler: 'init' },
396
418
 
397
- created: function() {
398
- var this$1$1 = this;
399
419
 
400
- ['init', 'start', 'move', 'end'].forEach(function (key) {
401
- var fn = this$1$1[key];
402
- this$1$1[key] = function (e) {
403
- uikitUtil.assign(this$1$1.pos, uikitUtil.getEventPos(e));
404
- fn(e);
405
- };
406
- });
420
+ computed: {
421
+ target() {
422
+ return (this.$el.tBodies || [this.$el])[0];
407
423
  },
408
424
 
409
- events: {
410
-
411
- name: uikitUtil.pointerDown,
412
- passive: false,
413
- handler: 'init'
414
-
425
+ items() {
426
+ return uikitUtil.children(this.target);
415
427
  },
416
428
 
417
- computed: {
418
-
419
- target: function() {
420
- return (this.$el.tBodies || [this.$el])[0];
421
- },
422
-
423
- items: function() {
424
- return uikitUtil.children(this.target);
425
- },
429
+ isEmpty: {
430
+ get() {
431
+ return uikitUtil.isEmpty(this.items);
432
+ },
426
433
 
427
- isEmpty: {
434
+ watch(empty) {
435
+ uikitUtil.toggleClass(this.target, this.clsEmpty, empty);
436
+ },
428
437
 
429
- get: function() {
430
- return uikitUtil.isEmpty(this.items);
431
- },
438
+ immediate: true },
432
439
 
433
- watch: function(empty) {
434
- uikitUtil.toggleClass(this.target, this.clsEmpty, empty);
435
- },
436
440
 
437
- immediate: true
441
+ handles: {
442
+ get(_ref, el) {let { handle } = _ref;
443
+ return handle ? uikitUtil.$$(handle, el) : this.items;
444
+ },
438
445
 
439
- },
446
+ watch(handles, prev) {
447
+ uikitUtil.css(prev, { touchAction: '', userSelect: '' });
448
+ uikitUtil.css(handles, { touchAction: uikitUtil.hasTouch ? 'none' : '', userSelect: 'none' }); // touchAction set to 'none' causes a performance drop in Chrome 80
449
+ },
440
450
 
441
- handles: {
451
+ immediate: true } },
442
452
 
443
- get: function(ref, el) {
444
- var handle = ref.handle;
445
453
 
446
- return handle ? uikitUtil.$$(handle, el) : this.items;
447
- },
448
454
 
449
- watch: function(handles, prev) {
450
- uikitUtil.css(prev, {touchAction: '', userSelect: ''});
451
- uikitUtil.css(handles, {touchAction: uikitUtil.hasTouch ? 'none' : '', userSelect: 'none'}); // touchAction set to 'none' causes a performance drop in Chrome 80
452
- },
453
-
454
- immediate: true
455
-
456
- }
457
-
458
- },
459
-
460
- update: {
461
-
462
- write: function(data) {
463
-
464
- if (!this.drag || !uikitUtil.parent(this.placeholder)) {
465
- return;
466
- }
455
+ update: {
456
+ write(data) {
457
+ if (!this.drag || !uikitUtil.parent(this.placeholder)) {
458
+ return;
459
+ }
467
460
 
468
- var ref = this;
469
- var ref_pos = ref.pos;
470
- var x = ref_pos.x;
471
- var y = ref_pos.y;
472
- var ref_origin = ref.origin;
473
- var offsetTop = ref_origin.offsetTop;
474
- var offsetLeft = ref_origin.offsetLeft;
475
- var placeholder = ref.placeholder;
461
+ const {
462
+ pos: { x, y },
463
+ origin: { offsetTop, offsetLeft },
464
+ placeholder } =
465
+ this;
476
466
 
477
- uikitUtil.css(this.drag, {
478
- top: y - offsetTop,
479
- left: x - offsetLeft
480
- });
467
+ uikitUtil.css(this.drag, {
468
+ top: y - offsetTop,
469
+ left: x - offsetLeft });
481
470
 
482
- var sortable = this.getSortable(document.elementFromPoint(x, y));
483
471
 
484
- if (!sortable) {
485
- return;
486
- }
472
+ const sortable = this.getSortable(document.elementFromPoint(x, y));
487
473
 
488
- var items = sortable.items;
474
+ if (!sortable) {
475
+ return;
476
+ }
489
477
 
490
- if (items.some(uikitUtil.Transition.inProgress)) {
491
- return;
492
- }
478
+ const { items } = sortable;
493
479
 
494
- var target = findTarget(items, {x: x, y: y});
480
+ if (items.some(uikitUtil.Transition.inProgress)) {
481
+ return;
482
+ }
495
483
 
496
- if (items.length && (!target || target === placeholder)) {
497
- return;
498
- }
484
+ const target = findTarget(items, { x, y });
499
485
 
500
- var previous = this.getSortable(placeholder);
501
- var insertTarget = findInsertTarget(sortable.target, target, placeholder, x, y, sortable === previous && data.moved !== target);
486
+ if (items.length && (!target || target === placeholder)) {
487
+ return;
488
+ }
502
489
 
503
- if (insertTarget === false) {
504
- return;
505
- }
490
+ const previous = this.getSortable(placeholder);
491
+ const insertTarget = findInsertTarget(
492
+ sortable.target,
493
+ target,
494
+ placeholder,
495
+ x,
496
+ y,
497
+ sortable === previous && data.moved !== target);
506
498
 
507
- if (insertTarget && placeholder === insertTarget) {
508
- return;
509
- }
510
499
 
511
- if (sortable !== previous) {
512
- previous.remove(placeholder);
513
- data.moved = target;
514
- } else {
515
- delete data.moved;
516
- }
500
+ if (insertTarget === false) {
501
+ return;
502
+ }
517
503
 
518
- sortable.insert(placeholder, insertTarget);
504
+ if (insertTarget && placeholder === insertTarget) {
505
+ return;
506
+ }
519
507
 
520
- this.touched.add(sortable);
521
- },
508
+ if (sortable !== previous) {
509
+ previous.remove(placeholder);
510
+ data.moved = target;
511
+ } else {
512
+ delete data.moved;
513
+ }
522
514
 
523
- events: ['move']
515
+ sortable.insert(placeholder, insertTarget);
524
516
 
517
+ this.touched.add(sortable);
525
518
  },
526
519
 
527
- methods: {
528
-
529
- init: function(e) {
530
-
531
- var target = e.target;
532
- var button = e.button;
533
- var defaultPrevented = e.defaultPrevented;
534
- var ref = this.items.filter(function (el) { return uikitUtil.within(target, el); });
535
- var placeholder = ref[0];
536
-
537
- if (!placeholder
538
- || defaultPrevented
539
- || button > 0
540
- || uikitUtil.isInput(target)
541
- || uikitUtil.within(target, ("." + (this.clsNoDrag)))
542
- || this.handle && !uikitUtil.within(target, this.handle)
543
- ) {
544
- return;
545
- }
546
-
547
- e.preventDefault();
520
+ events: ['move'] },
548
521
 
549
- this.touched = new Set([this]);
550
- this.placeholder = placeholder;
551
- this.origin = uikitUtil.assign({target: target, index: uikitUtil.index(placeholder)}, this.pos);
552
522
 
553
- uikitUtil.on(document, uikitUtil.pointerMove, this.move);
554
- uikitUtil.on(document, uikitUtil.pointerUp, this.end);
523
+ methods: {
524
+ init(e) {
525
+ const { target, button, defaultPrevented } = e;
526
+ const [placeholder] = this.items.filter((el) => uikitUtil.within(target, el));
555
527
 
556
- if (!this.threshold) {
557
- this.start(e);
558
- }
559
-
560
- },
561
-
562
- start: function(e) {
563
-
564
- this.drag = appendDrag(this.$container, this.placeholder);
565
- var ref = this.placeholder.getBoundingClientRect();
566
- var left = ref.left;
567
- var top = ref.top;
568
- uikitUtil.assign(this.origin, {offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top});
569
-
570
- uikitUtil.addClass(this.drag, this.clsDrag, this.clsCustom);
571
- uikitUtil.addClass(this.placeholder, this.clsPlaceholder);
572
- uikitUtil.addClass(this.items, this.clsItem);
573
- uikitUtil.addClass(document.documentElement, this.clsDragState);
574
-
575
- uikitUtil.trigger(this.$el, 'start', [this, this.placeholder]);
576
-
577
- trackScroll(this.pos);
578
-
579
- this.move(e);
580
- },
581
-
582
- move: function(e) {
583
-
584
- if (this.drag) {
585
- this.$emit('move');
586
- } else if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {
587
- this.start(e);
588
- }
528
+ if (
529
+ !placeholder ||
530
+ defaultPrevented ||
531
+ button > 0 ||
532
+ uikitUtil.isInput(target) ||
533
+ uikitUtil.within(target, "." + this.clsNoDrag) ||
534
+ this.handle && !uikitUtil.within(target, this.handle))
535
+ {
536
+ return;
537
+ }
589
538
 
590
- },
539
+ e.preventDefault();
591
540
 
592
- end: function() {
593
- var this$1$1 = this;
541
+ this.touched = new Set([this]);
542
+ this.placeholder = placeholder;
543
+ this.origin = { target, index: uikitUtil.index(placeholder), ...this.pos };
594
544
 
545
+ uikitUtil.on(document, uikitUtil.pointerMove, this.move);
546
+ uikitUtil.on(document, uikitUtil.pointerUp, this.end);
595
547
 
596
- uikitUtil.off(document, uikitUtil.pointerMove, this.move);
597
- uikitUtil.off(document, uikitUtil.pointerUp, this.end);
598
- uikitUtil.off(window, 'scroll', this.scroll);
548
+ if (!this.threshold) {
549
+ this.start(e);
550
+ }
551
+ },
599
552
 
600
- if (!this.drag) {
601
- return;
602
- }
553
+ start(e) {
554
+ this.drag = appendDrag(this.$container, this.placeholder);
555
+ const { left, top } = this.placeholder.getBoundingClientRect();
556
+ uikitUtil.assign(this.origin, { offsetLeft: this.pos.x - left, offsetTop: this.pos.y - top });
603
557
 
604
- untrackScroll();
558
+ uikitUtil.addClass(this.drag, this.clsDrag, this.clsCustom);
559
+ uikitUtil.addClass(this.placeholder, this.clsPlaceholder);
560
+ uikitUtil.addClass(this.items, this.clsItem);
561
+ uikitUtil.addClass(document.documentElement, this.clsDragState);
605
562
 
606
- var sortable = this.getSortable(this.placeholder);
563
+ uikitUtil.trigger(this.$el, 'start', [this, this.placeholder]);
607
564
 
608
- if (this === sortable) {
609
- if (this.origin.index !== uikitUtil.index(this.placeholder)) {
610
- uikitUtil.trigger(this.$el, 'moved', [this, this.placeholder]);
611
- }
612
- } else {
613
- uikitUtil.trigger(sortable.$el, 'added', [sortable, this.placeholder]);
614
- uikitUtil.trigger(this.$el, 'removed', [this, this.placeholder]);
615
- }
565
+ trackScroll(this.pos);
616
566
 
617
- uikitUtil.trigger(this.$el, 'stop', [this, this.placeholder]);
567
+ this.move(e);
568
+ },
618
569
 
619
- uikitUtil.remove(this.drag);
620
- this.drag = null;
570
+ move(e) {
571
+ if (this.drag) {
572
+ this.$emit('move');
573
+ } else if (
574
+ Math.abs(this.pos.x - this.origin.x) > this.threshold ||
575
+ Math.abs(this.pos.y - this.origin.y) > this.threshold)
576
+ {
577
+ this.start(e);
578
+ }
579
+ },
621
580
 
622
- this.touched.forEach(function (ref) {
623
- var clsPlaceholder = ref.clsPlaceholder;
624
- var clsItem = ref.clsItem;
581
+ end() {
582
+ uikitUtil.off(document, uikitUtil.pointerMove, this.move);
583
+ uikitUtil.off(document, uikitUtil.pointerUp, this.end);
625
584
 
626
- return this$1$1.touched.forEach(function (sortable) { return uikitUtil.removeClass(sortable.items, clsPlaceholder, clsItem); }
627
- );
628
- }
629
- );
630
- this.touched = null;
631
- uikitUtil.removeClass(document.documentElement, this.clsDragState);
585
+ if (!this.drag) {
586
+ return;
587
+ }
632
588
 
633
- },
589
+ untrackScroll();
634
590
 
635
- insert: function(element, target) {
636
- var this$1$1 = this;
591
+ const sortable = this.getSortable(this.placeholder);
637
592
 
593
+ if (this === sortable) {
594
+ if (this.origin.index !== uikitUtil.index(this.placeholder)) {
595
+ uikitUtil.trigger(this.$el, 'moved', [this, this.placeholder]);
596
+ }
597
+ } else {
598
+ uikitUtil.trigger(sortable.$el, 'added', [sortable, this.placeholder]);
599
+ uikitUtil.trigger(this.$el, 'removed', [this, this.placeholder]);
600
+ }
638
601
 
639
- uikitUtil.addClass(this.items, this.clsItem);
602
+ uikitUtil.trigger(this.$el, 'stop', [this, this.placeholder]);
640
603
 
641
- var insert = function () { return target
642
- ? uikitUtil.before(target, element)
643
- : uikitUtil.append(this$1$1.target, element); };
604
+ uikitUtil.remove(this.drag);
605
+ this.drag = null;
644
606
 
645
- this.animate(insert);
607
+ for (const { clsPlaceholder, clsItem } of this.touched) {
608
+ for (const sortable of this.touched) {
609
+ uikitUtil.removeClass(sortable.items, clsPlaceholder, clsItem);
610
+ }
611
+ }
612
+ this.touched = null;
613
+ uikitUtil.removeClass(document.documentElement, this.clsDragState);
614
+ },
646
615
 
647
- },
616
+ insert(element, target) {
617
+ uikitUtil.addClass(this.items, this.clsItem);
648
618
 
649
- remove: function(element) {
619
+ const insert = () => target ? uikitUtil.before(target, element) : uikitUtil.append(this.target, element);
650
620
 
651
- if (!uikitUtil.within(element, this.target)) {
652
- return;
653
- }
621
+ this.animate(insert);
622
+ },
654
623
 
655
- this.animate(function () { return uikitUtil.remove(element); });
624
+ remove(element) {
625
+ if (!uikitUtil.within(element, this.target)) {
626
+ return;
627
+ }
656
628
 
657
- },
629
+ this.animate(() => uikitUtil.remove(element));
630
+ },
658
631
 
659
- getSortable: function(element) {
660
- do {
661
- var sortable = this.$getComponent(element, 'sortable');
632
+ getSortable(element) {
633
+ do {
634
+ const sortable = this.$getComponent(element, 'sortable');
662
635
 
663
- if (sortable && (sortable === this || this.group !== false && sortable.group === this.group)) {
664
- return sortable;
665
- }
666
- } while ((element = uikitUtil.parent(element)));
636
+ if (
637
+ sortable && (
638
+ sortable === this || this.group !== false && sortable.group === this.group))
639
+ {
640
+ return sortable;
667
641
  }
642
+ } while (element = uikitUtil.parent(element));
643
+ } } };
668
644
 
669
- }
670
645
 
671
- };
672
646
 
673
- var trackTimer;
647
+ let trackTimer;
674
648
  function trackScroll(pos) {
649
+ let last = Date.now();
650
+ trackTimer = setInterval(() => {
651
+ let { x, y } = pos;
652
+ y += uikitUtil.scrollTop(window);
653
+
654
+ const dist = (Date.now() - last) * 0.3;
655
+ last = Date.now();
656
+
657
+ uikitUtil.scrollParents(document.elementFromPoint(x, pos.y), /auto|scroll/).
658
+ reverse().
659
+ some((scrollEl) => {
660
+ let { scrollTop: scroll, scrollHeight } = scrollEl;
661
+
662
+ const { top, bottom, height } = uikitUtil.offset(uikitUtil.getViewport(scrollEl));
663
+
664
+ if (top < y && top + 35 > y) {
665
+ scroll -= dist;
666
+ } else if (bottom > y && bottom - 35 < y) {
667
+ scroll += dist;
668
+ } else {
669
+ return;
670
+ }
675
671
 
676
- var last = Date.now();
677
- trackTimer = setInterval(function () {
678
-
679
- var x = pos.x;
680
- var y = pos.y;
681
- y += window.pageYOffset;
682
-
683
- var dist = (Date.now() - last) * .3;
684
- last = Date.now();
685
-
686
- uikitUtil.scrollParents(document.elementFromPoint(x, pos.y), /auto|scroll/).reverse().some(function (scrollEl) {
687
-
688
- var scroll = scrollEl.scrollTop;
689
- var scrollHeight = scrollEl.scrollHeight;
690
-
691
- var ref = uikitUtil.offset(uikitUtil.getViewport(scrollEl));
692
- var top = ref.top;
693
- var bottom = ref.bottom;
694
- var height = ref.height;
695
-
696
- if (top < y && top + 35 > y) {
697
- scroll -= dist;
698
- } else if (bottom > y && bottom - 35 < y) {
699
- scroll += dist;
700
- } else {
701
- return;
702
- }
703
-
704
- if (scroll > 0 && scroll < scrollHeight - height) {
705
- uikitUtil.scrollTop(scrollEl, scroll);
706
- return true;
707
- }
708
-
709
- });
710
-
711
- }, 15);
712
-
672
+ if (scroll > 0 && scroll < scrollHeight - height) {
673
+ uikitUtil.scrollTop(scrollEl, scroll);
674
+ return true;
675
+ }
676
+ });
677
+ }, 15);
713
678
  }
714
679
 
715
680
  function untrackScroll() {
716
- clearInterval(trackTimer);
681
+ clearInterval(trackTimer);
717
682
  }
718
683
 
719
684
  function appendDrag(container, element) {
720
- var clone = uikitUtil.append(container, element.outerHTML.replace(/(^<)(?:li|tr)|(?:li|tr)(\/>$)/g, '$1div$2'));
685
+ const clone = uikitUtil.append(
686
+ container,
687
+ element.outerHTML.replace(/(^<)(?:li|tr)|(?:li|tr)(\/>$)/g, '$1div$2'));
688
+
689
+
690
+ uikitUtil.css(clone, 'margin', '0', 'important');
691
+ uikitUtil.css(clone, {
692
+ boxSizing: 'border-box',
693
+ width: element.offsetWidth,
694
+ height: element.offsetHeight,
695
+ padding: uikitUtil.css(element, 'padding') });
721
696
 
722
- uikitUtil.css(clone, 'margin', '0', 'important');
723
- uikitUtil.css(clone, uikitUtil.assign({
724
- boxSizing: 'border-box',
725
- width: element.offsetWidth,
726
- height: element.offsetHeight
727
- }, uikitUtil.css(element, ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'])));
728
697
 
729
- uikitUtil.height(clone.firstElementChild, uikitUtil.height(element.firstElementChild));
698
+ uikitUtil.height(clone.firstElementChild, uikitUtil.height(element.firstElementChild));
730
699
 
731
- return clone;
700
+ return clone;
732
701
  }
733
702
 
734
703
  function findTarget(items, point) {
735
- return items[uikitUtil.findIndex(items, function (item) { return uikitUtil.pointInRect(point, item.getBoundingClientRect()); })];
704
+ return items[uikitUtil.findIndex(items, (item) => uikitUtil.pointInRect(point, item.getBoundingClientRect()))];
736
705
  }
737
706
 
738
707
  function findInsertTarget(list, target, placeholder, x, y, sameList) {
739
-
740
- if (!uikitUtil.children(list).length) {
741
- return;
708
+ if (!uikitUtil.children(list).length) {
709
+ return;
710
+ }
711
+
712
+ const rect = target.getBoundingClientRect();
713
+ if (!sameList) {
714
+ if (!isHorizontal(list, placeholder)) {
715
+ return y < rect.top + rect.height / 2 ? target : target.nextElementSibling;
742
716
  }
743
717
 
744
- var rect = target.getBoundingClientRect();
745
- if (!sameList) {
746
-
747
- if (!isHorizontal(list, placeholder)) {
748
- return y < rect.top + rect.height / 2
749
- ? target
750
- : target.nextElementSibling;
751
- }
752
-
753
- return target;
754
- }
755
-
756
- var placeholderRect = placeholder.getBoundingClientRect();
757
- var sameRow = linesIntersect(
758
- [rect.top, rect.bottom],
759
- [placeholderRect.top, placeholderRect.bottom]
760
- );
718
+ return target;
719
+ }
761
720
 
762
- var pointerPos = sameRow ? x : y;
763
- var lengthProp = sameRow ? 'width' : 'height';
764
- var startProp = sameRow ? 'left' : 'top';
765
- var endProp = sameRow ? 'right' : 'bottom';
721
+ const placeholderRect = placeholder.getBoundingClientRect();
722
+ const sameRow = linesIntersect(
723
+ [rect.top, rect.bottom],
724
+ [placeholderRect.top, placeholderRect.bottom]);
766
725
 
767
- var diff = placeholderRect[lengthProp] < rect[lengthProp] ? rect[lengthProp] - placeholderRect[lengthProp] : 0;
768
726
 
769
- if (placeholderRect[startProp] < rect[startProp]) {
727
+ const pointerPos = sameRow ? x : y;
728
+ const lengthProp = sameRow ? 'width' : 'height';
729
+ const startProp = sameRow ? 'left' : 'top';
730
+ const endProp = sameRow ? 'right' : 'bottom';
770
731
 
771
- if (diff && pointerPos < rect[startProp] + diff) {
772
- return false;
773
- }
732
+ const diff =
733
+ placeholderRect[lengthProp] < rect[lengthProp] ?
734
+ rect[lengthProp] - placeholderRect[lengthProp] :
735
+ 0;
774
736
 
775
- return target.nextElementSibling;
737
+ if (placeholderRect[startProp] < rect[startProp]) {
738
+ if (diff && pointerPos < rect[startProp] + diff) {
739
+ return false;
776
740
  }
777
741
 
778
- if (diff && pointerPos > rect[endProp] - diff) {
779
- return false;
780
- }
742
+ return target.nextElementSibling;
743
+ }
781
744
 
782
- return target;
745
+ if (diff && pointerPos > rect[endProp] - diff) {
746
+ return false;
747
+ }
748
+
749
+ return target;
783
750
  }
784
751
 
785
752
  function isHorizontal(list, placeholder) {
786
-
787
- var single = uikitUtil.children(list).length === 1;
788
-
789
- if (single) {
790
- uikitUtil.append(list, placeholder);
791
- }
792
-
793
- var items = uikitUtil.children(list);
794
- var isHorizontal = items.some(function (el, i) {
795
- var rectA = el.getBoundingClientRect();
796
- return items.slice(i + 1).some(function (el) {
797
- var rectB = el.getBoundingClientRect();
798
- return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]);
799
- });
753
+ const single = uikitUtil.children(list).length === 1;
754
+
755
+ if (single) {
756
+ uikitUtil.append(list, placeholder);
757
+ }
758
+
759
+ const items = uikitUtil.children(list);
760
+ const isHorizontal = items.some((el, i) => {
761
+ const rectA = el.getBoundingClientRect();
762
+ return items.slice(i + 1).some((el) => {
763
+ const rectB = el.getBoundingClientRect();
764
+ return !linesIntersect([rectA.left, rectA.right], [rectB.left, rectB.right]);
800
765
  });
766
+ });
801
767
 
802
- if (single) {
803
- uikitUtil.remove(placeholder);
804
- }
768
+ if (single) {
769
+ uikitUtil.remove(placeholder);
770
+ }
805
771
 
806
- return isHorizontal;
772
+ return isHorizontal;
807
773
  }
808
774
 
809
775
  function linesIntersect(lineA, lineB) {
810
- return lineA[1] > lineB[0] && lineB[1] > lineA[0];
776
+ return lineA[1] > lineB[0] && lineB[1] > lineA[0];
811
777
  }
812
778
 
813
779
  if (typeof window !== 'undefined' && window.UIkit) {
814
- window.UIkit.component('sortable', Component);
780
+ window.UIkit.component('sortable', Component);
815
781
  }
816
782
 
817
783
  return Component;