@xsolla/xui-game-card 0.124.0 → 0.126.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 CHANGED
@@ -264,9 +264,26 @@ var Text = ({
264
264
  };
265
265
 
266
266
  // ../primitives-native/src/LinearGradient.tsx
267
+ var import_react = require("react");
267
268
  var import_react_native3 = require("react-native");
268
269
  var import_react_native_svg = __toESM(require("react-native-svg"));
269
270
  var import_jsx_runtime3 = require("react/jsx-runtime");
271
+ var gradientIdCounter = 0;
272
+ function parseColor(color) {
273
+ if (color === "transparent") {
274
+ return { stopColor: "#000000", stopOpacity: 0 };
275
+ }
276
+ const rgbaMatch = color.match(
277
+ /^rgba?\(\s*([\d.]+%?)\s*,\s*([\d.]+%?)\s*,\s*([\d.]+%?)\s*,\s*([\d.]+)\s*\)$/i
278
+ );
279
+ if (rgbaMatch) {
280
+ return {
281
+ stopColor: `rgb(${rgbaMatch[1]}, ${rgbaMatch[2]}, ${rgbaMatch[3]})`,
282
+ stopOpacity: parseFloat(rgbaMatch[4])
283
+ };
284
+ }
285
+ return { stopColor: color, stopOpacity: 1 };
286
+ }
270
287
  var LinearGradient = ({
271
288
  colors,
272
289
  start = { x: 0, y: 0 },
@@ -300,9 +317,19 @@ var LinearGradient = ({
300
317
  zIndex,
301
318
  ...style
302
319
  };
320
+ const gradientId = (0, import_react.useRef)(`xui-lg-${++gradientIdCounter}`).current;
303
321
  const stops = colors.map((color, index) => {
304
322
  const offset = locations ? locations[index] : index / (colors.length - 1);
305
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native_svg.Stop, { offset, stopColor: color }, index);
323
+ const { stopColor, stopOpacity } = parseColor(color);
324
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
325
+ import_react_native_svg.Stop,
326
+ {
327
+ offset,
328
+ stopColor,
329
+ stopOpacity
330
+ },
331
+ index
332
+ );
306
333
  });
307
334
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_react_native3.View, { style: containerStyle, testID: dataTestId || testID, children: [
308
335
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
@@ -315,7 +342,7 @@ var LinearGradient = ({
315
342
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native_svg.Defs, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
316
343
  import_react_native_svg.LinearGradient,
317
344
  {
318
- id: "grad",
345
+ id: gradientId,
319
346
  x1: `${start.x * 100}%`,
320
347
  y1: `${start.y * 100}%`,
321
348
  x2: `${end.x * 100}%`,
@@ -323,7 +350,16 @@ var LinearGradient = ({
323
350
  children: stops
324
351
  }
325
352
  ) }),
326
- /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native_svg.Rect, { x: "0", y: "0", width: "100%", height: "100%", fill: "url(#grad)" })
353
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
354
+ import_react_native_svg.Rect,
355
+ {
356
+ x: "0",
357
+ y: "0",
358
+ width: "100%",
359
+ height: "100%",
360
+ fill: `url(#${gradientId})`
361
+ }
362
+ )
327
363
  ]
328
364
  }
329
365
  ),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/LinearGradient.tsx","../../src/GameCard.tsx"],"sourcesContent":["export * from \"./GameCard\";\nexport * 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 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 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 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,\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={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\nimport { View, ViewStyle, DimensionValue } from \"react-native\";\nimport Svg, {\n Defs,\n LinearGradient as SvgLinearGradient,\n Stop,\n Rect,\n} from \"react-native-svg\";\nimport { LinearGradientProps } from \"@xsolla/xui-primitives-core\";\n\nexport const LinearGradient: React.FC<LinearGradientProps> = ({\n colors,\n start = { x: 0, y: 0 },\n end = { x: 0, y: 1 },\n locations,\n children,\n position,\n top,\n bottom,\n left,\n right,\n width,\n height,\n borderRadius,\n overflow,\n zIndex,\n style,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const containerStyle: ViewStyle = {\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 width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: typeof borderRadius === \"number\" ? borderRadius : undefined,\n overflow,\n zIndex,\n ...(style as ViewStyle),\n };\n\n const stops = colors.map((color, index) => {\n const offset = locations ? locations[index] : index / (colors.length - 1);\n return <Stop key={index} offset={offset} stopColor={color} />;\n });\n\n return (\n <View style={containerStyle} testID={dataTestId || testID}>\n <Svg\n style={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0 }}\n width=\"100%\"\n height=\"100%\"\n >\n <Defs>\n <SvgLinearGradient\n id=\"grad\"\n x1={`${start.x * 100}%`}\n y1={`${start.y * 100}%`}\n x2={`${end.x * 100}%`}\n y2={`${end.y * 100}%`}\n >\n {stops}\n </SvgLinearGradient>\n </Defs>\n <Rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"url(#grad)\" />\n </Svg>\n {children}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, LinearGradient } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, isWeb } from \"@xsolla/xui-core\";\nimport type { GameCardProps, GameCardSize } from \"./types\";\n\nconst getSizeConfig = (size: GameCardSize) => {\n switch (size) {\n case \"lg\":\n return {\n imageAspectRatio: 366 / 206,\n titleFontSize: 16,\n titleLineHeight: 20,\n subtitleFontSize: 12,\n subtitleLineHeight: 18,\n padding: 8,\n footerPadding: 12,\n footerGap: 12,\n tagGap: 4,\n buttonHeight: 32,\n buttonPaddingX: 20,\n buttonFontSize: 12,\n buttonLineHeight: 14,\n borderRadius: 8,\n fadeHeight: 64,\n };\n case \"md\":\n return {\n imageAspectRatio: 280 / 158,\n titleFontSize: 14,\n titleLineHeight: 18,\n subtitleFontSize: 11,\n subtitleLineHeight: 16,\n padding: 6,\n footerPadding: 8,\n footerGap: 8,\n tagGap: 3,\n buttonHeight: 28,\n buttonPaddingX: 16,\n buttonFontSize: 11,\n buttonLineHeight: 13,\n borderRadius: 8,\n fadeHeight: 48,\n };\n case \"sm\":\n return {\n imageAspectRatio: 200 / 113,\n titleFontSize: 12,\n titleLineHeight: 16,\n subtitleFontSize: 10,\n subtitleLineHeight: 14,\n padding: 4,\n footerPadding: 6,\n footerGap: 6,\n tagGap: 2,\n buttonHeight: 24,\n buttonPaddingX: 12,\n buttonFontSize: 10,\n buttonLineHeight: 12,\n borderRadius: 8,\n fadeHeight: 32,\n };\n }\n};\n\nexport const GameCard: React.FC<GameCardProps> = ({\n image,\n title,\n subtitle,\n size = \"lg\",\n badge,\n tagsTopLeft,\n tagsTopRight,\n trailing,\n buttonText,\n onButtonClick,\n buttonDisabled,\n onPress,\n imageAlt,\n className,\n}) => {\n const { theme } = useDesignSystem();\n const config = getSizeConfig(size);\n\n const wrapperProps = onPress ? { onPress } : {};\n\n return (\n <Box\n className={className}\n flexDirection=\"column\"\n width=\"100%\"\n {...wrapperProps}\n >\n <Box\n backgroundColor={theme.colors.background.primary}\n borderRadius={config.borderRadius}\n overflow=\"hidden\"\n flexDirection=\"column\"\n style={\n isWeb\n ? {\n boxShadow: theme.shadow.surface,\n borderRadius: `${config.borderRadius}px`,\n overflow: \"hidden\",\n }\n : {\n shadowColor: \"#070708\",\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 6,\n elevation: 4,\n borderRadius: config.borderRadius,\n overflow: \"hidden\",\n }\n }\n >\n {/* Image Container */}\n <Box\n position=\"relative\"\n width=\"100%\"\n overflow=\"hidden\"\n style={{\n aspectRatio: config.imageAspectRatio,\n borderTopLeftRadius: config.borderRadius,\n borderTopRightRadius: config.borderRadius,\n }}\n >\n <Box\n as=\"img\"\n src={image}\n alt={imageAlt || title}\n position=\"absolute\"\n top={0}\n left={0}\n width=\"100%\"\n height=\"100%\"\n style={isWeb ? { objectFit: \"cover\" } : undefined}\n />\n\n <LinearGradient\n colors={[\"transparent\", \"rgba(0, 0, 0, 0.48)\"]}\n start={{ x: 0, y: 0 }}\n end={{ x: 0, y: 1 }}\n position=\"absolute\"\n bottom={0}\n left={0}\n right={0}\n height={config.fadeHeight}\n />\n\n {(badge || tagsTopLeft) && (\n <Box\n position=\"absolute\"\n top={config.padding}\n left={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-start\"\n >\n {badge}\n {tagsTopLeft}\n </Box>\n )}\n\n {tagsTopRight && (\n <Box\n position=\"absolute\"\n top={config.padding}\n right={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-end\"\n >\n {tagsTopRight}\n </Box>\n )}\n </Box>\n\n {/* Card Footer */}\n <Box\n backgroundColor={theme.colors.overlay.mono}\n padding={config.footerPadding}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={config.footerGap}\n >\n <Box flex={1} flexDirection=\"column\" style={{ minWidth: 0 }}>\n <Text\n color={theme.colors.content.primary}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {title}\n </Text>\n {subtitle && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={config.subtitleFontSize}\n lineHeight={config.subtitleLineHeight}\n fontWeight=\"400\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {subtitle}\n </Text>\n )}\n </Box>\n\n {trailing}\n {!trailing && buttonText && (\n <Box\n onPress={buttonDisabled ? undefined : onButtonClick}\n backgroundColor={theme.colors.control.mono.secondary.bg}\n borderRadius={config.borderRadius}\n height={config.buttonHeight}\n paddingHorizontal={config.buttonPaddingX}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={buttonDisabled ? 0.4 : 1}\n style={\n isWeb\n ? {\n backdropFilter: \"blur(30px)\",\n WebkitBackdropFilter: \"blur(30px)\",\n border: `1px solid ${theme.colors.control.mono.secondary.border}`,\n cursor: buttonDisabled\n ? \"not-allowed\"\n : onButtonClick\n ? \"pointer\"\n : \"default\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.control.mono.text.secondary}\n fontSize={config.buttonFontSize}\n lineHeight={config.buttonLineHeight}\n fontWeight=\"500\"\n letterSpacing={0.4}\n >\n {buttonText}\n </Text>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","Svg","SvgLinearGradient","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/index.tsx","../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/LinearGradient.tsx","../../src/GameCard.tsx"],"sourcesContent":["export * from \"./GameCard\";\nexport * 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 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 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 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,\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={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { useRef } from \"react\";\nimport { View, ViewStyle, DimensionValue } from \"react-native\";\nimport Svg, {\n Defs,\n LinearGradient as SvgLinearGradient,\n Stop,\n Rect,\n} from \"react-native-svg\";\nimport { LinearGradientProps } from \"@xsolla/xui-primitives-core\";\n\nlet gradientIdCounter = 0;\n\nfunction parseColor(color: string): { stopColor: string; stopOpacity: number } {\n if (color === \"transparent\") {\n return { stopColor: \"#000000\", stopOpacity: 0 };\n }\n\n const rgbaMatch = color.match(\n /^rgba?\\(\\s*([\\d.]+%?)\\s*,\\s*([\\d.]+%?)\\s*,\\s*([\\d.]+%?)\\s*,\\s*([\\d.]+)\\s*\\)$/i\n );\n if (rgbaMatch) {\n return {\n stopColor: `rgb(${rgbaMatch[1]}, ${rgbaMatch[2]}, ${rgbaMatch[3]})`,\n stopOpacity: parseFloat(rgbaMatch[4]),\n };\n }\n\n return { stopColor: color, stopOpacity: 1 };\n}\n\nexport const LinearGradient: React.FC<LinearGradientProps> = ({\n colors,\n start = { x: 0, y: 0 },\n end = { x: 0, y: 1 },\n locations,\n children,\n position,\n top,\n bottom,\n left,\n right,\n width,\n height,\n borderRadius,\n overflow,\n zIndex,\n style,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const containerStyle: ViewStyle = {\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 width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: typeof borderRadius === \"number\" ? borderRadius : undefined,\n overflow,\n zIndex,\n ...(style as ViewStyle),\n };\n\n const gradientId = useRef(`xui-lg-${++gradientIdCounter}`).current;\n\n const stops = colors.map((color, index) => {\n const offset = locations ? locations[index] : index / (colors.length - 1);\n const { stopColor, stopOpacity } = parseColor(color);\n return (\n <Stop\n key={index}\n offset={offset}\n stopColor={stopColor}\n stopOpacity={stopOpacity}\n />\n );\n });\n\n return (\n <View style={containerStyle} testID={dataTestId || testID}>\n <Svg\n style={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0 }}\n width=\"100%\"\n height=\"100%\"\n >\n <Defs>\n <SvgLinearGradient\n id={gradientId}\n x1={`${start.x * 100}%`}\n y1={`${start.y * 100}%`}\n x2={`${end.x * 100}%`}\n y2={`${end.y * 100}%`}\n >\n {stops}\n </SvgLinearGradient>\n </Defs>\n <Rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${gradientId})`}\n />\n </Svg>\n {children}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, LinearGradient } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, isWeb } from \"@xsolla/xui-core\";\nimport type { GameCardProps, GameCardSize } from \"./types\";\n\nconst getSizeConfig = (size: GameCardSize) => {\n switch (size) {\n case \"lg\":\n return {\n imageAspectRatio: 366 / 206,\n titleFontSize: 16,\n titleLineHeight: 20,\n subtitleFontSize: 12,\n subtitleLineHeight: 18,\n padding: 8,\n footerPadding: 12,\n footerGap: 12,\n tagGap: 4,\n buttonHeight: 32,\n buttonPaddingX: 20,\n buttonFontSize: 12,\n buttonLineHeight: 14,\n borderRadius: 8,\n fadeHeight: 64,\n };\n case \"md\":\n return {\n imageAspectRatio: 280 / 158,\n titleFontSize: 14,\n titleLineHeight: 18,\n subtitleFontSize: 11,\n subtitleLineHeight: 16,\n padding: 6,\n footerPadding: 8,\n footerGap: 8,\n tagGap: 3,\n buttonHeight: 28,\n buttonPaddingX: 16,\n buttonFontSize: 11,\n buttonLineHeight: 13,\n borderRadius: 8,\n fadeHeight: 48,\n };\n case \"sm\":\n return {\n imageAspectRatio: 200 / 113,\n titleFontSize: 12,\n titleLineHeight: 16,\n subtitleFontSize: 10,\n subtitleLineHeight: 14,\n padding: 4,\n footerPadding: 6,\n footerGap: 6,\n tagGap: 2,\n buttonHeight: 24,\n buttonPaddingX: 12,\n buttonFontSize: 10,\n buttonLineHeight: 12,\n borderRadius: 8,\n fadeHeight: 32,\n };\n }\n};\n\nexport const GameCard: React.FC<GameCardProps> = ({\n image,\n title,\n subtitle,\n size = \"lg\",\n badge,\n tagsTopLeft,\n tagsTopRight,\n trailing,\n buttonText,\n onButtonClick,\n buttonDisabled,\n onPress,\n imageAlt,\n className,\n}) => {\n const { theme } = useDesignSystem();\n const config = getSizeConfig(size);\n\n const wrapperProps = onPress ? { onPress } : {};\n\n return (\n <Box\n className={className}\n flexDirection=\"column\"\n width=\"100%\"\n {...wrapperProps}\n >\n <Box\n backgroundColor={theme.colors.background.primary}\n borderRadius={config.borderRadius}\n overflow=\"hidden\"\n flexDirection=\"column\"\n style={\n isWeb\n ? {\n boxShadow: theme.shadow.surface,\n borderRadius: `${config.borderRadius}px`,\n overflow: \"hidden\",\n }\n : {\n shadowColor: \"#070708\",\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 6,\n elevation: 4,\n borderRadius: config.borderRadius,\n overflow: \"hidden\",\n }\n }\n >\n {/* Image Container */}\n <Box\n position=\"relative\"\n width=\"100%\"\n overflow=\"hidden\"\n style={{\n aspectRatio: config.imageAspectRatio,\n borderTopLeftRadius: config.borderRadius,\n borderTopRightRadius: config.borderRadius,\n }}\n >\n <Box\n as=\"img\"\n src={image}\n alt={imageAlt || title}\n position=\"absolute\"\n top={0}\n left={0}\n width=\"100%\"\n height=\"100%\"\n style={isWeb ? { objectFit: \"cover\" } : undefined}\n />\n\n <LinearGradient\n colors={[\"transparent\", \"rgba(0, 0, 0, 0.48)\"]}\n start={{ x: 0, y: 0 }}\n end={{ x: 0, y: 1 }}\n position=\"absolute\"\n bottom={0}\n left={0}\n right={0}\n height={config.fadeHeight}\n />\n\n {(badge || tagsTopLeft) && (\n <Box\n position=\"absolute\"\n top={config.padding}\n left={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-start\"\n >\n {badge}\n {tagsTopLeft}\n </Box>\n )}\n\n {tagsTopRight && (\n <Box\n position=\"absolute\"\n top={config.padding}\n right={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-end\"\n >\n {tagsTopRight}\n </Box>\n )}\n </Box>\n\n {/* Card Footer */}\n <Box\n backgroundColor={theme.colors.overlay.mono}\n padding={config.footerPadding}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={config.footerGap}\n >\n <Box flex={1} flexDirection=\"column\" style={{ minWidth: 0 }}>\n <Text\n color={theme.colors.content.primary}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {title}\n </Text>\n {subtitle && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={config.subtitleFontSize}\n lineHeight={config.subtitleLineHeight}\n fontWeight=\"400\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {subtitle}\n </Text>\n )}\n </Box>\n\n {trailing}\n {!trailing && buttonText && (\n <Box\n onPress={buttonDisabled ? undefined : onButtonClick}\n backgroundColor={theme.colors.control.mono.secondary.bg}\n borderRadius={config.borderRadius}\n height={config.buttonHeight}\n paddingHorizontal={config.buttonPaddingX}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={buttonDisabled ? 0.4 : 1}\n style={\n isWeb\n ? {\n backdropFilter: \"blur(30px)\",\n WebkitBackdropFilter: \"blur(30px)\",\n border: `1px solid ${theme.colors.control.mono.secondary.border}`,\n cursor: buttonDisabled\n ? \"not-allowed\"\n : onButtonClick\n ? \"pointer\"\n : \"default\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.control.mono.text.secondary}\n fontSize={config.buttonFontSize}\n lineHeight={config.buttonLineHeight}\n fontWeight=\"500\"\n letterSpacing={0.4}\n >\n {buttonText}\n </Text>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","Svg","SvgLinearGradient","import_jsx_runtime"]}
package/native/index.mjs CHANGED
@@ -235,6 +235,7 @@ var Text = ({
235
235
  };
236
236
 
237
237
  // ../primitives-native/src/LinearGradient.tsx
238
+ import { useRef } from "react";
238
239
  import { View as View2 } from "react-native";
239
240
  import Svg, {
240
241
  Defs,
@@ -243,6 +244,22 @@ import Svg, {
243
244
  Rect
244
245
  } from "react-native-svg";
245
246
  import { jsx as jsx3, jsxs } from "react/jsx-runtime";
247
+ var gradientIdCounter = 0;
248
+ function parseColor(color) {
249
+ if (color === "transparent") {
250
+ return { stopColor: "#000000", stopOpacity: 0 };
251
+ }
252
+ const rgbaMatch = color.match(
253
+ /^rgba?\(\s*([\d.]+%?)\s*,\s*([\d.]+%?)\s*,\s*([\d.]+%?)\s*,\s*([\d.]+)\s*\)$/i
254
+ );
255
+ if (rgbaMatch) {
256
+ return {
257
+ stopColor: `rgb(${rgbaMatch[1]}, ${rgbaMatch[2]}, ${rgbaMatch[3]})`,
258
+ stopOpacity: parseFloat(rgbaMatch[4])
259
+ };
260
+ }
261
+ return { stopColor: color, stopOpacity: 1 };
262
+ }
246
263
  var LinearGradient = ({
247
264
  colors,
248
265
  start = { x: 0, y: 0 },
@@ -276,9 +293,19 @@ var LinearGradient = ({
276
293
  zIndex,
277
294
  ...style
278
295
  };
296
+ const gradientId = useRef(`xui-lg-${++gradientIdCounter}`).current;
279
297
  const stops = colors.map((color, index) => {
280
298
  const offset = locations ? locations[index] : index / (colors.length - 1);
281
- return /* @__PURE__ */ jsx3(Stop, { offset, stopColor: color }, index);
299
+ const { stopColor, stopOpacity } = parseColor(color);
300
+ return /* @__PURE__ */ jsx3(
301
+ Stop,
302
+ {
303
+ offset,
304
+ stopColor,
305
+ stopOpacity
306
+ },
307
+ index
308
+ );
282
309
  });
283
310
  return /* @__PURE__ */ jsxs(View2, { style: containerStyle, testID: dataTestId || testID, children: [
284
311
  /* @__PURE__ */ jsxs(
@@ -291,7 +318,7 @@ var LinearGradient = ({
291
318
  /* @__PURE__ */ jsx3(Defs, { children: /* @__PURE__ */ jsx3(
292
319
  SvgLinearGradient,
293
320
  {
294
- id: "grad",
321
+ id: gradientId,
295
322
  x1: `${start.x * 100}%`,
296
323
  y1: `${start.y * 100}%`,
297
324
  x2: `${end.x * 100}%`,
@@ -299,7 +326,16 @@ var LinearGradient = ({
299
326
  children: stops
300
327
  }
301
328
  ) }),
302
- /* @__PURE__ */ jsx3(Rect, { x: "0", y: "0", width: "100%", height: "100%", fill: "url(#grad)" })
329
+ /* @__PURE__ */ jsx3(
330
+ Rect,
331
+ {
332
+ x: "0",
333
+ y: "0",
334
+ width: "100%",
335
+ height: "100%",
336
+ fill: `url(#${gradientId})`
337
+ }
338
+ )
303
339
  ]
304
340
  }
305
341
  ),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/LinearGradient.tsx","../../src/GameCard.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 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 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 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,\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={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\nimport { View, ViewStyle, DimensionValue } from \"react-native\";\nimport Svg, {\n Defs,\n LinearGradient as SvgLinearGradient,\n Stop,\n Rect,\n} from \"react-native-svg\";\nimport { LinearGradientProps } from \"@xsolla/xui-primitives-core\";\n\nexport const LinearGradient: React.FC<LinearGradientProps> = ({\n colors,\n start = { x: 0, y: 0 },\n end = { x: 0, y: 1 },\n locations,\n children,\n position,\n top,\n bottom,\n left,\n right,\n width,\n height,\n borderRadius,\n overflow,\n zIndex,\n style,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const containerStyle: ViewStyle = {\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 width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: typeof borderRadius === \"number\" ? borderRadius : undefined,\n overflow,\n zIndex,\n ...(style as ViewStyle),\n };\n\n const stops = colors.map((color, index) => {\n const offset = locations ? locations[index] : index / (colors.length - 1);\n return <Stop key={index} offset={offset} stopColor={color} />;\n });\n\n return (\n <View style={containerStyle} testID={dataTestId || testID}>\n <Svg\n style={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0 }}\n width=\"100%\"\n height=\"100%\"\n >\n <Defs>\n <SvgLinearGradient\n id=\"grad\"\n x1={`${start.x * 100}%`}\n y1={`${start.y * 100}%`}\n x2={`${end.x * 100}%`}\n y2={`${end.y * 100}%`}\n >\n {stops}\n </SvgLinearGradient>\n </Defs>\n <Rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"url(#grad)\" />\n </Svg>\n {children}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, LinearGradient } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, isWeb } from \"@xsolla/xui-core\";\nimport type { GameCardProps, GameCardSize } from \"./types\";\n\nconst getSizeConfig = (size: GameCardSize) => {\n switch (size) {\n case \"lg\":\n return {\n imageAspectRatio: 366 / 206,\n titleFontSize: 16,\n titleLineHeight: 20,\n subtitleFontSize: 12,\n subtitleLineHeight: 18,\n padding: 8,\n footerPadding: 12,\n footerGap: 12,\n tagGap: 4,\n buttonHeight: 32,\n buttonPaddingX: 20,\n buttonFontSize: 12,\n buttonLineHeight: 14,\n borderRadius: 8,\n fadeHeight: 64,\n };\n case \"md\":\n return {\n imageAspectRatio: 280 / 158,\n titleFontSize: 14,\n titleLineHeight: 18,\n subtitleFontSize: 11,\n subtitleLineHeight: 16,\n padding: 6,\n footerPadding: 8,\n footerGap: 8,\n tagGap: 3,\n buttonHeight: 28,\n buttonPaddingX: 16,\n buttonFontSize: 11,\n buttonLineHeight: 13,\n borderRadius: 8,\n fadeHeight: 48,\n };\n case \"sm\":\n return {\n imageAspectRatio: 200 / 113,\n titleFontSize: 12,\n titleLineHeight: 16,\n subtitleFontSize: 10,\n subtitleLineHeight: 14,\n padding: 4,\n footerPadding: 6,\n footerGap: 6,\n tagGap: 2,\n buttonHeight: 24,\n buttonPaddingX: 12,\n buttonFontSize: 10,\n buttonLineHeight: 12,\n borderRadius: 8,\n fadeHeight: 32,\n };\n }\n};\n\nexport const GameCard: React.FC<GameCardProps> = ({\n image,\n title,\n subtitle,\n size = \"lg\",\n badge,\n tagsTopLeft,\n tagsTopRight,\n trailing,\n buttonText,\n onButtonClick,\n buttonDisabled,\n onPress,\n imageAlt,\n className,\n}) => {\n const { theme } = useDesignSystem();\n const config = getSizeConfig(size);\n\n const wrapperProps = onPress ? { onPress } : {};\n\n return (\n <Box\n className={className}\n flexDirection=\"column\"\n width=\"100%\"\n {...wrapperProps}\n >\n <Box\n backgroundColor={theme.colors.background.primary}\n borderRadius={config.borderRadius}\n overflow=\"hidden\"\n flexDirection=\"column\"\n style={\n isWeb\n ? {\n boxShadow: theme.shadow.surface,\n borderRadius: `${config.borderRadius}px`,\n overflow: \"hidden\",\n }\n : {\n shadowColor: \"#070708\",\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 6,\n elevation: 4,\n borderRadius: config.borderRadius,\n overflow: \"hidden\",\n }\n }\n >\n {/* Image Container */}\n <Box\n position=\"relative\"\n width=\"100%\"\n overflow=\"hidden\"\n style={{\n aspectRatio: config.imageAspectRatio,\n borderTopLeftRadius: config.borderRadius,\n borderTopRightRadius: config.borderRadius,\n }}\n >\n <Box\n as=\"img\"\n src={image}\n alt={imageAlt || title}\n position=\"absolute\"\n top={0}\n left={0}\n width=\"100%\"\n height=\"100%\"\n style={isWeb ? { objectFit: \"cover\" } : undefined}\n />\n\n <LinearGradient\n colors={[\"transparent\", \"rgba(0, 0, 0, 0.48)\"]}\n start={{ x: 0, y: 0 }}\n end={{ x: 0, y: 1 }}\n position=\"absolute\"\n bottom={0}\n left={0}\n right={0}\n height={config.fadeHeight}\n />\n\n {(badge || tagsTopLeft) && (\n <Box\n position=\"absolute\"\n top={config.padding}\n left={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-start\"\n >\n {badge}\n {tagsTopLeft}\n </Box>\n )}\n\n {tagsTopRight && (\n <Box\n position=\"absolute\"\n top={config.padding}\n right={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-end\"\n >\n {tagsTopRight}\n </Box>\n )}\n </Box>\n\n {/* Card Footer */}\n <Box\n backgroundColor={theme.colors.overlay.mono}\n padding={config.footerPadding}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={config.footerGap}\n >\n <Box flex={1} flexDirection=\"column\" style={{ minWidth: 0 }}>\n <Text\n color={theme.colors.content.primary}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {title}\n </Text>\n {subtitle && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={config.subtitleFontSize}\n lineHeight={config.subtitleLineHeight}\n fontWeight=\"400\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {subtitle}\n </Text>\n )}\n </Box>\n\n {trailing}\n {!trailing && buttonText && (\n <Box\n onPress={buttonDisabled ? undefined : onButtonClick}\n backgroundColor={theme.colors.control.mono.secondary.bg}\n borderRadius={config.borderRadius}\n height={config.buttonHeight}\n paddingHorizontal={config.buttonPaddingX}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={buttonDisabled ? 0.4 : 1}\n style={\n isWeb\n ? {\n backdropFilter: \"blur(30px)\",\n WebkitBackdropFilter: \"blur(30px)\",\n border: `1px solid ${theme.colors.control.mono.secondary.border}`,\n cursor: buttonDisabled\n ? \"not-allowed\"\n : onButtonClick\n ? \"pointer\"\n : \"default\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.control.mono.text.secondary}\n fontSize={config.buttonFontSize}\n lineHeight={config.buttonLineHeight}\n fontWeight=\"500\"\n letterSpacing={0.4}\n >\n {buttonText}\n </Text>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AAmID;AAhIC,IAAM,MAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,oBAAoB,CAAC,aAAkC;AAAA,IAC3D,iBACE,WAAW,YAAY,kBACnB,WAAW,kBACX;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI;AAAA,EACN;AAEA,QAAM,cAAc,cAAc;AAIlC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EACL,IAAI;AAGJ,MAAI,OAAO,SAAS,KAAK;AACvB,UAAM,aAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI;AAAA,IACN;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,KAAK,IAAI;AAAA,QACnB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAW;AAAA,QACV,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,MAAI,SAAS;AACX,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,QACjD,QAAQ;AAAA,QACP,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,kBAAkB;AAAA,MACzB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACvLA;AAAA,EACE,QAAQ;AAAA,EAGR;AAAA,OACK;AAmEH,gBAAAA,YAAA;AAhEJ,IAAM,UAA6C;AAAA,EACjD,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AACR;AAEA,IAAM,oBAAoB,CACxB,UACuB;AACvB,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEO,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,MAAM;AACJ,MAAI,qBAAqB,aACrB,WAAW,MAAM,GAAG,EAAE,CAAC,EAAE,QAAQ,SAAS,EAAE,EAAE,KAAK,IACnD;AAEJ,MACE,uBAAuB,gBACvB,uBAAuB,qBACvB,uBAAuB,iBACvB;AACA,yBAAqB;AAAA,EACvB;AAEA,QAAM,gBAAgB,WAAW,QAAQ,SAAS;AAElD,QAAM,YAAuB;AAAA,IAC3B;AAAA,IACA,UAAU,OAAO,aAAa,WAAW,WAAW;AAAA,IACpD;AAAA,IACA,YAAY;AAAA,IACZ,oBAAoB,MAAM;AAAA,IAC1B,WAAW,aAAa,eAAe;AAAA,IACvC,YAAY,kBAAkB,cAAc,eAAe,UAAU;AAAA,IACrE,WAAW;AAAA,MACT,eAAe;AAAA,IACjB;AAAA,IACA,cAAc;AAAA,MACZ,eAAe;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,QAAQ,IAAI,IAAI;AAEjD,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACjFA,SAAS,QAAAC,aAAuC;AAChD,OAAO;AAAA,EACL;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,OACK;AAuCI,gBAAAC,MAKL,YALK;AApCJ,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,QAAQ,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,EACrB,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,MAAM;AACJ,QAAM,iBAA4B;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc,OAAO,iBAAiB,WAAW,eAAe;AAAA,IAChE;AAAA,IACA;AAAA,IACA,GAAI;AAAA,EACN;AAEA,QAAM,QAAQ,OAAO,IAAI,CAAC,OAAO,UAAU;AACzC,UAAM,SAAS,YAAY,UAAU,KAAK,IAAI,SAAS,OAAO,SAAS;AACvE,WAAO,gBAAAA,KAAC,QAAiB,QAAgB,WAAW,SAAlC,KAAyC;AAAA,EAC7D,CAAC;AAED,SACE,qBAACD,OAAA,EAAK,OAAO,gBAAgB,QAAQ,cAAc,QACjD;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,UAAU,YAAY,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,EAAE;AAAA,QACpE,OAAM;AAAA,QACN,QAAO;AAAA,QAEP;AAAA,0BAAAC,KAAC,QACC,0BAAAA;AAAA,YAAC;AAAA;AAAA,cACC,IAAG;AAAA,cACH,IAAI,GAAG,MAAM,IAAI,GAAG;AAAA,cACpB,IAAI,GAAG,MAAM,IAAI,GAAG;AAAA,cACpB,IAAI,GAAG,IAAI,IAAI,GAAG;AAAA,cAClB,IAAI,GAAG,IAAI,IAAI,GAAG;AAAA,cAEjB;AAAA;AAAA,UACH,GACF;AAAA,UACA,gBAAAA,KAAC,QAAK,GAAE,KAAI,GAAE,KAAI,OAAM,QAAO,QAAO,QAAO,MAAK,cAAa;AAAA;AAAA;AAAA,IACjE;AAAA,IACC;AAAA,KACH;AAEJ;;;ACrEA,SAAS,iBAAiB,aAAa;AA4H7B,gBAAAC,MAwBE,QAAAC,aAxBF;AAzHV,IAAM,gBAAgB,CAAC,SAAuB;AAC5C,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL,kBAAkB,MAAM;AAAA,QACxB,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,kBAAkB,MAAM;AAAA,QACxB,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,kBAAkB,MAAM;AAAA,QACxB,eAAe;AAAA,QACf,iBAAiB;AAAA,QACjB,kBAAkB;AAAA,QAClB,oBAAoB;AAAA,QACpB,SAAS;AAAA,QACT,eAAe;AAAA,QACf,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,QAClB,cAAc;AAAA,QACd,YAAY;AAAA,MACd;AAAA,EACJ;AACF;AAEO,IAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,IAAI,gBAAgB;AAClC,QAAM,SAAS,cAAc,IAAI;AAEjC,QAAM,eAAe,UAAU,EAAE,QAAQ,IAAI,CAAC;AAE9C,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAc;AAAA,MACd,OAAM;AAAA,MACL,GAAG;AAAA,MAEJ,0BAAAC;AAAA,QAAC;AAAA;AAAA,UACC,iBAAiB,MAAM,OAAO,WAAW;AAAA,UACzC,cAAc,OAAO;AAAA,UACrB,UAAS;AAAA,UACT,eAAc;AAAA,UACd,OACE,QACI;AAAA,YACE,WAAW,MAAM,OAAO;AAAA,YACxB,cAAc,GAAG,OAAO,YAAY;AAAA,YACpC,UAAU;AAAA,UACZ,IACA;AAAA,YACE,aAAa;AAAA,YACb,cAAc,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,YACpC,eAAe;AAAA,YACf,cAAc;AAAA,YACd,WAAW;AAAA,YACX,cAAc,OAAO;AAAA,YACrB,UAAU;AAAA,UACZ;AAAA,UAIN;AAAA,4BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,UAAS;AAAA,gBACT,OAAM;AAAA,gBACN,UAAS;AAAA,gBACT,OAAO;AAAA,kBACL,aAAa,OAAO;AAAA,kBACpB,qBAAqB,OAAO;AAAA,kBAC5B,sBAAsB,OAAO;AAAA,gBAC/B;AAAA,gBAEA;AAAA,kCAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,IAAG;AAAA,sBACH,KAAK;AAAA,sBACL,KAAK,YAAY;AAAA,sBACjB,UAAS;AAAA,sBACT,KAAK;AAAA,sBACL,MAAM;AAAA,sBACN,OAAM;AAAA,sBACN,QAAO;AAAA,sBACP,OAAO,QAAQ,EAAE,WAAW,QAAQ,IAAI;AAAA;AAAA,kBAC1C;AAAA,kBAEA,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,QAAQ,CAAC,eAAe,qBAAqB;AAAA,sBAC7C,OAAO,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,sBACpB,KAAK,EAAE,GAAG,GAAG,GAAG,EAAE;AAAA,sBAClB,UAAS;AAAA,sBACT,QAAQ;AAAA,sBACR,MAAM;AAAA,sBACN,OAAO;AAAA,sBACP,QAAQ,OAAO;AAAA;AAAA,kBACjB;AAAA,mBAEE,SAAS,gBACT,gBAAAC;AAAA,oBAAC;AAAA;AAAA,sBACC,UAAS;AAAA,sBACT,KAAK,OAAO;AAAA,sBACZ,MAAM,OAAO;AAAA,sBACb,eAAc;AAAA,sBACd,KAAK,OAAO;AAAA,sBACZ,YAAW;AAAA,sBAEV;AAAA;AAAA,wBACA;AAAA;AAAA;AAAA,kBACH;AAAA,kBAGD,gBACC,gBAAAD;AAAA,oBAAC;AAAA;AAAA,sBACC,UAAS;AAAA,sBACT,KAAK,OAAO;AAAA,sBACZ,OAAO,OAAO;AAAA,sBACd,eAAc;AAAA,sBACd,KAAK,OAAO;AAAA,sBACZ,YAAW;AAAA,sBAEV;AAAA;AAAA,kBACH;AAAA;AAAA;AAAA,YAEJ;AAAA,YAGA,gBAAAC;AAAA,cAAC;AAAA;AAAA,gBACC,iBAAiB,MAAM,OAAO,QAAQ;AAAA,gBACtC,SAAS,OAAO;AAAA,gBAChB,eAAc;AAAA,gBACd,YAAW;AAAA,gBACX,KAAK,OAAO;AAAA,gBAEZ;AAAA,kCAAAA,MAAC,OAAI,MAAM,GAAG,eAAc,UAAS,OAAO,EAAE,UAAU,EAAE,GACxD;AAAA,oCAAAD;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,MAAM,OAAO,QAAQ;AAAA,wBAC5B,UAAU,OAAO;AAAA,wBACjB,YAAY,OAAO;AAAA,wBACnB,YAAW;AAAA,wBACX,eAAe;AAAA,wBACf,OACE,QACI;AAAA,0BACE,UAAU;AAAA,0BACV,cAAc;AAAA,0BACd,YAAY;AAAA,wBACd,IACA;AAAA,wBAGL;AAAA;AAAA,oBACH;AAAA,oBACC,YACC,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,MAAM,OAAO,QAAQ;AAAA,wBAC5B,UAAU,OAAO;AAAA,wBACjB,YAAY,OAAO;AAAA,wBACnB,YAAW;AAAA,wBACX,eAAe;AAAA,wBACf,OACE,QACI;AAAA,0BACE,UAAU;AAAA,0BACV,cAAc;AAAA,0BACd,YAAY;AAAA,wBACd,IACA;AAAA,wBAGL;AAAA;AAAA,oBACH;AAAA,qBAEJ;AAAA,kBAEC;AAAA,kBACA,CAAC,YAAY,cACZ,gBAAAA;AAAA,oBAAC;AAAA;AAAA,sBACC,SAAS,iBAAiB,SAAY;AAAA,sBACtC,iBAAiB,MAAM,OAAO,QAAQ,KAAK,UAAU;AAAA,sBACrD,cAAc,OAAO;AAAA,sBACrB,QAAQ,OAAO;AAAA,sBACf,mBAAmB,OAAO;AAAA,sBAC1B,YAAW;AAAA,sBACX,gBAAe;AAAA,sBACf,SAAS,iBAAiB,MAAM;AAAA,sBAChC,OACE,QACI;AAAA,wBACE,gBAAgB;AAAA,wBAChB,sBAAsB;AAAA,wBACtB,QAAQ,aAAa,MAAM,OAAO,QAAQ,KAAK,UAAU,MAAM;AAAA,wBAC/D,QAAQ,iBACJ,gBACA,gBACE,YACA;AAAA,sBACR,IACA;AAAA,sBAGN,0BAAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO,MAAM,OAAO,QAAQ,KAAK,KAAK;AAAA,0BACtC,UAAU,OAAO;AAAA,0BACjB,YAAY,OAAO;AAAA,0BACnB,YAAW;AAAA,0BACX,eAAe;AAAA,0BAEd;AAAA;AAAA,sBACH;AAAA;AAAA,kBACF;AAAA;AAAA;AAAA,YAEJ;AAAA;AAAA;AAAA,MACF;AAAA;AAAA,EACF;AAEJ;","names":["jsx","View","jsx","jsx","jsxs"]}
1
+ {"version":3,"sources":["../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/LinearGradient.tsx","../../src/GameCard.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 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 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 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,\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={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { useRef } from \"react\";\nimport { View, ViewStyle, DimensionValue } from \"react-native\";\nimport Svg, {\n Defs,\n LinearGradient as SvgLinearGradient,\n Stop,\n Rect,\n} from \"react-native-svg\";\nimport { LinearGradientProps } from \"@xsolla/xui-primitives-core\";\n\nlet gradientIdCounter = 0;\n\nfunction parseColor(color: string): { stopColor: string; stopOpacity: number } {\n if (color === \"transparent\") {\n return { stopColor: \"#000000\", stopOpacity: 0 };\n }\n\n const rgbaMatch = color.match(\n /^rgba?\\(\\s*([\\d.]+%?)\\s*,\\s*([\\d.]+%?)\\s*,\\s*([\\d.]+%?)\\s*,\\s*([\\d.]+)\\s*\\)$/i\n );\n if (rgbaMatch) {\n return {\n stopColor: `rgb(${rgbaMatch[1]}, ${rgbaMatch[2]}, ${rgbaMatch[3]})`,\n stopOpacity: parseFloat(rgbaMatch[4]),\n };\n }\n\n return { stopColor: color, stopOpacity: 1 };\n}\n\nexport const LinearGradient: React.FC<LinearGradientProps> = ({\n colors,\n start = { x: 0, y: 0 },\n end = { x: 0, y: 1 },\n locations,\n children,\n position,\n top,\n bottom,\n left,\n right,\n width,\n height,\n borderRadius,\n overflow,\n zIndex,\n style,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const containerStyle: ViewStyle = {\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 width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: typeof borderRadius === \"number\" ? borderRadius : undefined,\n overflow,\n zIndex,\n ...(style as ViewStyle),\n };\n\n const gradientId = useRef(`xui-lg-${++gradientIdCounter}`).current;\n\n const stops = colors.map((color, index) => {\n const offset = locations ? locations[index] : index / (colors.length - 1);\n const { stopColor, stopOpacity } = parseColor(color);\n return (\n <Stop\n key={index}\n offset={offset}\n stopColor={stopColor}\n stopOpacity={stopOpacity}\n />\n );\n });\n\n return (\n <View style={containerStyle} testID={dataTestId || testID}>\n <Svg\n style={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0 }}\n width=\"100%\"\n height=\"100%\"\n >\n <Defs>\n <SvgLinearGradient\n id={gradientId}\n x1={`${start.x * 100}%`}\n y1={`${start.y * 100}%`}\n x2={`${end.x * 100}%`}\n y2={`${end.y * 100}%`}\n >\n {stops}\n </SvgLinearGradient>\n </Defs>\n <Rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${gradientId})`}\n />\n </Svg>\n {children}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, LinearGradient } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, isWeb } from \"@xsolla/xui-core\";\nimport type { GameCardProps, GameCardSize } from \"./types\";\n\nconst getSizeConfig = (size: GameCardSize) => {\n switch (size) {\n case \"lg\":\n return {\n imageAspectRatio: 366 / 206,\n titleFontSize: 16,\n titleLineHeight: 20,\n subtitleFontSize: 12,\n subtitleLineHeight: 18,\n padding: 8,\n footerPadding: 12,\n footerGap: 12,\n tagGap: 4,\n buttonHeight: 32,\n buttonPaddingX: 20,\n buttonFontSize: 12,\n buttonLineHeight: 14,\n borderRadius: 8,\n fadeHeight: 64,\n };\n case \"md\":\n return {\n imageAspectRatio: 280 / 158,\n titleFontSize: 14,\n titleLineHeight: 18,\n subtitleFontSize: 11,\n subtitleLineHeight: 16,\n padding: 6,\n footerPadding: 8,\n footerGap: 8,\n tagGap: 3,\n buttonHeight: 28,\n buttonPaddingX: 16,\n buttonFontSize: 11,\n buttonLineHeight: 13,\n borderRadius: 8,\n fadeHeight: 48,\n };\n case \"sm\":\n return {\n imageAspectRatio: 200 / 113,\n titleFontSize: 12,\n titleLineHeight: 16,\n subtitleFontSize: 10,\n subtitleLineHeight: 14,\n padding: 4,\n footerPadding: 6,\n footerGap: 6,\n tagGap: 2,\n buttonHeight: 24,\n buttonPaddingX: 12,\n buttonFontSize: 10,\n buttonLineHeight: 12,\n borderRadius: 8,\n fadeHeight: 32,\n };\n }\n};\n\nexport const GameCard: React.FC<GameCardProps> = ({\n image,\n title,\n subtitle,\n size = \"lg\",\n badge,\n tagsTopLeft,\n tagsTopRight,\n trailing,\n buttonText,\n onButtonClick,\n buttonDisabled,\n onPress,\n imageAlt,\n className,\n}) => {\n const { theme } = useDesignSystem();\n const config = getSizeConfig(size);\n\n const wrapperProps = onPress ? { onPress } : {};\n\n return (\n <Box\n className={className}\n flexDirection=\"column\"\n width=\"100%\"\n {...wrapperProps}\n >\n <Box\n backgroundColor={theme.colors.background.primary}\n borderRadius={config.borderRadius}\n overflow=\"hidden\"\n flexDirection=\"column\"\n style={\n isWeb\n ? {\n boxShadow: theme.shadow.surface,\n borderRadius: `${config.borderRadius}px`,\n overflow: \"hidden\",\n }\n : {\n shadowColor: \"#070708\",\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 6,\n elevation: 4,\n borderRadius: config.borderRadius,\n overflow: \"hidden\",\n }\n }\n >\n {/* Image Container */}\n <Box\n position=\"relative\"\n width=\"100%\"\n overflow=\"hidden\"\n style={{\n aspectRatio: config.imageAspectRatio,\n borderTopLeftRadius: config.borderRadius,\n borderTopRightRadius: config.borderRadius,\n }}\n >\n <Box\n as=\"img\"\n src={image}\n alt={imageAlt || title}\n position=\"absolute\"\n top={0}\n left={0}\n width=\"100%\"\n height=\"100%\"\n style={isWeb ? { objectFit: \"cover\" } : undefined}\n />\n\n <LinearGradient\n colors={[\"transparent\", \"rgba(0, 0, 0, 0.48)\"]}\n start={{ x: 0, y: 0 }}\n end={{ x: 0, y: 1 }}\n position=\"absolute\"\n bottom={0}\n left={0}\n right={0}\n height={config.fadeHeight}\n />\n\n {(badge || tagsTopLeft) && (\n <Box\n position=\"absolute\"\n top={config.padding}\n left={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-start\"\n >\n {badge}\n {tagsTopLeft}\n </Box>\n )}\n\n {tagsTopRight && (\n <Box\n position=\"absolute\"\n top={config.padding}\n right={config.padding}\n flexDirection=\"column\"\n gap={config.tagGap}\n alignItems=\"flex-end\"\n >\n {tagsTopRight}\n </Box>\n )}\n </Box>\n\n {/* Card Footer */}\n <Box\n backgroundColor={theme.colors.overlay.mono}\n padding={config.footerPadding}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={config.footerGap}\n >\n <Box flex={1} flexDirection=\"column\" style={{ minWidth: 0 }}>\n <Text\n color={theme.colors.content.primary}\n fontSize={config.titleFontSize}\n lineHeight={config.titleLineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {title}\n </Text>\n {subtitle && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={config.subtitleFontSize}\n lineHeight={config.subtitleLineHeight}\n fontWeight=\"400\"\n numberOfLines={1}\n style={\n isWeb\n ? {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }\n : undefined\n }\n >\n {subtitle}\n </Text>\n )}\n </Box>\n\n {trailing}\n {!trailing && buttonText && (\n <Box\n onPress={buttonDisabled ? undefined : onButtonClick}\n backgroundColor={theme.colors.control.mono.secondary.bg}\n borderRadius={config.borderRadius}\n height={config.buttonHeight}\n paddingHorizontal={config.buttonPaddingX}\n alignItems=\"center\"\n justifyContent=\"center\"\n opacity={buttonDisabled ? 0.4 : 1}\n style={\n isWeb\n ? {\n backdropFilter: \"blur(30px)\",\n WebkitBackdropFilter: \"blur(30px)\",\n border: `1px solid ${theme.colors.control.mono.secondary.border}`,\n cursor: buttonDisabled\n ? \"not-allowed\"\n : onButtonClick\n ? \"pointer\"\n : \"default\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.control.mono.text.secondary}\n fontSize={config.buttonFontSize}\n lineHeight={config.buttonLineHeight}\n fontWeight=\"500\"\n letterSpacing={0.4}\n >\n {buttonText}\n </Text>\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":["jsx","View","jsx","jsx","jsxs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-game-card",
3
- "version": "0.124.0",
3
+ "version": "0.126.0",
4
4
  "main": "./web/index.js",
5
5
  "module": "./web/index.mjs",
6
6
  "types": "./web/index.d.ts",
@@ -14,8 +14,8 @@
14
14
  "test:coverage": "vitest run --coverage"
15
15
  },
16
16
  "dependencies": {
17
- "@xsolla/xui-core": "0.124.0",
18
- "@xsolla/xui-primitives-core": "0.124.0"
17
+ "@xsolla/xui-core": "0.126.0",
18
+ "@xsolla/xui-primitives-core": "0.126.0"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "react": ">=16.8.0",