@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.
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
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.92",
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",