kupos-ui-components-lib 9.9.10 → 9.10.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/components/ServiceItem/ServiceItemMobile.js +1 -1
- package/dist/components/Survey/SurveyDesktop.d.ts +1 -1
- package/dist/components/Survey/SurveyDesktop.js +19 -24
- package/dist/components/Survey/SurveyMobile.d.ts +1 -1
- package/dist/components/Survey/SurveyMobile.js +16 -25
- package/dist/components/Survey/types.d.ts +4 -0
- package/dist/styles.css +0 -3
- package/dist/ui/Survey/FeedbackTextarea.d.ts +4 -1
- package/dist/ui/Survey/FeedbackTextarea.js +19 -21
- package/dist/ui/Survey/ScoreButtons.d.ts +5 -1
- package/dist/ui/Survey/ScoreButtons.js +13 -9
- package/dist/ui/Survey/constants.d.ts +1 -1
- package/dist/ui/Survey/constants.js +1 -1
- package/dist/ui/mobileweb/ServiceBadgesMobile.js +2 -2
- package/package.json +1 -1
- package/src/components/ServiceItem/ServiceItemMobile.tsx +1 -1
- package/src/ui/mobileweb/ServiceBadgesMobile.tsx +2 -2
|
@@ -106,7 +106,7 @@ function ServiceItemMobile({ serviceItem, onBookButtonPress, colors, busStage, o
|
|
|
106
106
|
: "rounded-[10px] border border-[#ccc]"}`, style: Object.assign(Object.assign({}, serviceCardStyle), { backgroundColor: "#fff" }) },
|
|
107
107
|
React.createElement("div", { style: {
|
|
108
108
|
padding: "12px 12px 8px 12px",
|
|
109
|
-
marginTop: (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.is_direct_trip) && showTopLabel
|
|
109
|
+
marginTop: (serviceItem === null || serviceItem === void 0 ? void 0 : serviceItem.is_direct_trip) && (showTopLabel || isConexion)
|
|
110
110
|
? " 10px"
|
|
111
111
|
: "",
|
|
112
112
|
} },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { SurveyProps } from "./types";
|
|
3
|
-
declare const SurveyDesktop: ({ isOpen, isSubmitted, selectedScore, onScoreChange, feedback, onFeedbackChange, onClose, onSkip, onSubmit, colors, }: SurveyProps) => React.JSX.Element;
|
|
3
|
+
declare const SurveyDesktop: ({ isOpen, isSubmitted, selectedScore, onScoreChange, feedback, onFeedbackChange, onClose, onSkip, onSubmit, colors, icons, isLoading, }: SurveyProps) => React.JSX.Element;
|
|
4
4
|
export default SurveyDesktop;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Modal } from "../../ui/Modal";
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { ScoreButtons, FeedbackTextarea, getFeedbackConfig, } from "../../ui/Survey";
|
|
4
|
+
import KuposButton from "../../ui/KuposButton/KuposButton";
|
|
5
|
+
const SurveyDesktop = ({ isOpen, isSubmitted, selectedScore, onScoreChange, feedback = "", onFeedbackChange, onClose, onSkip, onSubmit, colors, icons, isLoading, }) => {
|
|
5
6
|
if (!isOpen)
|
|
6
7
|
return null;
|
|
7
8
|
const config = getFeedbackConfig(selectedScore);
|
|
@@ -10,27 +11,21 @@ const SurveyDesktop = ({ isOpen, isSubmitted, selectedScore, onScoreChange, feed
|
|
|
10
11
|
onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(selectedScore, feedback);
|
|
11
12
|
}
|
|
12
13
|
};
|
|
13
|
-
return (React.createElement(Modal, { isOpen: isOpen, onClose: onClose, variant: "center", size: "lg", maxWidth:
|
|
14
|
-
React.createElement(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
marginBottom: 20,
|
|
30
|
-
} }, "Pulsa un n\u00FAmero: 1 significa en absoluto, 10 significa absolutamente."),
|
|
31
|
-
React.createElement(ScoreButtons, { selectedScore: selectedScore, onScoreChange: onScoreChange, buttonHeight: 54, fontSize: 15 }),
|
|
32
|
-
React.createElement(FeedbackBanner, { config: config }),
|
|
33
|
-
React.createElement(FeedbackTextarea, { config: config, feedback: feedback, onFeedbackChange: onFeedbackChange }),
|
|
34
|
-
React.createElement(SurveyFooter, { selectedScore: selectedScore, onSkip: onSkip, onSubmit: handleSubmit, colors: colors })))));
|
|
14
|
+
return (React.createElement(Modal, { isOpen: isOpen, onClose: onClose, variant: "center", size: "lg", maxWidth: 550, padding: isSubmitted ? 0 : "40px 48px 36px", borderRadius: 28, closeOnBackdrop: false },
|
|
15
|
+
React.createElement(React.Fragment, null,
|
|
16
|
+
React.createElement("button", { onClick: onClose, "aria-label": "Close survey", className: "absolute top-[15px] right-[25px] bg-transparent border-none cursor-pointer text-[22px] text-gray-400 flex items-center justify-center p-1 z-10 transition-colors duration-200 hover:text-gray-600" },
|
|
17
|
+
React.createElement("img", { src: icons.closeIcon, alt: "Close", className: "w-[16px] h-[16px] block" })),
|
|
18
|
+
(icons === null || icons === void 0 ? void 0 : icons.surveyIcon) && (React.createElement("div", { className: "flex justify-center mb-3 mt-2" },
|
|
19
|
+
React.createElement("img", { src: icons.surveyIcon, alt: "Survey Illustration", className: "w-[90px] h-[90px] block" }))),
|
|
20
|
+
React.createElement("h2", { className: "text-[18px] bold-text leading-[1.25] text-center mt-4 mb-2" }, "Ay\u00FAdanos a mejorar"),
|
|
21
|
+
React.createElement("p", { className: "text-[13.33px] text-center leading-[1.4] mb-6 max-w-[460px] mx-auto" },
|
|
22
|
+
"Bas\u00E1ndote en tu experiencia de compra.",
|
|
23
|
+
React.createElement("br", null),
|
|
24
|
+
"\u00BFNos recomendar\u00EDas a un amigo?"),
|
|
25
|
+
React.createElement(ScoreButtons, { selectedScore: selectedScore, onScoreChange: onScoreChange, buttonHeight: 45, fontSize: 15, colors: colors }),
|
|
26
|
+
React.createElement(FeedbackTextarea, { config: config, feedback: feedback, onFeedbackChange: onFeedbackChange, colors: colors }),
|
|
27
|
+
React.createElement("div", { className: "flex justify-center mt-[20px]" },
|
|
28
|
+
React.createElement("div", { className: "w-[180px]" },
|
|
29
|
+
React.createElement(KuposButton, { isSoldOut: selectedScore == null, isLoading: isLoading || false, buttonColor: "#FF8E43", buyLabel: "Enviar", soldOutLabel: "Enviar", onClick: handleSubmit }))))));
|
|
35
30
|
};
|
|
36
31
|
export default SurveyDesktop;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { SurveyProps } from "./types";
|
|
3
|
-
declare const SurveyMobile: ({ isOpen, isSubmitted, selectedScore, onScoreChange, feedback, onFeedbackChange, onClose, onSkip, onSubmit, colors, }: SurveyProps) => React.JSX.Element;
|
|
3
|
+
declare const SurveyMobile: ({ isOpen, isSubmitted, selectedScore, onScoreChange, feedback, onFeedbackChange, onClose, onSkip, onSubmit, colors, icons, isLoading, }: SurveyProps) => React.JSX.Element;
|
|
4
4
|
export default SurveyMobile;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { BottomSheet } from "../../ui/BottomSheet";
|
|
3
|
-
import { ThankYouCard,
|
|
4
|
-
|
|
3
|
+
import { ThankYouCard, ScoreButtons, FeedbackTextarea, getFeedbackConfig, } from "../../ui/Survey";
|
|
4
|
+
import KuposButton from "../../ui/KuposButton/KuposButton";
|
|
5
|
+
const SurveyMobile = ({ isOpen, isSubmitted, selectedScore, onScoreChange, feedback = "", onFeedbackChange, onClose, onSkip, onSubmit, colors, icons, isLoading, }) => {
|
|
5
6
|
if (!isOpen)
|
|
6
7
|
return null;
|
|
7
8
|
const config = getFeedbackConfig(selectedScore);
|
|
@@ -11,29 +12,19 @@ const SurveyMobile = ({ isOpen, isSubmitted, selectedScore, onScoreChange, feedb
|
|
|
11
12
|
}
|
|
12
13
|
};
|
|
13
14
|
return (React.createElement(BottomSheet, { isOpen: isOpen !== null && isOpen !== void 0 ? isOpen : false, onClose: onClose, showHandle: true, showBackdrop: false, blurBackground: true, blurAmount: "2px", padding: isSubmitted ? 0 : "0 20px 32px" }, isSubmitted ? (React.createElement(ThankYouCard, { onClose: onClose, titleFontSize: "1.35rem" })) : (React.createElement(React.Fragment, null,
|
|
14
|
-
React.createElement(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
"\
|
|
23
|
-
|
|
24
|
-
React.createElement("em", { style: {
|
|
25
|
-
color: colors === null || colors === void 0 ? void 0 : colors.secondaryColor,
|
|
26
|
-
} }, "recomiendes"),
|
|
27
|
-
" ",
|
|
28
|
-
"a un amigo?"),
|
|
29
|
-
React.createElement("p", { style: {
|
|
30
|
-
fontSize: "13.33px",
|
|
31
|
-
color: colors === null || colors === void 0 ? void 0 : colors.primaryColor,
|
|
32
|
-
marginBottom: 16,
|
|
33
|
-
} }, "Pulsa un n\u00FAmero: 1 significa en absoluto, 10 significa absolutamente."),
|
|
34
|
-
React.createElement(ScoreButtons, { selectedScore: selectedScore, onScoreChange: onScoreChange, buttonHeight: 44, fontSize: 13, gap: 6 }),
|
|
35
|
-
React.createElement(FeedbackBanner, { config: config }),
|
|
15
|
+
React.createElement("button", { onClick: onClose, "aria-label": "Close survey", className: "absolute top-[15px] right-[25px] bg-transparent border-none cursor-pointer text-[22px] text-gray-400 flex items-center justify-center p-1 z-10 transition-colors duration-200 hover:text-gray-600" },
|
|
16
|
+
React.createElement("img", { src: icons.closeIcon, alt: "Close", className: "w-[16px] h-[16px] block" })),
|
|
17
|
+
(icons === null || icons === void 0 ? void 0 : icons.surveyIcon) && (React.createElement("div", { className: "flex justify-center mb-3 mt-2" },
|
|
18
|
+
React.createElement("img", { src: icons.surveyIcon, alt: "Survey Illustration", className: "w-[90px] h-[90px] block" }))),
|
|
19
|
+
React.createElement("h2", { className: "text-[18px] bold-text leading-[1.25] text-center mt-4 mb-2" }, "Ay\u00FAdanos a mejorar"),
|
|
20
|
+
React.createElement("p", { className: "text-[13.33px] text-center leading-[1.4] mb-6 max-w-[460px] mx-auto" },
|
|
21
|
+
"Bas\u00E1ndote en tu experiencia de compra.",
|
|
22
|
+
React.createElement("br", null),
|
|
23
|
+
"\u00BFNos recomendar\u00EDas a un amigo?"),
|
|
24
|
+
React.createElement(ScoreButtons, { selectedScore: selectedScore, onScoreChange: onScoreChange, buttonHeight: 44, fontSize: 13, gap: 6, colors: colors }),
|
|
36
25
|
React.createElement(FeedbackTextarea, { config: config, feedback: feedback, onFeedbackChange: onFeedbackChange }),
|
|
37
|
-
React.createElement(
|
|
26
|
+
React.createElement("div", { className: "flex justify-center mt-[20px]" },
|
|
27
|
+
React.createElement("div", { className: "w-[180px]" },
|
|
28
|
+
React.createElement(KuposButton, { isSoldOut: selectedScore == null, isLoading: isLoading || false, buttonColor: "#FF8E43", buyLabel: "Enviar", soldOutLabel: "Enviar", onClick: handleSubmit })))))));
|
|
38
29
|
};
|
|
39
30
|
export default SurveyMobile;
|
package/dist/styles.css
CHANGED
|
@@ -4,6 +4,9 @@ interface FeedbackTextareaProps {
|
|
|
4
4
|
config: FeedbackConfig | null;
|
|
5
5
|
feedback: string;
|
|
6
6
|
onFeedbackChange?: (text: string) => void;
|
|
7
|
+
colors?: {
|
|
8
|
+
primaryColor?: string;
|
|
9
|
+
};
|
|
7
10
|
}
|
|
8
|
-
declare const FeedbackTextarea: ({ config, feedback, onFeedbackChange, }: FeedbackTextareaProps) => React.JSX.Element;
|
|
11
|
+
declare const FeedbackTextarea: ({ config, feedback, onFeedbackChange, colors, }: FeedbackTextareaProps) => React.JSX.Element;
|
|
9
12
|
export default FeedbackTextarea;
|
|
@@ -1,35 +1,33 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { MAX_CHARS } from "./constants";
|
|
3
|
-
const FeedbackTextarea = ({ config, feedback, onFeedbackChange, }) => {
|
|
3
|
+
const FeedbackTextarea = ({ config, feedback, onFeedbackChange, colors, }) => {
|
|
4
4
|
if (!config)
|
|
5
5
|
return null;
|
|
6
|
-
return (React.createElement("div", { style: { marginTop:
|
|
7
|
-
React.createElement("
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
borderRadius: 6,
|
|
19
|
-
padding: "2px 8px",
|
|
20
|
-
} }, "Opcional")),
|
|
6
|
+
return (React.createElement("div", { style: { position: "relative", marginTop: 42 } },
|
|
7
|
+
React.createElement("span", { style: {
|
|
8
|
+
position: "absolute",
|
|
9
|
+
left: 16,
|
|
10
|
+
top: -10,
|
|
11
|
+
background: "#FFFFFF",
|
|
12
|
+
padding: "0 8px",
|
|
13
|
+
fontSize: "13.33px",
|
|
14
|
+
fontWeight: 600,
|
|
15
|
+
color: (colors === null || colors === void 0 ? void 0 : colors.primaryColor) || "#374151",
|
|
16
|
+
zIndex: 1,
|
|
17
|
+
} }, config.question),
|
|
21
18
|
React.createElement("div", { style: {
|
|
22
19
|
border: "1.5px solid #E5E7EB",
|
|
23
|
-
borderRadius:
|
|
20
|
+
borderRadius: 16,
|
|
24
21
|
overflow: "hidden",
|
|
25
22
|
position: "relative",
|
|
23
|
+
background: "transparent",
|
|
26
24
|
} },
|
|
27
25
|
React.createElement("textarea", { value: feedback, onChange: (e) => {
|
|
28
26
|
if (e.target.value.length <= MAX_CHARS)
|
|
29
27
|
onFeedbackChange === null || onFeedbackChange === void 0 ? void 0 : onFeedbackChange(e.target.value);
|
|
30
|
-
}, placeholder:
|
|
28
|
+
}, placeholder: "D\u00E9janos tus comentarios (opcional)", rows: 4, style: {
|
|
31
29
|
width: "100%",
|
|
32
|
-
padding: "
|
|
30
|
+
padding: "16px 16px 28px",
|
|
33
31
|
background: "transparent",
|
|
34
32
|
color: "#374151",
|
|
35
33
|
fontSize: "13.33px",
|
|
@@ -42,12 +40,12 @@ const FeedbackTextarea = ({ config, feedback, onFeedbackChange, }) => {
|
|
|
42
40
|
React.createElement("div", { style: {
|
|
43
41
|
position: "absolute",
|
|
44
42
|
bottom: 8,
|
|
45
|
-
right:
|
|
43
|
+
right: 16,
|
|
46
44
|
fontSize: 12,
|
|
47
45
|
color: "#9CA3AF",
|
|
48
46
|
} },
|
|
49
47
|
feedback.length,
|
|
50
|
-
"
|
|
48
|
+
"/",
|
|
51
49
|
MAX_CHARS))));
|
|
52
50
|
};
|
|
53
51
|
export default FeedbackTextarea;
|
|
@@ -5,6 +5,10 @@ interface ScoreButtonsProps {
|
|
|
5
5
|
buttonHeight?: number;
|
|
6
6
|
fontSize?: number;
|
|
7
7
|
gap?: number;
|
|
8
|
+
colors?: {
|
|
9
|
+
secondaryColor?: string;
|
|
10
|
+
primaryColor?: string;
|
|
11
|
+
};
|
|
8
12
|
}
|
|
9
|
-
declare const ScoreButtons: ({ selectedScore, onScoreChange, buttonHeight, fontSize, gap, }: ScoreButtonsProps) => React.JSX.Element;
|
|
13
|
+
declare const ScoreButtons: ({ selectedScore, onScoreChange, buttonHeight, fontSize, gap, colors, }: ScoreButtonsProps) => React.JSX.Element;
|
|
10
14
|
export default ScoreButtons;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { getZoneColor, getZoneShadow } from "./constants";
|
|
3
|
-
const ScoreButtons = ({ selectedScore, onScoreChange, buttonHeight = 54, fontSize = 15, gap = 8, }) => (React.createElement("div", { style: { marginBottom: 4 } },
|
|
3
|
+
const ScoreButtons = ({ selectedScore, onScoreChange, buttonHeight = 54, fontSize = 15, gap = 8, colors, }) => (React.createElement("div", { style: { marginBottom: 4 } },
|
|
4
4
|
React.createElement("div", { style: {
|
|
5
5
|
display: "grid",
|
|
6
6
|
gridTemplateColumns: "repeat(10, 1fr)",
|
|
@@ -8,10 +8,11 @@ const ScoreButtons = ({ selectedScore, onScoreChange, buttonHeight = 54, fontSiz
|
|
|
8
8
|
} }, Array.from({ length: 10 }, (_, i) => i + 1).map((num) => {
|
|
9
9
|
const isSelected = selectedScore === num;
|
|
10
10
|
const zoneColor = getZoneColor(num);
|
|
11
|
+
const activeColor = (colors === null || colors === void 0 ? void 0 : colors.secondaryColor) || zoneColor;
|
|
11
12
|
return (React.createElement("button", { key: num, onClick: () => onScoreChange === null || onScoreChange === void 0 ? void 0 : onScoreChange(num), onMouseEnter: (e) => {
|
|
12
13
|
if (!isSelected) {
|
|
13
|
-
e.currentTarget.style.borderColor =
|
|
14
|
-
e.currentTarget.style.color =
|
|
14
|
+
e.currentTarget.style.borderColor = activeColor;
|
|
15
|
+
e.currentTarget.style.color = activeColor;
|
|
15
16
|
}
|
|
16
17
|
}, onMouseLeave: (e) => {
|
|
17
18
|
if (!isSelected) {
|
|
@@ -20,15 +21,18 @@ const ScoreButtons = ({ selectedScore, onScoreChange, buttonHeight = 54, fontSiz
|
|
|
20
21
|
}
|
|
21
22
|
}, style: {
|
|
22
23
|
height: buttonHeight,
|
|
23
|
-
borderRadius:
|
|
24
|
+
borderRadius: 10,
|
|
24
25
|
fontSize,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
background: isSelected ? zoneColor : "#FFFFFF",
|
|
26
|
+
border: isSelected ? "none" : "1px solid #E5E7EB",
|
|
27
|
+
background: isSelected ? activeColor : "#FFFFFF",
|
|
28
28
|
color: isSelected ? "#FFFFFF" : "#111827",
|
|
29
29
|
cursor: "pointer",
|
|
30
30
|
transition: "border-color 0.15s, color 0.15s, background 0.15s",
|
|
31
|
-
boxShadow: isSelected
|
|
31
|
+
boxShadow: isSelected
|
|
32
|
+
? (colors === null || colors === void 0 ? void 0 : colors.secondaryColor)
|
|
33
|
+
? `0 2px 8px ${colors.secondaryColor}58`
|
|
34
|
+
: getZoneShadow(num)
|
|
35
|
+
: "none",
|
|
32
36
|
display: "flex",
|
|
33
37
|
alignItems: "center",
|
|
34
38
|
justifyContent: "center",
|
|
@@ -40,6 +44,6 @@ const ScoreButtons = ({ selectedScore, onScoreChange, buttonHeight = 54, fontSiz
|
|
|
40
44
|
justifyContent: "space-between",
|
|
41
45
|
marginTop: 8,
|
|
42
46
|
} },
|
|
43
|
-
React.createElement("span", { style: { fontSize: 12, color: "#9CA3AF" } }, "
|
|
47
|
+
React.createElement("span", { style: { fontSize: 12, color: "#9CA3AF" } }, "Poco probable"),
|
|
44
48
|
React.createElement("span", { style: { fontSize: 12, color: "#9CA3AF" } }, "Muy probable"))));
|
|
45
49
|
export default ScoreButtons;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
const ServiceBadgesMobile = ({ showTopLabel, isSoldOut, colors, renderIcon, serviceItem, isConexion, }) => {
|
|
3
|
-
return (React.createElement("div", { className: "absolute -top-[
|
|
4
|
-
showTopLabel && (React.createElement("div", { className: `flex items-center gap-[2p x] py-[4px] px-[10px] rounded-[38px] min-[420]:text-[12px] text-[10px] z-20`, style: {
|
|
3
|
+
return (React.createElement("div", { className: "absolute -top-[11px] left-0 w-full flex items-center justify-end gap-[12px] pr-[17px] z-10" },
|
|
4
|
+
showTopLabel && (React.createElement("div", { className: `flex items-center gap-[2p x] py-[4px] px-[10px] rounded-[38px] min-[420]:text-[12px] text-[10px] h-[24px] z-20`, style: {
|
|
5
5
|
backgroundColor: "#fff",
|
|
6
6
|
border: isSoldOut
|
|
7
7
|
? "1px solid #ccc"
|
package/package.json
CHANGED
|
@@ -24,10 +24,10 @@ const ServiceBadgesMobile: React.FC<ServiceBadgesMobileProps> = ({
|
|
|
24
24
|
isConexion,
|
|
25
25
|
}) => {
|
|
26
26
|
return (
|
|
27
|
-
<div className="absolute -top-[
|
|
27
|
+
<div className="absolute -top-[11px] left-0 w-full flex items-center justify-end gap-[12px] pr-[17px] z-10">
|
|
28
28
|
{showTopLabel && (
|
|
29
29
|
<div
|
|
30
|
-
className={`flex items-center gap-[2p x] py-[4px] px-[10px] rounded-[38px] min-[420]:text-[12px] text-[10px] z-20`}
|
|
30
|
+
className={`flex items-center gap-[2p x] py-[4px] px-[10px] rounded-[38px] min-[420]:text-[12px] text-[10px] h-[24px] z-20`}
|
|
31
31
|
style={{
|
|
32
32
|
backgroundColor: "#fff",
|
|
33
33
|
border: isSoldOut
|