@evermade/overflow-slider 3.1.0 → 3.2.1

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 (60) hide show
  1. package/README.md +339 -8
  2. package/dist/core/details.esm.js +3 -3
  3. package/dist/core/details.min.js +1 -1
  4. package/dist/core/overflow-slider.esm.js +1 -0
  5. package/dist/core/overflow-slider.min.js +1 -1
  6. package/dist/core/slider.esm.js +69 -22
  7. package/dist/core/slider.min.js +1 -1
  8. package/dist/core/utils.esm.js +2 -1
  9. package/dist/core/utils.min.js +1 -1
  10. package/dist/overflow-slider.css +1 -1
  11. package/dist/plugins/arrows/arrows/index.esm.js +7 -4
  12. package/dist/plugins/arrows/arrows/index.min.js +1 -1
  13. package/dist/plugins/dots/dots/index.esm.js +0 -4
  14. package/dist/plugins/fade/fade/index.esm.js +4 -4
  15. package/dist/plugins/fade/fade/index.min.js +1 -1
  16. package/dist/plugins/full-width/full-width/index.esm.js +7 -2
  17. package/dist/plugins/full-width/full-width/index.min.js +1 -1
  18. package/dist/plugins/scroll-indicator/scroll-indicator/index.esm.js +18 -18
  19. package/dist/plugins/scroll-indicator/scroll-indicator/index.min.js +1 -1
  20. package/dist/plugins/thumbnails/thumbnails/index.esm.js +8 -5
  21. package/dist/plugins/thumbnails/thumbnails/index.min.js +1 -1
  22. package/docs/assets/demo.css +11 -1
  23. package/docs/assets/demo.js +38 -12
  24. package/docs/dist/core/details.esm.js +3 -3
  25. package/docs/dist/core/details.min.js +1 -1
  26. package/docs/dist/core/overflow-slider.esm.js +1 -0
  27. package/docs/dist/core/overflow-slider.min.js +1 -1
  28. package/docs/dist/core/slider.esm.js +69 -22
  29. package/docs/dist/core/slider.min.js +1 -1
  30. package/docs/dist/core/utils.esm.js +2 -1
  31. package/docs/dist/core/utils.min.js +1 -1
  32. package/docs/dist/overflow-slider.css +1 -1
  33. package/docs/dist/plugins/arrows/arrows/index.esm.js +7 -4
  34. package/docs/dist/plugins/arrows/arrows/index.min.js +1 -1
  35. package/docs/dist/plugins/dots/dots/index.esm.js +0 -4
  36. package/docs/dist/plugins/fade/fade/index.esm.js +4 -4
  37. package/docs/dist/plugins/fade/fade/index.min.js +1 -1
  38. package/docs/dist/plugins/full-width/full-width/index.esm.js +7 -2
  39. package/docs/dist/plugins/full-width/full-width/index.min.js +1 -1
  40. package/docs/dist/plugins/scroll-indicator/scroll-indicator/index.esm.js +18 -18
  41. package/docs/dist/plugins/scroll-indicator/scroll-indicator/index.min.js +1 -1
  42. package/docs/dist/plugins/thumbnails/thumbnails/index.esm.js +8 -5
  43. package/docs/dist/plugins/thumbnails/thumbnails/index.min.js +1 -1
  44. package/docs/index-rtl.html +396 -0
  45. package/docs/index.html +1 -1
  46. package/package.json +1 -1
  47. package/src/core/details.ts +3 -3
  48. package/src/core/overflow-slider.ts +1 -0
  49. package/src/core/slider.ts +79 -27
  50. package/src/core/types.ts +10 -3
  51. package/src/core/utils.ts +9 -5
  52. package/src/plugins/arrows/index.ts +8 -6
  53. package/src/plugins/dots/index.ts +1 -5
  54. package/src/plugins/drag-scrolling/index.ts +1 -1
  55. package/src/plugins/fade/index.ts +5 -5
  56. package/src/plugins/fade/styles.scss +10 -0
  57. package/src/plugins/full-width/index.ts +9 -3
  58. package/src/plugins/scroll-indicator/index.ts +60 -62
  59. package/src/plugins/skip-links/index.ts +1 -1
  60. package/src/plugins/thumbnails/index.ts +9 -6
@@ -78,7 +78,7 @@ function Slider(container, options, plugins) {
78
78
  let isScrolling = false;
79
79
  let isUserScrolling = false;
80
80
  let isProgrammaticScrolling = false;
81
- // any scroll
81
+ // all types of scroll
82
82
  slider.container.addEventListener('scroll', () => {
83
83
  const newScrollLeft = slider.container.scrollLeft;
84
84
  if (Math.floor(scrollLeft) !== Math.floor(newScrollLeft)) {
@@ -184,6 +184,9 @@ function Slider(container, options, plugins) {
184
184
  }
185
185
  function setDataAttributes() {
186
186
  slider.container.setAttribute('data-has-overflow', slider.details.hasOverflow ? 'true' : 'false');
187
+ if (slider.options.rtl) {
188
+ slider.container.setAttribute('dir', 'rtl');
189
+ }
187
190
  }
188
191
  function ensureSlideIsInView(slide, scrollBehavior = null) {
189
192
  const behavior = scrollBehavior || slider.options.scrollBehavior;
@@ -215,19 +218,48 @@ function Slider(container, options, plugins) {
215
218
  }
216
219
  function setActiveSlideIdx() {
217
220
  const sliderRect = slider.container.getBoundingClientRect();
218
- const scrollLeft = slider.container.scrollLeft;
221
+ const scrollLeft = slider.getScrollLeft();
219
222
  const slides = slider.slides;
220
223
  let activeSlideIdx = 0;
221
224
  let scrolledPastLastSlide = false;
222
- for (let i = 0; i < slides.length; i++) {
223
- const slideRect = slides[i].getBoundingClientRect();
224
- const slideStart = slideRect.left - sliderRect.left + scrollLeft + getGapSize();
225
- if (Math.floor(slideStart) >= Math.floor(scrollLeft)) {
226
- activeSlideIdx = i;
227
- break;
225
+ if (slider.options.rtl) {
226
+ const scrolledDistance = slider.getInclusiveScrollWidth() - scrollLeft - slider.getInclusiveClientWidth();
227
+ const slidePositions = [];
228
+ for (let i = slides.length - 1; i >= 0; i--) {
229
+ const slideRect = slides[i].getBoundingClientRect();
230
+ const slideEnd = Math.abs(slideRect.left) - Math.abs(sliderRect.left) + scrolledDistance;
231
+ slidePositions.push({
232
+ slide: slides[i],
233
+ slideEnd: slideEnd,
234
+ });
235
+ }
236
+ let closestSlide = null;
237
+ let closestDistance = null;
238
+ for (let i = 0; i < slidePositions.length; i++) {
239
+ const distance = Math.abs(slidePositions[i].slideEnd - scrolledDistance);
240
+ if (closestDistance === null || distance < closestDistance) {
241
+ closestDistance = distance;
242
+ closestSlide = slidePositions[i].slide;
243
+ }
244
+ }
245
+ if (closestSlide) {
246
+ activeSlideIdx = slides.indexOf(closestSlide);
247
+ }
248
+ else {
249
+ activeSlideIdx = slides.length - 1;
228
250
  }
229
- if (i === slides.length - 1) {
230
- scrolledPastLastSlide = true;
251
+ }
252
+ else {
253
+ for (let i = 0; i < slides.length; i++) {
254
+ const slideRect = slides[i].getBoundingClientRect();
255
+ const slideStart = slideRect.left - sliderRect.left + scrollLeft + getGapSize();
256
+ if (Math.floor(slideStart) >= Math.floor(scrollLeft)) {
257
+ activeSlideIdx = i;
258
+ break;
259
+ }
260
+ if (i === slides.length - 1) {
261
+ scrolledPastLastSlide = true;
262
+ }
231
263
  }
232
264
  }
233
265
  if (scrolledPastLastSlide) {
@@ -235,6 +267,7 @@ function Slider(container, options, plugins) {
235
267
  }
236
268
  const oldActiveSlideIdx = slider.activeSlideIdx;
237
269
  slider.activeSlideIdx = activeSlideIdx;
270
+ // console.log('activeSlideIdx', activeSlideIdx);
238
271
  if (oldActiveSlideIdx !== activeSlideIdx) {
239
272
  slider.emit('activeSlideChanged');
240
273
  }
@@ -251,12 +284,18 @@ function Slider(container, options, plugins) {
251
284
  function getInclusiveClientWidth() {
252
285
  return slider.container.clientWidth + getOutermostChildrenEdgeMarginSum(slider.container);
253
286
  }
287
+ function getScrollLeft() {
288
+ return slider.options.rtl ? Math.abs(slider.container.scrollLeft) : slider.container.scrollLeft;
289
+ }
290
+ function setScrollLeft(value) {
291
+ slider.container.scrollLeft = slider.options.rtl ? -value : value;
292
+ }
254
293
  function getGapSize() {
255
294
  let gapSize = 0;
256
295
  if (slider.slides.length > 1) {
257
296
  const firstSlideRect = slider.slides[0].getBoundingClientRect();
258
297
  const secondSlideRect = slider.slides[1].getBoundingClientRect();
259
- gapSize = Math.floor(secondSlideRect.left - firstSlideRect.right);
298
+ gapSize = slider.options.rtl ? Math.abs(Math.floor(secondSlideRect.right - firstSlideRect.left)) : Math.floor(secondSlideRect.left - firstSlideRect.right);
260
299
  }
261
300
  return gapSize;
262
301
  }
@@ -274,22 +313,23 @@ function Slider(container, options, plugins) {
274
313
  const sliderRect = slider.container.getBoundingClientRect();
275
314
  const containerWidth = slider.container.offsetWidth;
276
315
  let targetScrollPosition = scrollLeft;
277
- if (direction === 'prev') {
316
+ const realDirection = slider.options.rtl ? (direction === 'prev' ? 'next' : 'prev') : direction;
317
+ if (realDirection === 'prev') {
278
318
  targetScrollPosition = Math.max(0, scrollLeft - slider.container.offsetWidth);
279
319
  }
280
- else if (direction === 'next') {
320
+ else if (realDirection === 'next') {
281
321
  targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + slider.container.offsetWidth);
282
322
  }
283
323
  if (scrollStrategy === 'fullSlide') {
284
324
  let fullSlideTargetScrollPosition = null;
285
325
  // extend targetScrollPosition to include gap
286
- if (direction === 'prev') {
326
+ if (realDirection === 'prev') {
287
327
  fullSlideTargetScrollPosition = Math.max(0, targetScrollPosition - getGapSize());
288
328
  }
289
329
  else {
290
330
  fullSlideTargetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), targetScrollPosition + getGapSize());
291
331
  }
292
- if (direction === 'next') {
332
+ if (realDirection === 'next') {
293
333
  let partialSlideFound = false;
294
334
  for (let slide of slider.slides) {
295
335
  const slideRect = slide.getBoundingClientRect();
@@ -347,12 +387,12 @@ function Slider(container, options, plugins) {
347
387
  setTimeout(() => slider.container.style.scrollBehavior = '', 50);
348
388
  }
349
389
  function snapToClosestSlide(direction = "prev") {
350
- const isMovingForward = direction === 'next';
390
+ const isMovingForward = slider.options.rtl ? direction === 'prev' : direction === 'next';
351
391
  const slideReference = [];
352
392
  for (let i = 0; i < slider.slides.length; i++) {
353
393
  const slide = slider.slides[i];
354
394
  const slideWidth = slide.offsetWidth;
355
- const slideStart = slide.offsetLeft;
395
+ const slideStart = slider.options.rtl ? Math.abs(slide.offsetLeft + slideWidth - slider.details.containerWidth) : slide.offsetLeft;
356
396
  const slideEnd = slideStart + slideWidth;
357
397
  const slideMiddle = slideStart + slideWidth / 2;
358
398
  const trigger = Math.min(slideMiddle, slideStart + slider.options.emulateScrollSnapMaxThreshold);
@@ -363,10 +403,14 @@ function Slider(container, options, plugins) {
363
403
  width: slideWidth,
364
404
  trigger: trigger,
365
405
  slide: slide,
406
+ // debug
407
+ offSetleft: slide.offsetLeft,
408
+ rect: slide.getBoundingClientRect(),
366
409
  });
367
410
  }
411
+ console.log('slideReference', slideReference);
368
412
  let snapTarget = null;
369
- const scrollPosition = slider.container.scrollLeft;
413
+ const scrollPosition = getScrollLeft();
370
414
  if (isMovingForward) {
371
415
  for (let i = 0; i < slideReference.length; i++) {
372
416
  const item = slideReference[i];
@@ -374,7 +418,7 @@ function Slider(container, options, plugins) {
374
418
  snapTarget = 0;
375
419
  break;
376
420
  }
377
- if (Math.floor(slider.container.scrollLeft) <= Math.floor(item.trigger)) {
421
+ if (Math.floor(getScrollLeft()) <= Math.floor(item.trigger)) {
378
422
  snapTarget = item.start;
379
423
  break;
380
424
  }
@@ -387,7 +431,7 @@ function Slider(container, options, plugins) {
387
431
  snapTarget = item.start;
388
432
  break;
389
433
  }
390
- if (Math.floor(slider.container.scrollLeft) >= Math.floor(item.trigger)) {
434
+ if (Math.floor(getScrollLeft()) >= Math.floor(item.trigger)) {
391
435
  snapTarget = item.start;
392
436
  break;
393
437
  }
@@ -400,7 +444,7 @@ function Slider(container, options, plugins) {
400
444
  }
401
445
  const scrollBehavior = slider.options.scrollBehavior || 'smooth';
402
446
  slider.container.scrollTo({
403
- left: snapTarget,
447
+ left: slider.options.rtl ? -snapTarget : snapTarget,
404
448
  behavior: scrollBehavior
405
449
  });
406
450
  }
@@ -419,8 +463,9 @@ function Slider(container, options, plugins) {
419
463
  });
420
464
  }
421
465
  const optionCallBack = (_a = slider === null || slider === void 0 ? void 0 : slider.options) === null || _a === void 0 ? void 0 : _a[name];
466
+ // Type guard to check if the option callback is a function
422
467
  if (typeof optionCallBack === 'function') {
423
- optionCallBack(slider);
468
+ optionCallBack(slider); // Type assertion here
424
469
  }
425
470
  }
426
471
  slider = {
@@ -430,6 +475,8 @@ function Slider(container, options, plugins) {
430
475
  snapToClosestSlide,
431
476
  getInclusiveScrollWidth,
432
477
  getInclusiveClientWidth,
478
+ getScrollLeft,
479
+ setScrollLeft,
433
480
  on,
434
481
  options,
435
482
  };
@@ -1 +1 @@
1
- import t from"./details.min.js";import{generateId as e,objectsAreEqual as o,getOutermostChildrenEdgeMarginSum as n}from"./utils.min.js";function l(l,i,r){let a,c={};function s(e=!1){const n=a.details,l=t(a);a.details=l,e||o(n,l)?e&&a.emit("detailsChanged"):a.emit("detailsChanged")}function f(){a.slides=Array.from(a.container.querySelectorAll(a.options.slidesSelector))}function d(){a.container.style.setProperty("--slider-container-width",`${a.details.containerWidth}px`),a.container.style.setProperty("--slider-scrollable-width",`${a.details.scrollableAreaWidth}px`),a.container.style.setProperty("--slider-slides-count",`${a.details.slideCount}`)}function h(){a.container.setAttribute("data-has-overflow",a.details.hasOverflow?"true":"false")}function u(t,e=null){const o=e||a.options.scrollBehavior,n=t.getBoundingClientRect(),l=a.container.getBoundingClientRect(),i=a.container.offsetWidth,r=a.container.scrollLeft,c=n.left-l.left+r,s=c+n.width;let f=null;f=Math.floor(c)<Math.floor(r)?c:Math.floor(s)>Math.floor(r)+Math.floor(i)?s-i:0===Math.floor(c)?0:c,null!==f&&setTimeout((t=>{a.emit("programmaticScrollStart"),a.container.scrollTo({left:t,behavior:o})}),50,f)}function m(){const t=a.container.getBoundingClientRect(),e=a.container.scrollLeft,o=a.slides;let n=0,l=!1;for(let i=0;i<o.length;i++){const r=o[i].getBoundingClientRect().left-t.left+e+g();if(Math.floor(r)>=Math.floor(e)){n=i;break}i===o.length-1&&(l=!0)}l&&(n=o.length-1);const i=a.activeSlideIdx;a.activeSlideIdx=n,i!==n&&a.emit("activeSlideChanged")}function g(){let t=0;if(a.slides.length>1){const e=a.slides[0].getBoundingClientRect(),o=a.slides[1].getBoundingClientRect();t=Math.floor(o.left-e.right)}return t}function M(){let t=0;const e=a.container.getAttribute("data-full-width-offset");return e&&(t=parseInt(e)),Math.floor(t)}return a={emit:function(t){var e;c&&c[t]&&c[t].forEach((t=>{t(a)}));const o=null===(e=null==a?void 0:a.options)||void 0===e?void 0:e[t];"function"==typeof o&&o(a)},moveToDirection:function(t="prev"){const e=a.options.scrollStrategy,o=a.container.scrollLeft,n=a.container.getBoundingClientRect(),l=a.container.offsetWidth;let i=o;if("prev"===t?i=Math.max(0,o-a.container.offsetWidth):"next"===t&&(i=Math.min(a.getInclusiveScrollWidth(),o+a.container.offsetWidth)),"fullSlide"===e){let e=null;if(e="prev"===t?Math.max(0,i-g()):Math.min(a.getInclusiveScrollWidth(),i+g()),"next"===t){let t=!1;for(let l of a.slides){const r=l.getBoundingClientRect(),a=r.left-n.left+o,c=a+r.width;if(Math.floor(a)<Math.floor(i)&&Math.floor(c)>Math.floor(i)){e=a,t=!0;break}}if(t||(e=Math.min(i,a.getInclusiveScrollWidth()-a.container.offsetWidth)),e)if(Math.floor(e)>Math.floor(o)){const t=Math.floor(a.getInclusiveScrollWidth())-Math.floor(l);i=Math.min(e,t)}else i=Math.min(a.getInclusiveScrollWidth(),o+l)}else{let t=!1;for(let i of a.slides){const r=i.getBoundingClientRect(),a=r.left-n.left+o,c=a+r.width;if(Math.floor(a)<Math.floor(o)&&Math.floor(c)>Math.floor(o)){e=c-l,t=!0;break}}t||(e=Math.max(0,o-l)),e&&Math.floor(e)<Math.floor(o)&&(i=e)}}const r=i-M();Math.floor(r)>=0&&(i=r),a.emit("programmaticScrollStart"),a.container.style.scrollBehavior=a.options.scrollBehavior,a.container.scrollLeft=i,setTimeout((()=>a.container.style.scrollBehavior=""),50)},moveToSlide:function(t){const e=a.slides[t];e&&u(e)},snapToClosestSlide:function(t="prev"){const e="next"===t,o=[];for(let t=0;t<a.slides.length;t++){const e=a.slides[t],n=e.offsetWidth,l=e.offsetLeft,i=l+n,r=l+n/2,c=Math.min(r,l+a.options.emulateScrollSnapMaxThreshold);o.push({start:l,middle:r,end:i,width:n,trigger:c,slide:e})}let n=null;const l=a.container.scrollLeft;if(e)for(let t=0;t<o.length;t++){const e=o[t];if(0===t&&Math.floor(l)<=Math.floor(e.trigger)){n=0;break}if(Math.floor(a.container.scrollLeft)<=Math.floor(e.trigger)){n=e.start;break}}else for(let t=o.length-1;t>=0;t--){const e=o[t];if(t===o.length-1&&Math.floor(l)>=Math.floor(e.trigger)){n=e.start;break}if(Math.floor(a.container.scrollLeft)>=Math.floor(e.trigger)){n=e.start;break}}if(null!==n){const t=n-M();Math.floor(t)>=0&&(n=t);const e=a.options.scrollBehavior||"smooth";a.container.scrollTo({left:n,behavior:e})}},getInclusiveScrollWidth:function(){return a.container.scrollWidth+n(a.container)},getInclusiveClientWidth:function(){return a.container.clientWidth+n(a.container)},on:function(t,e){c[t]||(c[t]=[]),c[t].push(e)},options:i},function(){a.container=l;let t=l.getAttribute("id");null===t&&(t=e("overflow-slider"),l.setAttribute("id",t)),f(),s(!0),m(),a.on("contentsChanged",(()=>{f(),s(),m()})),a.on("containerSizeChanged",(()=>s()));let o=0;if(a.on("scroll",(()=>{o&&window.cancelAnimationFrame(o),o=window.requestAnimationFrame((()=>{s(),m()}))})),function(){new MutationObserver((()=>a.emit("contentsChanged"))).observe(a.container,{childList:!0});let t,e,o;new ResizeObserver((()=>a.emit("containerSizeChanged"))).observe(a.container);let n=a.container.scrollLeft,l=a.container.scrollLeft,i=a.container.scrollLeft,r=!1,c=!1,s=!1;a.container.addEventListener("scroll",(()=>{const e=a.container.scrollLeft;Math.floor(n)!==Math.floor(e)&&(r||(r=!0,a.emit("scrollStart")),n=e,clearTimeout(t),t=setTimeout((()=>{r=!1,a.emit("scrollEnd")}),50),a.emit("scroll")),c&&f()}));const f=()=>{const t=a.container.scrollLeft;Math.floor(l)===Math.floor(t)||s||(c||(a.emit("nativeScrollStart"),c=!0),a.emit("nativeScroll"),l=t,clearTimeout(e),e=setTimeout((()=>{c=!1,a.emit("nativeScrollEnd"),i=l}),50))};a.container.addEventListener("touchmove",f),a.container.addEventListener("mousewheel",f),a.container.addEventListener("wheel",f),a.on("programmaticScrollStart",(()=>{s=!0})),a.container.addEventListener("scroll",(()=>{const t=a.container.scrollLeft;Math.floor(i)!==Math.floor(t)&&!c&&s&&(i=t,clearTimeout(o),o=setTimeout((()=>{s=!1,a.emit("programmaticScrollEnd"),l=i}),50),a.emit("programmaticScroll"))})),a.on("programmaticScrollStart",(()=>{a.container.style.scrollSnapType="none"})),a.on("nativeScrollStart",(()=>{a.container.style.scrollSnapType=""}));let d=!1;a.container.addEventListener("mousedown",(()=>{d=!0})),a.container.addEventListener("touchstart",(()=>{d=!0}),{passive:!0}),a.container.addEventListener("focusin",(t=>{if(!d){let e=t.target;for(;e.parentElement!==a.container&&e.parentElement;)e=e.parentElement;u(e,"auto")}d=!1}))}(),h(),d(),r)for(const t of r)t(a);a.on("detailsChanged",(()=>{h(),d()})),a.emit("created"),a.container.setAttribute("data-ready","true")}(),a}export{l as default};
1
+ import t from"./details.min.js";import{generateId as e,objectsAreEqual as o,getOutermostChildrenEdgeMarginSum as n}from"./utils.min.js";function l(l,i,r){let a,s={};function c(e=!1){const n=a.details,l=t(a);a.details=l,e||o(n,l)?e&&a.emit("detailsChanged"):a.emit("detailsChanged")}function f(){a.slides=Array.from(a.container.querySelectorAll(a.options.slidesSelector))}function d(){a.container.style.setProperty("--slider-container-width",`${a.details.containerWidth}px`),a.container.style.setProperty("--slider-scrollable-width",`${a.details.scrollableAreaWidth}px`),a.container.style.setProperty("--slider-slides-count",`${a.details.slideCount}`)}function h(){a.container.setAttribute("data-has-overflow",a.details.hasOverflow?"true":"false"),a.options.rtl&&a.container.setAttribute("dir","rtl")}function u(t,e=null){const o=e||a.options.scrollBehavior,n=t.getBoundingClientRect(),l=a.container.getBoundingClientRect(),i=a.container.offsetWidth,r=a.container.scrollLeft,s=n.left-l.left+r,c=s+n.width;let f=null;f=Math.floor(s)<Math.floor(r)?s:Math.floor(c)>Math.floor(r)+Math.floor(i)?c-i:0===Math.floor(s)?0:s,null!==f&&setTimeout((t=>{a.emit("programmaticScrollStart"),a.container.scrollTo({left:t,behavior:o})}),50,f)}function g(){const t=a.container.getBoundingClientRect(),e=a.getScrollLeft(),o=a.slides;let n=0,l=!1;if(a.options.rtl){const l=a.getInclusiveScrollWidth()-e-a.getInclusiveClientWidth(),i=[];for(let e=o.length-1;e>=0;e--){const n=o[e].getBoundingClientRect(),r=Math.abs(n.left)-Math.abs(t.left)+l;i.push({slide:o[e],slideEnd:r})}let r=null,s=null;for(let t=0;t<i.length;t++){const e=Math.abs(i[t].slideEnd-l);(null===s||e<s)&&(s=e,r=i[t].slide)}n=r?o.indexOf(r):o.length-1}else for(let i=0;i<o.length;i++){const r=o[i].getBoundingClientRect().left-t.left+e+M();if(Math.floor(r)>=Math.floor(e)){n=i;break}i===o.length-1&&(l=!0)}l&&(n=o.length-1);const i=a.activeSlideIdx;a.activeSlideIdx=n,i!==n&&a.emit("activeSlideChanged")}function m(){return a.options.rtl?Math.abs(a.container.scrollLeft):a.container.scrollLeft}function M(){let t=0;if(a.slides.length>1){const e=a.slides[0].getBoundingClientRect(),o=a.slides[1].getBoundingClientRect();t=a.options.rtl?Math.abs(Math.floor(o.right-e.left)):Math.floor(o.left-e.right)}return t}function p(){let t=0;const e=a.container.getAttribute("data-full-width-offset");return e&&(t=parseInt(e)),Math.floor(t)}return a={emit:function(t){var e;s&&s[t]&&s[t].forEach((t=>{t(a)}));const o=null===(e=null==a?void 0:a.options)||void 0===e?void 0:e[t];"function"==typeof o&&o(a)},moveToDirection:function(t="prev"){const e=a.options.scrollStrategy,o=a.container.scrollLeft,n=a.container.getBoundingClientRect(),l=a.container.offsetWidth;let i=o;const r=a.options.rtl?"prev"===t?"next":"prev":t;if("prev"===r?i=Math.max(0,o-a.container.offsetWidth):"next"===r&&(i=Math.min(a.getInclusiveScrollWidth(),o+a.container.offsetWidth)),"fullSlide"===e){let t=null;if(t="prev"===r?Math.max(0,i-M()):Math.min(a.getInclusiveScrollWidth(),i+M()),"next"===r){let e=!1;for(let l of a.slides){const r=l.getBoundingClientRect(),a=r.left-n.left+o,s=a+r.width;if(Math.floor(a)<Math.floor(i)&&Math.floor(s)>Math.floor(i)){t=a,e=!0;break}}if(e||(t=Math.min(i,a.getInclusiveScrollWidth()-a.container.offsetWidth)),t)if(Math.floor(t)>Math.floor(o)){const e=Math.floor(a.getInclusiveScrollWidth())-Math.floor(l);i=Math.min(t,e)}else i=Math.min(a.getInclusiveScrollWidth(),o+l)}else{let e=!1;for(let i of a.slides){const r=i.getBoundingClientRect(),a=r.left-n.left+o,s=a+r.width;if(Math.floor(a)<Math.floor(o)&&Math.floor(s)>Math.floor(o)){t=s-l,e=!0;break}}e||(t=Math.max(0,o-l)),t&&Math.floor(t)<Math.floor(o)&&(i=t)}}const s=i-p();Math.floor(s)>=0&&(i=s),a.emit("programmaticScrollStart"),a.container.style.scrollBehavior=a.options.scrollBehavior,a.container.scrollLeft=i,setTimeout((()=>a.container.style.scrollBehavior=""),50)},moveToSlide:function(t){const e=a.slides[t];e&&u(e)},snapToClosestSlide:function(t="prev"){const e=a.options.rtl?"prev"===t:"next"===t,o=[];for(let t=0;t<a.slides.length;t++){const e=a.slides[t],n=e.offsetWidth,l=a.options.rtl?Math.abs(e.offsetLeft+n-a.details.containerWidth):e.offsetLeft,i=l+n,r=l+n/2,s=Math.min(r,l+a.options.emulateScrollSnapMaxThreshold);o.push({start:l,middle:r,end:i,width:n,trigger:s,slide:e,offSetleft:e.offsetLeft,rect:e.getBoundingClientRect()})}console.log("slideReference",o);let n=null;const l=m();if(e)for(let t=0;t<o.length;t++){const e=o[t];if(0===t&&Math.floor(l)<=Math.floor(e.trigger)){n=0;break}if(Math.floor(m())<=Math.floor(e.trigger)){n=e.start;break}}else for(let t=o.length-1;t>=0;t--){const e=o[t];if(t===o.length-1&&Math.floor(l)>=Math.floor(e.trigger)){n=e.start;break}if(Math.floor(m())>=Math.floor(e.trigger)){n=e.start;break}}if(null!==n){const t=n-p();Math.floor(t)>=0&&(n=t);const e=a.options.scrollBehavior||"smooth";a.container.scrollTo({left:a.options.rtl?-n:n,behavior:e})}},getInclusiveScrollWidth:function(){return a.container.scrollWidth+n(a.container)},getInclusiveClientWidth:function(){return a.container.clientWidth+n(a.container)},getScrollLeft:m,setScrollLeft:function(t){a.container.scrollLeft=a.options.rtl?-t:t},on:function(t,e){s[t]||(s[t]=[]),s[t].push(e)},options:i},function(){a.container=l;let t=l.getAttribute("id");null===t&&(t=e("overflow-slider"),l.setAttribute("id",t)),f(),c(!0),g(),a.on("contentsChanged",(()=>{f(),c(),g()})),a.on("containerSizeChanged",(()=>c()));let o=0;if(a.on("scroll",(()=>{o&&window.cancelAnimationFrame(o),o=window.requestAnimationFrame((()=>{c(),g()}))})),function(){new MutationObserver((()=>a.emit("contentsChanged"))).observe(a.container,{childList:!0});let t,e,o;new ResizeObserver((()=>a.emit("containerSizeChanged"))).observe(a.container);let n=a.container.scrollLeft,l=a.container.scrollLeft,i=a.container.scrollLeft,r=!1,s=!1,c=!1;a.container.addEventListener("scroll",(()=>{const e=a.container.scrollLeft;Math.floor(n)!==Math.floor(e)&&(r||(r=!0,a.emit("scrollStart")),n=e,clearTimeout(t),t=setTimeout((()=>{r=!1,a.emit("scrollEnd")}),50),a.emit("scroll")),s&&f()}));const f=()=>{const t=a.container.scrollLeft;Math.floor(l)===Math.floor(t)||c||(s||(a.emit("nativeScrollStart"),s=!0),a.emit("nativeScroll"),l=t,clearTimeout(e),e=setTimeout((()=>{s=!1,a.emit("nativeScrollEnd"),i=l}),50))};a.container.addEventListener("touchmove",f),a.container.addEventListener("mousewheel",f),a.container.addEventListener("wheel",f),a.on("programmaticScrollStart",(()=>{c=!0})),a.container.addEventListener("scroll",(()=>{const t=a.container.scrollLeft;Math.floor(i)!==Math.floor(t)&&!s&&c&&(i=t,clearTimeout(o),o=setTimeout((()=>{c=!1,a.emit("programmaticScrollEnd"),l=i}),50),a.emit("programmaticScroll"))})),a.on("programmaticScrollStart",(()=>{a.container.style.scrollSnapType="none"})),a.on("nativeScrollStart",(()=>{a.container.style.scrollSnapType=""}));let d=!1;a.container.addEventListener("mousedown",(()=>{d=!0})),a.container.addEventListener("touchstart",(()=>{d=!0}),{passive:!0}),a.container.addEventListener("focusin",(t=>{if(!d){let e=t.target;for(;e.parentElement!==a.container&&e.parentElement;)e=e.parentElement;u(e,"auto")}d=!1}))}(),h(),d(),r)for(const t of r)t(a);a.on("detailsChanged",(()=>{h(),d()})),a.emit("created"),a.container.setAttribute("data-ready","true")}(),a}export{l as default};
@@ -12,7 +12,8 @@ function objectsAreEqual(obj1, obj2) {
12
12
  return false;
13
13
  }
14
14
  for (let key of keys1) {
15
- if (obj2.hasOwnProperty(key) === false || obj1[key] !== obj2[key]) {
15
+ // Use `Object.prototype.hasOwnProperty.call` for better safety
16
+ if (!Object.prototype.hasOwnProperty.call(obj2, key) || obj1[key] !== obj2[key]) {
16
17
  return false;
17
18
  }
18
19
  }
@@ -1 +1 @@
1
- function e(t,n=1){const r=`${t}-${n}`;return document.getElementById(r)?e(t,n+1):r}function t(e,t){const n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(let r of n)if(!1===t.hasOwnProperty(r)||e[r]!==t[r])return!1;return!0}function n(e){if(0===e.children.length)return 0;const t=e.children[0],n=getComputedStyle(t),r=parseFloat(n.marginLeft),o=e.children[e.children.length-1],l=getComputedStyle(o);return r+parseFloat(l.marginRight)}export{e as generateId,n as getOutermostChildrenEdgeMarginSum,t as objectsAreEqual};
1
+ function t(e,n=1){const r=`${e}-${n}`;return document.getElementById(r)?t(e,n+1):r}function e(t,e){const n=Object.keys(t),r=Object.keys(e);if(n.length!==r.length)return!1;for(let r of n)if(!Object.prototype.hasOwnProperty.call(e,r)||t[r]!==e[r])return!1;return!0}function n(t){if(0===t.children.length)return 0;const e=t.children[0],n=getComputedStyle(e),r=parseFloat(n.marginLeft),o=t.children[t.children.length-1],l=getComputedStyle(o);return r+parseFloat(l.marginRight)}export{t as generateId,n as getOutermostChildrenEdgeMarginSum,e as objectsAreEqual};
@@ -1 +1 @@
1
- .overflow-slider{-ms-overflow-style:none;display:grid;grid-auto-flow:column;grid-template-columns:max-content;max-width:-moz-max-content;max-width:max-content;overflow:auto;position:relative;scrollbar-width:none;width:100%}.overflow-slider::-webkit-scrollbar{display:none}.overflow-slider>*{outline-offset:-2px;scroll-snap-align:start}:root{--overflow-slider-arrows-size:1.5rem;--overflow-slider-arrows-gap:.5rem;--overflow-slider-arrows-inactive-opacity:0.5}.overflow-slider__arrows{display:flex;gap:var(--overflow-slider-arrows-gap)}.overflow-slider__arrows-button{align-items:center;cursor:pointer;display:flex;outline-offset:-2px}.overflow-slider__arrows-button svg{height:var(--overflow-slider-arrows-size);width:var(--overflow-slider-arrows-size)}.overflow-slider__arrows-button[data-has-content=false]{opacity:var(--overflow-slider-arrows-inactive-opacity)}:root{--overflow-slider-dots-gap:0.5rem;--overflow-slider-dot-size:0.75rem;--overflow-slider-dot-inactive-color:rgba(0,0,0,.1);--overflow-slider-dot-active-color:rgba(0,0,0,.8)}.overflow-slider__dots{align-items:center;display:flex;justify-content:center}.overflow-slider__dots ul{display:flex;flex-wrap:wrap;gap:var(--overflow-slider-dots-gap);list-style:none;margin:0;padding:0}.overflow-slider__dots li{line-height:0;margin:0;padding:0}.overflow-slider__dot-item{background:var(--overflow-slider-dot-inactive-color);border-radius:50%;cursor:pointer;height:var(--overflow-slider-dot-size);margin:0;outline-offset:2px;padding:0;position:relative;width:var(--overflow-slider-dot-size)}.overflow-slider__dot-item:after{bottom:calc(var(--overflow-slider-dots-gap)*-1);content:"";display:block;left:calc(var(--overflow-slider-dots-gap)*-1);position:absolute;right:calc(var(--overflow-slider-dots-gap)*-1);top:calc(var(--overflow-slider-dots-gap)*-1)}.overflow-slider__dot-item:focus,.overflow-slider__dot-item:hover,.overflow-slider__dot-item[aria-pressed=true]{background:var(--overflow-slider-dot-active-color)}:root{--overflow-slider-fade-color:#fff;--overflow-slider-fade-width:3rem}.overflow-slider-fade{height:100%;pointer-events:none;position:absolute;top:0;width:var(--overflow-slider-fade-width);z-index:1}.overflow-slider-fade--start{background:linear-gradient(to right,var(--overflow-slider-fade-color) 0,transparent 100%);left:0}.overflow-slider-fade--end{background:linear-gradient(to left,var(--overflow-slider-fade-color) 0,transparent 100%);right:0}[data-has-drag-scrolling][data-has-overflow=true]{cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--overflow-slider-scroll-indicator-button-height:4px;--overflow-slider-scroll-indicator-padding:1rem;--overflow-slider-scroll-indicator-button-color:rgba(0,0,0,.75);--overflow-slider-scroll-indicator-bar-color:rgba(0,0,0,.25)}.overflow-slider__scroll-indicator{cursor:pointer;outline:0;padding-block:var(--overflow-slider-scroll-indicator-padding);position:relative;width:100%}.overflow-slider__scroll-indicator[data-has-overflow=false]{display:none}.overflow-slider__scroll-indicator:focus-visible .overflow-slider__scroll-indicator-button{outline:2px solid;outline-offset:2px}.overflow-slider__scroll-indicator-bar{background:var(--overflow-slider-scroll-indicator-bar-color);border-radius:3px;height:2px;left:0;position:absolute;top:50%;transform:translateY(-50%);width:100%}.overflow-slider__scroll-indicator-button{background:var(--overflow-slider-scroll-indicator-button-color);border-radius:3px;cursor:grab;height:var(--overflow-slider-scroll-indicator-button-height);left:0;position:absolute;top:calc(50% - var(--overflow-slider-scroll-indicator-button-height)/2)}.overflow-slider__scroll-indicator-button:hover,.overflow-slider__scroll-indicator-button[data-is-grabbed=true]{--overflow-slider-scroll-indicator-button-height:6px}.overflow-slider__scroll-indicator-button:after{bottom:calc(var(--overflow-slider-scroll-indicator-padding)*-1);content:"";display:block;position:absolute;top:calc(var(--overflow-slider-scroll-indicator-padding)*-1);width:100%}
1
+ .overflow-slider{-ms-overflow-style:none;display:grid;grid-auto-flow:column;grid-template-columns:max-content;max-width:-moz-max-content;max-width:max-content;overflow:auto;position:relative;scrollbar-width:none;width:100%}.overflow-slider::-webkit-scrollbar{display:none}.overflow-slider>*{outline-offset:-2px;scroll-snap-align:start}:root{--overflow-slider-arrows-size:1.5rem;--overflow-slider-arrows-gap:.5rem;--overflow-slider-arrows-inactive-opacity:0.5}.overflow-slider__arrows{display:flex;gap:var(--overflow-slider-arrows-gap)}.overflow-slider__arrows-button{align-items:center;cursor:pointer;display:flex;outline-offset:-2px}.overflow-slider__arrows-button svg{height:var(--overflow-slider-arrows-size);width:var(--overflow-slider-arrows-size)}.overflow-slider__arrows-button[data-has-content=false]{opacity:var(--overflow-slider-arrows-inactive-opacity)}:root{--overflow-slider-dots-gap:0.5rem;--overflow-slider-dot-size:0.75rem;--overflow-slider-dot-inactive-color:rgba(0,0,0,.1);--overflow-slider-dot-active-color:rgba(0,0,0,.8)}.overflow-slider__dots{align-items:center;display:flex;justify-content:center}.overflow-slider__dots ul{display:flex;flex-wrap:wrap;gap:var(--overflow-slider-dots-gap);list-style:none;margin:0;padding:0}.overflow-slider__dots li{line-height:0;margin:0;padding:0}.overflow-slider__dot-item{background:var(--overflow-slider-dot-inactive-color);border-radius:50%;cursor:pointer;height:var(--overflow-slider-dot-size);margin:0;outline-offset:2px;padding:0;position:relative;width:var(--overflow-slider-dot-size)}.overflow-slider__dot-item:after{bottom:calc(var(--overflow-slider-dots-gap)*-1);content:"";display:block;left:calc(var(--overflow-slider-dots-gap)*-1);position:absolute;right:calc(var(--overflow-slider-dots-gap)*-1);top:calc(var(--overflow-slider-dots-gap)*-1)}.overflow-slider__dot-item:focus,.overflow-slider__dot-item:hover,.overflow-slider__dot-item[aria-pressed=true]{background:var(--overflow-slider-dot-active-color)}:root{--overflow-slider-fade-color:#fff;--overflow-slider-fade-width:3rem}.overflow-slider-fade{height:100%;pointer-events:none;position:absolute;top:0;width:var(--overflow-slider-fade-width);z-index:1}.overflow-slider-fade--start{background:linear-gradient(to right,var(--overflow-slider-fade-color) 0,transparent 100%);left:0}[dir=rtl] .overflow-slider-fade--start{left:auto}.overflow-slider-fade--end,[dir=rtl] .overflow-slider-fade--start{background:linear-gradient(to left,var(--overflow-slider-fade-color) 0,transparent 100%);right:0}[dir=rtl] .overflow-slider-fade--end{background:linear-gradient(to right,var(--overflow-slider-fade-color) 0,transparent 100%);left:0;right:auto}[data-has-drag-scrolling][data-has-overflow=true]{cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none}:root{--overflow-slider-scroll-indicator-button-height:4px;--overflow-slider-scroll-indicator-padding:1rem;--overflow-slider-scroll-indicator-button-color:rgba(0,0,0,.75);--overflow-slider-scroll-indicator-bar-color:rgba(0,0,0,.25)}.overflow-slider__scroll-indicator{cursor:pointer;outline:0;padding-block:var(--overflow-slider-scroll-indicator-padding);position:relative;width:100%}.overflow-slider__scroll-indicator[data-has-overflow=false]{display:none}.overflow-slider__scroll-indicator:focus-visible .overflow-slider__scroll-indicator-button{outline:2px solid;outline-offset:2px}.overflow-slider__scroll-indicator-bar{background:var(--overflow-slider-scroll-indicator-bar-color);border-radius:3px;height:2px;left:0;position:absolute;top:50%;transform:translateY(-50%);width:100%}.overflow-slider__scroll-indicator-button{background:var(--overflow-slider-scroll-indicator-button-color);border-radius:3px;cursor:grab;height:var(--overflow-slider-scroll-indicator-button-height);left:0;position:absolute;top:calc(50% - var(--overflow-slider-scroll-indicator-button-height)/2)}.overflow-slider__scroll-indicator-button:hover,.overflow-slider__scroll-indicator-button[data-is-grabbed=true]{--overflow-slider-scroll-indicator-button-height:6px}.overflow-slider__scroll-indicator-button:after{bottom:calc(var(--overflow-slider-scroll-indicator-padding)*-1);content:"";display:block;position:absolute;top:calc(var(--overflow-slider-scroll-indicator-padding)*-1);width:100%}
@@ -30,7 +30,7 @@ function ArrowsPlugin(args) {
30
30
  prev.setAttribute('aria-label', options.texts.buttonPrevious);
31
31
  prev.setAttribute('aria-controls', (_d = slider.container.getAttribute('id')) !== null && _d !== void 0 ? _d : '');
32
32
  prev.setAttribute('data-type', 'prev');
33
- prev.innerHTML = options.icons.prev;
33
+ prev.innerHTML = slider.options.rtl ? options.icons.next : options.icons.prev;
34
34
  prev.addEventListener('click', () => {
35
35
  if (prev.getAttribute('data-has-content') === 'true') {
36
36
  slider.moveToDirection('prev');
@@ -42,7 +42,7 @@ function ArrowsPlugin(args) {
42
42
  next.setAttribute('aria-label', options.texts.buttonNext);
43
43
  next.setAttribute('aria-controls', (_e = slider.container.getAttribute('id')) !== null && _e !== void 0 ? _e : '');
44
44
  next.setAttribute('data-type', 'next');
45
- next.innerHTML = options.icons.next;
45
+ next.innerHTML = slider.options.rtl ? options.icons.prev : options.icons.next;
46
46
  next.addEventListener('click', () => {
47
47
  if (next.getAttribute('data-has-content') === 'true') {
48
48
  slider.moveToDirection('next');
@@ -52,21 +52,24 @@ function ArrowsPlugin(args) {
52
52
  nav.appendChild(prev);
53
53
  nav.appendChild(next);
54
54
  const update = () => {
55
- const scrollLeft = slider.container.scrollLeft;
55
+ const scrollLeft = slider.getScrollLeft();
56
56
  const scrollWidth = slider.getInclusiveScrollWidth();
57
57
  const clientWidth = slider.getInclusiveClientWidth();
58
+ const buffer = 1;
58
59
  if (Math.floor(scrollLeft) === 0) {
59
60
  prev.setAttribute('data-has-content', 'false');
60
61
  }
61
62
  else {
62
63
  prev.setAttribute('data-has-content', 'true');
63
64
  }
64
- if (Math.floor(scrollLeft + clientWidth) >= Math.floor(scrollWidth)) {
65
+ const maxWidthDifference = Math.abs(Math.floor(scrollLeft + clientWidth) - Math.floor(scrollWidth));
66
+ if (maxWidthDifference <= buffer) {
65
67
  next.setAttribute('data-has-content', 'false');
66
68
  }
67
69
  else {
68
70
  next.setAttribute('data-has-content', 'true');
69
71
  }
72
+ console.log('next', scrollLeft + clientWidth, scrollWidth);
70
73
  };
71
74
  if (options.containerNext && options.containerPrev) {
72
75
  options.containerPrev.appendChild(prev);
@@ -1 +1 @@
1
- const t={buttonPrevious:"Previous items",buttonNext:"Next items"},e={prev:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.6 3.4l-7.6 7.6 7.6 7.6 1.4-1.4-5-5h12.6v-2h-12.6l5-5z"/></svg>',next:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 3.4l-1.4 1.4 5 5h-12.6v2h12.6l-5 5 1.4 1.4 7.6-7.6z"/></svg>'},n={navContainer:"overflow-slider__arrows",prevButton:"overflow-slider__arrows-button overflow-slider__arrows-button--prev",nextButton:"overflow-slider__arrows-button overflow-slider__arrows-button--next"};function o(o){return r=>{var i,s,a,l,c,u;const d={texts:Object.assign(Object.assign({},t),(null==o?void 0:o.texts)||[]),icons:Object.assign(Object.assign({},e),(null==o?void 0:o.icons)||[]),classNames:Object.assign(Object.assign({},n),(null==o?void 0:o.classNames)||[]),container:null!==(i=null==o?void 0:o.container)&&void 0!==i?i:null,containerPrev:null!==(s=null==o?void 0:o.containerPrev)&&void 0!==s?s:null,containerNext:null!==(a=null==o?void 0:o.containerNext)&&void 0!==a?a:null},v=document.createElement("div");v.classList.add(d.classNames.navContainer);const b=document.createElement("button");b.setAttribute("class",d.classNames.prevButton),b.setAttribute("type","button"),b.setAttribute("aria-label",d.texts.buttonPrevious),b.setAttribute("aria-controls",null!==(l=r.container.getAttribute("id"))&&void 0!==l?l:""),b.setAttribute("data-type","prev"),b.innerHTML=d.icons.prev,b.addEventListener("click",(()=>{"true"===b.getAttribute("data-has-content")&&r.moveToDirection("prev")}));const p=document.createElement("button");p.setAttribute("class",d.classNames.nextButton),p.setAttribute("type","button"),p.setAttribute("aria-label",d.texts.buttonNext),p.setAttribute("aria-controls",null!==(c=r.container.getAttribute("id"))&&void 0!==c?c:""),p.setAttribute("data-type","next"),p.innerHTML=d.icons.next,p.addEventListener("click",(()=>{"true"===p.getAttribute("data-has-content")&&r.moveToDirection("next")})),v.appendChild(b),v.appendChild(p);const h=()=>{const t=r.container.scrollLeft,e=r.getInclusiveScrollWidth(),n=r.getInclusiveClientWidth();0===Math.floor(t)?b.setAttribute("data-has-content","false"):b.setAttribute("data-has-content","true"),Math.floor(t+n)>=Math.floor(e)?p.setAttribute("data-has-content","false"):p.setAttribute("data-has-content","true")};d.containerNext&&d.containerPrev?(d.containerPrev.appendChild(b),d.containerNext.appendChild(p)):d.container?d.container.appendChild(v):null===(u=r.container.parentNode)||void 0===u||u.insertBefore(v,r.container.nextSibling),h(),r.on("scrollEnd",h),r.on("contentsChanged",h),r.on("containerSizeChanged",h)}}export{o as default};
1
+ const t={buttonPrevious:"Previous items",buttonNext:"Next items"},e={prev:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.6 3.4l-7.6 7.6 7.6 7.6 1.4-1.4-5-5h12.6v-2h-12.6l5-5z"/></svg>',next:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 3.4l-1.4 1.4 5 5h-12.6v2h12.6l-5 5 1.4 1.4 7.6-7.6z"/></svg>'},n={navContainer:"overflow-slider__arrows",prevButton:"overflow-slider__arrows-button overflow-slider__arrows-button--prev",nextButton:"overflow-slider__arrows-button overflow-slider__arrows-button--next"};function o(o){return s=>{var i,r,a,l,c,u;const d={texts:Object.assign(Object.assign({},t),(null==o?void 0:o.texts)||[]),icons:Object.assign(Object.assign({},e),(null==o?void 0:o.icons)||[]),classNames:Object.assign(Object.assign({},n),(null==o?void 0:o.classNames)||[]),container:null!==(i=null==o?void 0:o.container)&&void 0!==i?i:null,containerPrev:null!==(r=null==o?void 0:o.containerPrev)&&void 0!==r?r:null,containerNext:null!==(a=null==o?void 0:o.containerNext)&&void 0!==a?a:null},v=document.createElement("div");v.classList.add(d.classNames.navContainer);const b=document.createElement("button");b.setAttribute("class",d.classNames.prevButton),b.setAttribute("type","button"),b.setAttribute("aria-label",d.texts.buttonPrevious),b.setAttribute("aria-controls",null!==(l=s.container.getAttribute("id"))&&void 0!==l?l:""),b.setAttribute("data-type","prev"),b.innerHTML=s.options.rtl?d.icons.next:d.icons.prev,b.addEventListener("click",(()=>{"true"===b.getAttribute("data-has-content")&&s.moveToDirection("prev")}));const p=document.createElement("button");p.setAttribute("class",d.classNames.nextButton),p.setAttribute("type","button"),p.setAttribute("aria-label",d.texts.buttonNext),p.setAttribute("aria-controls",null!==(c=s.container.getAttribute("id"))&&void 0!==c?c:""),p.setAttribute("data-type","next"),p.innerHTML=s.options.rtl?d.icons.prev:d.icons.next,p.addEventListener("click",(()=>{"true"===p.getAttribute("data-has-content")&&s.moveToDirection("next")})),v.appendChild(b),v.appendChild(p);const h=()=>{const t=s.getScrollLeft(),e=s.getInclusiveScrollWidth(),n=s.getInclusiveClientWidth();0===Math.floor(t)?b.setAttribute("data-has-content","false"):b.setAttribute("data-has-content","true");Math.abs(Math.floor(t+n)-Math.floor(e))<=1?p.setAttribute("data-has-content","false"):p.setAttribute("data-has-content","true"),console.log("next",t+n,e)};d.containerNext&&d.containerPrev?(d.containerPrev.appendChild(b),d.containerNext.appendChild(p)):d.container?d.container.appendChild(v):null===(u=s.container.parentNode)||void 0===u||u.insertBefore(v,s.container.nextSibling),h(),s.on("scrollEnd",h),s.on("contentsChanged",h),s.on("containerSizeChanged",h)}}export{o as default};
@@ -76,10 +76,6 @@ function DotsPlugin(args) {
76
76
  }
77
77
  };
78
78
  const activateDot = (item) => {
79
- // const scrollTargetPosition = slider.details.containerWidth * ( page - 1 );
80
- // slider.container.style.scrollBehavior = slider.options.scrollBehavior;
81
- // slider.container.scrollLeft = scrollTargetPosition;
82
- // slider.container.style.scrollBehavior = '';
83
79
  slider.moveToSlide(item - 1);
84
80
  };
85
81
  buildDots();
@@ -32,20 +32,20 @@ function FadePlugin(args) {
32
32
  options.container.appendChild(fadeItemEnd);
33
33
  }
34
34
  const hasFadeAtStart = () => {
35
- return slider.container.scrollLeft > fadeItemStart.offsetWidth;
35
+ return slider.getScrollLeft() > fadeItemStart.offsetWidth;
36
36
  };
37
37
  const fadeAtStartOpacity = () => {
38
- const position = slider.container.scrollLeft;
38
+ const position = slider.getScrollLeft();
39
39
  if (Math.floor(position) <= Math.floor(fadeItemStart.offsetWidth)) {
40
40
  return position / Math.max(fadeItemStart.offsetWidth, 1);
41
41
  }
42
42
  return 1;
43
43
  };
44
44
  const hasFadeAtEnd = () => {
45
- return Math.floor(slider.container.scrollLeft) < Math.floor(slider.getInclusiveScrollWidth() - slider.getInclusiveClientWidth() - fadeItemEnd.offsetWidth);
45
+ return Math.floor(slider.getScrollLeft()) < Math.floor(slider.getInclusiveScrollWidth() - slider.getInclusiveClientWidth() - fadeItemEnd.offsetWidth);
46
46
  };
47
47
  const fadeAtEndOpacity = () => {
48
- const position = slider.container.scrollLeft;
48
+ const position = slider.getScrollLeft();
49
49
  const maxPosition = slider.getInclusiveScrollWidth() - slider.getInclusiveClientWidth();
50
50
  const maxFadePosition = maxPosition - fadeItemEnd.offsetWidth;
51
51
  if (Math.floor(position) >= Math.floor(maxFadePosition)) {
@@ -1 +1 @@
1
- function t(t){return e=>{var n,a,o;const i={classNames:{fadeItem:"overflow-slider-fade",fadeItemStart:"overflow-slider-fade--start",fadeItemEnd:"overflow-slider-fade--end"},container:null!==(n=null==t?void 0:t.container)&&void 0!==n?n:null,containerStart:null!==(a=null==t?void 0:t.containerStart)&&void 0!==a?a:null,containerEnd:null!==(o=null==t?void 0:t.containerEnd)&&void 0!==o?o:null},r=document.createElement("div");r.classList.add(i.classNames.fadeItem,i.classNames.fadeItemStart),r.setAttribute("aria-hidden","true"),r.setAttribute("tabindex","-1");const l=document.createElement("div");l.classList.add(i.classNames.fadeItem,i.classNames.fadeItemEnd),l.setAttribute("aria-hidden","true"),l.setAttribute("tabindex","-1"),i.containerStart?i.containerStart.appendChild(r):i.container&&i.container.appendChild(r),i.containerEnd?i.containerEnd.appendChild(l):i.container&&i.container.appendChild(l);const d=()=>{r.setAttribute("data-has-fade",(e.container.scrollLeft>r.offsetWidth).toString()),r.style.opacity=(()=>{const t=e.container.scrollLeft;return Math.floor(t)<=Math.floor(r.offsetWidth)?t/Math.max(r.offsetWidth,1):1})().toString(),l.setAttribute("data-has-fade",(Math.floor(e.container.scrollLeft)<Math.floor(e.getInclusiveScrollWidth()-e.getInclusiveClientWidth()-l.offsetWidth)).toString()),l.style.opacity=(()=>{const t=e.container.scrollLeft,n=e.getInclusiveScrollWidth()-e.getInclusiveClientWidth()-l.offsetWidth;return Math.floor(t)>=Math.floor(n)?(n-t)/Math.max(l.offsetWidth,1)+1:1})().toString()};d(),e.on("created",d),e.on("contentsChanged",d),e.on("containerSizeChanged",d),e.on("scrollEnd",d),e.on("scrollStart",d);let s=0;e.on("scroll",(()=>{s&&window.cancelAnimationFrame(s),s=window.requestAnimationFrame((()=>{d()}))}))}}export{t as default};
1
+ function t(t){return e=>{var n,a,o;const i={classNames:{fadeItem:"overflow-slider-fade",fadeItemStart:"overflow-slider-fade--start",fadeItemEnd:"overflow-slider-fade--end"},container:null!==(n=null==t?void 0:t.container)&&void 0!==n?n:null,containerStart:null!==(a=null==t?void 0:t.containerStart)&&void 0!==a?a:null,containerEnd:null!==(o=null==t?void 0:t.containerEnd)&&void 0!==o?o:null},l=document.createElement("div");l.classList.add(i.classNames.fadeItem,i.classNames.fadeItemStart),l.setAttribute("aria-hidden","true"),l.setAttribute("tabindex","-1");const r=document.createElement("div");r.classList.add(i.classNames.fadeItem,i.classNames.fadeItemEnd),r.setAttribute("aria-hidden","true"),r.setAttribute("tabindex","-1"),i.containerStart?i.containerStart.appendChild(l):i.container&&i.container.appendChild(l),i.containerEnd?i.containerEnd.appendChild(r):i.container&&i.container.appendChild(r);const d=()=>{l.setAttribute("data-has-fade",(e.getScrollLeft()>l.offsetWidth).toString()),l.style.opacity=(()=>{const t=e.getScrollLeft();return Math.floor(t)<=Math.floor(l.offsetWidth)?t/Math.max(l.offsetWidth,1):1})().toString(),r.setAttribute("data-has-fade",(Math.floor(e.getScrollLeft())<Math.floor(e.getInclusiveScrollWidth()-e.getInclusiveClientWidth()-r.offsetWidth)).toString()),r.style.opacity=(()=>{const t=e.getScrollLeft(),n=e.getInclusiveScrollWidth()-e.getInclusiveClientWidth()-r.offsetWidth;return Math.floor(t)>=Math.floor(n)?(n-t)/Math.max(r.offsetWidth,1)+1:1})().toString()};d(),e.on("created",d),e.on("contentsChanged",d),e.on("containerSizeChanged",d),e.on("scrollEnd",d),e.on("scrollStart",d);let s=0;e.on("scroll",(()=>{s&&window.cancelAnimationFrame(s),s=window.requestAnimationFrame((()=>{d()}))}))}}export{t as default};
@@ -16,16 +16,21 @@ function FullWidthPlugin(args) {
16
16
  const lastSlide = slides[slides.length - 1];
17
17
  const marginAmount = Math.floor((window.innerWidth - options.targetWidth(slider)) / 2);
18
18
  if (options.addMarginBefore) {
19
- firstSlide.style.marginLeft = `${marginAmount}px`;
19
+ firstSlide.style.marginInlineStart = `${marginAmount}px`;
20
20
  }
21
21
  if (options.addMarginAfter) {
22
- lastSlide.style.marginRight = `${marginAmount}px`;
22
+ lastSlide.style.marginInlineEnd = `${marginAmount}px`;
23
23
  }
24
24
  slider.container.setAttribute('data-full-width-offset', marginAmount.toString());
25
+ setCSS();
26
+ };
27
+ const setCSS = () => {
28
+ slider.container.style.setProperty('--slider-container-target-width', `${options.targetWidth(slider)}px`);
25
29
  };
26
30
  update();
27
31
  slider.on('contentsChanged', update);
28
32
  slider.on('containerSizeChanged', update);
33
+ window.addEventListener('resize', setCSS);
29
34
  };
30
35
  }
31
36
 
@@ -1 +1 @@
1
- const t=t=>{var n,e;return null!==(e=null===(n=t.container.parentElement)||void 0===n?void 0:n.offsetWidth)&&void 0!==e?e:window.innerWidth};function n(n){return e=>{var i,r,o;const d={targetWidth:null!==(i=null==n?void 0:n.targetWidth)&&void 0!==i?i:t,addMarginBefore:null===(r=null==n?void 0:n.addMarginBefore)||void 0===r||r,addMarginAfter:null===(o=null==n?void 0:n.addMarginAfter)||void 0===o||o},a=()=>{const t=e.container.querySelectorAll(e.options.slidesSelector);if(!t.length)return;const n=t[0],i=t[t.length-1],r=Math.floor((window.innerWidth-d.targetWidth(e))/2);d.addMarginBefore&&(n.style.marginLeft=`${r}px`),d.addMarginAfter&&(i.style.marginRight=`${r}px`),e.container.setAttribute("data-full-width-offset",r.toString())};a(),e.on("contentsChanged",a),e.on("containerSizeChanged",a)}}export{n as default};
1
+ const t=t=>{var n,e;return null!==(e=null===(n=t.container.parentElement)||void 0===n?void 0:n.offsetWidth)&&void 0!==e?e:window.innerWidth};function n(n){return e=>{var i,r,d;const o={targetWidth:null!==(i=null==n?void 0:n.targetWidth)&&void 0!==i?i:t,addMarginBefore:null===(r=null==n?void 0:n.addMarginBefore)||void 0===r||r,addMarginAfter:null===(d=null==n?void 0:n.addMarginAfter)||void 0===d||d},a=()=>{const t=e.container.querySelectorAll(e.options.slidesSelector);if(!t.length)return;const n=t[0],i=t[t.length-1],r=Math.floor((window.innerWidth-o.targetWidth(e))/2);o.addMarginBefore&&(n.style.marginInlineStart=`${r}px`),o.addMarginAfter&&(i.style.marginInlineEnd=`${r}px`),e.container.setAttribute("data-full-width-offset",r.toString()),l()},l=()=>{e.container.style.setProperty("--slider-container-target-width",`${o.targetWidth(e)}px`)};a(),e.on("contentsChanged",a),e.on("containerSizeChanged",a),window.addEventListener("resize",l)}}export{n as default};
@@ -32,9 +32,12 @@ function ScrollIndicatorPlugin(args) {
32
32
  setDataAttributes();
33
33
  const getScrollbarButtonLeftOffset = () => {
34
34
  const contentRatio = scrollbarButton.offsetWidth / slider.details.containerWidth;
35
- return slider.container.scrollLeft * contentRatio;
35
+ const scrollAmount = slider.getScrollLeft() * contentRatio;
36
+ if (slider.options.rtl) {
37
+ return scrollbar.offsetWidth - scrollbarButton.offsetWidth - scrollAmount;
38
+ }
39
+ return scrollAmount;
36
40
  };
37
- // scrollbarbutton width and position is calculated based on the scroll position and available width
38
41
  let requestId = 0;
39
42
  const update = () => {
40
43
  if (requestId) {
@@ -45,28 +48,24 @@ function ScrollIndicatorPlugin(args) {
45
48
  const scrollLeftInPortion = getScrollbarButtonLeftOffset();
46
49
  scrollbarButton.style.width = `${scrollbarButtonWidth}%`;
47
50
  scrollbarButton.style.transform = `translateX(${scrollLeftInPortion}px)`;
48
- // aria-valuenow
49
- const scrollLeft = slider.container.scrollLeft;
51
+ const scrollLeft = slider.getScrollLeft();
50
52
  const scrollWidth = slider.getInclusiveScrollWidth();
51
53
  const containerWidth = slider.container.offsetWidth;
52
54
  const scrollPercentage = (scrollLeft / (scrollWidth - containerWidth)) * 100;
53
55
  scrollbarContainer.setAttribute('aria-valuenow', Math.round(Number.isNaN(scrollPercentage) ? 0 : scrollPercentage).toString());
54
56
  });
55
57
  };
56
- // insert to DOM
57
58
  if (options.container) {
58
59
  options.container.appendChild(scrollbarContainer);
59
60
  }
60
61
  else {
61
62
  (_c = slider.container.parentNode) === null || _c === void 0 ? void 0 : _c.insertBefore(scrollbarContainer, slider.container.nextSibling);
62
63
  }
63
- // update the scrollbar when the slider is scrolled
64
64
  update();
65
65
  slider.on('scroll', update);
66
66
  slider.on('contentsChanged', update);
67
67
  slider.on('containerSizeChanged', update);
68
68
  slider.on('detailsChanged', setDataAttributes);
69
- // handle arrow keys while focused
70
69
  scrollbarContainer.addEventListener('keydown', (e) => {
71
70
  if (e.key === 'ArrowLeft') {
72
71
  slider.moveToDirection('prev');
@@ -75,29 +74,29 @@ function ScrollIndicatorPlugin(args) {
75
74
  slider.moveToDirection('next');
76
75
  }
77
76
  });
78
- // handle click to before or after the scrollbar button
77
+ let isInteractionDown = false;
78
+ let startX = 0;
79
+ let scrollLeft = slider.getScrollLeft();
79
80
  scrollbarContainer.addEventListener('click', (e) => {
81
+ if (e.target == scrollbarButton) {
82
+ return;
83
+ }
80
84
  const scrollbarButtonWidth = scrollbarButton.offsetWidth;
81
85
  const scrollbarButtonLeft = getScrollbarButtonLeftOffset();
82
86
  const scrollbarButtonRight = scrollbarButtonLeft + scrollbarButtonWidth;
83
- const clickX = e.pageX - scrollbarContainer.offsetLeft;
87
+ const clickX = e.pageX - Math.abs(scrollbarContainer.offsetLeft);
84
88
  if (Math.floor(clickX) < Math.floor(scrollbarButtonLeft)) {
85
- slider.moveToDirection('prev');
89
+ slider.moveToDirection(slider.options.rtl ? 'next' : 'prev');
86
90
  }
87
91
  else if (Math.floor(clickX) > Math.floor(scrollbarButtonRight)) {
88
- slider.moveToDirection('next');
92
+ slider.moveToDirection(slider.options.rtl ? 'prev' : 'next');
89
93
  }
90
94
  });
91
- // make scrollbar button draggable via mouse/touch and update the scroll position
92
- let isInteractionDown = false;
93
- let startX = 0;
94
- let scrollLeft = 0;
95
95
  const onInteractionDown = (e) => {
96
96
  isInteractionDown = true;
97
97
  const pageX = e.pageX || e.touches[0].pageX;
98
98
  startX = pageX - scrollbarContainer.offsetLeft;
99
- scrollLeft = slider.container.scrollLeft;
100
- // change cursor to grabbing
99
+ scrollLeft = slider.getScrollLeft();
101
100
  scrollbarButton.style.cursor = 'grabbing';
102
101
  scrollbarButton.setAttribute('data-is-grabbed', 'true');
103
102
  e.preventDefault();
@@ -112,7 +111,8 @@ function ScrollIndicatorPlugin(args) {
112
111
  const x = pageX - scrollbarContainer.offsetLeft;
113
112
  const scrollingFactor = slider.details.scrollableAreaWidth / scrollbarContainer.offsetWidth;
114
113
  const walk = (x - startX) * scrollingFactor;
115
- slider.container.scrollLeft = scrollLeft + walk;
114
+ const distance = slider.options.rtl ? scrollLeft - walk : scrollLeft + walk;
115
+ slider.setScrollLeft(distance);
116
116
  };
117
117
  const onInteractionUp = () => {
118
118
  isInteractionDown = false;
@@ -1 +1 @@
1
- const t={scrollIndicator:"overflow-slider__scroll-indicator",scrollIndicatorBar:"overflow-slider__scroll-indicator-bar",scrollIndicatorButton:"overflow-slider__scroll-indicator-button"};function e(e){return o=>{var n,r,a;const i={classNames:Object.assign(Object.assign({},t),(null==e?void 0:e.classNames)||[]),container:null!==(n=null==e?void 0:e.container)&&void 0!==n?n:null},s=document.createElement("div");s.setAttribute("class",i.classNames.scrollIndicator),s.setAttribute("tabindex","0"),s.setAttribute("role","scrollbar"),s.setAttribute("aria-controls",null!==(r=o.container.getAttribute("id"))&&void 0!==r?r:""),s.setAttribute("aria-orientation","horizontal"),s.setAttribute("aria-valuemax","100"),s.setAttribute("aria-valuemin","0"),s.setAttribute("aria-valuenow","0");const l=document.createElement("div");l.setAttribute("class",i.classNames.scrollIndicatorBar);const c=document.createElement("div");c.setAttribute("class",i.classNames.scrollIndicatorButton),c.setAttribute("data-is-grabbed","false"),l.appendChild(c),s.appendChild(l);const d=()=>{s.setAttribute("data-has-overflow",o.details.hasOverflow.toString())};d();const u=()=>{const t=c.offsetWidth/o.details.containerWidth;return o.container.scrollLeft*t};let f=0;const v=()=>{f&&window.cancelAnimationFrame(f),f=window.requestAnimationFrame((()=>{const t=o.details.containerWidth/o.container.scrollWidth*100,e=u();c.style.width=`${t}%`,c.style.transform=`translateX(${e}px)`;const n=o.container.scrollLeft/(o.getInclusiveScrollWidth()-o.container.offsetWidth)*100;s.setAttribute("aria-valuenow",Math.round(Number.isNaN(n)?0:n).toString())}))};i.container?i.container.appendChild(s):null===(a=o.container.parentNode)||void 0===a||a.insertBefore(s,o.container.nextSibling),v(),o.on("scroll",v),o.on("contentsChanged",v),o.on("containerSizeChanged",v),o.on("detailsChanged",d),s.addEventListener("keydown",(t=>{"ArrowLeft"===t.key?o.moveToDirection("prev"):"ArrowRight"===t.key&&o.moveToDirection("next")})),s.addEventListener("click",(t=>{const e=c.offsetWidth,n=u(),r=n+e,a=t.pageX-s.offsetLeft;Math.floor(a)<Math.floor(n)?o.moveToDirection("prev"):Math.floor(a)>Math.floor(r)&&o.moveToDirection("next")}));let b=!1,h=0,m=0;const w=t=>{b=!0;const e=t.pageX||t.touches[0].pageX;h=e-s.offsetLeft,m=o.container.scrollLeft,c.style.cursor="grabbing",c.setAttribute("data-is-grabbed","true"),t.preventDefault(),t.stopPropagation()},g=t=>{if(!b)return;t.preventDefault();const e=(t.pageX||t.touches[0].pageX)-s.offsetLeft,n=o.details.scrollableAreaWidth/s.offsetWidth,r=(e-h)*n;o.container.scrollLeft=m+r},p=()=>{b=!1,c.style.cursor="",c.setAttribute("data-is-grabbed","false")};c.addEventListener("mousedown",w),c.addEventListener("touchstart",w),window.addEventListener("mousemove",g),window.addEventListener("touchmove",g,{passive:!1}),window.addEventListener("mouseup",p),window.addEventListener("touchend",p)}}export{e as default};
1
+ const t={scrollIndicator:"overflow-slider__scroll-indicator",scrollIndicatorBar:"overflow-slider__scroll-indicator-bar",scrollIndicatorButton:"overflow-slider__scroll-indicator-button"};function e(e){return o=>{var r,n,i;const a={classNames:Object.assign(Object.assign({},t),(null==e?void 0:e.classNames)||[]),container:null!==(r=null==e?void 0:e.container)&&void 0!==r?r:null},s=document.createElement("div");s.setAttribute("class",a.classNames.scrollIndicator),s.setAttribute("tabindex","0"),s.setAttribute("role","scrollbar"),s.setAttribute("aria-controls",null!==(n=o.container.getAttribute("id"))&&void 0!==n?n:""),s.setAttribute("aria-orientation","horizontal"),s.setAttribute("aria-valuemax","100"),s.setAttribute("aria-valuemin","0"),s.setAttribute("aria-valuenow","0");const l=document.createElement("div");l.setAttribute("class",a.classNames.scrollIndicatorBar);const c=document.createElement("div");c.setAttribute("class",a.classNames.scrollIndicatorButton),c.setAttribute("data-is-grabbed","false"),l.appendChild(c),s.appendChild(l);const d=()=>{s.setAttribute("data-has-overflow",o.details.hasOverflow.toString())};d();const u=()=>{const t=c.offsetWidth/o.details.containerWidth,e=o.getScrollLeft()*t;return o.options.rtl?l.offsetWidth-c.offsetWidth-e:e};let f=0;const v=()=>{f&&window.cancelAnimationFrame(f),f=window.requestAnimationFrame((()=>{const t=o.details.containerWidth/o.container.scrollWidth*100,e=u();c.style.width=`${t}%`,c.style.transform=`translateX(${e}px)`;const r=o.getScrollLeft()/(o.getInclusiveScrollWidth()-o.container.offsetWidth)*100;s.setAttribute("aria-valuenow",Math.round(Number.isNaN(r)?0:r).toString())}))};a.container?a.container.appendChild(s):null===(i=o.container.parentNode)||void 0===i||i.insertBefore(s,o.container.nextSibling),v(),o.on("scroll",v),o.on("contentsChanged",v),o.on("containerSizeChanged",v),o.on("detailsChanged",d),s.addEventListener("keydown",(t=>{"ArrowLeft"===t.key?o.moveToDirection("prev"):"ArrowRight"===t.key&&o.moveToDirection("next")}));let b=!1,h=0,m=o.getScrollLeft();s.addEventListener("click",(t=>{if(t.target==c)return;const e=c.offsetWidth,r=u(),n=r+e,i=t.pageX-Math.abs(s.offsetLeft);Math.floor(i)<Math.floor(r)?o.moveToDirection(o.options.rtl?"next":"prev"):Math.floor(i)>Math.floor(n)&&o.moveToDirection(o.options.rtl?"prev":"next")}));const g=t=>{b=!0;const e=t.pageX||t.touches[0].pageX;h=e-s.offsetLeft,m=o.getScrollLeft(),c.style.cursor="grabbing",c.setAttribute("data-is-grabbed","true"),t.preventDefault(),t.stopPropagation()},p=t=>{if(!b)return;t.preventDefault();const e=(t.pageX||t.touches[0].pageX)-s.offsetLeft,r=o.details.scrollableAreaWidth/s.offsetWidth,n=(e-h)*r,i=o.options.rtl?m-n:m+n;o.setScrollLeft(i)},w=()=>{b=!1,c.style.cursor="",c.setAttribute("data-is-grabbed","false")};c.addEventListener("mousedown",g),c.addEventListener("touchstart",g),window.addEventListener("mousemove",p),window.addEventListener("touchmove",p,{passive:!1}),window.addEventListener("mouseup",w),window.addEventListener("touchend",w)}}export{e as default};
@@ -27,13 +27,16 @@ function FullWidthPlugin(args) {
27
27
  };
28
28
  setActiveThumbnail();
29
29
  addClickListeners();
30
- // @todo debounce on scroll
31
- mainSlider.on('activeSlideChanged', () => {
30
+ mainSlider.on('scrollEnd', () => {
32
31
  setTimeout(() => {
33
- const activeSlideIdx = mainSlider.activeSlideIdx;
34
- const activeThumbnail = slider.slides[activeSlideIdx];
32
+ const mainActiveSlideIdx = mainSlider.activeSlideIdx;
33
+ const thumbActiveSlideIdx = slider.activeSlideIdx;
34
+ if (thumbActiveSlideIdx === mainActiveSlideIdx) {
35
+ return;
36
+ }
37
+ const activeThumbnail = slider.slides[mainActiveSlideIdx];
35
38
  setActiveThumbnail(activeThumbnail);
36
- slider.moveToSlide(activeSlideIdx);
39
+ slider.moveToSlide(mainActiveSlideIdx);
37
40
  }, 50);
38
41
  });
39
42
  };
@@ -1 +1 @@
1
- function e(e){return i=>{const t={mainSlider:e.mainSlider}.mainSlider,l=(e=null)=>{null===e&&i.slides.length>0&&(e=i.slides[0]),null!==e&&(i.slides.forEach((e=>{e.setAttribute("aria-current","false")})),e.setAttribute("aria-current","true"))};l(),i.slides.forEach(((e,i)=>{e.addEventListener("click",(()=>{t.moveToSlide(i),l(e)}))})),t.on("activeSlideChanged",(()=>{setTimeout((()=>{const e=t.activeSlideIdx,n=i.slides[e];l(n),i.moveToSlide(e)}),50)}))}}export{e as default};
1
+ function e(e){return i=>{const t={mainSlider:e.mainSlider}.mainSlider,l=(e=null)=>{null===e&&i.slides.length>0&&(e=i.slides[0]),null!==e&&(i.slides.forEach((e=>{e.setAttribute("aria-current","false")})),e.setAttribute("aria-current","true"))};l(),i.slides.forEach(((e,i)=>{e.addEventListener("click",(()=>{t.moveToSlide(i),l(e)}))})),t.on("scrollEnd",(()=>{setTimeout((()=>{const e=t.activeSlideIdx;if(i.activeSlideIdx===e)return;const r=i.slides[e];l(r),i.moveToSlide(e)}),50)}))}}export{e as default};