uikit 3.11.2-dev.78e397546 → 3.11.2-dev.7dd548556

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 (167) 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 +13 -2
  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 +42 -17
  19. package/dist/css/uikit-core-rtl.min.css +1 -1
  20. package/dist/css/uikit-core.css +42 -17
  21. package/dist/css/uikit-core.min.css +1 -1
  22. package/dist/css/uikit-rtl.css +42 -17
  23. package/dist/css/uikit-rtl.min.css +1 -1
  24. package/dist/css/uikit.css +42 -17
  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 +409 -438
  29. package/dist/js/components/filter.min.js +1 -1
  30. package/dist/js/components/lightbox-panel.js +1116 -1305
  31. package/dist/js/components/lightbox-panel.min.js +1 -1
  32. package/dist/js/components/lightbox.js +1164 -1383
  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 +294 -345
  37. package/dist/js/components/parallax.min.js +1 -1
  38. package/dist/js/components/slider-parallax.js +292 -344
  39. package/dist/js/components/slider-parallax.min.js +1 -1
  40. package/dist/js/components/slider.js +724 -846
  41. package/dist/js/components/slider.min.js +1 -1
  42. package/dist/js/components/slideshow-parallax.js +292 -344
  43. package/dist/js/components/slideshow-parallax.min.js +1 -1
  44. package/dist/js/components/slideshow.js +615 -799
  45. package/dist/js/components/slideshow.min.js +1 -1
  46. package/dist/js/components/sortable.js +586 -617
  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 +150 -162
  51. package/dist/js/components/upload.min.js +1 -1
  52. package/dist/js/uikit-core.js +5286 -6612
  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 +8110 -9879
  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 +23 -27
  62. package/src/js/api/global.js +6 -12
  63. package/src/js/api/hooks.js +13 -32
  64. package/src/js/api/instance.js +7 -15
  65. package/src/js/api/state.js +80 -101
  66. package/src/js/components/countdown.js +23 -49
  67. package/src/js/components/filter.js +71 -66
  68. package/src/js/components/index.js +13 -13
  69. package/src/js/components/internal/lightbox-animations.js +11 -23
  70. package/src/js/components/internal/slider-transitioner.js +65 -44
  71. package/src/js/components/internal/slideshow-animations.js +42 -61
  72. package/src/js/components/lightbox-panel.js +135 -109
  73. package/src/js/components/lightbox.js +17 -38
  74. package/src/js/components/notification.js +49 -43
  75. package/src/js/components/parallax.js +16 -30
  76. package/src/js/components/slider-parallax.js +13 -23
  77. package/src/js/components/slider.js +73 -61
  78. package/src/js/components/slideshow-parallax.js +1 -1
  79. package/src/js/components/slideshow.js +8 -13
  80. package/src/js/components/sortable.js +121 -102
  81. package/src/js/components/tooltip.js +41 -31
  82. package/src/js/components/upload.js +52 -63
  83. package/src/js/core/accordion.js +54 -49
  84. package/src/js/core/alert.js +10 -17
  85. package/src/js/core/core.js +74 -53
  86. package/src/js/core/cover.js +11 -15
  87. package/src/js/core/drop.js +107 -93
  88. package/src/js/core/form-custom.js +20 -25
  89. package/src/js/core/gif.js +3 -7
  90. package/src/js/core/grid.js +57 -58
  91. package/src/js/core/height-match.js +15 -28
  92. package/src/js/core/height-viewport.js +28 -35
  93. package/src/js/core/icon.js +38 -50
  94. package/src/js/core/img.js +57 -58
  95. package/src/js/core/index.js +39 -39
  96. package/src/js/core/leader.js +9 -18
  97. package/src/js/core/margin.js +21 -37
  98. package/src/js/core/modal.js +50 -36
  99. package/src/js/core/nav.js +2 -4
  100. package/src/js/core/navbar.js +112 -84
  101. package/src/js/core/offcanvas.js +49 -53
  102. package/src/js/core/overflow-auto.js +13 -17
  103. package/src/js/core/responsive.js +14 -12
  104. package/src/js/core/scroll.js +10 -20
  105. package/src/js/core/scrollspy-nav.js +34 -31
  106. package/src/js/core/scrollspy.js +34 -51
  107. package/src/js/core/sticky.js +139 -94
  108. package/src/js/core/svg.js +60 -79
  109. package/src/js/core/switcher.js +47 -46
  110. package/src/js/core/tab.js +7 -10
  111. package/src/js/core/toggle.js +63 -65
  112. package/src/js/core/video.js +11 -22
  113. package/src/js/mixin/animate.js +19 -20
  114. package/src/js/mixin/class.js +2 -4
  115. package/src/js/mixin/container.js +7 -11
  116. package/src/js/mixin/internal/animate-fade.js +73 -30
  117. package/src/js/mixin/internal/animate-slide.js +61 -41
  118. package/src/js/mixin/internal/slideshow-animations.js +7 -14
  119. package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
  120. package/src/js/mixin/media.js +5 -10
  121. package/src/js/mixin/modal.js +89 -66
  122. package/src/js/mixin/parallax.js +53 -48
  123. package/src/js/mixin/position.js +26 -20
  124. package/src/js/mixin/slider-autoplay.js +12 -21
  125. package/src/js/mixin/slider-drag.js +62 -63
  126. package/src/js/mixin/slider-nav.js +25 -34
  127. package/src/js/mixin/slider-reactive.js +2 -8
  128. package/src/js/mixin/slider.js +51 -50
  129. package/src/js/mixin/slideshow.js +13 -19
  130. package/src/js/mixin/togglable.js +90 -63
  131. package/src/js/uikit-core.js +2 -4
  132. package/src/js/uikit.js +2 -4
  133. package/src/js/util/ajax.js +27 -43
  134. package/src/js/util/animation.js +82 -75
  135. package/src/js/util/attr.js +9 -15
  136. package/src/js/util/class.js +14 -52
  137. package/src/js/util/dimensions.js +56 -43
  138. package/src/js/util/dom.js +36 -54
  139. package/src/js/util/env.js +7 -12
  140. package/src/js/util/event.js +60 -59
  141. package/src/js/util/fastdom.js +1 -6
  142. package/src/js/util/filter.js +17 -34
  143. package/src/js/util/index.js +0 -1
  144. package/src/js/util/lang.js +79 -119
  145. package/src/js/util/mouse.js +19 -17
  146. package/src/js/util/options.js +44 -49
  147. package/src/js/util/player.js +40 -36
  148. package/src/js/util/position.js +53 -45
  149. package/src/js/util/promise.js +0 -191
  150. package/src/js/util/selector.js +39 -48
  151. package/src/js/util/style.js +36 -46
  152. package/src/js/util/viewport.js +75 -64
  153. package/src/less/components/flex.less +0 -9
  154. package/src/less/components/navbar.less +0 -7
  155. package/src/less/components/utility.less +22 -0
  156. package/src/scss/components/flex.scss +0 -9
  157. package/src/scss/components/form.scss +3 -3
  158. package/src/scss/components/icon.scss +2 -2
  159. package/src/scss/components/navbar.scss +0 -7
  160. package/src/scss/components/search.scss +1 -1
  161. package/src/scss/components/utility.scss +22 -0
  162. package/src/scss/variables-theme.scss +6 -6
  163. package/src/scss/variables.scss +6 -6
  164. package/tests/js/index.js +114 -85
  165. package/tests/sticky-parallax.html +1 -1
  166. package/tests/sticky.html +14 -3
  167. package/src/js/mixin/flex-bug.js +0 -56
@@ -1,8 +1,18 @@
1
- import {$$, css, filter, data as getData, isInView, once, Promise, removeClass, removeClasses, toggleClass, trigger} from 'uikit-util';
1
+ import {
2
+ $$,
3
+ css,
4
+ filter,
5
+ data as getData,
6
+ isInView,
7
+ once,
8
+ removeClass,
9
+ removeClasses,
10
+ toggleClass,
11
+ trigger,
12
+ } from 'uikit-util';
2
13
 
3
14
  const stateKey = '_ukScrollspy';
4
15
  export default {
5
-
6
16
  args: 'cls',
7
17
 
8
18
  props: {
@@ -12,7 +22,7 @@ export default {
12
22
  offsetTop: Number,
13
23
  offsetLeft: Number,
14
24
  repeat: Boolean,
15
- delay: Number
25
+ delay: Number,
16
26
  },
17
27
 
18
28
  data: () => ({
@@ -23,14 +33,12 @@ export default {
23
33
  offsetLeft: 0,
24
34
  repeat: false,
25
35
  delay: 0,
26
- inViewClass: 'uk-scrollspy-inview'
36
+ inViewClass: 'uk-scrollspy-inview',
27
37
  }),
28
38
 
29
39
  computed: {
30
-
31
40
  elements: {
32
-
33
- get({target}, $el) {
41
+ get({ target }, $el) {
34
42
  return target ? $$(target, $el) : [$el];
35
43
  },
36
44
 
@@ -40,25 +48,20 @@ export default {
40
48
  }
41
49
  },
42
50
 
43
- immediate: true
44
-
45
- }
46
-
51
+ immediate: true,
52
+ },
47
53
  },
48
54
 
49
55
  disconnected() {
50
- this.elements.forEach(el => {
56
+ this.elements.forEach((el) => {
51
57
  removeClass(el, this.inViewClass, el[stateKey] ? el[stateKey].cls : '');
52
58
  delete el[stateKey];
53
59
  });
54
60
  },
55
61
 
56
62
  update: [
57
-
58
63
  {
59
-
60
64
  read(data) {
61
-
62
65
  // Let child components be applied at least once first
63
66
  if (!data.update) {
64
67
  Promise.resolve().then(() => {
@@ -68,60 +71,43 @@ export default {
68
71
  return false;
69
72
  }
70
73
 
71
- this.elements.forEach(el => {
72
-
74
+ this.elements.forEach((el) => {
73
75
  if (!el[stateKey]) {
74
- el[stateKey] = {cls: getData(el, 'uk-scrollspy-class') || this.cls};
76
+ el[stateKey] = { cls: getData(el, 'uk-scrollspy-class') || this.cls };
75
77
  }
76
78
 
77
79
  el[stateKey].show = isInView(el, this.offsetTop, this.offsetLeft);
78
-
79
80
  });
80
-
81
81
  },
82
82
 
83
83
  write(data) {
84
-
85
- this.elements.forEach(el => {
86
-
84
+ this.elements.forEach((el) => {
87
85
  const state = el[stateKey];
88
86
 
89
87
  if (state.show && !state.inview && !state.queued) {
90
-
91
88
  state.queued = true;
92
89
 
93
- data.promise = (data.promise || Promise.resolve()).then(() =>
94
- new Promise(resolve =>
95
- setTimeout(resolve, this.delay)
96
- )
97
- ).then(() => {
98
- this.toggle(el, true);
99
- setTimeout(() => {
100
- state.queued = false;
101
- this.$emit();
102
- }, 300);
103
- });
104
-
90
+ data.promise = (data.promise || Promise.resolve())
91
+ .then(() => new Promise((resolve) => setTimeout(resolve, this.delay)))
92
+ .then(() => {
93
+ this.toggle(el, true);
94
+ setTimeout(() => {
95
+ state.queued = false;
96
+ this.$emit();
97
+ }, 300);
98
+ });
105
99
  } else if (!state.show && state.inview && !state.queued && this.repeat) {
106
-
107
100
  this.toggle(el, false);
108
-
109
101
  }
110
-
111
102
  });
112
-
113
103
  },
114
104
 
115
- events: ['scroll', 'resize']
116
-
117
- }
118
-
105
+ events: ['scroll', 'resize'],
106
+ },
119
107
  ],
120
108
 
121
109
  methods: {
122
-
123
110
  toggle(el, inview) {
124
-
125
111
  const state = el[stateKey];
126
112
 
127
113
  state.off && state.off();
@@ -142,9 +128,6 @@ export default {
142
128
  state.inview = inview;
143
129
 
144
130
  this.$update(el);
145
- }
146
-
147
- }
148
-
131
+ },
132
+ },
149
133
  };
150
-
@@ -1,9 +1,37 @@
1
1
  import Class from '../mixin/class';
2
2
  import Media from '../mixin/media';
3
- import {$, addClass, after, Animation, assign, clamp, css, dimensions, fastdom, height as getHeight, getScrollingElement, hasClass, isNumeric, isString, isVisible, noop, offset, offsetPosition, parent, query, remove, removeClass, replaceClass, scrollTop, toggleClass, toPx, trigger, within} from 'uikit-util';
3
+ import {
4
+ $,
5
+ addClass,
6
+ after,
7
+ Animation,
8
+ clamp,
9
+ css,
10
+ dimensions,
11
+ fastdom,
12
+ height as getHeight,
13
+ getScrollingElement,
14
+ hasClass,
15
+ isNumeric,
16
+ isString,
17
+ isVisible,
18
+ noop,
19
+ offset,
20
+ offsetPosition,
21
+ parent,
22
+ query,
23
+ remove,
24
+ removeClass,
25
+ replaceClass,
26
+ scrollTop,
27
+ toFloat,
28
+ toggleClass,
29
+ toPx,
30
+ trigger,
31
+ within,
32
+ } from 'uikit-util';
4
33
 
5
34
  export default {
6
-
7
35
  mixins: [Class, Media],
8
36
 
9
37
  props: {
@@ -19,7 +47,7 @@ export default {
19
47
  selTarget: String,
20
48
  widthElement: Boolean,
21
49
  showOnUp: Boolean,
22
- targetOffset: Number
50
+ targetOffset: Number,
23
51
  },
24
52
 
25
53
  data: {
@@ -35,12 +63,11 @@ export default {
35
63
  selTarget: '',
36
64
  widthElement: false,
37
65
  showOnUp: false,
38
- targetOffset: false
66
+ targetOffset: false,
39
67
  },
40
68
 
41
69
  computed: {
42
-
43
- position({position}, $el) {
70
+ position({ position }, $el) {
44
71
  return position === 'auto'
45
72
  ? (this.isFixed ? this.placeholder : $el).offsetHeight > getHeight(window)
46
73
  ? 'bottom'
@@ -48,23 +75,22 @@ export default {
48
75
  : position;
49
76
  },
50
77
 
51
- offset({offset}, $el) {
78
+ offset({ offset }, $el) {
52
79
  if (this.position === 'bottom') {
53
80
  offset += '+100vh-100%';
54
81
  }
55
82
  return toPx(offset, 'height', $el);
56
83
  },
57
84
 
58
- selTarget({selTarget}, $el) {
59
- return selTarget && $(selTarget, $el) || $el;
85
+ selTarget({ selTarget }, $el) {
86
+ return (selTarget && $(selTarget, $el)) || $el;
60
87
  },
61
88
 
62
- widthElement({widthElement}, $el) {
89
+ widthElement({ widthElement }, $el) {
63
90
  return query(widthElement, $el) || this.placeholder;
64
91
  },
65
92
 
66
93
  isActive: {
67
-
68
94
  get() {
69
95
  return hasClass(this.selTarget, this.clsActive);
70
96
  },
@@ -77,20 +103,19 @@ export default {
77
103
  replaceClass(this.selTarget, this.clsActive, this.clsInactive);
78
104
  trigger(this.$el, 'inactive');
79
105
  }
80
- }
81
-
82
- }
83
-
106
+ },
107
+ },
84
108
  },
85
109
 
86
110
  connected() {
87
- this.placeholder = $('+ .uk-sticky-placeholder', this.$el) || $('<div class="uk-sticky-placeholder"></div>');
111
+ this.placeholder =
112
+ $('+ .uk-sticky-placeholder', this.$el) ||
113
+ $('<div class="uk-sticky-placeholder"></div>');
88
114
  this.isFixed = false;
89
115
  this.isActive = false;
90
116
  },
91
117
 
92
118
  disconnected() {
93
-
94
119
  if (this.isFixed) {
95
120
  this.hide();
96
121
  removeClass(this.selTarget, this.clsInactive);
@@ -102,9 +127,7 @@ export default {
102
127
  },
103
128
 
104
129
  events: [
105
-
106
130
  {
107
-
108
131
  name: 'load hashchange popstate',
109
132
 
110
133
  el() {
@@ -112,7 +135,6 @@ export default {
112
135
  },
113
136
 
114
137
  handler() {
115
-
116
138
  if (!(this.targetOffset !== false && location.hash && scrollTop(window) > 0)) {
117
139
  return;
118
140
  }
@@ -121,43 +143,51 @@ export default {
121
143
 
122
144
  if (target) {
123
145
  fastdom.read(() => {
124
-
125
- const {top} = offset(target);
146
+ const { top } = offset(target);
126
147
  const elTop = offset(this.$el).top;
127
148
  const elHeight = this.$el.offsetHeight;
128
149
 
129
- if (this.isFixed && elTop + elHeight >= top && elTop <= top + target.offsetHeight) {
130
- scrollTop(window, top - elHeight - (isNumeric(this.targetOffset) ? this.targetOffset : 0) - this.offset);
150
+ if (
151
+ this.isFixed &&
152
+ elTop + elHeight >= top &&
153
+ elTop <= top + target.offsetHeight
154
+ ) {
155
+ scrollTop(
156
+ window,
157
+ top -
158
+ elHeight -
159
+ (isNumeric(this.targetOffset) ? this.targetOffset : 0) -
160
+ this.offset
161
+ );
131
162
  }
132
-
133
163
  });
134
164
  }
135
-
136
- }
137
-
138
- }
139
-
165
+ },
166
+ },
140
167
  ],
141
168
 
142
169
  update: [
143
-
144
170
  {
145
-
146
- read({height}, types) {
147
-
171
+ read({ height, margin }, types) {
148
172
  this.inactive = !this.matchMedia || !isVisible(this.$el);
149
173
 
150
174
  if (this.inactive) {
151
175
  return false;
152
176
  }
153
177
 
154
- if (this.isActive && types.has('resize')) {
178
+ const hide = this.isActive && types.has('resize');
179
+ if (hide) {
155
180
  this.hide();
181
+ }
182
+
183
+ if (!this.isActive) {
156
184
  height = this.$el.offsetHeight;
157
- this.show();
185
+ margin = css(this.$el, 'margin');
158
186
  }
159
187
 
160
- height = this.isActive ? height : this.$el.offsetHeight;
188
+ if (hide) {
189
+ this.show();
190
+ }
161
191
 
162
192
  const overflow = Math.max(0, height + this.offset - getHeight(window));
163
193
 
@@ -166,7 +196,7 @@ export default {
166
196
  const offsetParentTop = offset(referenceElement.offsetParent).top;
167
197
 
168
198
  const top = parseProp(this.top, this.$el, topOffset);
169
- const bottom = parseProp(this.bottom, this.$el, topOffset + height);
199
+ const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
170
200
 
171
201
  const start = Math.max(top, topOffset) - this.offset;
172
202
  const end = bottom
@@ -180,17 +210,17 @@ export default {
180
210
  topOffset,
181
211
  offsetParentTop,
182
212
  height,
183
- width: dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el).width,
213
+ margin,
214
+ width: dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el)
215
+ .width,
184
216
  top: offsetPosition(this.placeholder)[0],
185
- margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])
186
217
  };
187
218
  },
188
219
 
189
- write({height, margins}) {
190
-
191
- const {placeholder} = this;
220
+ write({ height, margin }) {
221
+ const { placeholder } = this;
192
222
 
193
- css(placeholder, assign({height}, margins));
223
+ css(placeholder, { height, margin });
194
224
 
195
225
  if (!within(placeholder, document)) {
196
226
  after(this.$el, placeholder);
@@ -198,17 +228,20 @@ export default {
198
228
  }
199
229
 
200
230
  this.isActive = !!this.isActive; // force self-assign
201
-
202
231
  },
203
232
 
204
- events: ['resize']
205
-
233
+ events: ['resize'],
206
234
  },
207
235
 
208
236
  {
209
-
210
- read({scroll: prevScroll = 0, dir: prevDir = 'down', overflow, overflowScroll = 0, start, end}) {
211
-
237
+ read({
238
+ scroll: prevScroll = 0,
239
+ dir: prevDir = 'down',
240
+ overflow,
241
+ overflowScroll = 0,
242
+ start,
243
+ end,
244
+ }) {
212
245
  const scroll = scrollTop(window);
213
246
  const dir = prevScroll <= scroll ? 'down' : 'up';
214
247
 
@@ -218,21 +251,32 @@ export default {
218
251
  scroll,
219
252
  prevScroll,
220
253
  overflowScroll: clamp(
221
- overflowScroll
222
- + clamp(scroll, start, end)
223
- - clamp(prevScroll, start, end),
254
+ overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
224
255
  0,
225
256
  overflow
226
- )
257
+ ),
227
258
  };
228
259
  },
229
260
 
230
261
  write(data, types) {
231
-
232
262
  const isScrollUpdate = types.has('scroll');
233
- const {initTimestamp = 0, dir, prevDir, scroll, prevScroll = 0, top, start, topOffset, height} = data;
263
+ const {
264
+ initTimestamp = 0,
265
+ dir,
266
+ prevDir,
267
+ scroll,
268
+ prevScroll = 0,
269
+ top,
270
+ start,
271
+ topOffset,
272
+ height,
273
+ } = data;
234
274
 
235
- if (scroll < 0 || scroll === prevScroll && isScrollUpdate || this.showOnUp && !isScrollUpdate && !this.isFixed) {
275
+ if (
276
+ scroll < 0 ||
277
+ (scroll === prevScroll && isScrollUpdate) ||
278
+ (this.showOnUp && !isScrollUpdate && !this.isFixed)
279
+ ) {
236
280
  return;
237
281
  }
238
282
 
@@ -242,17 +286,24 @@ export default {
242
286
  data.initTimestamp = now;
243
287
  }
244
288
 
245
- if (this.showOnUp && !this.isFixed && Math.abs(data.initScroll - scroll) <= 30 && Math.abs(prevScroll - scroll) <= 10) {
289
+ if (
290
+ this.showOnUp &&
291
+ !this.isFixed &&
292
+ Math.abs(data.initScroll - scroll) <= 30 &&
293
+ Math.abs(prevScroll - scroll) <= 10
294
+ ) {
246
295
  return;
247
296
  }
248
297
 
249
- if (this.inactive
250
- || scroll < start
251
- || this.showOnUp && (scroll <= start || dir === 'down' && isScrollUpdate || dir === 'up' && !this.isFixed && scroll <= topOffset + height)
298
+ if (
299
+ this.inactive ||
300
+ scroll < start ||
301
+ (this.showOnUp &&
302
+ (scroll <= start ||
303
+ (dir === 'down' && isScrollUpdate) ||
304
+ (dir === 'up' && !this.isFixed && scroll <= topOffset + height)))
252
305
  ) {
253
-
254
306
  if (!this.isFixed) {
255
-
256
307
  if (Animation.inProgress(this.$el) && top > scroll) {
257
308
  Animation.cancel(this.$el);
258
309
  this.hide();
@@ -269,51 +320,47 @@ export default {
269
320
  } else {
270
321
  this.hide();
271
322
  }
272
-
273
323
  } else if (this.isFixed) {
274
-
275
324
  this.update();
276
-
277
325
  } else if (this.animation) {
278
-
279
326
  Animation.cancel(this.$el);
280
327
  this.show();
281
328
  Animation.in(this.$el, this.animation).catch(noop);
282
-
283
329
  } else {
284
330
  this.show();
285
331
  }
286
-
287
332
  },
288
333
 
289
- events: ['resize', 'scroll']
290
-
291
- }
292
-
334
+ events: ['resize', 'scroll'],
335
+ },
293
336
  ],
294
337
 
295
338
  methods: {
296
-
297
339
  show() {
298
-
299
340
  this.isFixed = true;
300
341
  this.update();
301
342
  this.placeholder.hidden = false;
302
-
303
343
  },
304
344
 
305
345
  hide() {
306
-
307
346
  this.isActive = false;
308
347
  removeClass(this.$el, this.clsFixed, this.clsBelow);
309
- css(this.$el, {position: '', top: '', width: ''});
348
+ css(this.$el, { position: '', top: '', width: '' });
310
349
  this.placeholder.hidden = true;
311
-
312
350
  },
313
351
 
314
352
  update() {
315
-
316
- const {width, scroll = 0, overflow, overflowScroll = 0, start, end, topOffset, height, offsetParentTop} = this._data;
353
+ const {
354
+ width,
355
+ scroll = 0,
356
+ overflow,
357
+ overflowScroll = 0,
358
+ start,
359
+ end,
360
+ topOffset,
361
+ height,
362
+ offsetParentTop,
363
+ } = this._data;
317
364
  const active = start !== 0 || scroll > start;
318
365
  let top = this.offset;
319
366
  let position = 'fixed';
@@ -330,32 +377,30 @@ export default {
330
377
  css(this.$el, {
331
378
  position,
332
379
  top: `${top}px`,
333
- width
380
+ width,
334
381
  });
335
382
 
336
383
  this.isActive = active;
337
384
  toggleClass(this.$el, this.clsBelow, scroll > topOffset + height);
338
385
  addClass(this.$el, this.clsFixed);
339
-
340
- }
341
-
342
- }
343
-
386
+ },
387
+ },
344
388
  };
345
389
 
346
- function parseProp(value, el, propOffset) {
347
-
390
+ function parseProp(value, el, propOffset, padding) {
348
391
  if (!value) {
349
392
  return 0;
350
393
  }
351
394
 
352
395
  if (isString(value) && value.match(/^-?\d/)) {
353
-
354
396
  return propOffset + toPx(value);
355
-
356
397
  } else {
357
-
358
- return offset(value === true ? parent(el) : query(value, el)).bottom;
359
-
398
+ const refElement = value === true ? parent(el) : query(value, el);
399
+ return (
400
+ offset(refElement).bottom -
401
+ (padding && refElement && within(el, refElement)
402
+ ? toFloat(css(refElement, 'paddingBottom'))
403
+ : 0)
404
+ );
360
405
  }
361
406
  }