@xsolla/xui-progress-bar 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 CHANGED
@@ -37,6 +37,38 @@ module.exports = __toCommonJS(index_exports);
37
37
  // ../../foundation/primitives-native/src/Box.tsx
38
38
  var import_react_native = require("react-native");
39
39
  var import_jsx_runtime = require("react/jsx-runtime");
40
+ var roleToAccessibilityRole = {
41
+ button: "button",
42
+ link: "link",
43
+ img: "image",
44
+ image: "image",
45
+ summary: "summary",
46
+ switch: "switch",
47
+ checkbox: "checkbox",
48
+ radio: "radio",
49
+ heading: "header",
50
+ text: "text",
51
+ search: "search",
52
+ alert: "alert",
53
+ none: "none",
54
+ presentation: "none",
55
+ progressbar: "progressbar",
56
+ scrollbar: "scrollbar",
57
+ adjustable: "adjustable",
58
+ tab: "tab",
59
+ menu: "menu",
60
+ menuitem: "menuitem",
61
+ list: "list",
62
+ timer: "timer"
63
+ };
64
+ var toGapValue = (gap) => {
65
+ if (gap === void 0) return void 0;
66
+ if (typeof gap === "number") return gap;
67
+ const pxMatch = /^(\d+(?:\.\d+)?)px$/.exec(gap);
68
+ if (pxMatch) return Number(pxMatch[1]);
69
+ const asNumber = Number(gap);
70
+ return Number.isFinite(asNumber) ? asNumber : void 0;
71
+ };
40
72
  var Box = ({
41
73
  children,
42
74
  onPress,
@@ -69,8 +101,10 @@ var Box = ({
69
101
  marginLeft,
70
102
  marginRight,
71
103
  flexDirection,
104
+ flexWrap,
72
105
  alignItems,
73
106
  justifyContent,
107
+ alignSelf,
74
108
  position,
75
109
  top,
76
110
  bottom,
@@ -82,11 +116,14 @@ var Box = ({
82
116
  maxWidth,
83
117
  maxHeight,
84
118
  flex,
119
+ flexShrink,
120
+ gap,
85
121
  overflow,
86
122
  zIndex,
87
123
  hoverStyle,
88
124
  pressStyle,
89
125
  style,
126
+ disabled,
90
127
  "data-testid": dataTestId,
91
128
  testID,
92
129
  as,
@@ -125,14 +162,18 @@ var Box = ({
125
162
  marginLeft,
126
163
  marginRight,
127
164
  flexDirection,
165
+ flexWrap,
128
166
  alignItems,
129
167
  justifyContent,
168
+ alignSelf,
130
169
  position,
131
170
  top,
132
171
  bottom,
133
172
  left,
134
173
  right,
135
174
  flex,
175
+ flexShrink,
176
+ gap: toGapValue(gap),
136
177
  ...style
137
178
  });
138
179
  const finalTestID = dataTestId || testID;
@@ -141,15 +182,25 @@ var Box = ({
141
182
  tabIndex,
142
183
  onKeyDown,
143
184
  onKeyUp,
144
- "aria-label": _ariaLabel,
185
+ "aria-label": ariaLabel,
145
186
  "aria-labelledby": _ariaLabelledBy,
146
187
  "aria-current": _ariaCurrent,
147
- "aria-disabled": _ariaDisabled,
148
- "aria-live": _ariaLive,
188
+ "aria-disabled": ariaDisabled,
189
+ "aria-live": ariaLive,
190
+ "aria-busy": ariaBusy,
149
191
  className,
150
192
  "data-testid": _dataTestId,
193
+ cursor: _cursor,
194
+ type: _type,
151
195
  ...nativeRest
152
196
  } = rest;
197
+ const accessibilityRole = typeof role === "string" && roleToAccessibilityRole[role] || (as === "button" ? "button" : void 0);
198
+ const isDisabled = Boolean(disabled || ariaDisabled);
199
+ const accessibilityState = {
200
+ disabled: isDisabled || void 0,
201
+ busy: Boolean(ariaBusy) || void 0
202
+ };
203
+ const accessibilityLiveRegion = ariaLive === "polite" || ariaLive === "assertive" ? ariaLive : void 0;
153
204
  if (as === "img" && src) {
154
205
  const imageStyle = {
155
206
  width,
@@ -168,16 +219,18 @@ var Box = ({
168
219
  source: { uri: src },
169
220
  style: imageStyle,
170
221
  testID: finalTestID,
222
+ accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : alt,
171
223
  resizeMode: "cover",
172
224
  ...nativeRest
173
225
  }
174
226
  );
175
227
  }
176
- if (onPress) {
228
+ if (onPress || as === "button") {
177
229
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
178
230
  import_react_native.Pressable,
179
231
  {
180
- onPress,
232
+ onPress: !isDisabled && onPress ? onPress : void 0,
233
+ disabled: isDisabled,
181
234
  onLayout,
182
235
  onMoveShouldSetResponder,
183
236
  onResponderGrant,
@@ -186,6 +239,10 @@ var Box = ({
186
239
  onResponderTerminate,
187
240
  style: ({ pressed }) => getContainerStyle(pressed),
188
241
  testID: finalTestID,
242
+ accessibilityRole,
243
+ accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
244
+ accessibilityState,
245
+ accessibilityLiveRegion,
189
246
  ...nativeRest,
190
247
  children
191
248
  }
@@ -202,6 +259,10 @@ var Box = ({
202
259
  onResponderMove,
203
260
  onResponderRelease,
204
261
  onResponderTerminate,
262
+ accessibilityRole,
263
+ accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
264
+ accessibilityState,
265
+ accessibilityLiveRegion,
205
266
  ...nativeRest,
206
267
  children
207
268
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Icon.tsx","../../src/ProgressBar.tsx"],"sourcesContent":["export * from \"./ProgressBar\";\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\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon } from \"@xsolla/xui-primitives\";\nimport { Info, AlertCircle, Check } from \"@xsolla/xui-icons\";\nimport {\n useResolvedTheme,\n useId,\n radiusScale,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\n\nexport interface ProgressBarProps extends ThemeOverrideProps {\n /**\n * Size of the progress bar\n */\n size?: \"l\" | \"m\" | \"s\" | \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\n /**\n * Current state of the progress bar\n */\n state?: \"default\" | \"success\" | \"error\";\n /**\n * Progress percentage (0-100)\n */\n percent?: number;\n /**\n * Optional label text\n */\n label?: string;\n /**\n * Whether to show the label\n */\n showLabel?: boolean;\n /**\n * Whether to show the info icon on the right of the label\n */\n showInfoIcon?: boolean;\n /**\n * Whether to show the status icon\n */\n showStatusIcon?: boolean;\n /**\n * Optional helper text\n */\n helperText?: string;\n /**\n * Optional error message (shown when state is 'error')\n */\n errorMessage?: string;\n /**\n * Optional icon to show on the left of the label\n */\n labelIcon?: React.ReactNode;\n /**\n * Optional status icon (overrides default status icon)\n */\n statusIcon?: React.ReactNode;\n testID?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n size = \"m\",\n state = \"default\",\n percent = 0,\n label,\n showLabel = true,\n showInfoIcon = false,\n showStatusIcon = true,\n helperText,\n errorMessage,\n labelIcon,\n statusIcon,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.progress(size);\n const validPercent = Math.min(Math.max(0, percent), 100);\n\n const isError = state === \"error\";\n const isSuccess = state === \"success\";\n\n const helperId = useId();\n\n let progressColor = theme.colors.background.brand.primary;\n let statusIconColor = progressColor;\n\n if (isError) {\n progressColor = theme.colors.background.alert.primary;\n statusIconColor = theme.colors.content.alert.primary;\n } else if (isSuccess) {\n progressColor = theme.colors.background.success.primary;\n statusIconColor = progressColor;\n }\n\n const renderStatusIcon = () => {\n if (statusIcon) return statusIcon;\n if (!showStatusIcon) return null;\n\n if (isError) return <AlertCircle size=\"100%\" />;\n if (isSuccess) return <Check size=\"100%\" />;\n\n return null;\n };\n\n const currentStatusIcon = renderStatusIcon();\n\n return (\n <Box\n testID={testID}\n flexDirection=\"column\"\n width=\"100%\"\n gap={sizeStyles.gap}\n role=\"progressbar\"\n aria-valuenow={validPercent}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-describedby={helperText || errorMessage ? helperId : undefined}\n >\n {showLabel &&\n (label || labelIcon || showInfoIcon || currentStatusIcon) && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={6}>\n {labelIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n {labelIcon}\n </Icon>\n )}\n {label && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.labelSize}\n fontWeight=\"400\"\n >\n {label}\n </Text>\n )}\n {showInfoIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n <Info size=\"100%\" />\n </Icon>\n )}\n </Box>\n {currentStatusIcon && (\n <Icon size={sizeStyles.labelSize} color={statusIconColor}>\n {currentStatusIcon}\n </Icon>\n )}\n </Box>\n )}\n\n <Box\n height={sizeStyles.height}\n backgroundColor={theme.colors.overlay.mono}\n borderRadius={radiusScale[\"999\"]}\n overflow=\"hidden\"\n width=\"100%\"\n >\n <Box\n height=\"100%\"\n backgroundColor={progressColor}\n borderRadius={radiusScale[\"999\"]}\n style={{\n width: `${validPercent}%`,\n transition: \"width 300ms ease-in-out\",\n }}\n />\n </Box>\n\n {isError && errorMessage ? (\n <Text\n id={helperId}\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.helperSize}\n >\n {errorMessage}\n </Text>\n ) : helperText ? (\n <Text\n id={helperId}\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.helperSize}\n >\n {helperText}\n </Text>\n ) : null}\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","React","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/index.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Icon.tsx","../../src/ProgressBar.tsx"],"sourcesContent":["export * from \"./ProgressBar\";\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\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon } from \"@xsolla/xui-primitives\";\nimport { Info, AlertCircle, Check } from \"@xsolla/xui-icons\";\nimport {\n useResolvedTheme,\n useId,\n radiusScale,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\n\nexport interface ProgressBarProps extends ThemeOverrideProps {\n /**\n * Size of the progress bar\n */\n size?: \"l\" | \"m\" | \"s\" | \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\n /**\n * Current state of the progress bar\n */\n state?: \"default\" | \"success\" | \"error\";\n /**\n * Progress percentage (0-100)\n */\n percent?: number;\n /**\n * Optional label text\n */\n label?: string;\n /**\n * Whether to show the label\n */\n showLabel?: boolean;\n /**\n * Whether to show the info icon on the right of the label\n */\n showInfoIcon?: boolean;\n /**\n * Whether to show the status icon\n */\n showStatusIcon?: boolean;\n /**\n * Optional helper text\n */\n helperText?: string;\n /**\n * Optional error message (shown when state is 'error')\n */\n errorMessage?: string;\n /**\n * Optional icon to show on the left of the label\n */\n labelIcon?: React.ReactNode;\n /**\n * Optional status icon (overrides default status icon)\n */\n statusIcon?: React.ReactNode;\n testID?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n size = \"m\",\n state = \"default\",\n percent = 0,\n label,\n showLabel = true,\n showInfoIcon = false,\n showStatusIcon = true,\n helperText,\n errorMessage,\n labelIcon,\n statusIcon,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.progress(size);\n const validPercent = Math.min(Math.max(0, percent), 100);\n\n const isError = state === \"error\";\n const isSuccess = state === \"success\";\n\n const helperId = useId();\n\n let progressColor = theme.colors.background.brand.primary;\n let statusIconColor = progressColor;\n\n if (isError) {\n progressColor = theme.colors.background.alert.primary;\n statusIconColor = theme.colors.content.alert.primary;\n } else if (isSuccess) {\n progressColor = theme.colors.background.success.primary;\n statusIconColor = progressColor;\n }\n\n const renderStatusIcon = () => {\n if (statusIcon) return statusIcon;\n if (!showStatusIcon) return null;\n\n if (isError) return <AlertCircle size=\"100%\" />;\n if (isSuccess) return <Check size=\"100%\" />;\n\n return null;\n };\n\n const currentStatusIcon = renderStatusIcon();\n\n return (\n <Box\n testID={testID}\n flexDirection=\"column\"\n width=\"100%\"\n gap={sizeStyles.gap}\n role=\"progressbar\"\n aria-valuenow={validPercent}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-describedby={helperText || errorMessage ? helperId : undefined}\n >\n {showLabel &&\n (label || labelIcon || showInfoIcon || currentStatusIcon) && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={6}>\n {labelIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n {labelIcon}\n </Icon>\n )}\n {label && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.labelSize}\n fontWeight=\"400\"\n >\n {label}\n </Text>\n )}\n {showInfoIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n <Info size=\"100%\" />\n </Icon>\n )}\n </Box>\n {currentStatusIcon && (\n <Icon size={sizeStyles.labelSize} color={statusIconColor}>\n {currentStatusIcon}\n </Icon>\n )}\n </Box>\n )}\n\n <Box\n height={sizeStyles.height}\n backgroundColor={theme.colors.overlay.mono}\n borderRadius={radiusScale[\"999\"]}\n overflow=\"hidden\"\n width=\"100%\"\n >\n <Box\n height=\"100%\"\n backgroundColor={progressColor}\n borderRadius={radiusScale[\"999\"]}\n style={{\n width: `${validPercent}%`,\n transition: \"width 300ms ease-in-out\",\n }}\n />\n </Box>\n\n {isError && errorMessage ? (\n <Text\n id={helperId}\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.helperSize}\n >\n {errorMessage}\n </Text>\n ) : helperText ? (\n <Text\n id={helperId}\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.helperSize}\n >\n {helperText}\n </Text>\n ) : null}\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","React","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": _ariaLabel,
153
+ "aria-label": ariaLabel,
113
154
  "aria-labelledby": _ariaLabelledBy,
114
155
  "aria-current": _ariaCurrent,
115
- "aria-disabled": _ariaDisabled,
116
- "aria-live": _ariaLive,
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
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Icon.tsx","../../src/ProgressBar.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\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon } from \"@xsolla/xui-primitives\";\nimport { Info, AlertCircle, Check } from \"@xsolla/xui-icons\";\nimport {\n useResolvedTheme,\n useId,\n radiusScale,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\n\nexport interface ProgressBarProps extends ThemeOverrideProps {\n /**\n * Size of the progress bar\n */\n size?: \"l\" | \"m\" | \"s\" | \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\n /**\n * Current state of the progress bar\n */\n state?: \"default\" | \"success\" | \"error\";\n /**\n * Progress percentage (0-100)\n */\n percent?: number;\n /**\n * Optional label text\n */\n label?: string;\n /**\n * Whether to show the label\n */\n showLabel?: boolean;\n /**\n * Whether to show the info icon on the right of the label\n */\n showInfoIcon?: boolean;\n /**\n * Whether to show the status icon\n */\n showStatusIcon?: boolean;\n /**\n * Optional helper text\n */\n helperText?: string;\n /**\n * Optional error message (shown when state is 'error')\n */\n errorMessage?: string;\n /**\n * Optional icon to show on the left of the label\n */\n labelIcon?: React.ReactNode;\n /**\n * Optional status icon (overrides default status icon)\n */\n statusIcon?: React.ReactNode;\n testID?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n size = \"m\",\n state = \"default\",\n percent = 0,\n label,\n showLabel = true,\n showInfoIcon = false,\n showStatusIcon = true,\n helperText,\n errorMessage,\n labelIcon,\n statusIcon,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.progress(size);\n const validPercent = Math.min(Math.max(0, percent), 100);\n\n const isError = state === \"error\";\n const isSuccess = state === \"success\";\n\n const helperId = useId();\n\n let progressColor = theme.colors.background.brand.primary;\n let statusIconColor = progressColor;\n\n if (isError) {\n progressColor = theme.colors.background.alert.primary;\n statusIconColor = theme.colors.content.alert.primary;\n } else if (isSuccess) {\n progressColor = theme.colors.background.success.primary;\n statusIconColor = progressColor;\n }\n\n const renderStatusIcon = () => {\n if (statusIcon) return statusIcon;\n if (!showStatusIcon) return null;\n\n if (isError) return <AlertCircle size=\"100%\" />;\n if (isSuccess) return <Check size=\"100%\" />;\n\n return null;\n };\n\n const currentStatusIcon = renderStatusIcon();\n\n return (\n <Box\n testID={testID}\n flexDirection=\"column\"\n width=\"100%\"\n gap={sizeStyles.gap}\n role=\"progressbar\"\n aria-valuenow={validPercent}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-describedby={helperText || errorMessage ? helperId : undefined}\n >\n {showLabel &&\n (label || labelIcon || showInfoIcon || currentStatusIcon) && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={6}>\n {labelIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n {labelIcon}\n </Icon>\n )}\n {label && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.labelSize}\n fontWeight=\"400\"\n >\n {label}\n </Text>\n )}\n {showInfoIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n <Info size=\"100%\" />\n </Icon>\n )}\n </Box>\n {currentStatusIcon && (\n <Icon size={sizeStyles.labelSize} color={statusIconColor}>\n {currentStatusIcon}\n </Icon>\n )}\n </Box>\n )}\n\n <Box\n height={sizeStyles.height}\n backgroundColor={theme.colors.overlay.mono}\n borderRadius={radiusScale[\"999\"]}\n overflow=\"hidden\"\n width=\"100%\"\n >\n <Box\n height=\"100%\"\n backgroundColor={progressColor}\n borderRadius={radiusScale[\"999\"]}\n style={{\n width: `${validPercent}%`,\n transition: \"width 300ms ease-in-out\",\n }}\n />\n </Box>\n\n {isError && errorMessage ? (\n <Text\n id={helperId}\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.helperSize}\n >\n {errorMessage}\n </Text>\n ) : helperText ? (\n <Text\n id={helperId}\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.helperSize}\n >\n {helperText}\n </Text>\n ) : null}\n </Box>\n );\n};\n"],"mappings":"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","names":["jsx","View","jsx","jsx"]}
1
+ {"version":3,"sources":["../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Icon.tsx","../../src/ProgressBar.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\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon } from \"@xsolla/xui-primitives\";\nimport { Info, AlertCircle, Check } from \"@xsolla/xui-icons\";\nimport {\n useResolvedTheme,\n useId,\n radiusScale,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\n\nexport interface ProgressBarProps extends ThemeOverrideProps {\n /**\n * Size of the progress bar\n */\n size?: \"l\" | \"m\" | \"s\" | \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\n /**\n * Current state of the progress bar\n */\n state?: \"default\" | \"success\" | \"error\";\n /**\n * Progress percentage (0-100)\n */\n percent?: number;\n /**\n * Optional label text\n */\n label?: string;\n /**\n * Whether to show the label\n */\n showLabel?: boolean;\n /**\n * Whether to show the info icon on the right of the label\n */\n showInfoIcon?: boolean;\n /**\n * Whether to show the status icon\n */\n showStatusIcon?: boolean;\n /**\n * Optional helper text\n */\n helperText?: string;\n /**\n * Optional error message (shown when state is 'error')\n */\n errorMessage?: string;\n /**\n * Optional icon to show on the left of the label\n */\n labelIcon?: React.ReactNode;\n /**\n * Optional status icon (overrides default status icon)\n */\n statusIcon?: React.ReactNode;\n testID?: string;\n}\n\nexport const ProgressBar: React.FC<ProgressBarProps> = ({\n size = \"m\",\n state = \"default\",\n percent = 0,\n label,\n showLabel = true,\n showInfoIcon = false,\n showStatusIcon = true,\n helperText,\n errorMessage,\n labelIcon,\n statusIcon,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.progress(size);\n const validPercent = Math.min(Math.max(0, percent), 100);\n\n const isError = state === \"error\";\n const isSuccess = state === \"success\";\n\n const helperId = useId();\n\n let progressColor = theme.colors.background.brand.primary;\n let statusIconColor = progressColor;\n\n if (isError) {\n progressColor = theme.colors.background.alert.primary;\n statusIconColor = theme.colors.content.alert.primary;\n } else if (isSuccess) {\n progressColor = theme.colors.background.success.primary;\n statusIconColor = progressColor;\n }\n\n const renderStatusIcon = () => {\n if (statusIcon) return statusIcon;\n if (!showStatusIcon) return null;\n\n if (isError) return <AlertCircle size=\"100%\" />;\n if (isSuccess) return <Check size=\"100%\" />;\n\n return null;\n };\n\n const currentStatusIcon = renderStatusIcon();\n\n return (\n <Box\n testID={testID}\n flexDirection=\"column\"\n width=\"100%\"\n gap={sizeStyles.gap}\n role=\"progressbar\"\n aria-valuenow={validPercent}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-describedby={helperText || errorMessage ? helperId : undefined}\n >\n {showLabel &&\n (label || labelIcon || showInfoIcon || currentStatusIcon) && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={6}>\n {labelIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n {labelIcon}\n </Icon>\n )}\n {label && (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.labelSize}\n fontWeight=\"400\"\n >\n {label}\n </Text>\n )}\n {showInfoIcon && (\n <Icon\n size={sizeStyles.labelSize}\n color={theme.colors.content.tertiary}\n >\n <Info size=\"100%\" />\n </Icon>\n )}\n </Box>\n {currentStatusIcon && (\n <Icon size={sizeStyles.labelSize} color={statusIconColor}>\n {currentStatusIcon}\n </Icon>\n )}\n </Box>\n )}\n\n <Box\n height={sizeStyles.height}\n backgroundColor={theme.colors.overlay.mono}\n borderRadius={radiusScale[\"999\"]}\n overflow=\"hidden\"\n width=\"100%\"\n >\n <Box\n height=\"100%\"\n backgroundColor={progressColor}\n borderRadius={radiusScale[\"999\"]}\n style={{\n width: `${validPercent}%`,\n transition: \"width 300ms ease-in-out\",\n }}\n />\n </Box>\n\n {isError && errorMessage ? (\n <Text\n id={helperId}\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.helperSize}\n >\n {errorMessage}\n </Text>\n ) : helperText ? (\n <Text\n id={helperId}\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.helperSize}\n >\n {helperText}\n </Text>\n ) : null}\n </Box>\n );\n};\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AAsMD;AAnMN,IAAM,0BAA6D;AAAA,EACjE,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AACT;AAGA,IAAM,aAAa,CAAC,QAAyD;AAC3E,MAAI,QAAQ,OAAW,QAAO;AAC9B,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAM,UAAU,sBAAsB,KAAK,GAAG;AAC9C,MAAI,QAAS,QAAO,OAAO,QAAQ,CAAC,CAAC;AACrC,QAAM,WAAW,OAAO,GAAG;AAC3B,SAAO,OAAO,SAAS,QAAQ,IAAI,WAAW;AAChD;AAEO,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;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;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,KAAK,WAAW,GAAG;AAAA,IACnB,GAAI;AAAA,EACN;AAEA,QAAM,cAAc,cAAc;AAKlC,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;AAAA,IACb;AAAA,IACA,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,oBACH,OAAO,SAAS,YAAY,wBAAwB,IAAI,MACxD,OAAO,WAAW,WAAW;AAChC,QAAM,aAAa,QAAQ,YAAY,YAAY;AACnD,QAAM,qBAAqB;AAAA,IACzB,UAAU,cAAc;AAAA,IACxB,MAAM,QAAQ,QAAQ,KAAK;AAAA,EAC7B;AACA,QAAM,0BACJ,aAAa,YAAY,aAAa,cAAc,WAAW;AAGjE,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,oBAAoB,OAAO,cAAc,WAAW,YAAY;AAAA,QAChE,YAAW;AAAA,QACV,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAIA,MAAI,WAAW,OAAO,UAAU;AAC9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,CAAC,cAAc,UAAU,UAAU;AAAA,QAC5C,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,QACjD,QAAQ;AAAA,QACR;AAAA,QACA,oBACE,OAAO,cAAc,WAAW,YAAY;AAAA,QAE9C;AAAA,QACA;AAAA,QACC,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,MACA;AAAA,MACA,oBAAoB,OAAO,cAAc,WAAW,YAAY;AAAA,MAChE;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;ACzQA;AAAA,EACE,QAAQ;AAAA,EAGR;AAAA,OACK;AAqEH,gBAAAA,YAAA;AAlEJ,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;AAAA,EACA,eAAe;AAAA,EACf,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,OAAO,SAAS,eAAe;AAAA,IAC/B,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,cAAc,UAAU;AAAA,MAChC;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACpFA,OAAO,WAAW;AAClB,SAAS,QAAAC,aAAuB;AA+B5B,gBAAAC,YAAA;AA5BG,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,MAAM;AACJ,QAAM,QAAmB;AAAA,IACvB,OAAO,OAAO,SAAS,WAAW,OAAO;AAAA,IACzC,QAAQ,OAAO,SAAS,WAAW,OAAO;AAAA,IAC1C,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAIA,QAAM,oBAAoB,MAAM,SAAS,IAAI,UAAU,CAAC,UAAU;AAChE,QAAI,MAAM,eAAe,KAAK,GAAG;AAC/B,aAAO,MAAM,aAAa,OAAO;AAAA,QAC/B,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,QAE5B,MAAM,MAAM,MAAM,QAAQ;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT,CAAC;AAED,SACE,gBAAAA,KAACD,OAAA,EAAK,OAAc,QAAQ,cAAc,QACvC,6BACH;AAEJ;;;ACjCA,SAAS,MAAM,aAAa,aAAa;AACzC;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AA0FiB,gBAAAE,MA2BZ,YA3BY;AAxCjB,IAAM,cAA0C,CAAC;AAAA,EACtD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV;AAAA,EACA,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,IAAI,iBAAiB,EAAE,WAAW,oBAAoB,CAAC;AACrE,QAAM,aAAa,MAAM,OAAO,SAAS,IAAI;AAC7C,QAAM,eAAe,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,GAAG,GAAG;AAEvD,QAAM,UAAU,UAAU;AAC1B,QAAM,YAAY,UAAU;AAE5B,QAAM,WAAW,MAAM;AAEvB,MAAI,gBAAgB,MAAM,OAAO,WAAW,MAAM;AAClD,MAAI,kBAAkB;AAEtB,MAAI,SAAS;AACX,oBAAgB,MAAM,OAAO,WAAW,MAAM;AAC9C,sBAAkB,MAAM,OAAO,QAAQ,MAAM;AAAA,EAC/C,WAAW,WAAW;AACpB,oBAAgB,MAAM,OAAO,WAAW,QAAQ;AAChD,sBAAkB;AAAA,EACpB;AAEA,QAAM,mBAAmB,MAAM;AAC7B,QAAI,WAAY,QAAO;AACvB,QAAI,CAAC,eAAgB,QAAO;AAE5B,QAAI,QAAS,QAAO,gBAAAA,KAAC,eAAY,MAAK,QAAO;AAC7C,QAAI,UAAW,QAAO,gBAAAA,KAAC,SAAM,MAAK,QAAO;AAEzC,WAAO;AAAA,EACT;AAEA,QAAM,oBAAoB,iBAAiB;AAE3C,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAc;AAAA,MACd,OAAM;AAAA,MACN,KAAK,WAAW;AAAA,MAChB,MAAK;AAAA,MACL,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,oBAAkB,cAAc,eAAe,WAAW;AAAA,MAEzD;AAAA,sBACE,SAAS,aAAa,gBAAgB,sBACrC;AAAA,UAAC;AAAA;AAAA,YACC,eAAc;AAAA,YACd,YAAW;AAAA,YACX,gBAAe;AAAA,YAEf;AAAA,mCAAC,OAAI,eAAc,OAAM,YAAW,UAAS,KAAK,GAC/C;AAAA,6BACC,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM,WAAW;AAAA,oBACjB,OAAO,MAAM,OAAO,QAAQ;AAAA,oBAE3B;AAAA;AAAA,gBACH;AAAA,gBAED,SACC,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,MAAM,OAAO,QAAQ;AAAA,oBAC5B,UAAU,WAAW;AAAA,oBACrB,YAAW;AAAA,oBAEV;AAAA;AAAA,gBACH;AAAA,gBAED,gBACC,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAM,WAAW;AAAA,oBACjB,OAAO,MAAM,OAAO,QAAQ;AAAA,oBAE5B,0BAAAA,KAAC,QAAK,MAAK,QAAO;AAAA;AAAA,gBACpB;AAAA,iBAEJ;AAAA,cACC,qBACC,gBAAAA,KAAC,QAAK,MAAM,WAAW,WAAW,OAAO,iBACtC,6BACH;AAAA;AAAA;AAAA,QAEJ;AAAA,QAGJ,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,QAAQ,WAAW;AAAA,YACnB,iBAAiB,MAAM,OAAO,QAAQ;AAAA,YACtC,cAAc,YAAY,KAAK;AAAA,YAC/B,UAAS;AAAA,YACT,OAAM;AAAA,YAEN,0BAAAA;AAAA,cAAC;AAAA;AAAA,gBACC,QAAO;AAAA,gBACP,iBAAiB;AAAA,gBACjB,cAAc,YAAY,KAAK;AAAA,gBAC/B,OAAO;AAAA,kBACL,OAAO,GAAG,YAAY;AAAA,kBACtB,YAAY;AAAA,gBACd;AAAA;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAEC,WAAW,eACV,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,OAAO,MAAM,OAAO,QAAQ,MAAM;AAAA,YAClC,UAAU,WAAW;AAAA,YAEpB;AAAA;AAAA,QACH,IACE,aACF,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,OAAO,MAAM,OAAO,QAAQ;AAAA,YAC5B,UAAU,WAAW;AAAA,YAEpB;AAAA;AAAA,QACH,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;","names":["jsx","View","jsx","jsx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-progress-bar",
3
- "version": "0.199.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",
@@ -10,9 +10,9 @@
10
10
  "build:native": "PLATFORM=native tsup"
11
11
  },
12
12
  "dependencies": {
13
- "@xsolla/xui-core": "0.199.0",
14
- "@xsolla/xui-icons": "0.199.0",
15
- "@xsolla/xui-primitives-core": "0.199.0"
13
+ "@xsolla/xui-core": "0.201.0",
14
+ "@xsolla/xui-icons": "0.201.0",
15
+ "@xsolla/xui-primitives-core": "0.201.0"
16
16
  },
17
17
  "peerDependencies": {
18
18
  "react": ">=16.8.0",