@xsolla/xui-b2c-shop-card 0.199.0 → 0.201.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/native/index.js +66 -5
- package/native/index.js.map +1 -1
- package/native/index.mjs +66 -5
- package/native/index.mjs.map +1 -1
- package/package.json +4 -4
package/native/index.js
CHANGED
|
@@ -27,6 +27,38 @@ module.exports = __toCommonJS(index_exports);
|
|
|
27
27
|
// ../../foundation/primitives-native/src/Box.tsx
|
|
28
28
|
var import_react_native = require("react-native");
|
|
29
29
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
30
|
+
var roleToAccessibilityRole = {
|
|
31
|
+
button: "button",
|
|
32
|
+
link: "link",
|
|
33
|
+
img: "image",
|
|
34
|
+
image: "image",
|
|
35
|
+
summary: "summary",
|
|
36
|
+
switch: "switch",
|
|
37
|
+
checkbox: "checkbox",
|
|
38
|
+
radio: "radio",
|
|
39
|
+
heading: "header",
|
|
40
|
+
text: "text",
|
|
41
|
+
search: "search",
|
|
42
|
+
alert: "alert",
|
|
43
|
+
none: "none",
|
|
44
|
+
presentation: "none",
|
|
45
|
+
progressbar: "progressbar",
|
|
46
|
+
scrollbar: "scrollbar",
|
|
47
|
+
adjustable: "adjustable",
|
|
48
|
+
tab: "tab",
|
|
49
|
+
menu: "menu",
|
|
50
|
+
menuitem: "menuitem",
|
|
51
|
+
list: "list",
|
|
52
|
+
timer: "timer"
|
|
53
|
+
};
|
|
54
|
+
var toGapValue = (gap) => {
|
|
55
|
+
if (gap === void 0) return void 0;
|
|
56
|
+
if (typeof gap === "number") return gap;
|
|
57
|
+
const pxMatch = /^(\d+(?:\.\d+)?)px$/.exec(gap);
|
|
58
|
+
if (pxMatch) return Number(pxMatch[1]);
|
|
59
|
+
const asNumber = Number(gap);
|
|
60
|
+
return Number.isFinite(asNumber) ? asNumber : void 0;
|
|
61
|
+
};
|
|
30
62
|
var Box = ({
|
|
31
63
|
children,
|
|
32
64
|
onPress,
|
|
@@ -59,8 +91,10 @@ var Box = ({
|
|
|
59
91
|
marginLeft,
|
|
60
92
|
marginRight,
|
|
61
93
|
flexDirection,
|
|
94
|
+
flexWrap,
|
|
62
95
|
alignItems,
|
|
63
96
|
justifyContent,
|
|
97
|
+
alignSelf,
|
|
64
98
|
position,
|
|
65
99
|
top,
|
|
66
100
|
bottom,
|
|
@@ -72,11 +106,14 @@ var Box = ({
|
|
|
72
106
|
maxWidth,
|
|
73
107
|
maxHeight,
|
|
74
108
|
flex,
|
|
109
|
+
flexShrink,
|
|
110
|
+
gap,
|
|
75
111
|
overflow,
|
|
76
112
|
zIndex,
|
|
77
113
|
hoverStyle,
|
|
78
114
|
pressStyle,
|
|
79
115
|
style,
|
|
116
|
+
disabled,
|
|
80
117
|
"data-testid": dataTestId,
|
|
81
118
|
testID,
|
|
82
119
|
as,
|
|
@@ -115,14 +152,18 @@ var Box = ({
|
|
|
115
152
|
marginLeft,
|
|
116
153
|
marginRight,
|
|
117
154
|
flexDirection,
|
|
155
|
+
flexWrap,
|
|
118
156
|
alignItems,
|
|
119
157
|
justifyContent,
|
|
158
|
+
alignSelf,
|
|
120
159
|
position,
|
|
121
160
|
top,
|
|
122
161
|
bottom,
|
|
123
162
|
left,
|
|
124
163
|
right,
|
|
125
164
|
flex,
|
|
165
|
+
flexShrink,
|
|
166
|
+
gap: toGapValue(gap),
|
|
126
167
|
...style
|
|
127
168
|
});
|
|
128
169
|
const finalTestID = dataTestId || testID;
|
|
@@ -131,15 +172,25 @@ var Box = ({
|
|
|
131
172
|
tabIndex,
|
|
132
173
|
onKeyDown,
|
|
133
174
|
onKeyUp,
|
|
134
|
-
"aria-label":
|
|
175
|
+
"aria-label": ariaLabel,
|
|
135
176
|
"aria-labelledby": _ariaLabelledBy,
|
|
136
177
|
"aria-current": _ariaCurrent,
|
|
137
|
-
"aria-disabled":
|
|
138
|
-
"aria-live":
|
|
178
|
+
"aria-disabled": ariaDisabled,
|
|
179
|
+
"aria-live": ariaLive,
|
|
180
|
+
"aria-busy": ariaBusy,
|
|
139
181
|
className,
|
|
140
182
|
"data-testid": _dataTestId,
|
|
183
|
+
cursor: _cursor,
|
|
184
|
+
type: _type,
|
|
141
185
|
...nativeRest
|
|
142
186
|
} = rest;
|
|
187
|
+
const accessibilityRole = typeof role === "string" && roleToAccessibilityRole[role] || (as === "button" ? "button" : void 0);
|
|
188
|
+
const isDisabled = Boolean(disabled || ariaDisabled);
|
|
189
|
+
const accessibilityState = {
|
|
190
|
+
disabled: isDisabled || void 0,
|
|
191
|
+
busy: Boolean(ariaBusy) || void 0
|
|
192
|
+
};
|
|
193
|
+
const accessibilityLiveRegion = ariaLive === "polite" || ariaLive === "assertive" ? ariaLive : void 0;
|
|
143
194
|
if (as === "img" && src) {
|
|
144
195
|
const imageStyle = {
|
|
145
196
|
width,
|
|
@@ -158,16 +209,18 @@ var Box = ({
|
|
|
158
209
|
source: { uri: src },
|
|
159
210
|
style: imageStyle,
|
|
160
211
|
testID: finalTestID,
|
|
212
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : alt,
|
|
161
213
|
resizeMode: "cover",
|
|
162
214
|
...nativeRest
|
|
163
215
|
}
|
|
164
216
|
);
|
|
165
217
|
}
|
|
166
|
-
if (onPress) {
|
|
218
|
+
if (onPress || as === "button") {
|
|
167
219
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
168
220
|
import_react_native.Pressable,
|
|
169
221
|
{
|
|
170
|
-
onPress,
|
|
222
|
+
onPress: !isDisabled && onPress ? onPress : void 0,
|
|
223
|
+
disabled: isDisabled,
|
|
171
224
|
onLayout,
|
|
172
225
|
onMoveShouldSetResponder,
|
|
173
226
|
onResponderGrant,
|
|
@@ -176,6 +229,10 @@ var Box = ({
|
|
|
176
229
|
onResponderTerminate,
|
|
177
230
|
style: ({ pressed }) => getContainerStyle(pressed),
|
|
178
231
|
testID: finalTestID,
|
|
232
|
+
accessibilityRole,
|
|
233
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
|
|
234
|
+
accessibilityState,
|
|
235
|
+
accessibilityLiveRegion,
|
|
179
236
|
...nativeRest,
|
|
180
237
|
children
|
|
181
238
|
}
|
|
@@ -192,6 +249,10 @@ var Box = ({
|
|
|
192
249
|
onResponderMove,
|
|
193
250
|
onResponderRelease,
|
|
194
251
|
onResponderTerminate,
|
|
252
|
+
accessibilityRole,
|
|
253
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
|
|
254
|
+
accessibilityState,
|
|
255
|
+
accessibilityLiveRegion,
|
|
195
256
|
...nativeRest,
|
|
196
257
|
children
|
|
197
258
|
}
|
package/native/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/ShopCard.tsx"],"sourcesContent":["export { ShopCard } from \"./ShopCard\";\n\nexport type {\n ShopCardPlatform,\n ShopCardProps,\n ShopCardState,\n ShopCardStatus,\n ShopCardTagData,\n ShopCardTagTone,\n ShopCardType,\n} from \"./types\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type {\n ShopCardPlatform,\n ShopCardProps,\n ShopCardStatus,\n ShopCardTagData,\n} from \"./types\";\n\nconst sizeConfig: Record<\n ShopCardPlatform,\n {\n width: number;\n minWidth: number;\n paddingTop: number;\n paddingX: number;\n paddingBottom: number;\n imageSize: number;\n imageAreaHeight: number;\n titleFontSize: number;\n titleLineHeight: number;\n buttonHeight: number;\n }\n> = {\n mobile: {\n width: 170,\n minWidth: 140,\n paddingTop: 36,\n paddingX: 8,\n paddingBottom: 8,\n imageSize: 120,\n imageAreaHeight: 122,\n titleFontSize: 14,\n titleLineHeight: 18,\n buttonHeight: 32,\n },\n desktop: {\n width: 200,\n minWidth: 180,\n paddingTop: 40,\n paddingX: 16,\n paddingBottom: 16,\n imageSize: 120,\n imageAreaHeight: 136,\n titleFontSize: 16,\n titleLineHeight: 20,\n buttonHeight: 40,\n },\n};\n\nconst getDefaultActionLabel = (status: ShopCardStatus) => {\n if (status === \"free\") return \"Claim for free\";\n if (status === \"redeem\") return \"Redeem\";\n if (status === \"owned\") return \"Owned\";\n return \"$2.50\";\n};\n\nconst Tag: React.FC<{\n tag: ShopCardTagData;\n tone: \"primary\" | \"success\";\n theme: ReturnType<typeof useResolvedTheme>[\"theme\"];\n}> = ({ tag, tone, theme }) => {\n const isSuccess = tone === \"success\";\n\n return (\n <Box\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={6}\n paddingVertical={2}\n borderRadius={4}\n borderWidth={1}\n borderColor={\n isSuccess ? theme.colors.border.success : theme.colors.border.secondary\n }\n backgroundColor={\n isSuccess\n ? theme.colors.background.success.primary\n : theme.colors.overlay.mono\n }\n >\n <Text\n color={\n isSuccess\n ? theme.colors.content.on.success\n : theme.colors.content.primary\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {tag.label}\n </Text>\n </Box>\n );\n};\n\nexport const ShopCard: React.FC<ShopCardProps> = ({\n title,\n imageSrc,\n imageAlt = \"\",\n imageFit = \"contain\",\n imageVisible = true,\n imageFallback,\n glowSrc,\n glowVisible = true,\n leftTags = [],\n rightTags = [],\n status = \"default\",\n state = \"default\",\n platform = \"mobile\",\n actionLabel,\n actionSubLabel,\n onActionPress,\n onPress,\n disabled,\n \"aria-label\": ariaLabel,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const config = sizeConfig[platform];\n const isOwned = status === \"owned\";\n const isDisabled = disabled || state === \"disabled\" || isOwned;\n const isInteractive = Boolean(onPress) && !isDisabled;\n const isActionInteractive = Boolean(onActionPress) && !isDisabled;\n const resolvedActionLabel = actionLabel ?? getDefaultActionLabel(status);\n const cardBackground =\n state === \"press\"\n ? theme.colors.overlay.brand || theme.colors.overlay.mono\n : theme.colors.overlay.mono;\n const actionBackground = isDisabled\n ? theme.colors.overlay.mono\n : theme.colors.background.brand.primary;\n\n return (\n <Box\n width={config.width}\n minWidth={config.minWidth}\n flexDirection=\"column\"\n alignItems=\"center\"\n paddingTop={config.paddingTop}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.border.secondary}\n backgroundColor={cardBackground}\n position=\"relative\"\n overflow=\"hidden\"\n cursor={isInteractive ? \"pointer\" : undefined}\n role={isInteractive ? \"button\" : \"group\"}\n aria-label={ariaLabel}\n aria-disabled={isDisabled || undefined}\n tabIndex={isInteractive ? 0 : undefined}\n opacity={isDisabled ? 0.72 : 1}\n onPress={isInteractive ? onPress : undefined}\n hoverStyle={\n isInteractive && state === \"default\"\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n pressStyle={{ backgroundColor: theme.colors.overlay.brand }}\n testID={testID || \"shop-card\"}\n >\n {leftTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n left={platform === \"desktop\" ? 15 : 7}\n zIndex={4}\n gap={4}\n alignItems=\"flex-start\"\n >\n {leftTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"success\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n {rightTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n right={platform === \"desktop\" ? 15 : 7}\n zIndex={5}\n gap={4}\n alignItems=\"flex-end\"\n >\n {rightTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"primary\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n <Box\n width=\"100%\"\n height={config.imageAreaHeight}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={24}\n >\n {imageVisible &&\n imageSrc &&\n glowVisible &&\n (glowSrc ? (\n <Box\n as=\"img\"\n src={glowSrc}\n alt=\"\"\n position=\"absolute\"\n width={160}\n height={160}\n style={{ objectFit: \"contain\" }}\n />\n ) : (\n <Box\n position=\"absolute\"\n width={160}\n height={160}\n borderRadius={999}\n backgroundColor={theme.colors.background.brand.primary}\n opacity={0.12}\n />\n ))}\n {imageVisible && imageSrc ? (\n <Box\n as=\"img\"\n src={imageSrc}\n alt={imageAlt}\n width={config.imageSize}\n height={config.imageSize}\n style={{\n objectFit: imageFit,\n pointerEvents: \"none\",\n }}\n />\n ) : (\n <Box\n width={48}\n height={48}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={0.72}\n >\n {imageFallback}\n </Box>\n )}\n </Box>\n <Box\n width=\"100%\"\n minHeight={20}\n paddingHorizontal={config.paddingX}\n paddingVertical={platform === \"desktop\" ? 12 : 8}\n >\n <Text\n color={theme.colors.content.primary}\n fontFamily={theme.fonts.body}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {title}\n </Text>\n </Box>\n <Box\n width=\"100%\"\n paddingHorizontal={config.paddingX}\n paddingBottom={config.paddingBottom}\n >\n <Box\n width=\"100%\"\n height={config.buttonHeight}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={4}\n borderRadius={4}\n backgroundColor={actionBackground}\n opacity={isDisabled ? 0.48 : 1}\n cursor={isActionInteractive ? \"pointer\" : undefined}\n role={isActionInteractive ? \"button\" : undefined}\n aria-label={\n isActionInteractive\n ? `Buy ${typeof title === \"string\" ? title : \"item\"}`\n : undefined\n }\n aria-disabled={isDisabled || undefined}\n onPress={isActionInteractive ? onActionPress : undefined}\n pressStyle={{\n backgroundColor: theme.colors.background.brand.secondary,\n }}\n testID=\"shop-card-action\"\n >\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {resolvedActionLabel}\n </Text>\n {actionSubLabel && (\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{ opacity: 0.72 }}\n >\n {actionSubLabel}\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/ShopCard.tsx"],"sourcesContent":["export { ShopCard } from \"./ShopCard\";\n\nexport type {\n ShopCardPlatform,\n ShopCardProps,\n ShopCardState,\n ShopCardStatus,\n ShopCardTagData,\n ShopCardTagTone,\n ShopCardType,\n} from \"./types\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type {\n ShopCardPlatform,\n ShopCardProps,\n ShopCardStatus,\n ShopCardTagData,\n} from \"./types\";\n\nconst sizeConfig: Record<\n ShopCardPlatform,\n {\n width: number;\n minWidth: number;\n paddingTop: number;\n paddingX: number;\n paddingBottom: number;\n imageSize: number;\n imageAreaHeight: number;\n titleFontSize: number;\n titleLineHeight: number;\n buttonHeight: number;\n }\n> = {\n mobile: {\n width: 170,\n minWidth: 140,\n paddingTop: 36,\n paddingX: 8,\n paddingBottom: 8,\n imageSize: 120,\n imageAreaHeight: 122,\n titleFontSize: 14,\n titleLineHeight: 18,\n buttonHeight: 32,\n },\n desktop: {\n width: 200,\n minWidth: 180,\n paddingTop: 40,\n paddingX: 16,\n paddingBottom: 16,\n imageSize: 120,\n imageAreaHeight: 136,\n titleFontSize: 16,\n titleLineHeight: 20,\n buttonHeight: 40,\n },\n};\n\nconst getDefaultActionLabel = (status: ShopCardStatus) => {\n if (status === \"free\") return \"Claim for free\";\n if (status === \"redeem\") return \"Redeem\";\n if (status === \"owned\") return \"Owned\";\n return \"$2.50\";\n};\n\nconst Tag: React.FC<{\n tag: ShopCardTagData;\n tone: \"primary\" | \"success\";\n theme: ReturnType<typeof useResolvedTheme>[\"theme\"];\n}> = ({ tag, tone, theme }) => {\n const isSuccess = tone === \"success\";\n\n return (\n <Box\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={6}\n paddingVertical={2}\n borderRadius={4}\n borderWidth={1}\n borderColor={\n isSuccess ? theme.colors.border.success : theme.colors.border.secondary\n }\n backgroundColor={\n isSuccess\n ? theme.colors.background.success.primary\n : theme.colors.overlay.mono\n }\n >\n <Text\n color={\n isSuccess\n ? theme.colors.content.on.success\n : theme.colors.content.primary\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {tag.label}\n </Text>\n </Box>\n );\n};\n\nexport const ShopCard: React.FC<ShopCardProps> = ({\n title,\n imageSrc,\n imageAlt = \"\",\n imageFit = \"contain\",\n imageVisible = true,\n imageFallback,\n glowSrc,\n glowVisible = true,\n leftTags = [],\n rightTags = [],\n status = \"default\",\n state = \"default\",\n platform = \"mobile\",\n actionLabel,\n actionSubLabel,\n onActionPress,\n onPress,\n disabled,\n \"aria-label\": ariaLabel,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const config = sizeConfig[platform];\n const isOwned = status === \"owned\";\n const isDisabled = disabled || state === \"disabled\" || isOwned;\n const isInteractive = Boolean(onPress) && !isDisabled;\n const isActionInteractive = Boolean(onActionPress) && !isDisabled;\n const resolvedActionLabel = actionLabel ?? getDefaultActionLabel(status);\n const cardBackground =\n state === \"press\"\n ? theme.colors.overlay.brand || theme.colors.overlay.mono\n : theme.colors.overlay.mono;\n const actionBackground = isDisabled\n ? theme.colors.overlay.mono\n : theme.colors.background.brand.primary;\n\n return (\n <Box\n width={config.width}\n minWidth={config.minWidth}\n flexDirection=\"column\"\n alignItems=\"center\"\n paddingTop={config.paddingTop}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.border.secondary}\n backgroundColor={cardBackground}\n position=\"relative\"\n overflow=\"hidden\"\n cursor={isInteractive ? \"pointer\" : undefined}\n role={isInteractive ? \"button\" : \"group\"}\n aria-label={ariaLabel}\n aria-disabled={isDisabled || undefined}\n tabIndex={isInteractive ? 0 : undefined}\n opacity={isDisabled ? 0.72 : 1}\n onPress={isInteractive ? onPress : undefined}\n hoverStyle={\n isInteractive && state === \"default\"\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n pressStyle={{ backgroundColor: theme.colors.overlay.brand }}\n testID={testID || \"shop-card\"}\n >\n {leftTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n left={platform === \"desktop\" ? 15 : 7}\n zIndex={4}\n gap={4}\n alignItems=\"flex-start\"\n >\n {leftTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"success\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n {rightTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n right={platform === \"desktop\" ? 15 : 7}\n zIndex={5}\n gap={4}\n alignItems=\"flex-end\"\n >\n {rightTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"primary\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n <Box\n width=\"100%\"\n height={config.imageAreaHeight}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={24}\n >\n {imageVisible &&\n imageSrc &&\n glowVisible &&\n (glowSrc ? (\n <Box\n as=\"img\"\n src={glowSrc}\n alt=\"\"\n position=\"absolute\"\n width={160}\n height={160}\n style={{ objectFit: \"contain\" }}\n />\n ) : (\n <Box\n position=\"absolute\"\n width={160}\n height={160}\n borderRadius={999}\n backgroundColor={theme.colors.background.brand.primary}\n opacity={0.12}\n />\n ))}\n {imageVisible && imageSrc ? (\n <Box\n as=\"img\"\n src={imageSrc}\n alt={imageAlt}\n width={config.imageSize}\n height={config.imageSize}\n style={{\n objectFit: imageFit,\n pointerEvents: \"none\",\n }}\n />\n ) : (\n <Box\n width={48}\n height={48}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={0.72}\n >\n {imageFallback}\n </Box>\n )}\n </Box>\n <Box\n width=\"100%\"\n minHeight={20}\n paddingHorizontal={config.paddingX}\n paddingVertical={platform === \"desktop\" ? 12 : 8}\n >\n <Text\n color={theme.colors.content.primary}\n fontFamily={theme.fonts.body}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {title}\n </Text>\n </Box>\n <Box\n width=\"100%\"\n paddingHorizontal={config.paddingX}\n paddingBottom={config.paddingBottom}\n >\n <Box\n width=\"100%\"\n height={config.buttonHeight}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={4}\n borderRadius={4}\n backgroundColor={actionBackground}\n opacity={isDisabled ? 0.48 : 1}\n cursor={isActionInteractive ? \"pointer\" : undefined}\n role={isActionInteractive ? \"button\" : undefined}\n aria-label={\n isActionInteractive\n ? `Buy ${typeof title === \"string\" ? title : \"item\"}`\n : undefined\n }\n aria-disabled={isDisabled || undefined}\n onPress={isActionInteractive ? onActionPress : undefined}\n pressStyle={{\n backgroundColor: theme.colors.background.brand.secondary,\n }}\n testID=\"shop-card-action\"\n >\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {resolvedActionLabel}\n </Text>\n {actionSubLabel && (\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{ opacity: 0.72 }}\n >\n {actionSubLabel}\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_jsx_runtime"]}
|
package/native/index.mjs
CHANGED
|
@@ -5,6 +5,38 @@ import {
|
|
|
5
5
|
Image
|
|
6
6
|
} from "react-native";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
var roleToAccessibilityRole = {
|
|
9
|
+
button: "button",
|
|
10
|
+
link: "link",
|
|
11
|
+
img: "image",
|
|
12
|
+
image: "image",
|
|
13
|
+
summary: "summary",
|
|
14
|
+
switch: "switch",
|
|
15
|
+
checkbox: "checkbox",
|
|
16
|
+
radio: "radio",
|
|
17
|
+
heading: "header",
|
|
18
|
+
text: "text",
|
|
19
|
+
search: "search",
|
|
20
|
+
alert: "alert",
|
|
21
|
+
none: "none",
|
|
22
|
+
presentation: "none",
|
|
23
|
+
progressbar: "progressbar",
|
|
24
|
+
scrollbar: "scrollbar",
|
|
25
|
+
adjustable: "adjustable",
|
|
26
|
+
tab: "tab",
|
|
27
|
+
menu: "menu",
|
|
28
|
+
menuitem: "menuitem",
|
|
29
|
+
list: "list",
|
|
30
|
+
timer: "timer"
|
|
31
|
+
};
|
|
32
|
+
var toGapValue = (gap) => {
|
|
33
|
+
if (gap === void 0) return void 0;
|
|
34
|
+
if (typeof gap === "number") return gap;
|
|
35
|
+
const pxMatch = /^(\d+(?:\.\d+)?)px$/.exec(gap);
|
|
36
|
+
if (pxMatch) return Number(pxMatch[1]);
|
|
37
|
+
const asNumber = Number(gap);
|
|
38
|
+
return Number.isFinite(asNumber) ? asNumber : void 0;
|
|
39
|
+
};
|
|
8
40
|
var Box = ({
|
|
9
41
|
children,
|
|
10
42
|
onPress,
|
|
@@ -37,8 +69,10 @@ var Box = ({
|
|
|
37
69
|
marginLeft,
|
|
38
70
|
marginRight,
|
|
39
71
|
flexDirection,
|
|
72
|
+
flexWrap,
|
|
40
73
|
alignItems,
|
|
41
74
|
justifyContent,
|
|
75
|
+
alignSelf,
|
|
42
76
|
position,
|
|
43
77
|
top,
|
|
44
78
|
bottom,
|
|
@@ -50,11 +84,14 @@ var Box = ({
|
|
|
50
84
|
maxWidth,
|
|
51
85
|
maxHeight,
|
|
52
86
|
flex,
|
|
87
|
+
flexShrink,
|
|
88
|
+
gap,
|
|
53
89
|
overflow,
|
|
54
90
|
zIndex,
|
|
55
91
|
hoverStyle,
|
|
56
92
|
pressStyle,
|
|
57
93
|
style,
|
|
94
|
+
disabled,
|
|
58
95
|
"data-testid": dataTestId,
|
|
59
96
|
testID,
|
|
60
97
|
as,
|
|
@@ -93,14 +130,18 @@ var Box = ({
|
|
|
93
130
|
marginLeft,
|
|
94
131
|
marginRight,
|
|
95
132
|
flexDirection,
|
|
133
|
+
flexWrap,
|
|
96
134
|
alignItems,
|
|
97
135
|
justifyContent,
|
|
136
|
+
alignSelf,
|
|
98
137
|
position,
|
|
99
138
|
top,
|
|
100
139
|
bottom,
|
|
101
140
|
left,
|
|
102
141
|
right,
|
|
103
142
|
flex,
|
|
143
|
+
flexShrink,
|
|
144
|
+
gap: toGapValue(gap),
|
|
104
145
|
...style
|
|
105
146
|
});
|
|
106
147
|
const finalTestID = dataTestId || testID;
|
|
@@ -109,15 +150,25 @@ var Box = ({
|
|
|
109
150
|
tabIndex,
|
|
110
151
|
onKeyDown,
|
|
111
152
|
onKeyUp,
|
|
112
|
-
"aria-label":
|
|
153
|
+
"aria-label": ariaLabel,
|
|
113
154
|
"aria-labelledby": _ariaLabelledBy,
|
|
114
155
|
"aria-current": _ariaCurrent,
|
|
115
|
-
"aria-disabled":
|
|
116
|
-
"aria-live":
|
|
156
|
+
"aria-disabled": ariaDisabled,
|
|
157
|
+
"aria-live": ariaLive,
|
|
158
|
+
"aria-busy": ariaBusy,
|
|
117
159
|
className,
|
|
118
160
|
"data-testid": _dataTestId,
|
|
161
|
+
cursor: _cursor,
|
|
162
|
+
type: _type,
|
|
119
163
|
...nativeRest
|
|
120
164
|
} = rest;
|
|
165
|
+
const accessibilityRole = typeof role === "string" && roleToAccessibilityRole[role] || (as === "button" ? "button" : void 0);
|
|
166
|
+
const isDisabled = Boolean(disabled || ariaDisabled);
|
|
167
|
+
const accessibilityState = {
|
|
168
|
+
disabled: isDisabled || void 0,
|
|
169
|
+
busy: Boolean(ariaBusy) || void 0
|
|
170
|
+
};
|
|
171
|
+
const accessibilityLiveRegion = ariaLive === "polite" || ariaLive === "assertive" ? ariaLive : void 0;
|
|
121
172
|
if (as === "img" && src) {
|
|
122
173
|
const imageStyle = {
|
|
123
174
|
width,
|
|
@@ -136,16 +187,18 @@ var Box = ({
|
|
|
136
187
|
source: { uri: src },
|
|
137
188
|
style: imageStyle,
|
|
138
189
|
testID: finalTestID,
|
|
190
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : alt,
|
|
139
191
|
resizeMode: "cover",
|
|
140
192
|
...nativeRest
|
|
141
193
|
}
|
|
142
194
|
);
|
|
143
195
|
}
|
|
144
|
-
if (onPress) {
|
|
196
|
+
if (onPress || as === "button") {
|
|
145
197
|
return /* @__PURE__ */ jsx(
|
|
146
198
|
Pressable,
|
|
147
199
|
{
|
|
148
|
-
onPress,
|
|
200
|
+
onPress: !isDisabled && onPress ? onPress : void 0,
|
|
201
|
+
disabled: isDisabled,
|
|
149
202
|
onLayout,
|
|
150
203
|
onMoveShouldSetResponder,
|
|
151
204
|
onResponderGrant,
|
|
@@ -154,6 +207,10 @@ var Box = ({
|
|
|
154
207
|
onResponderTerminate,
|
|
155
208
|
style: ({ pressed }) => getContainerStyle(pressed),
|
|
156
209
|
testID: finalTestID,
|
|
210
|
+
accessibilityRole,
|
|
211
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
|
|
212
|
+
accessibilityState,
|
|
213
|
+
accessibilityLiveRegion,
|
|
157
214
|
...nativeRest,
|
|
158
215
|
children
|
|
159
216
|
}
|
|
@@ -170,6 +227,10 @@ var Box = ({
|
|
|
170
227
|
onResponderMove,
|
|
171
228
|
onResponderRelease,
|
|
172
229
|
onResponderTerminate,
|
|
230
|
+
accessibilityRole,
|
|
231
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
|
|
232
|
+
accessibilityState,
|
|
233
|
+
accessibilityLiveRegion,
|
|
173
234
|
...nativeRest,
|
|
174
235
|
children
|
|
175
236
|
}
|
package/native/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/ShopCard.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type {\n ShopCardPlatform,\n ShopCardProps,\n ShopCardStatus,\n ShopCardTagData,\n} from \"./types\";\n\nconst sizeConfig: Record<\n ShopCardPlatform,\n {\n width: number;\n minWidth: number;\n paddingTop: number;\n paddingX: number;\n paddingBottom: number;\n imageSize: number;\n imageAreaHeight: number;\n titleFontSize: number;\n titleLineHeight: number;\n buttonHeight: number;\n }\n> = {\n mobile: {\n width: 170,\n minWidth: 140,\n paddingTop: 36,\n paddingX: 8,\n paddingBottom: 8,\n imageSize: 120,\n imageAreaHeight: 122,\n titleFontSize: 14,\n titleLineHeight: 18,\n buttonHeight: 32,\n },\n desktop: {\n width: 200,\n minWidth: 180,\n paddingTop: 40,\n paddingX: 16,\n paddingBottom: 16,\n imageSize: 120,\n imageAreaHeight: 136,\n titleFontSize: 16,\n titleLineHeight: 20,\n buttonHeight: 40,\n },\n};\n\nconst getDefaultActionLabel = (status: ShopCardStatus) => {\n if (status === \"free\") return \"Claim for free\";\n if (status === \"redeem\") return \"Redeem\";\n if (status === \"owned\") return \"Owned\";\n return \"$2.50\";\n};\n\nconst Tag: React.FC<{\n tag: ShopCardTagData;\n tone: \"primary\" | \"success\";\n theme: ReturnType<typeof useResolvedTheme>[\"theme\"];\n}> = ({ tag, tone, theme }) => {\n const isSuccess = tone === \"success\";\n\n return (\n <Box\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={6}\n paddingVertical={2}\n borderRadius={4}\n borderWidth={1}\n borderColor={\n isSuccess ? theme.colors.border.success : theme.colors.border.secondary\n }\n backgroundColor={\n isSuccess\n ? theme.colors.background.success.primary\n : theme.colors.overlay.mono\n }\n >\n <Text\n color={\n isSuccess\n ? theme.colors.content.on.success\n : theme.colors.content.primary\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {tag.label}\n </Text>\n </Box>\n );\n};\n\nexport const ShopCard: React.FC<ShopCardProps> = ({\n title,\n imageSrc,\n imageAlt = \"\",\n imageFit = \"contain\",\n imageVisible = true,\n imageFallback,\n glowSrc,\n glowVisible = true,\n leftTags = [],\n rightTags = [],\n status = \"default\",\n state = \"default\",\n platform = \"mobile\",\n actionLabel,\n actionSubLabel,\n onActionPress,\n onPress,\n disabled,\n \"aria-label\": ariaLabel,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const config = sizeConfig[platform];\n const isOwned = status === \"owned\";\n const isDisabled = disabled || state === \"disabled\" || isOwned;\n const isInteractive = Boolean(onPress) && !isDisabled;\n const isActionInteractive = Boolean(onActionPress) && !isDisabled;\n const resolvedActionLabel = actionLabel ?? getDefaultActionLabel(status);\n const cardBackground =\n state === \"press\"\n ? theme.colors.overlay.brand || theme.colors.overlay.mono\n : theme.colors.overlay.mono;\n const actionBackground = isDisabled\n ? theme.colors.overlay.mono\n : theme.colors.background.brand.primary;\n\n return (\n <Box\n width={config.width}\n minWidth={config.minWidth}\n flexDirection=\"column\"\n alignItems=\"center\"\n paddingTop={config.paddingTop}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.border.secondary}\n backgroundColor={cardBackground}\n position=\"relative\"\n overflow=\"hidden\"\n cursor={isInteractive ? \"pointer\" : undefined}\n role={isInteractive ? \"button\" : \"group\"}\n aria-label={ariaLabel}\n aria-disabled={isDisabled || undefined}\n tabIndex={isInteractive ? 0 : undefined}\n opacity={isDisabled ? 0.72 : 1}\n onPress={isInteractive ? onPress : undefined}\n hoverStyle={\n isInteractive && state === \"default\"\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n pressStyle={{ backgroundColor: theme.colors.overlay.brand }}\n testID={testID || \"shop-card\"}\n >\n {leftTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n left={platform === \"desktop\" ? 15 : 7}\n zIndex={4}\n gap={4}\n alignItems=\"flex-start\"\n >\n {leftTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"success\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n {rightTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n right={platform === \"desktop\" ? 15 : 7}\n zIndex={5}\n gap={4}\n alignItems=\"flex-end\"\n >\n {rightTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"primary\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n <Box\n width=\"100%\"\n height={config.imageAreaHeight}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={24}\n >\n {imageVisible &&\n imageSrc &&\n glowVisible &&\n (glowSrc ? (\n <Box\n as=\"img\"\n src={glowSrc}\n alt=\"\"\n position=\"absolute\"\n width={160}\n height={160}\n style={{ objectFit: \"contain\" }}\n />\n ) : (\n <Box\n position=\"absolute\"\n width={160}\n height={160}\n borderRadius={999}\n backgroundColor={theme.colors.background.brand.primary}\n opacity={0.12}\n />\n ))}\n {imageVisible && imageSrc ? (\n <Box\n as=\"img\"\n src={imageSrc}\n alt={imageAlt}\n width={config.imageSize}\n height={config.imageSize}\n style={{\n objectFit: imageFit,\n pointerEvents: \"none\",\n }}\n />\n ) : (\n <Box\n width={48}\n height={48}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={0.72}\n >\n {imageFallback}\n </Box>\n )}\n </Box>\n <Box\n width=\"100%\"\n minHeight={20}\n paddingHorizontal={config.paddingX}\n paddingVertical={platform === \"desktop\" ? 12 : 8}\n >\n <Text\n color={theme.colors.content.primary}\n fontFamily={theme.fonts.body}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {title}\n </Text>\n </Box>\n <Box\n width=\"100%\"\n paddingHorizontal={config.paddingX}\n paddingBottom={config.paddingBottom}\n >\n <Box\n width=\"100%\"\n height={config.buttonHeight}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={4}\n borderRadius={4}\n backgroundColor={actionBackground}\n opacity={isDisabled ? 0.48 : 1}\n cursor={isActionInteractive ? \"pointer\" : undefined}\n role={isActionInteractive ? \"button\" : undefined}\n aria-label={\n isActionInteractive\n ? `Buy ${typeof title === \"string\" ? title : \"item\"}`\n : undefined\n }\n aria-disabled={isDisabled || undefined}\n onPress={isActionInteractive ? onActionPress : undefined}\n pressStyle={{\n backgroundColor: theme.colors.background.brand.secondary,\n }}\n testID=\"shop-card-action\"\n >\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {resolvedActionLabel}\n </Text>\n {actionSubLabel && (\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{ opacity: 0.72 }}\n >\n {actionSubLabel}\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":["jsx","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/ShopCard.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type {\n ShopCardPlatform,\n ShopCardProps,\n ShopCardStatus,\n ShopCardTagData,\n} from \"./types\";\n\nconst sizeConfig: Record<\n ShopCardPlatform,\n {\n width: number;\n minWidth: number;\n paddingTop: number;\n paddingX: number;\n paddingBottom: number;\n imageSize: number;\n imageAreaHeight: number;\n titleFontSize: number;\n titleLineHeight: number;\n buttonHeight: number;\n }\n> = {\n mobile: {\n width: 170,\n minWidth: 140,\n paddingTop: 36,\n paddingX: 8,\n paddingBottom: 8,\n imageSize: 120,\n imageAreaHeight: 122,\n titleFontSize: 14,\n titleLineHeight: 18,\n buttonHeight: 32,\n },\n desktop: {\n width: 200,\n minWidth: 180,\n paddingTop: 40,\n paddingX: 16,\n paddingBottom: 16,\n imageSize: 120,\n imageAreaHeight: 136,\n titleFontSize: 16,\n titleLineHeight: 20,\n buttonHeight: 40,\n },\n};\n\nconst getDefaultActionLabel = (status: ShopCardStatus) => {\n if (status === \"free\") return \"Claim for free\";\n if (status === \"redeem\") return \"Redeem\";\n if (status === \"owned\") return \"Owned\";\n return \"$2.50\";\n};\n\nconst Tag: React.FC<{\n tag: ShopCardTagData;\n tone: \"primary\" | \"success\";\n theme: ReturnType<typeof useResolvedTheme>[\"theme\"];\n}> = ({ tag, tone, theme }) => {\n const isSuccess = tone === \"success\";\n\n return (\n <Box\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={6}\n paddingVertical={2}\n borderRadius={4}\n borderWidth={1}\n borderColor={\n isSuccess ? theme.colors.border.success : theme.colors.border.secondary\n }\n backgroundColor={\n isSuccess\n ? theme.colors.background.success.primary\n : theme.colors.overlay.mono\n }\n >\n <Text\n color={\n isSuccess\n ? theme.colors.content.on.success\n : theme.colors.content.primary\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {tag.label}\n </Text>\n </Box>\n );\n};\n\nexport const ShopCard: React.FC<ShopCardProps> = ({\n title,\n imageSrc,\n imageAlt = \"\",\n imageFit = \"contain\",\n imageVisible = true,\n imageFallback,\n glowSrc,\n glowVisible = true,\n leftTags = [],\n rightTags = [],\n status = \"default\",\n state = \"default\",\n platform = \"mobile\",\n actionLabel,\n actionSubLabel,\n onActionPress,\n onPress,\n disabled,\n \"aria-label\": ariaLabel,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const config = sizeConfig[platform];\n const isOwned = status === \"owned\";\n const isDisabled = disabled || state === \"disabled\" || isOwned;\n const isInteractive = Boolean(onPress) && !isDisabled;\n const isActionInteractive = Boolean(onActionPress) && !isDisabled;\n const resolvedActionLabel = actionLabel ?? getDefaultActionLabel(status);\n const cardBackground =\n state === \"press\"\n ? theme.colors.overlay.brand || theme.colors.overlay.mono\n : theme.colors.overlay.mono;\n const actionBackground = isDisabled\n ? theme.colors.overlay.mono\n : theme.colors.background.brand.primary;\n\n return (\n <Box\n width={config.width}\n minWidth={config.minWidth}\n flexDirection=\"column\"\n alignItems=\"center\"\n paddingTop={config.paddingTop}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.border.secondary}\n backgroundColor={cardBackground}\n position=\"relative\"\n overflow=\"hidden\"\n cursor={isInteractive ? \"pointer\" : undefined}\n role={isInteractive ? \"button\" : \"group\"}\n aria-label={ariaLabel}\n aria-disabled={isDisabled || undefined}\n tabIndex={isInteractive ? 0 : undefined}\n opacity={isDisabled ? 0.72 : 1}\n onPress={isInteractive ? onPress : undefined}\n hoverStyle={\n isInteractive && state === \"default\"\n ? { backgroundColor: theme.colors.background.secondary }\n : undefined\n }\n pressStyle={{ backgroundColor: theme.colors.overlay.brand }}\n testID={testID || \"shop-card\"}\n >\n {leftTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n left={platform === \"desktop\" ? 15 : 7}\n zIndex={4}\n gap={4}\n alignItems=\"flex-start\"\n >\n {leftTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"success\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n {rightTags.length > 0 && (\n <Box\n position=\"absolute\"\n top={7}\n right={platform === \"desktop\" ? 15 : 7}\n zIndex={5}\n gap={4}\n alignItems=\"flex-end\"\n >\n {rightTags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || \"primary\"}\n theme={theme}\n />\n ))}\n </Box>\n )}\n <Box\n width=\"100%\"\n height={config.imageAreaHeight}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={24}\n >\n {imageVisible &&\n imageSrc &&\n glowVisible &&\n (glowSrc ? (\n <Box\n as=\"img\"\n src={glowSrc}\n alt=\"\"\n position=\"absolute\"\n width={160}\n height={160}\n style={{ objectFit: \"contain\" }}\n />\n ) : (\n <Box\n position=\"absolute\"\n width={160}\n height={160}\n borderRadius={999}\n backgroundColor={theme.colors.background.brand.primary}\n opacity={0.12}\n />\n ))}\n {imageVisible && imageSrc ? (\n <Box\n as=\"img\"\n src={imageSrc}\n alt={imageAlt}\n width={config.imageSize}\n height={config.imageSize}\n style={{\n objectFit: imageFit,\n pointerEvents: \"none\",\n }}\n />\n ) : (\n <Box\n width={48}\n height={48}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={0.72}\n >\n {imageFallback}\n </Box>\n )}\n </Box>\n <Box\n width=\"100%\"\n minHeight={20}\n paddingHorizontal={config.paddingX}\n paddingVertical={platform === \"desktop\" ? 12 : 8}\n >\n <Text\n color={theme.colors.content.primary}\n fontFamily={theme.fonts.body}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {title}\n </Text>\n </Box>\n <Box\n width=\"100%\"\n paddingHorizontal={config.paddingX}\n paddingBottom={config.paddingBottom}\n >\n <Box\n width=\"100%\"\n height={config.buttonHeight}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={4}\n borderRadius={4}\n backgroundColor={actionBackground}\n opacity={isDisabled ? 0.48 : 1}\n cursor={isActionInteractive ? \"pointer\" : undefined}\n role={isActionInteractive ? \"button\" : undefined}\n aria-label={\n isActionInteractive\n ? `Buy ${typeof title === \"string\" ? title : \"item\"}`\n : undefined\n }\n aria-disabled={isDisabled || undefined}\n onPress={isActionInteractive ? onActionPress : undefined}\n pressStyle={{\n backgroundColor: theme.colors.background.brand.secondary,\n }}\n testID=\"shop-card-action\"\n >\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {resolvedActionLabel}\n </Text>\n {actionSubLabel && (\n <Text\n color={\n isDisabled\n ? theme.colors.content.secondary\n : theme.colors.content.on.brand\n }\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n style={{ opacity: 0.72 }}\n >\n {actionSubLabel}\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":["jsx","jsx"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsolla/xui-b2c-shop-card",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.201.0",
|
|
4
4
|
"main": "./web/index.js",
|
|
5
5
|
"module": "./web/index.mjs",
|
|
6
6
|
"types": "./web/index.d.ts",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"test:coverage": "vitest run --coverage"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@xsolla/xui-core": "0.
|
|
17
|
-
"@xsolla/xui-icons": "0.
|
|
18
|
-
"@xsolla/xui-primitives-core": "0.
|
|
16
|
+
"@xsolla/xui-core": "0.201.0",
|
|
17
|
+
"@xsolla/xui-icons": "0.201.0",
|
|
18
|
+
"@xsolla/xui-primitives-core": "0.201.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=16.8.0"
|