@cleartrip/ct-design-horizontal-scroll 4.0.0 → 5.1.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/README.md +85 -0
- package/dist/HorizontalScroll.d.ts +3 -3
- package/dist/HorizontalScroll.d.ts.map +1 -1
- package/dist/HorizontalScroll.native.d.ts +5 -0
- package/dist/HorizontalScroll.native.d.ts.map +1 -0
- package/dist/constants.d.ts +10 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/ct-design-horizontal-scroll.browser.cjs.js +14 -1
- package/dist/ct-design-horizontal-scroll.browser.cjs.js.map +1 -1
- package/dist/ct-design-horizontal-scroll.browser.esm.js +14 -1
- package/dist/ct-design-horizontal-scroll.browser.esm.js.map +1 -1
- package/dist/ct-design-horizontal-scroll.cjs.js +43 -127
- package/dist/ct-design-horizontal-scroll.cjs.js.map +1 -1
- package/dist/ct-design-horizontal-scroll.esm.js +43 -126
- package/dist/ct-design-horizontal-scroll.esm.js.map +1 -1
- package/dist/ct-design-horizontal-scroll.umd.js +1686 -181
- package/dist/ct-design-horizontal-scroll.umd.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.native.d.ts +4 -0
- package/dist/index.native.d.ts.map +1 -0
- package/dist/style.d.ts +40 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/type.d.ts +21 -27
- package/dist/type.d.ts.map +1 -1
- package/package.json +31 -11
- package/src/HorizontalScroll.native.tsx +80 -0
- package/src/HorizontalScroll.tsx +62 -0
- package/src/constants.ts +10 -0
- package/src/index.native.ts +3 -0
- package/src/index.ts +3 -0
- package/src/style.ts +86 -0
- package/src/type.ts +67 -0
- package/dist/StyledHorizontalScroll/StyledHorizontalScroll.d.ts +0 -6
- package/dist/StyledHorizontalScroll/StyledHorizontalScroll.d.ts.map +0 -1
- package/dist/StyledHorizontalScroll/index.d.ts +0 -2
- package/dist/StyledHorizontalScroll/index.d.ts.map +0 -1
- package/dist/StyledLeftShadow/StyledLeftShadow.d.ts +0 -11
- package/dist/StyledLeftShadow/StyledLeftShadow.d.ts.map +0 -1
- package/dist/StyledLeftShadow/index.d.ts +0 -2
- package/dist/StyledLeftShadow/index.d.ts.map +0 -1
- package/dist/StyledRightShadow/StyledRightShadow.d.ts +0 -11
- package/dist/StyledRightShadow/StyledRightShadow.d.ts.map +0 -1
- package/dist/StyledRightShadow/index.d.ts +0 -2
- package/dist/StyledRightShadow/index.d.ts.map +0 -1
|
@@ -1,139 +1,56 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef, useRef } from 'react';
|
|
3
|
+
import { css } from '@emotion/css';
|
|
4
4
|
import { Container } from '@cleartrip/ct-design-container';
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { useTheme } from '@cleartrip/ct-design-theme';
|
|
8
|
-
import { debounce } from '@cleartrip/ct-design-common-utils';
|
|
9
|
-
import { HOVER_TYPE } from '@cleartrip/ct-design-tooltip-v2';
|
|
5
|
+
import useMergeRefs from '@cleartrip/ct-design-use-merge-refs';
|
|
6
|
+
import { useWebMergeStyles } from '@cleartrip/ct-design-style-manager';
|
|
10
7
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return css$1 && css(templateObject_1$2 || (templateObject_1$2 = __makeTemplateObject(["\n\t", "\n "], ["\n\t", "\n "])), css$1);
|
|
20
|
-
});
|
|
21
|
-
var templateObject_1$2, templateObject_2$2;
|
|
22
|
-
|
|
23
|
-
var StyledLeftShadow = styled.div(templateObject_2$1 || (templateObject_2$1 = __makeTemplateObject(["\n position: absolute;\n left: 0;\n top: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n height: 100%;\n width: ", ";\n z-index: 10;\n background: ", ";\n ", "\n"], ["\n position: absolute;\n left: 0;\n top: 0;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n height: 100%;\n width: ", ";\n z-index: 10;\n background: ", ";\n ", "\n"])), function (_a) {
|
|
24
|
-
var width = _a.width;
|
|
25
|
-
return width || '64px';
|
|
26
|
-
}, function (_a) {
|
|
27
|
-
var shadowGradientStyle = _a.shadowGradientStyle;
|
|
28
|
-
return (shadowGradientStyle === null || shadowGradientStyle === void 0 ? void 0 : shadowGradientStyle.left) || "linear-gradient(90deg, #FFFFFF 0%, rgba(255, 255, 255, 0) 100%)";
|
|
29
|
-
}, function (_a) {
|
|
30
|
-
var css$1 = _a.css;
|
|
31
|
-
return css$1 && css(templateObject_1$1 || (templateObject_1$1 = __makeTemplateObject(["\n\t", "\n "], ["\n\t", "\n "])), css$1);
|
|
32
|
-
});
|
|
33
|
-
var templateObject_1$1, templateObject_2$1;
|
|
8
|
+
const horizontalScrollStyles = css `
|
|
9
|
+
display: flex;
|
|
10
|
+
white-space: no-wrap;
|
|
11
|
+
overflow-x: auto;
|
|
12
|
+
scroll-behavior: smooth;
|
|
13
|
+
-webkit-tap-highlight-color: transparent;
|
|
14
|
+
scrollbar-width: none; /* Firefox */
|
|
15
|
+
-ms-overflow-style: none; /* Internet Explorer 10+ */
|
|
34
16
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
17
|
+
&::-webkit-scrollbar {
|
|
18
|
+
/* WebKit */
|
|
19
|
+
display: none;
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
const HorizontalScroll = forwardRef(({ children, styleConfig = {}, onScroll }, forwardRef) => {
|
|
23
|
+
const { root, childContainer } = styleConfig;
|
|
24
|
+
const horizontalScrollRef = useRef(null);
|
|
25
|
+
const parentContainerRef = useRef(null);
|
|
26
|
+
const childContainerRef = useRef(null);
|
|
27
|
+
const combinedParentContainerRef = useMergeRefs(parentContainerRef, forwardRef);
|
|
28
|
+
const combinedParenAndChildContainerRef = useMergeRefs(parentContainerRef, childContainerRef);
|
|
29
|
+
const rootStyles = useWebMergeStyles([...(root || []), horizontalScrollStyles], [root]);
|
|
30
|
+
const handleScroll = (event) => {
|
|
31
|
+
onScroll === null || onScroll === void 0 ? void 0 : onScroll({
|
|
32
|
+
nativeEvent: {
|
|
33
|
+
contentOffset: { x: event.currentTarget.scrollLeft, y: event.currentTarget.scrollTop },
|
|
34
|
+
layoutMeasurement: { height: event.currentTarget.clientHeight, width: event.currentTarget.clientWidth },
|
|
35
|
+
contentSize: { height: event.currentTarget.scrollHeight, width: event.currentTarget.scrollWidth },
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
return (jsx("div", { ref: horizontalScrollRef, onScroll: handleScroll, children: jsx("div", { ref: combinedParentContainerRef, className: rootStyles, children: jsx(Container, { styleConfig: { root: childContainer }, ref: combinedParenAndChildContainerRef, children: children }) }) }));
|
|
38
40
|
});
|
|
39
|
-
|
|
41
|
+
HorizontalScroll.displayName = 'HorizontalScroll';
|
|
40
42
|
|
|
43
|
+
var ARROW_DIRECTION;
|
|
44
|
+
(function (ARROW_DIRECTION) {
|
|
45
|
+
ARROW_DIRECTION["LEFT"] = "LEFT";
|
|
46
|
+
ARROW_DIRECTION["RIGHT"] = "RIGHT";
|
|
47
|
+
})(ARROW_DIRECTION || (ARROW_DIRECTION = {}));
|
|
41
48
|
var ARROW_SIZE;
|
|
42
49
|
(function (ARROW_SIZE) {
|
|
43
50
|
ARROW_SIZE["SM"] = "sm";
|
|
44
51
|
ARROW_SIZE["MD"] = "md";
|
|
45
52
|
ARROW_SIZE["LG"] = "lg";
|
|
46
53
|
})(ARROW_SIZE || (ARROW_SIZE = {}));
|
|
47
|
-
var ARROW_DIRECTION;
|
|
48
|
-
(function (ARROW_DIRECTION) {
|
|
49
|
-
ARROW_DIRECTION["LEFT"] = "LEFT";
|
|
50
|
-
ARROW_DIRECTION["RIGHT"] = "RIGHT";
|
|
51
|
-
})(ARROW_DIRECTION || (ARROW_DIRECTION = {}));
|
|
52
|
-
|
|
53
|
-
var FLEX_RIGHT_PRECISION = 5;
|
|
54
|
-
var HorizontalScroll = function (_a) {
|
|
55
|
-
var children = _a.children, showShadow = _a.showShadow, showArrow = _a.showArrow, className = _a.className, containerClassname = _a.containerClassname, childrenClassname = _a.childrenClassname, shadowWidth = _a.shadowWidth, _b = _a.arrowSize, arrowSize = _b === void 0 ? ARROW_SIZE.MD : _b, shadowGradientStyle = _a.shadowGradientStyle, _c = _a.styleConfig, styleConfig = _c === void 0 ? {} : _c;
|
|
56
|
-
var _d = shadowWidth || {}, leftShadowWidth = _d.left, rightShadowWidth = _d.right;
|
|
57
|
-
var theme = useTheme();
|
|
58
|
-
var childrenContainer = styleConfig.childrenContainer, leftChevron = styleConfig.leftChevron, leftShadowContainer = styleConfig.leftShadowContainer, leftShadowWrapper = styleConfig.leftShadowWrapper, rightChevron = styleConfig.rightChevron, rightShadowContainer = styleConfig.rightShadowContainer, rightShadowWrapper = styleConfig.rightShadowWrapper, root = styleConfig.root, scrollWrapper = styleConfig.scrollWrapper;
|
|
59
|
-
var _e = useState(false), isHovering = _e[0], setIsHovering = _e[1];
|
|
60
|
-
var _f = useState({
|
|
61
|
-
left: false,
|
|
62
|
-
right: false,
|
|
63
|
-
}), shadowDirection = _f[0], setShadowDirection = _f[1];
|
|
64
|
-
var horizontalScrollRef = useRef(null);
|
|
65
|
-
var parentContainerRef = useRef(null);
|
|
66
|
-
var childContainerRef = useRef(null);
|
|
67
|
-
var updateArrowIcons = function () {
|
|
68
|
-
if (horizontalScrollRef.current && childContainerRef.current) {
|
|
69
|
-
var _a = horizontalScrollRef.current.getBoundingClientRect(), horizontalScrollRight = _a.right, horizontalScrollLeft = _a.left;
|
|
70
|
-
var _b = childContainerRef.current.getBoundingClientRect(), childContainerRight = _b.right, childContainerLeft = _b.left;
|
|
71
|
-
if (childContainerLeft - horizontalScrollLeft < -FLEX_RIGHT_PRECISION) {
|
|
72
|
-
setShadowDirection(function (prevState) { return (__assign(__assign({}, prevState), { left: true })); });
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
setShadowDirection(function (prevState) { return (__assign(__assign({}, prevState), { left: false })); });
|
|
76
|
-
}
|
|
77
|
-
if (childContainerRight - horizontalScrollRight > FLEX_RIGHT_PRECISION) {
|
|
78
|
-
setShadowDirection(function (prevState) { return (__assign(__assign({}, prevState), { right: true })); });
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
setShadowDirection(function (prevState) { return (__assign(__assign({}, prevState), { right: false })); });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
useEffect(function () {
|
|
86
|
-
var _a;
|
|
87
|
-
setTimeout(updateArrowIcons, 200);
|
|
88
|
-
var callback = debounce(updateArrowIcons, 200);
|
|
89
|
-
(_a = parentContainerRef.current) === null || _a === void 0 ? void 0 : _a.addEventListener('scroll', callback);
|
|
90
|
-
return function () {
|
|
91
|
-
var _a;
|
|
92
|
-
(_a = parentContainerRef.current) === null || _a === void 0 ? void 0 : _a.removeEventListener('scroll', callback);
|
|
93
|
-
};
|
|
94
|
-
}, []);
|
|
95
|
-
var onHover = useCallback(function (type) { return function () {
|
|
96
|
-
if (type === HOVER_TYPE.ENTER) {
|
|
97
|
-
setIsHovering(true);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
setIsHovering(false);
|
|
101
|
-
}
|
|
102
|
-
}; }, []);
|
|
103
|
-
var onArrowClick = function (arrowDirection) { return function () {
|
|
104
|
-
if (parentContainerRef.current && horizontalScrollRef.current) {
|
|
105
|
-
var parentContainerElement = parentContainerRef.current;
|
|
106
|
-
var horizontalScrollWidth = horizontalScrollRef.current.getBoundingClientRect().width;
|
|
107
|
-
if (arrowDirection === ARROW_DIRECTION.RIGHT) {
|
|
108
|
-
parentContainerElement.scrollLeft = parentContainerElement.scrollLeft + horizontalScrollWidth / 2;
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
parentContainerElement.scrollLeft = parentContainerElement.scrollLeft - horizontalScrollWidth / 2;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}; };
|
|
115
|
-
var arrowDimension = useMemo(function () {
|
|
116
|
-
switch (arrowSize) {
|
|
117
|
-
case ARROW_SIZE.SM: {
|
|
118
|
-
return theme.size[6];
|
|
119
|
-
}
|
|
120
|
-
case ARROW_SIZE.MD: {
|
|
121
|
-
return theme.size[6];
|
|
122
|
-
}
|
|
123
|
-
case ARROW_SIZE.LG: {
|
|
124
|
-
return theme.size[10];
|
|
125
|
-
}
|
|
126
|
-
default: {
|
|
127
|
-
return theme.size[6];
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}, [arrowSize]);
|
|
131
|
-
return (jsxs(Container, __assign({ position: 'relative', onMouseEnter: onHover(HOVER_TYPE.ENTER), onMouseLeave: onHover(HOVER_TYPE.LEAVE), className: containerClassname, ref: horizontalScrollRef }, root, { children: [showShadow && shadowDirection.left && (jsx(StyledLeftShadow, __assign({ width: leftShadowWidth, shadowGradientStyle: shadowGradientStyle }, leftShadowWrapper, { children: showArrow && isHovering && (jsx(Container, __assign({ display: 'flex', justifyContent: 'center', alignItems: 'center', cursor: 'pointer', paddingLeft: theme.spacing[4], onClick: onArrowClick(ARROW_DIRECTION.LEFT) }, leftShadowContainer, { children: jsx(LeftChevronWithBoundingBox, __assign({ height: arrowDimension, width: arrowDimension }, leftChevron)) }))) }))), jsx(StyledHorizontalScroll, __assign({ ref: parentContainerRef, className: (scrollWrapper === null || scrollWrapper === void 0 ? void 0 : scrollWrapper.className) || className, css: scrollWrapper === null || scrollWrapper === void 0 ? void 0 : scrollWrapper.css }, { children: jsx(Container, __assign({ className: (childrenContainer === null || childrenContainer === void 0 ? void 0 : childrenContainer.className) || childrenClassname, ref: childContainerRef, css: childrenContainer === null || childrenContainer === void 0 ? void 0 : childrenContainer.css, display: 'flex' }, { children: children })) })), showShadow && shadowDirection.right && (jsx(StyledRightShadow, __assign({ width: rightShadowWidth, shadowGradientStyle: shadowGradientStyle }, rightShadowWrapper, { children: showArrow && isHovering && (jsx(Container, __assign({ display: 'flex', justifyContent: 'center', alignItems: 'center', cursor: 'pointer', paddingRight: theme.spacing[4], onClick: onArrowClick(ARROW_DIRECTION.RIGHT) }, rightShadowContainer, { children: jsx(RightChevronWithBoundingBox, __assign({ height: arrowDimension, width: arrowDimension }, rightChevron)) }))) })))] })));
|
|
132
|
-
};
|
|
133
|
-
HorizontalScroll.defaultProps = {
|
|
134
|
-
children: null,
|
|
135
|
-
className: '',
|
|
136
|
-
};
|
|
137
54
|
|
|
138
|
-
export { ARROW_DIRECTION, ARROW_SIZE, HorizontalScroll
|
|
55
|
+
export { ARROW_DIRECTION, ARROW_SIZE, HorizontalScroll };
|
|
139
56
|
//# sourceMappingURL=ct-design-horizontal-scroll.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ct-design-horizontal-scroll.esm.js","sources":["../packages/components/HorizontalScroll/src/
|
|
1
|
+
{"version":3,"file":"ct-design-horizontal-scroll.esm.js","sources":["../packages/components/HorizontalScroll/src/HorizontalScroll.tsx","../packages/components/HorizontalScroll/src/constants.ts"],"sourcesContent":[null,null],"names":["_jsx"],"mappings":";;;;;;;AAWA,MAAM,sBAAsB,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;CAajC,CAAC;AAEF,MAAM,gBAAgB,GAAG,UAAU,CACjC,CAAC,EAAE,QAAQ,EAAE,WAAW,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,KAAI;AACvD,IAAA,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,WAAW,CAAC;AAE7C,IAAA,MAAM,mBAAmB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;AACzD,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;AACxD,IAAA,MAAM,iBAAiB,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IACpD,MAAM,0BAA0B,GAAG,YAAY,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAChF,MAAM,iCAAiC,GAAG,YAAY,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAE9F,IAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,EAAE,sBAAsB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAExF,IAAA,MAAM,YAAY,GAAG,CAAC,KAAoC,KAAI;AAC5D,QAAA,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,QAAQ,CAAG;AACT,YAAA,WAAW,EAAE;AACX,gBAAA,aAAa,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE;AACtF,gBAAA,iBAAiB,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AACvG,gBAAA,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AAClG,aAAA;AACF,SAAA,CAAC,CAAC;AACL,KAAC,CAAC;AAEF,IAAA,QACEA,GAAK,CAAA,KAAA,EAAA,EAAA,GAAG,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAA,QAAA,EACnDA,aAAK,GAAG,EAAE,0BAA0B,EAAE,SAAS,EAAE,UAAU,EAAA,QAAA,EACzDA,GAAC,CAAA,SAAS,IAAC,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,GAAG,EAAE,iCAAiC,EACrF,QAAA,EAAA,QAAQ,GACC,EACR,CAAA,EAAA,CACF,EACN;AACJ,CAAC,EACD;AAEF,gBAAgB,CAAC,WAAW,GAAG,kBAAkB;;IC5DrC,gBAGX;AAHD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA,CAAA;IAEW,WAIX;AAJD,CAAA,UAAY,UAAU,EAAA;AACpB,IAAA,UAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,UAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACT,IAAA,UAAA,CAAA,IAAA,CAAA,GAAA,IAAS,CAAA;AACX,CAAC,EAJW,UAAU,KAAV,UAAU,GAIrB,EAAA,CAAA,CAAA;;;;"}
|