@kizmann/nano-ui 0.8.27 → 0.8.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kizmann/nano-ui",
3
- "version": "0.8.27",
3
+ "version": "0.8.29",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "author": "Eduard Kizmann <kizmann@protonmail.ch>",
package/servy.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "hostname": "nano-ui.local",
3
+ "webroot": "",
4
+ "version": "php-8.2.8",
5
+ "engine": "apache"
6
+ }
@@ -279,27 +279,33 @@ export default {
279
279
  value.fallback);
280
280
  });
281
281
 
282
- let element = alias.replace(/:.*?$/, '');
282
+ let component = alias.replace(/:.*?$/, '');
283
283
 
284
- let component = null;
285
-
286
- try {
287
- component = resolveComponent(element);
288
- } catch (e) {
289
- component = element;
284
+ if ( !Arr.has(['div', 'p'], component) ) {
285
+ component = resolveComponent(component);
290
286
  }
291
287
 
292
288
  if ( Any.isEmpty(component) ) {
293
289
  return null;
294
290
  }
295
291
 
296
- if ( ! this.propExists(setup['vShow']) ) {
292
+ if ( !this.propExists(setup['vShow']) ) {
297
293
  props.style = "display: none;";
298
294
  }
299
295
 
300
- return h(component, props, () => {
301
- return Arr.each(setup.content, (value, key) => this.ctor('renderSetup')(value, key));
296
+ let render = () => Arr.each(setup.content, (value, key) => {
297
+ return this.ctor('renderSetup')(value, key)
302
298
  });
299
+
300
+ if ( Any.isFunction(setup.content) ) {
301
+ render = setup.content.apply(this.scope);
302
+ }
303
+
304
+ if ( Any.isString(setup.content) ) {
305
+ render = setup.content;
306
+ }
307
+
308
+ return h(component, props, render);
303
309
  },
304
310
 
305
311
  render()
@@ -27,6 +27,11 @@ export default {
27
27
  if ( ! window.ImageCache ) {
28
28
  window.ImageCache = [];
29
29
  }
30
+
31
+
32
+ if ( ! Arr.has(window.ImageCache, this.src) ) {
33
+ this.tempSrc = this.src;
34
+ }
30
35
  },
31
36
 
32
37
  mounted()
@@ -46,6 +51,10 @@ export default {
46
51
 
47
52
  resolveLoad()
48
53
  {
54
+ if ( ! Arr.has(window.ImageCache, this.src) ) {
55
+ return;
56
+ }
57
+
49
58
  this.tempSrc = null;
50
59
 
51
60
  if ( Any.isObject(this.src) ) {
@@ -65,7 +74,7 @@ export default {
65
74
  Any.delay(() => this.load = false, 200);
66
75
  });
67
76
 
68
- this.load = true;
77
+ this.laod = true;
69
78
  },
70
79
 
71
80
  resolveData()
@@ -97,7 +97,7 @@ export default {
97
97
  computed: {
98
98
 
99
99
  touch() {
100
- return !! ('ontouchstart' in window ||
100
+ return !! ('ontouchstart' in window ||
101
101
  navigator.msMaxTouchPoints);
102
102
  },
103
103
 
@@ -145,10 +145,10 @@ export default {
145
145
  Event.bind('NResizer:moved',
146
146
  this.onUpdate, this._.uid);
147
147
 
148
- Dom.find(window).on('resize',
148
+ Dom.find(window).on('resize',
149
149
  this.onResize, passive);
150
-
151
- Dom.find(this.$refs.content).on('scroll',
150
+
151
+ Dom.find(this.$refs.content).on('scroll',
152
152
  this.onScroll, passive);
153
153
  },
154
154
 
@@ -168,16 +168,16 @@ export default {
168
168
  passive: true, uid: this._.uid
169
169
  };
170
170
 
171
- Event.unbind('NScrollbar:resize',
171
+ Event.unbind('NScrollbar:resize',
172
172
  this._.uid);
173
173
 
174
- Event.unbind('NResizer:moved',
174
+ Event.unbind('NResizer:moved',
175
175
  this._.uid);
176
176
 
177
- Dom.find(window).off('resize',
177
+ Dom.find(window).off('resize',
178
178
  null, passive);
179
179
 
180
- Dom.find(this.$el).off('scroll',
180
+ Dom.find(this.$el).off('scroll',
181
181
  null, passive);
182
182
  },
183
183
 
@@ -253,7 +253,7 @@ export default {
253
253
 
254
254
  adaptScrollHeight()
255
255
  {
256
- if ( this.native ) {
256
+ if ( this.native && this.allowNative ) {
257
257
  return;
258
258
  }
259
259
 
@@ -264,7 +264,11 @@ export default {
264
264
  // this.$refs.content.offsetWidth;
265
265
 
266
266
  let outerHeight = this.$refs.content.
267
- clientHeight|| 0;
267
+ clientHeight || 0;
268
+
269
+ if ( this.native && ! this.allowNative ) {
270
+ outerHeight -= 16;
271
+ }
268
272
 
269
273
  // if ( offsetHeight === 0 && this.overflowX ) {
270
274
  // outerHeight -= 15;
@@ -273,11 +277,15 @@ export default {
273
277
  let innerHeight = this.$refs.content
274
278
  .scrollHeight || 0;
275
279
 
280
+ if ( this.native && ! this.allowNative ) {
281
+ innerHeight -= 16;
282
+ }
283
+
276
284
  // if ( offsetHeight === 0 && this.overflowX ) {
277
285
  // innerHeight -= 15;
278
286
  // }
279
287
 
280
- let isSameOld = outerHeight === this.outerHeight &&
288
+ let isSameOld = outerHeight === this.outerHeight &&
281
289
  innerHeight === this.innerHeight;
282
290
 
283
291
  if ( isSameOld ) {
@@ -287,15 +295,15 @@ export default {
287
295
  this.outerHeight = outerHeight;
288
296
  this.innerHeight = innerHeight;
289
297
 
290
- let height = (outerHeight / innerHeight)
298
+ let height = (outerHeight / innerHeight)
291
299
  * outerHeight;
292
300
 
293
301
  let barHeight = Math.max(height, 50);
294
302
 
295
- let maxHeight = Math.ceil((outerHeight / innerHeight) *
303
+ let maxHeight = Math.ceil((outerHeight / innerHeight) *
296
304
  (innerHeight - outerHeight));
297
-
298
- this.heightRatio = (maxHeight - (barHeight - height)
305
+
306
+ this.heightRatio = (maxHeight - (barHeight - height)
299
307
  - this.offsetY) / maxHeight;
300
308
 
301
309
  Dom.find(this.$refs.vbar).css({
@@ -331,7 +339,7 @@ export default {
331
339
 
332
340
  adaptScrollWidth()
333
341
  {
334
- if ( this.native ) {
342
+ if ( this.native && this.allowNative ) {
335
343
  return;
336
344
  }
337
345
 
@@ -343,7 +351,11 @@ export default {
343
351
 
344
352
  let outerWidth = this.$refs.content.
345
353
  clientWidth || 0;
346
-
354
+
355
+ if ( this.native && ! this.allowNative ) {
356
+ outerWidth -= 16;
357
+ }
358
+
347
359
  // if ( offsetWidth === 0 && this.overflowY ) {
348
360
  // outerWidth -= 15;
349
361
  // }
@@ -351,11 +363,15 @@ export default {
351
363
  let innerWidth = this.$refs.content
352
364
  .scrollWidth || 0;
353
365
 
366
+ if ( this.native && ! this.allowNative ) {
367
+ innerWidth -= 16;
368
+ }
369
+
354
370
  // if ( offsetWidth === 0 && this.overflowY ) {
355
371
  // innerWidth -= 15;
356
372
  // }
357
373
 
358
- let isSameOld = outerWidth === this.outerWidth &&
374
+ let isSameOld = outerWidth === this.outerWidth &&
359
375
  innerWidth === this.innerWidth;
360
376
 
361
377
  if ( isSameOld ) {
@@ -365,15 +381,15 @@ export default {
365
381
  this.outerWidth = outerWidth;
366
382
  this.innerWidth = innerWidth;
367
383
 
368
- let width = (outerWidth / innerWidth)
384
+ let width = (outerWidth / innerWidth)
369
385
  * outerWidth;
370
386
 
371
387
  let barWidth = Math.max(width, 50);
372
388
 
373
- let maxWidth = Math.ceil((outerWidth / innerWidth) *
389
+ let maxWidth = Math.ceil((outerWidth / innerWidth) *
374
390
  (innerWidth - outerWidth));
375
-
376
- this.widthRatio = (maxWidth - (barWidth - width)
391
+
392
+ this.widthRatio = (maxWidth - (barWidth - width)
377
393
  - this.offsetX) / maxWidth;
378
394
 
379
395
  Dom.find(this.$refs.hbar).css({
@@ -381,7 +397,7 @@ export default {
381
397
  });
382
398
 
383
399
  // let hasNativeBar = offsetHeight && this.overflowX;
384
-
400
+
385
401
  // if ( hasNativeBar ) {
386
402
  // Dom.find(this.$el).addClass('has-native-hbar');
387
403
  // }
@@ -409,7 +425,7 @@ export default {
409
425
 
410
426
  adaptScrollPosition(scroll = {})
411
427
  {
412
- if ( this.native ) {
428
+ if ( this.native && this.allowNative ) {
413
429
  return;
414
430
  }
415
431
 
@@ -421,7 +437,7 @@ export default {
421
437
  scroll.left = this.$refs.content.scrollLeft;
422
438
  }
423
439
 
424
- let vbarTop= Math.ceil((this.outerHeight / this.innerHeight) *
440
+ let vbarTop= Math.ceil((this.outerHeight / this.innerHeight) *
425
441
  scroll.top * this.heightRatio) || 0;
426
442
 
427
443
  if ( ! this.vbarTop || vbarTop !== this.vbarTop ) {
@@ -433,7 +449,7 @@ export default {
433
449
  this.vbarTop = vbarTop;
434
450
  }
435
451
 
436
- let hbarLeft = Math.ceil((this.outerWidth / this.innerWidth) *
452
+ let hbarLeft = Math.ceil((this.outerWidth / this.innerWidth) *
437
453
  scroll.left * this.widthRatio) || 0;
438
454
 
439
455
  if ( ! this.hbarLeft || hbarLeft !== this.hbarLeft ) {
@@ -441,7 +457,7 @@ export default {
441
457
  Dom.find(this.$refs.hbar).css({
442
458
  transform: `translateX(${hbarLeft}px) translateZ(0)`
443
459
  });
444
-
460
+
445
461
  this.hbarLeft = hbarLeft;
446
462
  }
447
463
  },
@@ -489,7 +505,7 @@ export default {
489
505
 
490
506
  bindAdaptHeight()
491
507
  {
492
- this.refreshHeight = setInterval(this.adaptHeight,
508
+ this.refreshHeight = setInterval(this.adaptHeight,
493
509
  1000 / this.framerate);
494
510
  },
495
511
 
@@ -539,7 +555,7 @@ export default {
539
555
 
540
556
  bindAdaptWidth()
541
557
  {
542
- this.refreshWidth = setInterval(this.adaptWidth,
558
+ this.refreshWidth = setInterval(this.adaptWidth,
543
559
  1000 / this.framerate);
544
560
  },
545
561
 
@@ -558,7 +574,7 @@ export default {
558
574
  let scrollUpdate = () => {
559
575
  this.$emit('scrollupdate', scroll.top, scroll.left);
560
576
  }
561
-
577
+
562
578
  this.$nextTick(scrollUpdate);
563
579
  this.adaptScrollPosition(scroll);
564
580
  },
@@ -592,7 +608,7 @@ export default {
592
608
 
593
609
  this.resizeTimer = setTimeout(
594
610
  this.onUpdate, 500);
595
-
611
+
596
612
  Dom.find(this.$el).fire('resized');
597
613
  },
598
614
 
@@ -641,10 +657,10 @@ export default {
641
657
 
642
658
  event.stopPropagation();
643
659
 
644
- Dom.find(document).on(this.mousemove,
660
+ Dom.find(document).on(this.mousemove,
645
661
  this.onVbarMousemove, this._.uid);
646
662
 
647
- Dom.find(document).on(this.mouseup,
663
+ Dom.find(document).on(this.mouseup,
648
664
  this.onVbarMouseup, this._.uid);
649
665
 
650
666
  this.scrollTop = this.$refs.content
@@ -659,24 +675,24 @@ export default {
659
675
  let clientY = this.getTouchEvent(event)
660
676
  .clientY;
661
677
 
662
- let top = (this.outerHeight / this.innerHeight) *
678
+ let top = (this.outerHeight / this.innerHeight) *
663
679
  this.scrollTop * this.heightRatio;
664
680
 
665
681
  let offset = (clientY - this.clientY) + top;
666
682
 
667
- let height = (this.outerHeight -
668
- this.barHeight - this.offsetY);
683
+ let height = (this.outerHeight -
684
+ this.barHeight - this.offsetY);
669
685
 
670
- this.$refs.content.scrollTop = offset / height *
686
+ this.$refs.content.scrollTop = offset / height *
671
687
  (this.innerHeight - this.outerHeight);
672
688
  },
673
689
 
674
690
  onVbarMouseup(event)
675
691
  {
676
- Dom.find(document).off(this.mousemove,
692
+ Dom.find(document).off(this.mousemove,
677
693
  null, this._.uid);
678
694
 
679
- Dom.find(document).off(this.mouseup,
695
+ Dom.find(document).off(this.mouseup,
680
696
  null, this._.uid);
681
697
  },
682
698
 
@@ -685,13 +701,13 @@ export default {
685
701
  if ( ! Arr.has([0, 1], event.which) ) {
686
702
  return;
687
703
  }
688
-
704
+
689
705
  event.stopPropagation();
690
706
 
691
- Dom.find(document).on(this.mousemove,
707
+ Dom.find(document).on(this.mousemove,
692
708
  this.onHbarMousemove, this._.uid);
693
709
 
694
- Dom.find(document).on(this.mouseup,
710
+ Dom.find(document).on(this.mouseup,
695
711
  this.onHbarMouseup, this._.uid);
696
712
 
697
713
  this.scrollLeft = this.$refs.content
@@ -702,24 +718,24 @@ export default {
702
718
 
703
719
  onHbarMousemove(event)
704
720
  {
705
- let top = (this.outerWidth / this.innerWidth) *
721
+ let top = (this.outerWidth / this.innerWidth) *
706
722
  this.scrollLeft * this.widthRatio;
707
723
 
708
724
  let offset = (event.clientX - this.clientX) + top;
709
725
 
710
- let width = (this.outerWidth -
711
- this.barWidth - this.offsetX);
726
+ let width = (this.outerWidth -
727
+ this.barWidth - this.offsetX);
712
728
 
713
- this.$refs.content.scrollLeft = offset / width *
729
+ this.$refs.content.scrollLeft = offset / width *
714
730
  (this.innerWidth - this.outerWidth);
715
731
  },
716
732
 
717
733
  onHbarMouseup(event)
718
734
  {
719
- Dom.find(document).off(this.mousemove,
735
+ Dom.find(document).off(this.mousemove,
720
736
  null, this._.uid);
721
737
 
722
- Dom.find(document).off(this.mouseup,
738
+ Dom.find(document).off(this.mouseup,
723
739
  null, this._.uid);
724
740
  }
725
741
 
@@ -735,6 +751,10 @@ export default {
735
751
  classList.push('n-scrollbar--native');
736
752
  }
737
753
 
754
+ if ( ! this.allowNative ) {
755
+ classList.push('n-scrollbar--forced');
756
+ }
757
+
738
758
  if ( this.touch ) {
739
759
  classList.push('n-scrollbar--touch');
740
760
  }
@@ -38,6 +38,13 @@
38
38
  bottom: -17px;
39
39
  }
40
40
 
41
+ .n-scrollbar.n-scrollbar--forced.n-scrollbar--native > .n-scrollbar-content {
42
+ padding-right: 16px;
43
+ padding-bottom: 16px;
44
+ right: -16px;
45
+ bottom: -16px;
46
+ }
47
+
41
48
  .n-scrollbar:not(.n-overflow-x) > .n-scrollbar-content {
42
49
  bottom: 0;
43
50
  overflow-x: hidden;
@@ -66,15 +73,16 @@
66
73
  width: 10px;
67
74
  }
68
75
 
76
+
69
77
  .n-scrollbar-h {
70
78
  left: 0;
71
79
  bottom: 0;
72
80
  height: 10px;
73
81
  }
74
82
 
75
- .n-scrollbar--native > .n-scrollbar-v,
83
+ .n-scrollbar--native:not(.n-scrollbar--forced) > .n-scrollbar-v,
76
84
  .n-scrollbar:not(.has-vtrack) > .n-scrollbar-v,
77
- .n-scrollbar--native > .n-scrollbar-h,
85
+ .n-scrollbar--native:not(.n-scrollbar--forced) > .n-scrollbar-h,
78
86
  .n-scrollbar:not(.has-htrack) > .n-scrollbar-h {
79
87
  display: none;
80
88
  }
@@ -124,19 +124,41 @@ export default {
124
124
 
125
125
  data()
126
126
  {
127
+ let modelValue = Now.make(this.modelValue);
128
+
129
+ if ( Any.isEmpty(this.modelValue) ) {
130
+ modelValue = modelValue.resetTime();
131
+ }
132
+
127
133
  return {
128
- tempValue: Now.make(this.modelValue),
134
+ tempValue: modelValue,
129
135
  }
130
136
  },
131
137
 
138
+ mounted()
139
+ {
140
+ this.scrollTo();
141
+ },
142
+
132
143
  methods: {
133
144
 
134
145
  eventSelect(now)
135
146
  {
136
- this.$emit('update:modelValue',
147
+ this.$emit('update:modelValue',
137
148
  (this.tempValue = now.clone()).format(this.format));
138
149
  },
139
150
 
151
+ scrollTo()
152
+ {
153
+ let scrollbars = Obj.only(this.$refs, [
154
+ 'hour', 'minute', 'second'
155
+ ]);
156
+
157
+ Arr.each(scrollbars, (ref, key) => {
158
+ ref.scrollIntoView(`[data-index="${this.tempValue[key]()}"]`);
159
+ });
160
+ }
161
+
140
162
  },
141
163
 
142
164
  renderToolbar()
@@ -145,7 +167,7 @@ export default {
145
167
  <div class="n-timepicker-panel__toolbar">
146
168
  <div class="n-timepicker-panel__display">
147
169
  <span class="n-timepicker-panel__time">
148
- { this.tempValue.format(this.displayFormat) || this.placeholder }
170
+ {this.tempValue.format(this.displayFormat) || this.placeholder}
149
171
  </span>
150
172
  </div>
151
173
  </div>
@@ -167,21 +189,21 @@ export default {
167
189
  };
168
190
 
169
191
  return (
170
- <div class={classList} {...props}>
171
- <span>{ now.format('HH') }</span>
192
+ <div class={classList} {...props} data-index={now.hour()}>
193
+ <span>{now.format('HH')}</span>
172
194
  </div>
173
195
  );
174
196
  },
175
197
 
176
198
  renderHourPanel()
177
199
  {
178
- if ( ! this.displayFormat.match('HH') ) {
200
+ if ( !this.displayFormat.match('HH') ) {
179
201
  return null;
180
202
  }
181
203
 
182
204
  return (
183
- <NScrollbar class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
184
- { Arr.each(this.hoursGrid, this.ctor('renderHourItem')) }
205
+ <NScrollbar ref="hour" class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
206
+ {Arr.each(this.hoursGrid, this.ctor('renderHourItem'))}
185
207
  </NScrollbar>
186
208
  );
187
209
  },
@@ -201,21 +223,21 @@ export default {
201
223
  };
202
224
 
203
225
  return (
204
- <div class={classList} {...props}>
205
- <span>{ now.format('mm') }</span>
226
+ <div class={classList} {...props} data-index={now.minute()}>
227
+ <span>{now.format('mm')}</span>
206
228
  </div>
207
229
  );
208
230
  },
209
231
 
210
232
  renderMinutePanel()
211
233
  {
212
- if ( ! this.displayFormat.match('mm') ) {
234
+ if ( !this.displayFormat.match('mm') ) {
213
235
  return null;
214
236
  }
215
237
 
216
238
  return (
217
- <NScrollbar class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
218
- { Arr.each(this.minutesGrid, this.ctor('renderMinuteItem')) }
239
+ <NScrollbar ref="minute" class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
240
+ {Arr.each(this.minutesGrid, this.ctor('renderMinuteItem'))}
219
241
  </NScrollbar>
220
242
  );
221
243
  },
@@ -235,23 +257,21 @@ export default {
235
257
  };
236
258
 
237
259
  return (
238
- <div class={classList} {...props}>
239
- <span>{ now.format('ss') }</span>
260
+ <div class={classList} {...props} data-index={now.second()}>
261
+ <span>{now.format('ss')}</span>
240
262
  </div>
241
263
  );
242
264
  },
243
265
 
244
266
  renderSecondPanel()
245
267
  {
246
- if ( ! this.displayFormat.match('ss') ) {
268
+ if ( !this.displayFormat.match('ss') ) {
247
269
  return null;
248
270
  }
249
271
 
250
272
  return (
251
- <NScrollbar class="n-timepicker-panel__panel">
252
- <div class="n-timepicker-panel__wrap">
253
- { Arr.each(this.secondsGrid, this.ctor('renderSecondItem')) }
254
- </div>
273
+ <NScrollbar ref="second" class="n-timepicker-panel__panel" wrapClass="n-timepicker-panel__wrap">
274
+ {Arr.each(this.secondsGrid, this.ctor('renderSecondItem'))}
255
275
  </NScrollbar>
256
276
  );
257
277
  },
@@ -264,7 +284,7 @@ export default {
264
284
  'n-timepicker-panel--' + this.type,
265
285
  ];
266
286
 
267
- if ( this.disabled ){
287
+ if ( this.disabled ) {
268
288
  classList.push('n-disabled');
269
289
  }
270
290
 
@@ -274,9 +294,9 @@ export default {
274
294
  {this.ctor('renderToolbar')()}
275
295
  </div>
276
296
  <div class="n-timepicker-panel__body">
277
- { this.ctor('renderHourPanel')() }
278
- { this.ctor('renderMinutePanel')() }
279
- { this.ctor('renderSecondPanel')() }
297
+ {this.ctor('renderHourPanel')()}
298
+ {this.ctor('renderMinutePanel')()}
299
+ {this.ctor('renderSecondPanel')()}
280
300
  </div>
281
301
  </div>
282
302
  );
@@ -213,7 +213,7 @@ export default {
213
213
  return this.scrollTo(0, targetTop);
214
214
  }
215
215
 
216
- targetTop = targetTop - this.height +
216
+ targetTop = targetTop - this.height +
217
217
  this.itemHeight;
218
218
 
219
219
  this.scrollTo(0, targetTop);
@@ -324,7 +324,7 @@ export default {
324
324
  let startItem = Math.round(this.scrollTop /
325
325
  this.itemHeight);
326
326
 
327
- let endItem = Math.round((this.scrollTop +
327
+ let endItem = Math.round((this.scrollTop +
328
328
  this.height) / this.itemHeight);
329
329
 
330
330
  let start = (startItem - bufferItems);
@@ -355,7 +355,7 @@ export default {
355
355
  passed.index = (passed.index +
356
356
  this.state.start);
357
357
 
358
- let topOffset = Math.round(this.itemHeight *
358
+ let topOffset = Math.round(this.itemHeight *
359
359
  passed.index);
360
360
 
361
361
  let renderFunction = this.$slots.default;
@@ -388,7 +388,7 @@ export default {
388
388
  if ( this.state.grid !== 1 ) {
389
389
  style.width = this.itemWidth + 'px';
390
390
  }
391
-
391
+
392
392
  return (
393
393
  <div class="n-virtualscroller__item" style={style} {...props}>
394
394
  { renderFunction(passed) }
@@ -424,7 +424,7 @@ export default {
424
424
  let counter = passed.index * this.state.start;
425
425
 
426
426
  return (
427
- <div class="n-virtualscroller__row" style={style}>
427
+ <div data-row={passed.index} class="n-virtualscroller__row" style={style}>
428
428
  {
429
429
  Arr.each(passed.chunk, (value, index) => {
430
430
  return this.ctor('renderItem')({
@@ -444,7 +444,7 @@ export default {
444
444
  let items = Arr.slice(chunks, this.state.start,
445
445
  this.state.end);
446
446
 
447
- if ( ! this.threshold || this.threshold > chunks.length ) {
447
+ if ( ! this.threshold || this.threshold > this.items.length ) {
448
448
  items = chunks;
449
449
  }
450
450
 
@@ -484,13 +484,15 @@ export default {
484
484
  onSizechange: this.onSizechange,
485
485
  };
486
486
 
487
- let style = {};
487
+ let style = {
488
+ 'overflow-y': 'hidden'
489
+ };
488
490
 
489
- let totalHeight = this.items.length / this.state.grid *
491
+ let totalHeight = Math.ceil(this.items.length / this.state.grid) *
490
492
  this.itemHeight;
491
493
 
492
494
  if ( this.threshold && this.items.length ) {
493
- style.height = Math.ceil(totalHeight) + 'px';
495
+ style.height = Math.ceil(totalHeight + this.offsetY) + 'px';
494
496
  }
495
497
 
496
498
  return (