@tapcart/mobile-components 0.7.92 → 0.7.93
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/components/ui/swipeable-list-item.d.ts +17 -0
- package/dist/components/ui/swipeable-list-item.d.ts.map +1 -0
- package/dist/components/ui/swipeable-list-item.js +80 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/styles.css +6 -0
- package/package.json +4 -3
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React, { ReactNode } from "react";
|
|
2
|
+
export interface SwipeAction {
|
|
3
|
+
icon?: ReactNode;
|
|
4
|
+
color?: string;
|
|
5
|
+
onPress: () => void;
|
|
6
|
+
closeOnAction?: boolean;
|
|
7
|
+
key?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SwipeableListItemProps {
|
|
10
|
+
children: ReactNode;
|
|
11
|
+
actions: SwipeAction[];
|
|
12
|
+
actionWidth?: number;
|
|
13
|
+
threshold?: number;
|
|
14
|
+
}
|
|
15
|
+
declare const SwipeableListItem: React.FC<SwipeableListItemProps>;
|
|
16
|
+
export { SwipeableListItem };
|
|
17
|
+
//# sourceMappingURL=swipeable-list-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipeable-list-item.d.ts","sourceRoot":"","sources":["../../../components/ui/swipeable-list-item.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAA+B,SAAS,EAAE,MAAM,OAAO,CAAA;AAGrE,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,QAAA,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAwHvD,CAAA;AAID,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useRef, useEffect } from "react";
|
|
4
|
+
import { useSwipeable } from "react-swipeable";
|
|
5
|
+
const SwipeableListItem = ({ children, actions = [], actionWidth = 52, threshold = 0.3, }) => {
|
|
6
|
+
const [offset, setOffset] = useState(0);
|
|
7
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
8
|
+
const totalActionsWidth = actionWidth * actions.length;
|
|
9
|
+
const thresholdPixels = totalActionsWidth * threshold;
|
|
10
|
+
const itemRef = useRef(null);
|
|
11
|
+
const closeItem = () => {
|
|
12
|
+
setIsOpen(false);
|
|
13
|
+
setOffset(0);
|
|
14
|
+
};
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
const handleClickOutside = (event) => {
|
|
17
|
+
if (itemRef.current && !itemRef.current.contains(event.target)) {
|
|
18
|
+
closeItem();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
if (isOpen) {
|
|
22
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
23
|
+
}
|
|
24
|
+
return () => {
|
|
25
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
26
|
+
};
|
|
27
|
+
}, [isOpen]);
|
|
28
|
+
const handlers = useSwipeable({
|
|
29
|
+
onSwiping: (event) => {
|
|
30
|
+
let newOffset = 0;
|
|
31
|
+
if (event.dir === "Left") {
|
|
32
|
+
newOffset = Math.min(event.absX, totalActionsWidth);
|
|
33
|
+
}
|
|
34
|
+
else if (event.dir === "Right" && isOpen) {
|
|
35
|
+
newOffset = Math.max(totalActionsWidth - event.absX, 0);
|
|
36
|
+
}
|
|
37
|
+
setOffset(newOffset);
|
|
38
|
+
},
|
|
39
|
+
onSwipedLeft: () => {
|
|
40
|
+
if (offset > thresholdPixels) {
|
|
41
|
+
setIsOpen(true);
|
|
42
|
+
setOffset(totalActionsWidth);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
closeItem();
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
onSwipedRight: () => closeItem(),
|
|
49
|
+
trackMouse: true,
|
|
50
|
+
trackTouch: true,
|
|
51
|
+
delta: 10,
|
|
52
|
+
preventScrollOnSwipe: true,
|
|
53
|
+
rotationAngle: 0,
|
|
54
|
+
});
|
|
55
|
+
return (_jsxs("div", Object.assign({ ref: itemRef, className: "relative overflow-hidden" }, { children: [_jsx("div", Object.assign({}, handlers, { className: "w-full transition-transform duration-200 ease-out", style: {
|
|
56
|
+
transform: `translateX(-${offset}px)`,
|
|
57
|
+
transition: offset === 0 || offset === totalActionsWidth
|
|
58
|
+
? "transform 0.2s ease-out"
|
|
59
|
+
: "none",
|
|
60
|
+
}, role: "button", "aria-expanded": isOpen }, { children: children })), _jsx("div", Object.assign({ className: "absolute right-0 top-0 h-full flex", "aria-label": "Action buttons", style: { visibility: offset > 0 ? "visible" : "hidden" } }, { children: actions.map((action, index) => {
|
|
61
|
+
const actionStartPosition = index * actionWidth;
|
|
62
|
+
const isActionVisible = offset > actionStartPosition;
|
|
63
|
+
return (_jsx("div", Object.assign({ className: "h-full flex items-center justify-center overflow-hidden", style: {
|
|
64
|
+
width: `${actionWidth}px`,
|
|
65
|
+
backgroundColor: action.color || "#e5e5e5",
|
|
66
|
+
maxWidth: isActionVisible
|
|
67
|
+
? `${Math.min(offset - actionStartPosition, actionWidth)}px`
|
|
68
|
+
: "0px",
|
|
69
|
+
opacity: isActionVisible ? 1 : 0,
|
|
70
|
+
transition: "max-width 0.1s ease-out, opacity 0.1s ease-out",
|
|
71
|
+
} }, { children: _jsx("button", Object.assign({ onClick: () => {
|
|
72
|
+
action.onPress();
|
|
73
|
+
if (action.closeOnAction !== false) {
|
|
74
|
+
closeItem();
|
|
75
|
+
}
|
|
76
|
+
}, className: "w-full h-full flex items-center justify-center", style: { minWidth: `${actionWidth}px` } }, { children: action.icon && _jsx(_Fragment, { children: action.icon }) })) }), action.key || index));
|
|
77
|
+
}) }))] })));
|
|
78
|
+
};
|
|
79
|
+
SwipeableListItem.displayName = "SwipeableListItem";
|
|
80
|
+
export { SwipeableListItem };
|
package/dist/index.d.ts
CHANGED
|
@@ -72,4 +72,5 @@ export * from "./components/hooks/use-nosto-recommendation";
|
|
|
72
72
|
export * from "./components/libs/sort-filter/search-integration";
|
|
73
73
|
export * from "./components/ui/tap";
|
|
74
74
|
export * from "./components/ui/circular-progress";
|
|
75
|
+
export * from "./components/ui/swipeable-list-item";
|
|
75
76
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,EAAE,EACF,GAAG,EACH,QAAQ,EACR,4BAA4B,EAC5B,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,4BAA4B,EAC5B,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,eAAe,EACf,cAAc,EACd,SAAS,EACT,4BAA4B,GAC7B,MAAM,aAAa,CAAA;AACpB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,2CAA2C,CAAA;AACzD,cAAc,mCAAmC,CAAA;AACjD,cAAc,wCAAwC,CAAA;AACtD,cAAc,wCAAwC,CAAA;AACtD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sCAAsC,CAAA;AACpD,cAAc,yCAAyC,CAAA;AACvD,cAAc,oCAAoC,CAAA;AAClD,cAAc,wCAAwC,CAAA;AACtD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sCAAsC,CAAA;AACpD,cAAc,oDAAoD,CAAA;AAClE,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,kCAAkC,CAAA;AAChD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,sCAAsC,CAAA;AACpD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sBAAsB,CAAA;AACpC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kDAAkD,CAAA;AAChE,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oCAAoC,CAAA;AAClD,cAAc,mCAAmC,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,cAAc,6CAA6C,CAAA;AAC3D,cAAc,kDAAkD,CAAA;AAChE,cAAc,qBAAqB,CAAA;AACnC,cAAc,mCAAmC,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -73,3 +73,4 @@ export * from "./components/hooks/use-nosto-recommendation";
|
|
|
73
73
|
export * from "./components/libs/sort-filter/search-integration";
|
|
74
74
|
export * from "./components/ui/tap";
|
|
75
75
|
export * from "./components/ui/circular-progress";
|
|
76
|
+
export * from "./components/ui/swipeable-list-item";
|
package/dist/styles.css
CHANGED
|
@@ -2218,6 +2218,9 @@ video {
|
|
|
2218
2218
|
.ease-in-out {
|
|
2219
2219
|
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2220
2220
|
}
|
|
2221
|
+
.ease-out {
|
|
2222
|
+
transition-timing-function: cubic-bezier(0, 0, 0.2, 1);
|
|
2223
|
+
}
|
|
2221
2224
|
@keyframes enter {
|
|
2222
2225
|
|
|
2223
2226
|
from {
|
|
@@ -2250,6 +2253,9 @@ video {
|
|
|
2250
2253
|
.ease-in-out {
|
|
2251
2254
|
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
|
|
2252
2255
|
}
|
|
2256
|
+
.ease-out {
|
|
2257
|
+
animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
|
|
2258
|
+
}
|
|
2253
2259
|
.paused {
|
|
2254
2260
|
animation-play-state: paused;
|
|
2255
2261
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tapcart/mobile-components",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.93",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"style": "dist/styles.css",
|
|
@@ -77,17 +77,18 @@
|
|
|
77
77
|
"clsx": "^1.2.1",
|
|
78
78
|
"dayjs": "^1.11.13",
|
|
79
79
|
"dompurify": "^3.2.2",
|
|
80
|
-
"embla-carousel-react": "^8.3.0",
|
|
81
80
|
"embla-carousel-autoplay": "8.5.2",
|
|
82
81
|
"embla-carousel-fade": "8.5.2",
|
|
82
|
+
"embla-carousel-react": "^8.3.0",
|
|
83
83
|
"lucide-react": "^0.248.0",
|
|
84
84
|
"next": "^14.2.5",
|
|
85
|
-
"react-circular-progressbar": "2.2.0",
|
|
86
85
|
"next-themes": "^0.2.1",
|
|
87
86
|
"pluralize": "^8.0.0",
|
|
88
87
|
"postcss-cli": "^11.0.0",
|
|
88
|
+
"react-circular-progressbar": "2.2.0",
|
|
89
89
|
"react-intersection-observer": "^9.10.2",
|
|
90
90
|
"react-svg": "^16.1.34",
|
|
91
|
+
"react-swipeable": "^7.0.2",
|
|
91
92
|
"react-virtual": "^2.10.4",
|
|
92
93
|
"swr": "^2.2.5",
|
|
93
94
|
"tailwind-merge": "^1.13.2",
|