uikit 3.11.2-dev.19d26d0f9 → 3.11.2-dev.21a5b7139

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 +16 -1
  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 +410 -437
  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 +587 -616
  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 +153 -161
  51. package/dist/js/components/upload.min.js +1 -1
  52. package/dist/js/uikit-core.js +5293 -6602
  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 +8114 -9862
  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 +46 -53
  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 +10 -24
  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 +151 -93
  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 +6 -12
  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 +44 -41
  166. package/tests/sticky.html +20 -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,12 +1,41 @@
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: {
38
+ position: String,
10
39
  top: null,
11
40
  bottom: Boolean,
12
41
  offset: String,
@@ -18,10 +47,11 @@ export default {
18
47
  selTarget: String,
19
48
  widthElement: Boolean,
20
49
  showOnUp: Boolean,
21
- targetOffset: Number
50
+ targetOffset: Number,
22
51
  },
23
52
 
24
53
  data: {
54
+ position: 'top',
25
55
  top: 0,
26
56
  bottom: false,
27
57
  offset: 0,
@@ -33,25 +63,34 @@ export default {
33
63
  selTarget: '',
34
64
  widthElement: false,
35
65
  showOnUp: false,
36
- targetOffset: false
66
+ targetOffset: false,
37
67
  },
38
68
 
39
69
  computed: {
70
+ position({ position }, $el) {
71
+ return position === 'auto'
72
+ ? (this.isFixed ? this.placeholder : $el).offsetHeight > getHeight(window)
73
+ ? 'bottom'
74
+ : 'top'
75
+ : position;
76
+ },
40
77
 
41
- offset({offset}, $el) {
78
+ offset({ offset }, $el) {
79
+ if (this.position === 'bottom') {
80
+ offset += '+100vh-100%';
81
+ }
42
82
  return toPx(offset, 'height', $el);
43
83
  },
44
84
 
45
- selTarget({selTarget}, $el) {
46
- return selTarget && $(selTarget, $el) || $el;
85
+ selTarget({ selTarget }, $el) {
86
+ return (selTarget && $(selTarget, $el)) || $el;
47
87
  },
48
88
 
49
- widthElement({widthElement}, $el) {
89
+ widthElement({ widthElement }, $el) {
50
90
  return query(widthElement, $el) || this.placeholder;
51
91
  },
52
92
 
53
93
  isActive: {
54
-
55
94
  get() {
56
95
  return hasClass(this.selTarget, this.clsActive);
57
96
  },
@@ -64,20 +103,19 @@ export default {
64
103
  replaceClass(this.selTarget, this.clsActive, this.clsInactive);
65
104
  trigger(this.$el, 'inactive');
66
105
  }
67
- }
68
-
69
- }
70
-
106
+ },
107
+ },
71
108
  },
72
109
 
73
110
  connected() {
74
- 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>');
75
114
  this.isFixed = false;
76
115
  this.isActive = false;
77
116
  },
78
117
 
79
118
  disconnected() {
80
-
81
119
  if (this.isFixed) {
82
120
  this.hide();
83
121
  removeClass(this.selTarget, this.clsInactive);
@@ -89,9 +127,7 @@ export default {
89
127
  },
90
128
 
91
129
  events: [
92
-
93
130
  {
94
-
95
131
  name: 'load hashchange popstate',
96
132
 
97
133
  el() {
@@ -99,7 +135,6 @@ export default {
99
135
  },
100
136
 
101
137
  handler() {
102
-
103
138
  if (!(this.targetOffset !== false && location.hash && scrollTop(window) > 0)) {
104
139
  return;
105
140
  }
@@ -108,43 +143,51 @@ export default {
108
143
 
109
144
  if (target) {
110
145
  fastdom.read(() => {
111
-
112
- const {top} = offset(target);
146
+ const { top } = offset(target);
113
147
  const elTop = offset(this.$el).top;
114
148
  const elHeight = this.$el.offsetHeight;
115
149
 
116
- if (this.isFixed && elTop + elHeight >= top && elTop <= top + target.offsetHeight) {
117
- 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
+ );
118
162
  }
119
-
120
163
  });
121
164
  }
122
-
123
- }
124
-
125
- }
126
-
165
+ },
166
+ },
127
167
  ],
128
168
 
129
169
  update: [
130
-
131
170
  {
132
-
133
- read({height}, types) {
134
-
171
+ read({ height, margin }, types) {
135
172
  this.inactive = !this.matchMedia || !isVisible(this.$el);
136
173
 
137
174
  if (this.inactive) {
138
175
  return false;
139
176
  }
140
177
 
141
- if (this.isActive && types.has('resize')) {
178
+ const hide = this.isActive && types.has('resize');
179
+ if (hide) {
142
180
  this.hide();
181
+ }
182
+
183
+ if (!this.isActive) {
143
184
  height = this.$el.offsetHeight;
144
- this.show();
185
+ margin = css(this.$el, 'margin');
145
186
  }
146
187
 
147
- height = this.isActive ? height : this.$el.offsetHeight;
188
+ if (hide) {
189
+ this.show();
190
+ }
148
191
 
149
192
  const overflow = Math.max(0, height + this.offset - getHeight(window));
150
193
 
@@ -153,7 +196,7 @@ export default {
153
196
  const offsetParentTop = offset(referenceElement.offsetParent).top;
154
197
 
155
198
  const top = parseProp(this.top, this.$el, topOffset);
156
- const bottom = parseProp(this.bottom, this.$el, topOffset + height);
199
+ const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
157
200
 
158
201
  const start = Math.max(top, topOffset) - this.offset;
159
202
  const end = bottom
@@ -167,17 +210,17 @@ export default {
167
210
  topOffset,
168
211
  offsetParentTop,
169
212
  height,
170
- width: dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el).width,
213
+ margin,
214
+ width: dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el)
215
+ .width,
171
216
  top: offsetPosition(this.placeholder)[0],
172
- margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])
173
217
  };
174
218
  },
175
219
 
176
- write({height, margins}) {
177
-
178
- const {placeholder} = this;
220
+ write({ height, margin }) {
221
+ const { placeholder } = this;
179
222
 
180
- css(placeholder, assign({height}, margins));
223
+ css(placeholder, { height, margin });
181
224
 
182
225
  if (!within(placeholder, document)) {
183
226
  after(this.$el, placeholder);
@@ -185,17 +228,20 @@ export default {
185
228
  }
186
229
 
187
230
  this.isActive = !!this.isActive; // force self-assign
188
-
189
231
  },
190
232
 
191
- events: ['resize']
192
-
233
+ events: ['resize'],
193
234
  },
194
235
 
195
236
  {
196
-
197
- read({scroll: prevScroll = 0, dir: prevDir = 'down', overflow, overflowScroll = 0, start, end}) {
198
-
237
+ read({
238
+ scroll: prevScroll = 0,
239
+ dir: prevDir = 'down',
240
+ overflow,
241
+ overflowScroll = 0,
242
+ start,
243
+ end,
244
+ }) {
199
245
  const scroll = scrollTop(window);
200
246
  const dir = prevScroll <= scroll ? 'down' : 'up';
201
247
 
@@ -205,21 +251,32 @@ export default {
205
251
  scroll,
206
252
  prevScroll,
207
253
  overflowScroll: clamp(
208
- overflowScroll
209
- + clamp(scroll, start, end)
210
- - clamp(prevScroll, start, end),
254
+ overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
211
255
  0,
212
256
  overflow
213
- )
257
+ ),
214
258
  };
215
259
  },
216
260
 
217
261
  write(data, types) {
218
-
219
262
  const isScrollUpdate = types.has('scroll');
220
- 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;
221
274
 
222
- 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
+ ) {
223
280
  return;
224
281
  }
225
282
 
@@ -229,17 +286,24 @@ export default {
229
286
  data.initTimestamp = now;
230
287
  }
231
288
 
232
- 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
+ ) {
233
295
  return;
234
296
  }
235
297
 
236
- if (this.inactive
237
- || scroll < start
238
- || 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)))
239
305
  ) {
240
-
241
306
  if (!this.isFixed) {
242
-
243
307
  if (Animation.inProgress(this.$el) && top > scroll) {
244
308
  Animation.cancel(this.$el);
245
309
  this.hide();
@@ -256,53 +320,49 @@ export default {
256
320
  } else {
257
321
  this.hide();
258
322
  }
259
-
260
323
  } else if (this.isFixed) {
261
-
262
324
  this.update();
263
-
264
325
  } else if (this.animation) {
265
-
266
326
  Animation.cancel(this.$el);
267
327
  this.show();
268
328
  Animation.in(this.$el, this.animation).catch(noop);
269
-
270
329
  } else {
271
330
  this.show();
272
331
  }
273
-
274
332
  },
275
333
 
276
- events: ['resize', 'scroll']
277
-
278
- }
279
-
334
+ events: ['resize', 'scroll'],
335
+ },
280
336
  ],
281
337
 
282
338
  methods: {
283
-
284
339
  show() {
285
-
286
340
  this.isFixed = true;
287
341
  this.update();
288
342
  this.placeholder.hidden = false;
289
-
290
343
  },
291
344
 
292
345
  hide() {
293
-
294
346
  this.isActive = false;
295
347
  removeClass(this.$el, this.clsFixed, this.clsBelow);
296
- css(this.$el, {position: '', top: '', width: ''});
348
+ css(this.$el, { position: '', top: '', width: '' });
297
349
  this.placeholder.hidden = true;
298
-
299
350
  },
300
351
 
301
352
  update() {
302
-
303
- 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;
304
364
  const active = start !== 0 || scroll > start;
305
- let top = Math.max(0, this.offset);
365
+ let top = this.offset;
306
366
  let position = 'fixed';
307
367
 
308
368
  if (scroll > end) {
@@ -317,32 +377,30 @@ export default {
317
377
  css(this.$el, {
318
378
  position,
319
379
  top: `${top}px`,
320
- width
380
+ width,
321
381
  });
322
382
 
323
383
  this.isActive = active;
324
384
  toggleClass(this.$el, this.clsBelow, scroll > topOffset + height);
325
385
  addClass(this.$el, this.clsFixed);
326
-
327
- }
328
-
329
- }
330
-
386
+ },
387
+ },
331
388
  };
332
389
 
333
- function parseProp(value, el, propOffset) {
334
-
390
+ function parseProp(value, el, propOffset, padding) {
335
391
  if (!value) {
336
392
  return 0;
337
393
  }
338
394
 
339
395
  if (isString(value) && value.match(/^-?\d/)) {
340
-
341
396
  return propOffset + toPx(value);
342
-
343
397
  } else {
344
-
345
- return offset(value === true ? parent(el) : query(value, el)).bottom;
346
-
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
+ );
347
405
  }
348
406
  }