glide-react 1.0.0 → 2.0.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.
package/dist/index.mjs CHANGED
@@ -503,10 +503,12 @@ var calculateSlideWidth = (listWidth, slidesToShow, centerMode, centerPadding, v
503
503
  let centerPaddingAdj = 0;
504
504
  if (centerMode) {
505
505
  const paddingValue = parseInt(centerPadding, 10) || 0;
506
- centerPaddingAdj = paddingValue * 2;
507
506
  if (centerPadding.endsWith("%")) {
508
- centerPaddingAdj = listWidth * paddingValue * 2 / 100;
507
+ centerPaddingAdj = listWidth * paddingValue / 100;
508
+ } else {
509
+ centerPaddingAdj = paddingValue;
509
510
  }
511
+ centerPaddingAdj = centerPaddingAdj * 2;
510
512
  }
511
513
  return Math.ceil((listWidth - centerPaddingAdj) / slidesToShow);
512
514
  };
@@ -591,6 +593,9 @@ var getSlideStyle = (spec) => {
591
593
  if (!spec.variableWidth) {
592
594
  style.width = spec.slideWidth;
593
595
  }
596
+ if (spec.vertical && spec.slideHeight) {
597
+ style.height = spec.slideHeight;
598
+ }
594
599
  if (spec.fade) {
595
600
  style.position = "relative";
596
601
  if (spec.vertical) {
@@ -599,7 +604,7 @@ var getSlideStyle = (spec) => {
599
604
  style.left = -spec.index * spec.slideWidth;
600
605
  }
601
606
  style.opacity = spec.currentSlide === spec.index ? 1 : 0;
602
- style.zIndex = spec.currentSlide === spec.index ? 999 : 998;
607
+ style.zIndex = spec.currentSlide === spec.index ? 1 : 0;
603
608
  if (spec.useCSS) {
604
609
  style.transition = `opacity ${spec.speed}ms ${spec.cssEase}, visibility ${spec.speed}ms ${spec.cssEase}`;
605
610
  }
@@ -855,7 +860,7 @@ var Track = forwardRef(function Track2({
855
860
  const baseTrackStyle = {
856
861
  position: "relative",
857
862
  display: fade ? "block" : "flex",
858
- flexDirection: vertical ? "column" : "row",
863
+ ...fade ? {} : { flexDirection: vertical ? "column" : "row" },
859
864
  ...trackStyle
860
865
  };
861
866
  return /* @__PURE__ */ jsx(
@@ -875,7 +880,7 @@ var Track = forwardRef(function Track2({
875
880
  // src/components/Arrows.tsx
876
881
  import { cloneElement as cloneElement2, isValidElement as isValidElement2 } from "react";
877
882
  import { jsx as jsx2 } from "react/jsx-runtime";
878
- var PrevArrowSVG = ({ className }) => /* @__PURE__ */ jsx2(
883
+ var PrevArrowSVG = ({ className, vertical }) => /* @__PURE__ */ jsx2(
879
884
  "svg",
880
885
  {
881
886
  className,
@@ -890,7 +895,7 @@ var PrevArrowSVG = ({ className }) => /* @__PURE__ */ jsx2(
890
895
  children: /* @__PURE__ */ jsx2("polyline", { points: "15 18 9 12 15 6" })
891
896
  }
892
897
  );
893
- var NextArrowSVG = ({ className }) => /* @__PURE__ */ jsx2(
898
+ var NextArrowSVG = ({ className, vertical }) => /* @__PURE__ */ jsx2(
894
899
  "svg",
895
900
  {
896
901
  className,
@@ -907,9 +912,7 @@ var NextArrowSVG = ({ className }) => /* @__PURE__ */ jsx2(
907
912
  );
908
913
  var baseArrowStyle = {
909
914
  position: "absolute",
910
- top: "50%",
911
- transform: "translateY(-50%)",
912
- zIndex: 10,
915
+ zIndex: 100,
913
916
  display: "flex",
914
917
  alignItems: "center",
915
918
  justifyContent: "center",
@@ -934,6 +937,7 @@ var PrevArrow = ({
934
937
  slidesToShow,
935
938
  infinite,
936
939
  centerMode,
940
+ vertical,
937
941
  onClick,
938
942
  customArrow
939
943
  }) => {
@@ -965,13 +969,15 @@ var PrevArrow = ({
965
969
  className: `glide-arrow glide-prev ${!canGo ? "glide-disabled" : ""}`,
966
970
  style: {
967
971
  ...canGo ? baseArrowStyle : disabledArrowStyle,
968
- left: 10
972
+ left: 10,
973
+ top: "50%",
974
+ transform: "translateY(-50%)"
969
975
  },
970
976
  onClick: handleClick,
971
977
  "aria-label": "Previous slide",
972
978
  "aria-disabled": !canGo,
973
979
  disabled: !canGo,
974
- children: /* @__PURE__ */ jsx2(PrevArrowSVG, {})
980
+ children: /* @__PURE__ */ jsx2(PrevArrowSVG, { vertical })
975
981
  }
976
982
  );
977
983
  };
@@ -981,6 +987,7 @@ var NextArrow = ({
981
987
  slidesToShow,
982
988
  infinite,
983
989
  centerMode,
990
+ vertical,
984
991
  onClick,
985
992
  customArrow
986
993
  }) => {
@@ -1015,13 +1022,15 @@ var NextArrow = ({
1015
1022
  className: `glide-arrow glide-next ${!canGo ? "glide-disabled" : ""}`,
1016
1023
  style: {
1017
1024
  ...canGo ? baseArrowStyle : disabledArrowStyle,
1018
- right: 10
1025
+ right: 10,
1026
+ top: "50%",
1027
+ transform: "translateY(-50%)"
1019
1028
  },
1020
1029
  onClick: handleClick,
1021
1030
  "aria-label": "Next slide",
1022
1031
  "aria-disabled": !canGo,
1023
1032
  disabled: !canGo,
1024
- children: /* @__PURE__ */ jsx2(NextArrowSVG, {})
1033
+ children: /* @__PURE__ */ jsx2(NextArrowSVG, { vertical })
1025
1034
  }
1026
1035
  );
1027
1036
  };
@@ -1444,6 +1453,95 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1444
1453
  scrolling
1445
1454
  } = state;
1446
1455
  const slideCount = Children2.count(children);
1456
+ const [breakpoint, setBreakpoint] = React4.useState(null);
1457
+ useEffect(() => {
1458
+ if (!canUseDOM() || !settings.responsive) return;
1459
+ const responsiveSettings2 = settings.responsive;
1460
+ const breakpoints = responsiveSettings2.map((bp) => bp.breakpoint).sort((a, b) => a - b);
1461
+ const mediaQueryListeners = [];
1462
+ breakpoints.forEach((bp, index) => {
1463
+ let query;
1464
+ if (index === 0) {
1465
+ query = `(max-width: ${bp}px)`;
1466
+ } else {
1467
+ query = `(min-width: ${breakpoints[index - 1] + 1}px) and (max-width: ${bp}px)`;
1468
+ }
1469
+ const mql = window.matchMedia(query);
1470
+ const listener = (e) => {
1471
+ if (e.matches) {
1472
+ setBreakpoint(bp);
1473
+ }
1474
+ };
1475
+ mql.addEventListener("change", listener);
1476
+ mediaQueryListeners.push({ mql, listener });
1477
+ if (mql.matches) {
1478
+ setBreakpoint(bp);
1479
+ }
1480
+ });
1481
+ const maxBreakpoint = breakpoints[breakpoints.length - 1];
1482
+ const fullScreenQuery = `(min-width: ${maxBreakpoint + 1}px)`;
1483
+ const fullScreenMql = window.matchMedia(fullScreenQuery);
1484
+ const fullScreenListener = (e) => {
1485
+ if (e.matches) {
1486
+ setBreakpoint(null);
1487
+ }
1488
+ };
1489
+ fullScreenMql.addEventListener("change", fullScreenListener);
1490
+ mediaQueryListeners.push({ mql: fullScreenMql, listener: fullScreenListener });
1491
+ if (fullScreenMql.matches) {
1492
+ setBreakpoint(null);
1493
+ }
1494
+ return () => {
1495
+ mediaQueryListeners.forEach(({ mql, listener }) => {
1496
+ mql.removeEventListener("change", listener);
1497
+ });
1498
+ };
1499
+ }, [settings.responsive]);
1500
+ const responsiveSettings = useMemo4(() => {
1501
+ let merged;
1502
+ if (!breakpoint || !settings.responsive) {
1503
+ merged = settings;
1504
+ } else {
1505
+ const matchedBreakpoint = settings.responsive.find((bp) => bp.breakpoint === breakpoint);
1506
+ if (!matchedBreakpoint) {
1507
+ merged = settings;
1508
+ } else if (matchedBreakpoint.settings === "disabled") {
1509
+ merged = { ...settings, slidesToShow: 1, slidesToScroll: 1 };
1510
+ } else {
1511
+ merged = { ...settings, ...matchedBreakpoint.settings };
1512
+ }
1513
+ }
1514
+ if (merged.centerMode && merged.slidesToScroll > 1) {
1515
+ if (process.env.NODE_ENV !== "production") {
1516
+ console.warn(
1517
+ `slidesToScroll should be equal to 1 in centerMode, you are using ${merged.slidesToScroll}`
1518
+ );
1519
+ }
1520
+ merged = { ...merged, slidesToScroll: 1 };
1521
+ }
1522
+ if (merged.fade) {
1523
+ if (merged.slidesToShow > 1 && process.env.NODE_ENV !== "production") {
1524
+ console.warn(
1525
+ `slidesToShow should be equal to 1 when fade is true, you're using ${merged.slidesToShow}`
1526
+ );
1527
+ }
1528
+ if (merged.slidesToScroll > 1 && process.env.NODE_ENV !== "production") {
1529
+ console.warn(
1530
+ `slidesToScroll should be equal to 1 when fade is true, you're using ${merged.slidesToScroll}`
1531
+ );
1532
+ }
1533
+ merged = { ...merged, slidesToShow: 1, slidesToScroll: 1 };
1534
+ }
1535
+ return merged;
1536
+ }, [breakpoint, settings]);
1537
+ const {
1538
+ slidesToShow: responsiveSlidesToShow,
1539
+ slidesToScroll: responsiveSlidesToScroll,
1540
+ infinite: responsiveInfinite,
1541
+ centerMode: responsiveCenterMode,
1542
+ dots: responsiveDots,
1543
+ arrows: responsiveArrows
1544
+ } = responsiveSettings;
1447
1545
  const {
1448
1546
  slideWidth: calculatedSlideWidth,
1449
1547
  trackStyle,
@@ -1455,10 +1553,10 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1455
1553
  } = useTrack({
1456
1554
  currentSlide,
1457
1555
  slideCount,
1458
- slidesToShow,
1459
- slidesToScroll,
1460
- infinite,
1461
- centerMode,
1556
+ slidesToShow: responsiveSlidesToShow,
1557
+ slidesToScroll: responsiveSlidesToScroll,
1558
+ infinite: responsiveInfinite,
1559
+ centerMode: responsiveCenterMode,
1462
1560
  centerPadding,
1463
1561
  listWidth: listWidth || 0,
1464
1562
  listHeight: listHeight || 0,
@@ -1476,47 +1574,53 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1476
1574
  swipeLeft
1477
1575
  });
1478
1576
  useEffect(() => {
1479
- if (!canUseDOM() || !listRef.current) return;
1480
- const updateDimensions = () => {
1577
+ if (!canUseDOM()) return;
1578
+ const timeoutId = setTimeout(() => {
1481
1579
  if (!listRef.current) return;
1482
- const newListWidth = getWidth(listRef.current);
1483
- const newListHeight = getHeight(listRef.current);
1484
- const firstSlide = listRef.current.querySelector('[data-index="0"]');
1485
- const newSlideHeight = firstSlide ? getHeight(firstSlide) : null;
1486
- dispatch({
1487
- type: "INIT",
1488
- payload: {
1489
- listWidth: newListWidth,
1490
- listHeight: newListHeight,
1491
- slideHeight: newSlideHeight,
1492
- slideCount
1493
- }
1494
- });
1495
- };
1496
- updateDimensions();
1497
- resizeObserverRef.current = new ResizeObserver(updateDimensions);
1498
- resizeObserverRef.current.observe(listRef.current);
1499
- onInit?.();
1580
+ const updateDimensions = () => {
1581
+ if (!listRef.current) return;
1582
+ const newListWidth = getWidth(listRef.current);
1583
+ const firstSlide = listRef.current.querySelector('[data-index="0"]');
1584
+ const newSlideHeight = firstSlide ? getHeight(firstSlide) : null;
1585
+ const newListHeight = newSlideHeight ? newSlideHeight * responsiveSlidesToShow : null;
1586
+ dispatch({
1587
+ type: "INIT",
1588
+ payload: {
1589
+ listWidth: newListWidth,
1590
+ listHeight: newListHeight,
1591
+ slideHeight: newSlideHeight,
1592
+ slideCount
1593
+ }
1594
+ });
1595
+ };
1596
+ updateDimensions();
1597
+ if (!resizeObserverRef.current && listRef.current) {
1598
+ resizeObserverRef.current = new ResizeObserver(updateDimensions);
1599
+ resizeObserverRef.current.observe(listRef.current);
1600
+ }
1601
+ if (!initialized) {
1602
+ onInit?.();
1603
+ }
1604
+ }, 0);
1500
1605
  return () => {
1606
+ clearTimeout(timeoutId);
1501
1607
  resizeObserverRef.current?.disconnect();
1608
+ resizeObserverRef.current = null;
1502
1609
  };
1503
- }, [slideCount, onInit]);
1504
- const autoplayIterator = useCallback3(() => {
1505
- if (autoplaying !== "playing") return;
1506
- const nextSlideIndex = currentSlide + slidesToScroll;
1507
- goToSlide(nextSlideIndex);
1508
- }, [autoplaying, currentSlide, slidesToScroll]);
1610
+ }, [slideCount, initialized, onInit, responsiveSlidesToShow]);
1509
1611
  useEffect(() => {
1510
- if (!autoplay || !initialized) return;
1511
- if (autoplaying === "playing") {
1512
- autoplayTimerRef.current = setTimeout(autoplayIterator, autoplaySpeed);
1513
- }
1514
- return () => {
1515
- if (autoplayTimerRef.current) {
1516
- clearTimeout(autoplayTimerRef.current);
1612
+ if (!initialized || !canUseDOM()) return;
1613
+ if (currentSlide >= slideCount) {
1614
+ const newSlide = Math.max(0, slideCount - responsiveSlidesToShow);
1615
+ if (newSlide !== currentSlide) {
1616
+ dispatch({
1617
+ type: "GO_TO_SLIDE",
1618
+ payload: { slide: newSlide, animated: false }
1619
+ });
1517
1620
  }
1518
- };
1519
- }, [autoplay, autoplaying, initialized, autoplayIterator, autoplaySpeed]);
1621
+ }
1622
+ onReInit?.();
1623
+ }, [responsiveSlidesToShow, responsiveSlidesToScroll, responsiveInfinite, responsiveCenterMode, initialized, slideCount, currentSlide, onReInit]);
1520
1624
  useEffect(() => {
1521
1625
  if (animating) {
1522
1626
  animationEndTimeoutRef.current = setTimeout(() => {
@@ -1534,21 +1638,21 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1534
1638
  (slideIndex, dontAnimate = false) => {
1535
1639
  if (waitForAnimate && animating) return;
1536
1640
  let targetIndex = slideIndex;
1537
- if (infinite) {
1641
+ if (responsiveInfinite) {
1538
1642
  if (targetIndex < 0) {
1539
1643
  targetIndex = slideCount + targetIndex;
1540
1644
  } else if (targetIndex >= slideCount) {
1541
1645
  targetIndex = targetIndex - slideCount;
1542
1646
  }
1543
1647
  } else {
1544
- targetIndex = clamp(targetIndex, 0, slideCount - slidesToShow);
1648
+ targetIndex = clamp(targetIndex, 0, slideCount - responsiveSlidesToShow);
1545
1649
  }
1546
1650
  beforeChange?.(currentSlide, targetIndex);
1547
1651
  if (lazyLoad) {
1548
1652
  const slidesToLoad = getOnDemandLazySlides({
1549
1653
  currentSlide: targetIndex,
1550
- centerMode,
1551
- slidesToShow,
1654
+ centerMode: responsiveCenterMode,
1655
+ slidesToShow: responsiveSlidesToShow,
1552
1656
  centerPadding,
1553
1657
  lazyLoadedList
1554
1658
  });
@@ -1567,23 +1671,23 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1567
1671
  [
1568
1672
  waitForAnimate,
1569
1673
  animating,
1570
- infinite,
1674
+ responsiveInfinite,
1571
1675
  slideCount,
1572
- slidesToShow,
1676
+ responsiveSlidesToShow,
1573
1677
  beforeChange,
1574
1678
  currentSlide,
1575
1679
  lazyLoad,
1576
- centerMode,
1680
+ responsiveCenterMode,
1577
1681
  centerPadding,
1578
1682
  lazyLoadedList
1579
1683
  ]
1580
1684
  );
1581
1685
  const next = useCallback3(() => {
1582
- goToSlide(currentSlide + slidesToScroll);
1583
- }, [currentSlide, slidesToScroll, goToSlide]);
1686
+ goToSlide(currentSlide + responsiveSlidesToScroll);
1687
+ }, [currentSlide, responsiveSlidesToScroll, goToSlide]);
1584
1688
  const prev = useCallback3(() => {
1585
- goToSlide(currentSlide - slidesToScroll);
1586
- }, [currentSlide, slidesToScroll, goToSlide]);
1689
+ goToSlide(currentSlide - responsiveSlidesToScroll);
1690
+ }, [currentSlide, responsiveSlidesToScroll, goToSlide]);
1587
1691
  const goTo = useCallback3(
1588
1692
  (index, dontAnimate = false) => {
1589
1693
  goToSlide(index, dontAnimate);
@@ -1596,6 +1700,29 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1596
1700
  const play = useCallback3(() => {
1597
1701
  dispatch({ type: "SET_AUTOPLAY", payload: "playing" });
1598
1702
  }, []);
1703
+ const autoplayTick = useCallback3(() => {
1704
+ const nextSlideIndex = currentSlide + responsiveSlidesToScroll;
1705
+ goToSlide(nextSlideIndex);
1706
+ }, [currentSlide, responsiveSlidesToScroll, goToSlide]);
1707
+ useEffect(() => {
1708
+ if (!autoplay || !initialized) return;
1709
+ if (autoplaying === "playing") {
1710
+ if (autoplayTimerRef.current) {
1711
+ clearInterval(autoplayTimerRef.current);
1712
+ }
1713
+ autoplayTimerRef.current = setInterval(autoplayTick, autoplaySpeed + 50);
1714
+ } else {
1715
+ if (autoplayTimerRef.current) {
1716
+ clearInterval(autoplayTimerRef.current);
1717
+ autoplayTimerRef.current = null;
1718
+ }
1719
+ }
1720
+ return () => {
1721
+ if (autoplayTimerRef.current) {
1722
+ clearInterval(autoplayTimerRef.current);
1723
+ }
1724
+ };
1725
+ }, [autoplay, autoplaying, initialized, autoplayTick, autoplaySpeed]);
1599
1726
  useImperativeHandle(
1600
1727
  ref,
1601
1728
  () => ({
@@ -1645,16 +1772,16 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1645
1772
  swiped,
1646
1773
  swiping,
1647
1774
  slideCount,
1648
- slidesToScroll,
1649
- infinite,
1775
+ slidesToScroll: responsiveSlidesToScroll,
1776
+ infinite: responsiveInfinite,
1650
1777
  touchObject,
1651
1778
  swipeEvent,
1652
1779
  listHeight: listHeight || 0,
1653
1780
  listWidth: listWidth || 0,
1654
1781
  slideWidth: calculatedSlideWidth,
1655
1782
  slideHeight: slideHeight || 0,
1656
- centerMode,
1657
- slidesToShow,
1783
+ centerMode: responsiveCenterMode,
1784
+ slidesToShow: responsiveSlidesToShow,
1658
1785
  fade,
1659
1786
  disabled,
1660
1787
  variableWidth,
@@ -1681,16 +1808,16 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1681
1808
  swiped,
1682
1809
  swiping,
1683
1810
  slideCount,
1684
- slidesToScroll,
1685
- infinite,
1811
+ responsiveSlidesToScroll,
1812
+ responsiveInfinite,
1686
1813
  touchObject,
1687
1814
  swipeEvent,
1688
1815
  listHeight,
1689
1816
  listWidth,
1690
1817
  calculatedSlideWidth,
1691
1818
  slideHeight,
1692
- centerMode,
1693
- slidesToShow,
1819
+ responsiveCenterMode,
1820
+ responsiveSlidesToShow,
1694
1821
  fade,
1695
1822
  disabled,
1696
1823
  variableWidth,
@@ -1712,13 +1839,13 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1712
1839
  onSwipe,
1713
1840
  targetSlide,
1714
1841
  currentSlide,
1715
- infinite,
1842
+ infinite: responsiveInfinite,
1716
1843
  slideCount,
1717
- slidesToScroll,
1718
- slidesToShow,
1844
+ slidesToScroll: responsiveSlidesToScroll,
1845
+ slidesToShow: responsiveSlidesToShow,
1719
1846
  slideWidth: calculatedSlideWidth,
1720
1847
  slideHeight: slideHeight || 0,
1721
- centerMode,
1848
+ centerMode: responsiveCenterMode,
1722
1849
  fade,
1723
1850
  disabled,
1724
1851
  variableWidth,
@@ -1759,13 +1886,13 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1759
1886
  onSwipe,
1760
1887
  targetSlide,
1761
1888
  currentSlide,
1762
- infinite,
1889
+ responsiveInfinite,
1763
1890
  slideCount,
1764
- slidesToScroll,
1765
- slidesToShow,
1891
+ responsiveSlidesToScroll,
1892
+ responsiveSlidesToShow,
1766
1893
  calculatedSlideWidth,
1767
1894
  slideHeight,
1768
- centerMode,
1895
+ responsiveCenterMode,
1769
1896
  fade,
1770
1897
  disabled,
1771
1898
  variableWidth,
@@ -1832,23 +1959,33 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1832
1959
  }),
1833
1960
  [vertical]
1834
1961
  );
1835
- const listStyle = useMemo4(
1836
- () => ({
1962
+ const listStyle = useMemo4(() => {
1963
+ const style = {
1837
1964
  position: "relative",
1838
1965
  display: "block",
1839
1966
  overflow: "hidden",
1840
1967
  margin: 0,
1841
1968
  padding: 0
1842
- }),
1843
- []
1844
- );
1969
+ };
1970
+ if (vertical && listHeight) {
1971
+ style.height = listHeight;
1972
+ }
1973
+ if (responsiveCenterMode) {
1974
+ if (vertical) {
1975
+ style.padding = `${centerPadding} 0px`;
1976
+ } else {
1977
+ style.padding = `0px ${centerPadding}`;
1978
+ }
1979
+ }
1980
+ return style;
1981
+ }, [responsiveCenterMode, vertical, centerPadding, listHeight]);
1845
1982
  if (!initialized || !canUseDOM()) {
1846
- return /* @__PURE__ */ jsx4("div", { className: `glide-slider ${className}`.trim(), style: sliderStyle, children: /* @__PURE__ */ jsx4("div", { className: "glide-list", style: listStyle, children: /* @__PURE__ */ jsx4("div", { className: "glide-track", style: { display: "flex" }, children: React4.Children.map(children, (child, idx) => /* @__PURE__ */ jsx4(
1983
+ return /* @__PURE__ */ jsx4("div", { className: `glide-slider ${className}`.trim(), style: sliderStyle, children: /* @__PURE__ */ jsx4("div", { ref: listRef, className: "glide-list", style: listStyle, children: /* @__PURE__ */ jsx4("div", { className: "glide-track", style: { display: "flex" }, children: React4.Children.map(children, (child, idx) => /* @__PURE__ */ jsx4(
1847
1984
  "div",
1848
1985
  {
1849
1986
  className: "glide-slide",
1850
1987
  style: {
1851
- width: `${100 / slidesToShow}%`,
1988
+ width: `${100 / responsiveSlidesToShow}%`,
1852
1989
  flexShrink: 0
1853
1990
  },
1854
1991
  children: child
@@ -1866,14 +2003,15 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1866
2003
  onFocus: handleFocus,
1867
2004
  onBlur: handleBlur,
1868
2005
  children: [
1869
- arrows && !disabled && /* @__PURE__ */ jsx4(
2006
+ responsiveArrows && !disabled && /* @__PURE__ */ jsx4(
1870
2007
  PrevArrow,
1871
2008
  {
1872
2009
  currentSlide,
1873
2010
  slideCount,
1874
- slidesToShow,
1875
- infinite,
1876
- centerMode,
2011
+ slidesToShow: responsiveSlidesToShow,
2012
+ infinite: responsiveInfinite,
2013
+ centerMode: responsiveCenterMode,
2014
+ vertical,
1877
2015
  onClick: prev,
1878
2016
  customArrow: prevArrow
1879
2017
  }
@@ -1903,10 +2041,10 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1903
2041
  slideCount,
1904
2042
  currentSlide,
1905
2043
  targetSlide,
1906
- slidesToShow,
1907
- slidesToScroll,
1908
- infinite,
1909
- centerMode,
2044
+ slidesToShow: responsiveSlidesToShow,
2045
+ slidesToScroll: responsiveSlidesToScroll,
2046
+ infinite: responsiveInfinite,
2047
+ centerMode: responsiveCenterMode,
1910
2048
  centerPadding,
1911
2049
  fade,
1912
2050
  vertical,
@@ -1925,26 +2063,27 @@ var Glide = forwardRef2(function Glide2(props, ref) {
1925
2063
  )
1926
2064
  }
1927
2065
  ),
1928
- arrows && !disabled && /* @__PURE__ */ jsx4(
2066
+ responsiveArrows && !disabled && /* @__PURE__ */ jsx4(
1929
2067
  NextArrow,
1930
2068
  {
1931
2069
  currentSlide,
1932
2070
  slideCount,
1933
- slidesToShow,
1934
- infinite,
1935
- centerMode,
2071
+ slidesToShow: responsiveSlidesToShow,
2072
+ infinite: responsiveInfinite,
2073
+ centerMode: responsiveCenterMode,
2074
+ vertical,
1936
2075
  onClick: next,
1937
2076
  customArrow: nextArrow
1938
2077
  }
1939
2078
  ),
1940
- dots && !disabled && /* @__PURE__ */ jsx4(
2079
+ responsiveDots && !disabled && /* @__PURE__ */ jsx4(
1941
2080
  Dots,
1942
2081
  {
1943
2082
  slideCount,
1944
- slidesToScroll,
1945
- slidesToShow,
2083
+ slidesToScroll: responsiveSlidesToScroll,
2084
+ slidesToShow: responsiveSlidesToShow,
1946
2085
  currentSlide,
1947
- infinite,
2086
+ infinite: responsiveInfinite,
1948
2087
  onDotClick: handleDotClick,
1949
2088
  customPaging,
1950
2089
  appendDots,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "glide-react",
3
- "version": "1.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "A modern, minimalistic, lightweight React carousel component built with TypeScript",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -19,12 +19,15 @@
19
19
  ],
20
20
  "scripts": {
21
21
  "build": "tsup src/index.tsx --format cjs,esm --dts --clean",
22
+ "postbuild": "cp src/styles/glide.css dist/glide.css && cp src/styles/glide-theme.css dist/glide-theme.css",
22
23
  "dev": "tsup src/index.tsx --format cjs,esm --dts --watch",
23
24
  "lint": "eslint src --ext .ts,.tsx",
24
25
  "typecheck": "tsc --noEmit",
25
26
  "test": "jest",
26
27
  "test:watch": "jest --watch",
27
- "prepublishOnly": "npm run build"
28
+ "prepublishOnly": "npm run build",
29
+ "docs:dev": "webpack serve --config webpack.config.docs.js --mode development",
30
+ "docs:build": "webpack --config webpack.config.docs.js --mode production"
28
31
  },
29
32
  "repository": {
30
33
  "type": "git",
@@ -54,6 +57,10 @@
54
57
  "react-dom": ">=16.8.0"
55
58
  },
56
59
  "devDependencies": {
60
+ "@babel/core": "^7.23.0",
61
+ "@babel/preset-env": "^7.23.0",
62
+ "@babel/preset-react": "^7.23.0",
63
+ "@babel/preset-typescript": "^7.23.0",
57
64
  "@testing-library/jest-dom": "^6.4.0",
58
65
  "@testing-library/react": "^14.2.0",
59
66
  "@types/jest": "^29.5.12",
@@ -61,15 +68,23 @@
61
68
  "@types/react-dom": "^18.2.18",
62
69
  "@typescript-eslint/eslint-plugin": "^6.21.0",
63
70
  "@typescript-eslint/parser": "^6.21.0",
71
+ "babel-loader": "^9.1.3",
72
+ "css-loader": "^6.10.0",
64
73
  "eslint": "^8.56.0",
65
74
  "eslint-plugin-react": "^7.33.2",
66
75
  "eslint-plugin-react-hooks": "^4.6.0",
76
+ "html-webpack-plugin": "^5.6.0",
67
77
  "jest": "^29.7.0",
68
78
  "jest-environment-jsdom": "^29.7.0",
69
79
  "react": "^18.2.0",
70
80
  "react-dom": "^18.2.0",
81
+ "react-syntax-highlighter": "^15.5.0",
82
+ "style-loader": "^3.3.4",
71
83
  "ts-jest": "^29.1.2",
72
84
  "tsup": "^8.0.1",
73
- "typescript": "^5.3.3"
85
+ "typescript": "^5.3.3",
86
+ "webpack": "^5.90.0",
87
+ "webpack-cli": "^5.1.4",
88
+ "webpack-dev-server": "^4.15.1"
74
89
  }
75
90
  }