glide-react 1.0.0 → 2.0.0
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.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +241 -102
- package/dist/index.mjs +241 -102
- package/package.json +17 -3
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -552,10 +552,12 @@ var calculateSlideWidth = (listWidth, slidesToShow, centerMode, centerPadding, v
|
|
|
552
552
|
let centerPaddingAdj = 0;
|
|
553
553
|
if (centerMode) {
|
|
554
554
|
const paddingValue = parseInt(centerPadding, 10) || 0;
|
|
555
|
-
centerPaddingAdj = paddingValue * 2;
|
|
556
555
|
if (centerPadding.endsWith("%")) {
|
|
557
|
-
centerPaddingAdj = listWidth * paddingValue
|
|
556
|
+
centerPaddingAdj = listWidth * paddingValue / 100;
|
|
557
|
+
} else {
|
|
558
|
+
centerPaddingAdj = paddingValue;
|
|
558
559
|
}
|
|
560
|
+
centerPaddingAdj = centerPaddingAdj * 2;
|
|
559
561
|
}
|
|
560
562
|
return Math.ceil((listWidth - centerPaddingAdj) / slidesToShow);
|
|
561
563
|
};
|
|
@@ -640,6 +642,9 @@ var getSlideStyle = (spec) => {
|
|
|
640
642
|
if (!spec.variableWidth) {
|
|
641
643
|
style.width = spec.slideWidth;
|
|
642
644
|
}
|
|
645
|
+
if (spec.vertical && spec.slideHeight) {
|
|
646
|
+
style.height = spec.slideHeight;
|
|
647
|
+
}
|
|
643
648
|
if (spec.fade) {
|
|
644
649
|
style.position = "relative";
|
|
645
650
|
if (spec.vertical) {
|
|
@@ -648,7 +653,7 @@ var getSlideStyle = (spec) => {
|
|
|
648
653
|
style.left = -spec.index * spec.slideWidth;
|
|
649
654
|
}
|
|
650
655
|
style.opacity = spec.currentSlide === spec.index ? 1 : 0;
|
|
651
|
-
style.zIndex = spec.currentSlide === spec.index ?
|
|
656
|
+
style.zIndex = spec.currentSlide === spec.index ? 1 : 0;
|
|
652
657
|
if (spec.useCSS) {
|
|
653
658
|
style.transition = `opacity ${spec.speed}ms ${spec.cssEase}, visibility ${spec.speed}ms ${spec.cssEase}`;
|
|
654
659
|
}
|
|
@@ -904,7 +909,7 @@ var Track = (0, import_react.forwardRef)(function Track2({
|
|
|
904
909
|
const baseTrackStyle = {
|
|
905
910
|
position: "relative",
|
|
906
911
|
display: fade ? "block" : "flex",
|
|
907
|
-
flexDirection: vertical ? "column" : "row",
|
|
912
|
+
...fade ? {} : { flexDirection: vertical ? "column" : "row" },
|
|
908
913
|
...trackStyle
|
|
909
914
|
};
|
|
910
915
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -924,7 +929,7 @@ var Track = (0, import_react.forwardRef)(function Track2({
|
|
|
924
929
|
// src/components/Arrows.tsx
|
|
925
930
|
var import_react2 = require("react");
|
|
926
931
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
927
|
-
var PrevArrowSVG = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
932
|
+
var PrevArrowSVG = ({ className, vertical }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
928
933
|
"svg",
|
|
929
934
|
{
|
|
930
935
|
className,
|
|
@@ -939,7 +944,7 @@ var PrevArrowSVG = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime2.js
|
|
|
939
944
|
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("polyline", { points: "15 18 9 12 15 6" })
|
|
940
945
|
}
|
|
941
946
|
);
|
|
942
|
-
var NextArrowSVG = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
947
|
+
var NextArrowSVG = ({ className, vertical }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
943
948
|
"svg",
|
|
944
949
|
{
|
|
945
950
|
className,
|
|
@@ -956,9 +961,7 @@ var NextArrowSVG = ({ className }) => /* @__PURE__ */ (0, import_jsx_runtime2.js
|
|
|
956
961
|
);
|
|
957
962
|
var baseArrowStyle = {
|
|
958
963
|
position: "absolute",
|
|
959
|
-
|
|
960
|
-
transform: "translateY(-50%)",
|
|
961
|
-
zIndex: 10,
|
|
964
|
+
zIndex: 100,
|
|
962
965
|
display: "flex",
|
|
963
966
|
alignItems: "center",
|
|
964
967
|
justifyContent: "center",
|
|
@@ -983,6 +986,7 @@ var PrevArrow = ({
|
|
|
983
986
|
slidesToShow,
|
|
984
987
|
infinite,
|
|
985
988
|
centerMode,
|
|
989
|
+
vertical,
|
|
986
990
|
onClick,
|
|
987
991
|
customArrow
|
|
988
992
|
}) => {
|
|
@@ -1014,13 +1018,15 @@ var PrevArrow = ({
|
|
|
1014
1018
|
className: `glide-arrow glide-prev ${!canGo ? "glide-disabled" : ""}`,
|
|
1015
1019
|
style: {
|
|
1016
1020
|
...canGo ? baseArrowStyle : disabledArrowStyle,
|
|
1017
|
-
left: 10
|
|
1021
|
+
left: 10,
|
|
1022
|
+
top: "50%",
|
|
1023
|
+
transform: "translateY(-50%)"
|
|
1018
1024
|
},
|
|
1019
1025
|
onClick: handleClick,
|
|
1020
1026
|
"aria-label": "Previous slide",
|
|
1021
1027
|
"aria-disabled": !canGo,
|
|
1022
1028
|
disabled: !canGo,
|
|
1023
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(PrevArrowSVG, {})
|
|
1029
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(PrevArrowSVG, { vertical })
|
|
1024
1030
|
}
|
|
1025
1031
|
);
|
|
1026
1032
|
};
|
|
@@ -1030,6 +1036,7 @@ var NextArrow = ({
|
|
|
1030
1036
|
slidesToShow,
|
|
1031
1037
|
infinite,
|
|
1032
1038
|
centerMode,
|
|
1039
|
+
vertical,
|
|
1033
1040
|
onClick,
|
|
1034
1041
|
customArrow
|
|
1035
1042
|
}) => {
|
|
@@ -1064,13 +1071,15 @@ var NextArrow = ({
|
|
|
1064
1071
|
className: `glide-arrow glide-next ${!canGo ? "glide-disabled" : ""}`,
|
|
1065
1072
|
style: {
|
|
1066
1073
|
...canGo ? baseArrowStyle : disabledArrowStyle,
|
|
1067
|
-
right: 10
|
|
1074
|
+
right: 10,
|
|
1075
|
+
top: "50%",
|
|
1076
|
+
transform: "translateY(-50%)"
|
|
1068
1077
|
},
|
|
1069
1078
|
onClick: handleClick,
|
|
1070
1079
|
"aria-label": "Next slide",
|
|
1071
1080
|
"aria-disabled": !canGo,
|
|
1072
1081
|
disabled: !canGo,
|
|
1073
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(NextArrowSVG, {})
|
|
1082
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(NextArrowSVG, { vertical })
|
|
1074
1083
|
}
|
|
1075
1084
|
);
|
|
1076
1085
|
};
|
|
@@ -1493,6 +1502,95 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1493
1502
|
scrolling
|
|
1494
1503
|
} = state;
|
|
1495
1504
|
const slideCount = import_react5.Children.count(children);
|
|
1505
|
+
const [breakpoint, setBreakpoint] = import_react5.default.useState(null);
|
|
1506
|
+
(0, import_react5.useEffect)(() => {
|
|
1507
|
+
if (!canUseDOM() || !settings.responsive) return;
|
|
1508
|
+
const responsiveSettings2 = settings.responsive;
|
|
1509
|
+
const breakpoints = responsiveSettings2.map((bp) => bp.breakpoint).sort((a, b) => a - b);
|
|
1510
|
+
const mediaQueryListeners = [];
|
|
1511
|
+
breakpoints.forEach((bp, index) => {
|
|
1512
|
+
let query;
|
|
1513
|
+
if (index === 0) {
|
|
1514
|
+
query = `(max-width: ${bp}px)`;
|
|
1515
|
+
} else {
|
|
1516
|
+
query = `(min-width: ${breakpoints[index - 1] + 1}px) and (max-width: ${bp}px)`;
|
|
1517
|
+
}
|
|
1518
|
+
const mql = window.matchMedia(query);
|
|
1519
|
+
const listener = (e) => {
|
|
1520
|
+
if (e.matches) {
|
|
1521
|
+
setBreakpoint(bp);
|
|
1522
|
+
}
|
|
1523
|
+
};
|
|
1524
|
+
mql.addEventListener("change", listener);
|
|
1525
|
+
mediaQueryListeners.push({ mql, listener });
|
|
1526
|
+
if (mql.matches) {
|
|
1527
|
+
setBreakpoint(bp);
|
|
1528
|
+
}
|
|
1529
|
+
});
|
|
1530
|
+
const maxBreakpoint = breakpoints[breakpoints.length - 1];
|
|
1531
|
+
const fullScreenQuery = `(min-width: ${maxBreakpoint + 1}px)`;
|
|
1532
|
+
const fullScreenMql = window.matchMedia(fullScreenQuery);
|
|
1533
|
+
const fullScreenListener = (e) => {
|
|
1534
|
+
if (e.matches) {
|
|
1535
|
+
setBreakpoint(null);
|
|
1536
|
+
}
|
|
1537
|
+
};
|
|
1538
|
+
fullScreenMql.addEventListener("change", fullScreenListener);
|
|
1539
|
+
mediaQueryListeners.push({ mql: fullScreenMql, listener: fullScreenListener });
|
|
1540
|
+
if (fullScreenMql.matches) {
|
|
1541
|
+
setBreakpoint(null);
|
|
1542
|
+
}
|
|
1543
|
+
return () => {
|
|
1544
|
+
mediaQueryListeners.forEach(({ mql, listener }) => {
|
|
1545
|
+
mql.removeEventListener("change", listener);
|
|
1546
|
+
});
|
|
1547
|
+
};
|
|
1548
|
+
}, [settings.responsive]);
|
|
1549
|
+
const responsiveSettings = (0, import_react5.useMemo)(() => {
|
|
1550
|
+
let merged;
|
|
1551
|
+
if (!breakpoint || !settings.responsive) {
|
|
1552
|
+
merged = settings;
|
|
1553
|
+
} else {
|
|
1554
|
+
const matchedBreakpoint = settings.responsive.find((bp) => bp.breakpoint === breakpoint);
|
|
1555
|
+
if (!matchedBreakpoint) {
|
|
1556
|
+
merged = settings;
|
|
1557
|
+
} else if (matchedBreakpoint.settings === "disabled") {
|
|
1558
|
+
merged = { ...settings, slidesToShow: 1, slidesToScroll: 1 };
|
|
1559
|
+
} else {
|
|
1560
|
+
merged = { ...settings, ...matchedBreakpoint.settings };
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
if (merged.centerMode && merged.slidesToScroll > 1) {
|
|
1564
|
+
if (process.env.NODE_ENV !== "production") {
|
|
1565
|
+
console.warn(
|
|
1566
|
+
`slidesToScroll should be equal to 1 in centerMode, you are using ${merged.slidesToScroll}`
|
|
1567
|
+
);
|
|
1568
|
+
}
|
|
1569
|
+
merged = { ...merged, slidesToScroll: 1 };
|
|
1570
|
+
}
|
|
1571
|
+
if (merged.fade) {
|
|
1572
|
+
if (merged.slidesToShow > 1 && process.env.NODE_ENV !== "production") {
|
|
1573
|
+
console.warn(
|
|
1574
|
+
`slidesToShow should be equal to 1 when fade is true, you're using ${merged.slidesToShow}`
|
|
1575
|
+
);
|
|
1576
|
+
}
|
|
1577
|
+
if (merged.slidesToScroll > 1 && process.env.NODE_ENV !== "production") {
|
|
1578
|
+
console.warn(
|
|
1579
|
+
`slidesToScroll should be equal to 1 when fade is true, you're using ${merged.slidesToScroll}`
|
|
1580
|
+
);
|
|
1581
|
+
}
|
|
1582
|
+
merged = { ...merged, slidesToShow: 1, slidesToScroll: 1 };
|
|
1583
|
+
}
|
|
1584
|
+
return merged;
|
|
1585
|
+
}, [breakpoint, settings]);
|
|
1586
|
+
const {
|
|
1587
|
+
slidesToShow: responsiveSlidesToShow,
|
|
1588
|
+
slidesToScroll: responsiveSlidesToScroll,
|
|
1589
|
+
infinite: responsiveInfinite,
|
|
1590
|
+
centerMode: responsiveCenterMode,
|
|
1591
|
+
dots: responsiveDots,
|
|
1592
|
+
arrows: responsiveArrows
|
|
1593
|
+
} = responsiveSettings;
|
|
1496
1594
|
const {
|
|
1497
1595
|
slideWidth: calculatedSlideWidth,
|
|
1498
1596
|
trackStyle,
|
|
@@ -1504,10 +1602,10 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1504
1602
|
} = useTrack({
|
|
1505
1603
|
currentSlide,
|
|
1506
1604
|
slideCount,
|
|
1507
|
-
slidesToShow,
|
|
1508
|
-
slidesToScroll,
|
|
1509
|
-
infinite,
|
|
1510
|
-
centerMode,
|
|
1605
|
+
slidesToShow: responsiveSlidesToShow,
|
|
1606
|
+
slidesToScroll: responsiveSlidesToScroll,
|
|
1607
|
+
infinite: responsiveInfinite,
|
|
1608
|
+
centerMode: responsiveCenterMode,
|
|
1511
1609
|
centerPadding,
|
|
1512
1610
|
listWidth: listWidth || 0,
|
|
1513
1611
|
listHeight: listHeight || 0,
|
|
@@ -1525,47 +1623,53 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1525
1623
|
swipeLeft
|
|
1526
1624
|
});
|
|
1527
1625
|
(0, import_react5.useEffect)(() => {
|
|
1528
|
-
if (!canUseDOM()
|
|
1529
|
-
const
|
|
1626
|
+
if (!canUseDOM()) return;
|
|
1627
|
+
const timeoutId = setTimeout(() => {
|
|
1530
1628
|
if (!listRef.current) return;
|
|
1531
|
-
const
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1629
|
+
const updateDimensions = () => {
|
|
1630
|
+
if (!listRef.current) return;
|
|
1631
|
+
const newListWidth = getWidth(listRef.current);
|
|
1632
|
+
const firstSlide = listRef.current.querySelector('[data-index="0"]');
|
|
1633
|
+
const newSlideHeight = firstSlide ? getHeight(firstSlide) : null;
|
|
1634
|
+
const newListHeight = newSlideHeight ? newSlideHeight * responsiveSlidesToShow : null;
|
|
1635
|
+
dispatch({
|
|
1636
|
+
type: "INIT",
|
|
1637
|
+
payload: {
|
|
1638
|
+
listWidth: newListWidth,
|
|
1639
|
+
listHeight: newListHeight,
|
|
1640
|
+
slideHeight: newSlideHeight,
|
|
1641
|
+
slideCount
|
|
1642
|
+
}
|
|
1643
|
+
});
|
|
1644
|
+
};
|
|
1645
|
+
updateDimensions();
|
|
1646
|
+
if (!resizeObserverRef.current && listRef.current) {
|
|
1647
|
+
resizeObserverRef.current = new ResizeObserver(updateDimensions);
|
|
1648
|
+
resizeObserverRef.current.observe(listRef.current);
|
|
1649
|
+
}
|
|
1650
|
+
if (!initialized) {
|
|
1651
|
+
onInit?.();
|
|
1652
|
+
}
|
|
1653
|
+
}, 0);
|
|
1549
1654
|
return () => {
|
|
1655
|
+
clearTimeout(timeoutId);
|
|
1550
1656
|
resizeObserverRef.current?.disconnect();
|
|
1657
|
+
resizeObserverRef.current = null;
|
|
1551
1658
|
};
|
|
1552
|
-
}, [slideCount, onInit]);
|
|
1553
|
-
const autoplayIterator = (0, import_react5.useCallback)(() => {
|
|
1554
|
-
if (autoplaying !== "playing") return;
|
|
1555
|
-
const nextSlideIndex = currentSlide + slidesToScroll;
|
|
1556
|
-
goToSlide(nextSlideIndex);
|
|
1557
|
-
}, [autoplaying, currentSlide, slidesToScroll]);
|
|
1659
|
+
}, [slideCount, initialized, onInit, responsiveSlidesToShow]);
|
|
1558
1660
|
(0, import_react5.useEffect)(() => {
|
|
1559
|
-
if (!
|
|
1560
|
-
if (
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1661
|
+
if (!initialized || !canUseDOM()) return;
|
|
1662
|
+
if (currentSlide >= slideCount) {
|
|
1663
|
+
const newSlide = Math.max(0, slideCount - responsiveSlidesToShow);
|
|
1664
|
+
if (newSlide !== currentSlide) {
|
|
1665
|
+
dispatch({
|
|
1666
|
+
type: "GO_TO_SLIDE",
|
|
1667
|
+
payload: { slide: newSlide, animated: false }
|
|
1668
|
+
});
|
|
1566
1669
|
}
|
|
1567
|
-
}
|
|
1568
|
-
|
|
1670
|
+
}
|
|
1671
|
+
onReInit?.();
|
|
1672
|
+
}, [responsiveSlidesToShow, responsiveSlidesToScroll, responsiveInfinite, responsiveCenterMode, initialized, slideCount, currentSlide, onReInit]);
|
|
1569
1673
|
(0, import_react5.useEffect)(() => {
|
|
1570
1674
|
if (animating) {
|
|
1571
1675
|
animationEndTimeoutRef.current = setTimeout(() => {
|
|
@@ -1583,21 +1687,21 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1583
1687
|
(slideIndex, dontAnimate = false) => {
|
|
1584
1688
|
if (waitForAnimate && animating) return;
|
|
1585
1689
|
let targetIndex = slideIndex;
|
|
1586
|
-
if (
|
|
1690
|
+
if (responsiveInfinite) {
|
|
1587
1691
|
if (targetIndex < 0) {
|
|
1588
1692
|
targetIndex = slideCount + targetIndex;
|
|
1589
1693
|
} else if (targetIndex >= slideCount) {
|
|
1590
1694
|
targetIndex = targetIndex - slideCount;
|
|
1591
1695
|
}
|
|
1592
1696
|
} else {
|
|
1593
|
-
targetIndex = clamp(targetIndex, 0, slideCount -
|
|
1697
|
+
targetIndex = clamp(targetIndex, 0, slideCount - responsiveSlidesToShow);
|
|
1594
1698
|
}
|
|
1595
1699
|
beforeChange?.(currentSlide, targetIndex);
|
|
1596
1700
|
if (lazyLoad) {
|
|
1597
1701
|
const slidesToLoad = getOnDemandLazySlides({
|
|
1598
1702
|
currentSlide: targetIndex,
|
|
1599
|
-
centerMode,
|
|
1600
|
-
slidesToShow,
|
|
1703
|
+
centerMode: responsiveCenterMode,
|
|
1704
|
+
slidesToShow: responsiveSlidesToShow,
|
|
1601
1705
|
centerPadding,
|
|
1602
1706
|
lazyLoadedList
|
|
1603
1707
|
});
|
|
@@ -1616,23 +1720,23 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1616
1720
|
[
|
|
1617
1721
|
waitForAnimate,
|
|
1618
1722
|
animating,
|
|
1619
|
-
|
|
1723
|
+
responsiveInfinite,
|
|
1620
1724
|
slideCount,
|
|
1621
|
-
|
|
1725
|
+
responsiveSlidesToShow,
|
|
1622
1726
|
beforeChange,
|
|
1623
1727
|
currentSlide,
|
|
1624
1728
|
lazyLoad,
|
|
1625
|
-
|
|
1729
|
+
responsiveCenterMode,
|
|
1626
1730
|
centerPadding,
|
|
1627
1731
|
lazyLoadedList
|
|
1628
1732
|
]
|
|
1629
1733
|
);
|
|
1630
1734
|
const next = (0, import_react5.useCallback)(() => {
|
|
1631
|
-
goToSlide(currentSlide +
|
|
1632
|
-
}, [currentSlide,
|
|
1735
|
+
goToSlide(currentSlide + responsiveSlidesToScroll);
|
|
1736
|
+
}, [currentSlide, responsiveSlidesToScroll, goToSlide]);
|
|
1633
1737
|
const prev = (0, import_react5.useCallback)(() => {
|
|
1634
|
-
goToSlide(currentSlide -
|
|
1635
|
-
}, [currentSlide,
|
|
1738
|
+
goToSlide(currentSlide - responsiveSlidesToScroll);
|
|
1739
|
+
}, [currentSlide, responsiveSlidesToScroll, goToSlide]);
|
|
1636
1740
|
const goTo = (0, import_react5.useCallback)(
|
|
1637
1741
|
(index, dontAnimate = false) => {
|
|
1638
1742
|
goToSlide(index, dontAnimate);
|
|
@@ -1645,6 +1749,29 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1645
1749
|
const play = (0, import_react5.useCallback)(() => {
|
|
1646
1750
|
dispatch({ type: "SET_AUTOPLAY", payload: "playing" });
|
|
1647
1751
|
}, []);
|
|
1752
|
+
const autoplayTick = (0, import_react5.useCallback)(() => {
|
|
1753
|
+
const nextSlideIndex = currentSlide + responsiveSlidesToScroll;
|
|
1754
|
+
goToSlide(nextSlideIndex);
|
|
1755
|
+
}, [currentSlide, responsiveSlidesToScroll, goToSlide]);
|
|
1756
|
+
(0, import_react5.useEffect)(() => {
|
|
1757
|
+
if (!autoplay || !initialized) return;
|
|
1758
|
+
if (autoplaying === "playing") {
|
|
1759
|
+
if (autoplayTimerRef.current) {
|
|
1760
|
+
clearInterval(autoplayTimerRef.current);
|
|
1761
|
+
}
|
|
1762
|
+
autoplayTimerRef.current = setInterval(autoplayTick, autoplaySpeed + 50);
|
|
1763
|
+
} else {
|
|
1764
|
+
if (autoplayTimerRef.current) {
|
|
1765
|
+
clearInterval(autoplayTimerRef.current);
|
|
1766
|
+
autoplayTimerRef.current = null;
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
return () => {
|
|
1770
|
+
if (autoplayTimerRef.current) {
|
|
1771
|
+
clearInterval(autoplayTimerRef.current);
|
|
1772
|
+
}
|
|
1773
|
+
};
|
|
1774
|
+
}, [autoplay, autoplaying, initialized, autoplayTick, autoplaySpeed]);
|
|
1648
1775
|
(0, import_react5.useImperativeHandle)(
|
|
1649
1776
|
ref,
|
|
1650
1777
|
() => ({
|
|
@@ -1694,16 +1821,16 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1694
1821
|
swiped,
|
|
1695
1822
|
swiping,
|
|
1696
1823
|
slideCount,
|
|
1697
|
-
slidesToScroll,
|
|
1698
|
-
infinite,
|
|
1824
|
+
slidesToScroll: responsiveSlidesToScroll,
|
|
1825
|
+
infinite: responsiveInfinite,
|
|
1699
1826
|
touchObject,
|
|
1700
1827
|
swipeEvent,
|
|
1701
1828
|
listHeight: listHeight || 0,
|
|
1702
1829
|
listWidth: listWidth || 0,
|
|
1703
1830
|
slideWidth: calculatedSlideWidth,
|
|
1704
1831
|
slideHeight: slideHeight || 0,
|
|
1705
|
-
centerMode,
|
|
1706
|
-
slidesToShow,
|
|
1832
|
+
centerMode: responsiveCenterMode,
|
|
1833
|
+
slidesToShow: responsiveSlidesToShow,
|
|
1707
1834
|
fade,
|
|
1708
1835
|
disabled,
|
|
1709
1836
|
variableWidth,
|
|
@@ -1730,16 +1857,16 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1730
1857
|
swiped,
|
|
1731
1858
|
swiping,
|
|
1732
1859
|
slideCount,
|
|
1733
|
-
|
|
1734
|
-
|
|
1860
|
+
responsiveSlidesToScroll,
|
|
1861
|
+
responsiveInfinite,
|
|
1735
1862
|
touchObject,
|
|
1736
1863
|
swipeEvent,
|
|
1737
1864
|
listHeight,
|
|
1738
1865
|
listWidth,
|
|
1739
1866
|
calculatedSlideWidth,
|
|
1740
1867
|
slideHeight,
|
|
1741
|
-
|
|
1742
|
-
|
|
1868
|
+
responsiveCenterMode,
|
|
1869
|
+
responsiveSlidesToShow,
|
|
1743
1870
|
fade,
|
|
1744
1871
|
disabled,
|
|
1745
1872
|
variableWidth,
|
|
@@ -1761,13 +1888,13 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1761
1888
|
onSwipe,
|
|
1762
1889
|
targetSlide,
|
|
1763
1890
|
currentSlide,
|
|
1764
|
-
infinite,
|
|
1891
|
+
infinite: responsiveInfinite,
|
|
1765
1892
|
slideCount,
|
|
1766
|
-
slidesToScroll,
|
|
1767
|
-
slidesToShow,
|
|
1893
|
+
slidesToScroll: responsiveSlidesToScroll,
|
|
1894
|
+
slidesToShow: responsiveSlidesToShow,
|
|
1768
1895
|
slideWidth: calculatedSlideWidth,
|
|
1769
1896
|
slideHeight: slideHeight || 0,
|
|
1770
|
-
centerMode,
|
|
1897
|
+
centerMode: responsiveCenterMode,
|
|
1771
1898
|
fade,
|
|
1772
1899
|
disabled,
|
|
1773
1900
|
variableWidth,
|
|
@@ -1808,13 +1935,13 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1808
1935
|
onSwipe,
|
|
1809
1936
|
targetSlide,
|
|
1810
1937
|
currentSlide,
|
|
1811
|
-
|
|
1938
|
+
responsiveInfinite,
|
|
1812
1939
|
slideCount,
|
|
1813
|
-
|
|
1814
|
-
|
|
1940
|
+
responsiveSlidesToScroll,
|
|
1941
|
+
responsiveSlidesToShow,
|
|
1815
1942
|
calculatedSlideWidth,
|
|
1816
1943
|
slideHeight,
|
|
1817
|
-
|
|
1944
|
+
responsiveCenterMode,
|
|
1818
1945
|
fade,
|
|
1819
1946
|
disabled,
|
|
1820
1947
|
variableWidth,
|
|
@@ -1881,23 +2008,33 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1881
2008
|
}),
|
|
1882
2009
|
[vertical]
|
|
1883
2010
|
);
|
|
1884
|
-
const listStyle = (0, import_react5.useMemo)(
|
|
1885
|
-
|
|
2011
|
+
const listStyle = (0, import_react5.useMemo)(() => {
|
|
2012
|
+
const style = {
|
|
1886
2013
|
position: "relative",
|
|
1887
2014
|
display: "block",
|
|
1888
2015
|
overflow: "hidden",
|
|
1889
2016
|
margin: 0,
|
|
1890
2017
|
padding: 0
|
|
1891
|
-
}
|
|
1892
|
-
|
|
1893
|
-
|
|
2018
|
+
};
|
|
2019
|
+
if (vertical && listHeight) {
|
|
2020
|
+
style.height = listHeight;
|
|
2021
|
+
}
|
|
2022
|
+
if (responsiveCenterMode) {
|
|
2023
|
+
if (vertical) {
|
|
2024
|
+
style.padding = `${centerPadding} 0px`;
|
|
2025
|
+
} else {
|
|
2026
|
+
style.padding = `0px ${centerPadding}`;
|
|
2027
|
+
}
|
|
2028
|
+
}
|
|
2029
|
+
return style;
|
|
2030
|
+
}, [responsiveCenterMode, vertical, centerPadding, listHeight]);
|
|
1894
2031
|
if (!initialized || !canUseDOM()) {
|
|
1895
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: `glide-slider ${className}`.trim(), style: sliderStyle, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "glide-list", style: listStyle, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "glide-track", style: { display: "flex" }, children: import_react5.default.Children.map(children, (child, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
2032
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: `glide-slider ${className}`.trim(), style: sliderStyle, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { ref: listRef, className: "glide-list", style: listStyle, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "glide-track", style: { display: "flex" }, children: import_react5.default.Children.map(children, (child, idx) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1896
2033
|
"div",
|
|
1897
2034
|
{
|
|
1898
2035
|
className: "glide-slide",
|
|
1899
2036
|
style: {
|
|
1900
|
-
width: `${100 /
|
|
2037
|
+
width: `${100 / responsiveSlidesToShow}%`,
|
|
1901
2038
|
flexShrink: 0
|
|
1902
2039
|
},
|
|
1903
2040
|
children: child
|
|
@@ -1915,14 +2052,15 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1915
2052
|
onFocus: handleFocus,
|
|
1916
2053
|
onBlur: handleBlur,
|
|
1917
2054
|
children: [
|
|
1918
|
-
|
|
2055
|
+
responsiveArrows && !disabled && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1919
2056
|
PrevArrow,
|
|
1920
2057
|
{
|
|
1921
2058
|
currentSlide,
|
|
1922
2059
|
slideCount,
|
|
1923
|
-
slidesToShow,
|
|
1924
|
-
infinite,
|
|
1925
|
-
centerMode,
|
|
2060
|
+
slidesToShow: responsiveSlidesToShow,
|
|
2061
|
+
infinite: responsiveInfinite,
|
|
2062
|
+
centerMode: responsiveCenterMode,
|
|
2063
|
+
vertical,
|
|
1926
2064
|
onClick: prev,
|
|
1927
2065
|
customArrow: prevArrow
|
|
1928
2066
|
}
|
|
@@ -1952,10 +2090,10 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1952
2090
|
slideCount,
|
|
1953
2091
|
currentSlide,
|
|
1954
2092
|
targetSlide,
|
|
1955
|
-
slidesToShow,
|
|
1956
|
-
slidesToScroll,
|
|
1957
|
-
infinite,
|
|
1958
|
-
centerMode,
|
|
2093
|
+
slidesToShow: responsiveSlidesToShow,
|
|
2094
|
+
slidesToScroll: responsiveSlidesToScroll,
|
|
2095
|
+
infinite: responsiveInfinite,
|
|
2096
|
+
centerMode: responsiveCenterMode,
|
|
1959
2097
|
centerPadding,
|
|
1960
2098
|
fade,
|
|
1961
2099
|
vertical,
|
|
@@ -1974,26 +2112,27 @@ var Glide = (0, import_react5.forwardRef)(function Glide2(props, ref) {
|
|
|
1974
2112
|
)
|
|
1975
2113
|
}
|
|
1976
2114
|
),
|
|
1977
|
-
|
|
2115
|
+
responsiveArrows && !disabled && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1978
2116
|
NextArrow,
|
|
1979
2117
|
{
|
|
1980
2118
|
currentSlide,
|
|
1981
2119
|
slideCount,
|
|
1982
|
-
slidesToShow,
|
|
1983
|
-
infinite,
|
|
1984
|
-
centerMode,
|
|
2120
|
+
slidesToShow: responsiveSlidesToShow,
|
|
2121
|
+
infinite: responsiveInfinite,
|
|
2122
|
+
centerMode: responsiveCenterMode,
|
|
2123
|
+
vertical,
|
|
1985
2124
|
onClick: next,
|
|
1986
2125
|
customArrow: nextArrow
|
|
1987
2126
|
}
|
|
1988
2127
|
),
|
|
1989
|
-
|
|
2128
|
+
responsiveDots && !disabled && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
1990
2129
|
Dots,
|
|
1991
2130
|
{
|
|
1992
2131
|
slideCount,
|
|
1993
|
-
slidesToScroll,
|
|
1994
|
-
slidesToShow,
|
|
2132
|
+
slidesToScroll: responsiveSlidesToScroll,
|
|
2133
|
+
slidesToShow: responsiveSlidesToShow,
|
|
1995
2134
|
currentSlide,
|
|
1996
|
-
infinite,
|
|
2135
|
+
infinite: responsiveInfinite,
|
|
1997
2136
|
onDotClick: handleDotClick,
|
|
1998
2137
|
customPaging,
|
|
1999
2138
|
appendDots,
|
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
|
|
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 ?
|
|
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
|
-
|
|
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()
|
|
1480
|
-
const
|
|
1577
|
+
if (!canUseDOM()) return;
|
|
1578
|
+
const timeoutId = setTimeout(() => {
|
|
1481
1579
|
if (!listRef.current) return;
|
|
1482
|
-
const
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
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 (!
|
|
1511
|
-
if (
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
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
|
-
|
|
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 (
|
|
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 -
|
|
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
|
-
|
|
1674
|
+
responsiveInfinite,
|
|
1571
1675
|
slideCount,
|
|
1572
|
-
|
|
1676
|
+
responsiveSlidesToShow,
|
|
1573
1677
|
beforeChange,
|
|
1574
1678
|
currentSlide,
|
|
1575
1679
|
lazyLoad,
|
|
1576
|
-
|
|
1680
|
+
responsiveCenterMode,
|
|
1577
1681
|
centerPadding,
|
|
1578
1682
|
lazyLoadedList
|
|
1579
1683
|
]
|
|
1580
1684
|
);
|
|
1581
1685
|
const next = useCallback3(() => {
|
|
1582
|
-
goToSlide(currentSlide +
|
|
1583
|
-
}, [currentSlide,
|
|
1686
|
+
goToSlide(currentSlide + responsiveSlidesToScroll);
|
|
1687
|
+
}, [currentSlide, responsiveSlidesToScroll, goToSlide]);
|
|
1584
1688
|
const prev = useCallback3(() => {
|
|
1585
|
-
goToSlide(currentSlide -
|
|
1586
|
-
}, [currentSlide,
|
|
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
|
-
|
|
1685
|
-
|
|
1811
|
+
responsiveSlidesToScroll,
|
|
1812
|
+
responsiveInfinite,
|
|
1686
1813
|
touchObject,
|
|
1687
1814
|
swipeEvent,
|
|
1688
1815
|
listHeight,
|
|
1689
1816
|
listWidth,
|
|
1690
1817
|
calculatedSlideWidth,
|
|
1691
1818
|
slideHeight,
|
|
1692
|
-
|
|
1693
|
-
|
|
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
|
-
|
|
1889
|
+
responsiveInfinite,
|
|
1763
1890
|
slideCount,
|
|
1764
|
-
|
|
1765
|
-
|
|
1891
|
+
responsiveSlidesToScroll,
|
|
1892
|
+
responsiveSlidesToShow,
|
|
1766
1893
|
calculatedSlideWidth,
|
|
1767
1894
|
slideHeight,
|
|
1768
|
-
|
|
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 /
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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": "
|
|
3
|
+
"version": "2.0.0",
|
|
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",
|
|
@@ -24,7 +24,9 @@
|
|
|
24
24
|
"typecheck": "tsc --noEmit",
|
|
25
25
|
"test": "jest",
|
|
26
26
|
"test:watch": "jest --watch",
|
|
27
|
-
"prepublishOnly": "npm run build"
|
|
27
|
+
"prepublishOnly": "npm run build",
|
|
28
|
+
"docs:dev": "webpack serve --config webpack.config.docs.js --mode development",
|
|
29
|
+
"docs:build": "webpack --config webpack.config.docs.js --mode production"
|
|
28
30
|
},
|
|
29
31
|
"repository": {
|
|
30
32
|
"type": "git",
|
|
@@ -54,6 +56,10 @@
|
|
|
54
56
|
"react-dom": ">=16.8.0"
|
|
55
57
|
},
|
|
56
58
|
"devDependencies": {
|
|
59
|
+
"@babel/core": "^7.23.0",
|
|
60
|
+
"@babel/preset-env": "^7.23.0",
|
|
61
|
+
"@babel/preset-react": "^7.23.0",
|
|
62
|
+
"@babel/preset-typescript": "^7.23.0",
|
|
57
63
|
"@testing-library/jest-dom": "^6.4.0",
|
|
58
64
|
"@testing-library/react": "^14.2.0",
|
|
59
65
|
"@types/jest": "^29.5.12",
|
|
@@ -61,15 +67,23 @@
|
|
|
61
67
|
"@types/react-dom": "^18.2.18",
|
|
62
68
|
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
63
69
|
"@typescript-eslint/parser": "^6.21.0",
|
|
70
|
+
"babel-loader": "^9.1.3",
|
|
71
|
+
"css-loader": "^6.10.0",
|
|
64
72
|
"eslint": "^8.56.0",
|
|
65
73
|
"eslint-plugin-react": "^7.33.2",
|
|
66
74
|
"eslint-plugin-react-hooks": "^4.6.0",
|
|
75
|
+
"html-webpack-plugin": "^5.6.0",
|
|
67
76
|
"jest": "^29.7.0",
|
|
68
77
|
"jest-environment-jsdom": "^29.7.0",
|
|
69
78
|
"react": "^18.2.0",
|
|
70
79
|
"react-dom": "^18.2.0",
|
|
80
|
+
"react-syntax-highlighter": "^15.5.0",
|
|
81
|
+
"style-loader": "^3.3.4",
|
|
71
82
|
"ts-jest": "^29.1.2",
|
|
72
83
|
"tsup": "^8.0.1",
|
|
73
|
-
"typescript": "^5.3.3"
|
|
84
|
+
"typescript": "^5.3.3",
|
|
85
|
+
"webpack": "^5.90.0",
|
|
86
|
+
"webpack-cli": "^5.1.4",
|
|
87
|
+
"webpack-dev-server": "^4.15.1"
|
|
74
88
|
}
|
|
75
89
|
}
|