@xsolla/xui-b2c-bottom-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
@@ -38,6 +38,38 @@ module.exports = __toCommonJS(index_exports);
38
38
  // ../../foundation/primitives-native/src/Box.tsx
39
39
  var import_react_native = require("react-native");
40
40
  var import_jsx_runtime = require("react/jsx-runtime");
41
+ var roleToAccessibilityRole = {
42
+ button: "button",
43
+ link: "link",
44
+ img: "image",
45
+ image: "image",
46
+ summary: "summary",
47
+ switch: "switch",
48
+ checkbox: "checkbox",
49
+ radio: "radio",
50
+ heading: "header",
51
+ text: "text",
52
+ search: "search",
53
+ alert: "alert",
54
+ none: "none",
55
+ presentation: "none",
56
+ progressbar: "progressbar",
57
+ scrollbar: "scrollbar",
58
+ adjustable: "adjustable",
59
+ tab: "tab",
60
+ menu: "menu",
61
+ menuitem: "menuitem",
62
+ list: "list",
63
+ timer: "timer"
64
+ };
65
+ var toGapValue = (gap) => {
66
+ if (gap === void 0) return void 0;
67
+ if (typeof gap === "number") return gap;
68
+ const pxMatch = /^(\d+(?:\.\d+)?)px$/.exec(gap);
69
+ if (pxMatch) return Number(pxMatch[1]);
70
+ const asNumber = Number(gap);
71
+ return Number.isFinite(asNumber) ? asNumber : void 0;
72
+ };
41
73
  var Box = ({
42
74
  children,
43
75
  onPress,
@@ -70,8 +102,10 @@ var Box = ({
70
102
  marginLeft,
71
103
  marginRight,
72
104
  flexDirection,
105
+ flexWrap,
73
106
  alignItems,
74
107
  justifyContent,
108
+ alignSelf,
75
109
  position,
76
110
  top,
77
111
  bottom,
@@ -83,11 +117,14 @@ var Box = ({
83
117
  maxWidth,
84
118
  maxHeight,
85
119
  flex,
120
+ flexShrink,
121
+ gap,
86
122
  overflow,
87
123
  zIndex,
88
124
  hoverStyle,
89
125
  pressStyle,
90
126
  style,
127
+ disabled,
91
128
  "data-testid": dataTestId,
92
129
  testID,
93
130
  as,
@@ -126,14 +163,18 @@ var Box = ({
126
163
  marginLeft,
127
164
  marginRight,
128
165
  flexDirection,
166
+ flexWrap,
129
167
  alignItems,
130
168
  justifyContent,
169
+ alignSelf,
131
170
  position,
132
171
  top,
133
172
  bottom,
134
173
  left,
135
174
  right,
136
175
  flex,
176
+ flexShrink,
177
+ gap: toGapValue(gap),
137
178
  ...style
138
179
  });
139
180
  const finalTestID = dataTestId || testID;
@@ -142,15 +183,25 @@ var Box = ({
142
183
  tabIndex,
143
184
  onKeyDown,
144
185
  onKeyUp,
145
- "aria-label": _ariaLabel,
186
+ "aria-label": ariaLabel,
146
187
  "aria-labelledby": _ariaLabelledBy,
147
188
  "aria-current": _ariaCurrent,
148
- "aria-disabled": _ariaDisabled,
149
- "aria-live": _ariaLive,
189
+ "aria-disabled": ariaDisabled,
190
+ "aria-live": ariaLive,
191
+ "aria-busy": ariaBusy,
150
192
  className,
151
193
  "data-testid": _dataTestId,
194
+ cursor: _cursor,
195
+ type: _type,
152
196
  ...nativeRest
153
197
  } = rest;
198
+ const accessibilityRole = typeof role === "string" && roleToAccessibilityRole[role] || (as === "button" ? "button" : void 0);
199
+ const isDisabled = Boolean(disabled || ariaDisabled);
200
+ const accessibilityState = {
201
+ disabled: isDisabled || void 0,
202
+ busy: Boolean(ariaBusy) || void 0
203
+ };
204
+ const accessibilityLiveRegion = ariaLive === "polite" || ariaLive === "assertive" ? ariaLive : void 0;
154
205
  if (as === "img" && src) {
155
206
  const imageStyle = {
156
207
  width,
@@ -169,16 +220,18 @@ var Box = ({
169
220
  source: { uri: src },
170
221
  style: imageStyle,
171
222
  testID: finalTestID,
223
+ accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : alt,
172
224
  resizeMode: "cover",
173
225
  ...nativeRest
174
226
  }
175
227
  );
176
228
  }
177
- if (onPress) {
229
+ if (onPress || as === "button") {
178
230
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
179
231
  import_react_native.Pressable,
180
232
  {
181
- onPress,
233
+ onPress: !isDisabled && onPress ? onPress : void 0,
234
+ disabled: isDisabled,
182
235
  onLayout,
183
236
  onMoveShouldSetResponder,
184
237
  onResponderGrant,
@@ -187,6 +240,10 @@ var Box = ({
187
240
  onResponderTerminate,
188
241
  style: ({ pressed }) => getContainerStyle(pressed),
189
242
  testID: finalTestID,
243
+ accessibilityRole,
244
+ accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
245
+ accessibilityState,
246
+ accessibilityLiveRegion,
190
247
  ...nativeRest,
191
248
  children
192
249
  }
@@ -203,6 +260,10 @@ var Box = ({
203
260
  onResponderMove,
204
261
  onResponderRelease,
205
262
  onResponderTerminate,
263
+ accessibilityRole,
264
+ accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
265
+ accessibilityState,
266
+ accessibilityLiveRegion,
206
267
  ...nativeRest,
207
268
  children
208
269
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/BottomBar.tsx","../../src/BottomBarItem.tsx"],"sourcesContent":["export { BottomBar } from \"./BottomBar\";\nexport { BottomBarItem } from \"./BottomBarItem\";\n\nexport type {\n BottomBarItemData,\n BottomBarItemProps,\n BottomBarItemState,\n BottomBarLinkProps,\n BottomBarProps,\n} from \"./types\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { BottomBarItem } from \"./BottomBarItem\";\nimport type { BottomBarProps } from \"./types\";\n\nconst MAX_ITEMS = 5;\n\nconst getDefaultMaxWidth = (count: number): number | string => {\n if (count <= 3) return 240;\n if (count === 4) return 294;\n return \"100%\";\n};\n\nexport const BottomBar: React.FC<BottomBarProps> = ({\n items,\n activeKey,\n onItemClick,\n linkComponent,\n maxWidth,\n \"aria-label\": ariaLabel = \"Bottom navigation\",\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const visibleItems = items.slice(0, MAX_ITEMS);\n\n return (\n <Box\n as=\"nav\"\n role=\"tablist\"\n aria-label={ariaLabel}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n maxWidth={maxWidth ?? getDefaultMaxWidth(visibleItems.length)}\n alignSelf=\"center\"\n height={56}\n padding={4}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.control.segmented.border}\n backgroundColor={theme.colors.control.segmented.bg}\n overflow=\"hidden\"\n testID={testID || \"bottom-bar\"}\n >\n {visibleItems.map((item) => (\n <BottomBarItem\n key={item.key}\n item={item}\n isActive={item.key === activeKey}\n onItemClick={onItemClick}\n linkComponent={linkComponent}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n ))}\n </Box>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { Badge } from \"@xsolla/xui-badge\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type { BottomBarItemProps } from \"./types\";\n\nconst renderIcon = (icon: React.ReactNode, size: number, color: string) => {\n if (!React.isValidElement(icon)) return icon;\n\n return React.cloneElement(\n icon as React.ReactElement<{ size?: number | string; color?: string }>,\n {\n size,\n color,\n }\n );\n};\n\nexport const BottomBarItem: React.FC<BottomBarItemProps> = ({\n item,\n state = \"default\",\n isActive,\n onItemClick,\n linkComponent: LinkComponent,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const isDisabled = Boolean(item.disabled) || state === \"disabled\";\n const resolvedState = isActive || state === \"active\" ? \"active\" : state;\n const active = resolvedState === \"active\" && !isDisabled;\n const contentColor = active\n ? theme.colors.content.primary\n : theme.colors.content.secondary;\n const backgroundColor = active\n ? theme.colors.control.segmented.bgActive\n : \"transparent\";\n const hoverBackground =\n theme.colors.control.segmented.bgHover || theme.colors.overlay.mono;\n\n const handlePress = () => {\n if (isDisabled) return;\n item.onPress?.();\n onItemClick?.(item);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n handlePress();\n };\n\n const content = (\n <Box\n width=\"100%\"\n height=\"100%\"\n minWidth={48}\n flex={1}\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n paddingHorizontal={8}\n paddingVertical={4}\n borderRadius={4}\n backgroundColor={backgroundColor}\n role={LinkComponent ? undefined : \"tab\"}\n aria-label={item.accessibilityLabel || item.label}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={isDisabled || undefined}\n tabIndex={isDisabled || LinkComponent ? undefined : 0}\n disabled={isDisabled}\n onPress={!LinkComponent && !isDisabled ? handlePress : undefined}\n onKeyDown={!LinkComponent && !isDisabled ? handleKeyDown : undefined}\n hoverStyle={\n !active && !isDisabled\n ? { backgroundColor: hoverBackground }\n : undefined\n }\n pressStyle={{ backgroundColor: hoverBackground }}\n testID={item.testID || `bottom-bar-item-${item.key}`}\n >\n <Box\n width={56}\n height={24}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {item.icon && renderIcon(item.icon, 24, contentColor)}\n {item.badge && (\n <Box position=\"absolute\" top={0} right={12} width={8} height={8}>\n <Badge\n size=\"sm\"\n square\n aria-label={`${item.label} has updates`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n )}\n </Box>\n <Text\n color={contentColor}\n fontFamily={theme.fonts.body}\n fontSize={10}\n lineHeight={14}\n fontWeight=\"400\"\n textAlign=\"center\"\n numberOfLines={1}\n style={{\n maxWidth: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </Text>\n </Box>\n );\n\n if (!LinkComponent) return content;\n\n return (\n <LinkComponent\n item={item}\n href={item.href}\n isActive={active}\n disabled={isDisabled}\n onPress={handlePress}\n testID={item.testID || `bottom-bar-link-${item.key}`}\n >\n {content}\n </LinkComponent>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_xui_core","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","../../src/BottomBar.tsx","../../src/BottomBarItem.tsx"],"sourcesContent":["export { BottomBar } from \"./BottomBar\";\nexport { BottomBarItem } from \"./BottomBarItem\";\n\nexport type {\n BottomBarItemData,\n BottomBarItemProps,\n BottomBarItemState,\n BottomBarLinkProps,\n BottomBarProps,\n} from \"./types\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { BottomBarItem } from \"./BottomBarItem\";\nimport type { BottomBarProps } from \"./types\";\n\nconst MAX_ITEMS = 5;\n\nconst getDefaultMaxWidth = (count: number): number | string => {\n if (count <= 3) return 240;\n if (count === 4) return 294;\n return \"100%\";\n};\n\nexport const BottomBar: React.FC<BottomBarProps> = ({\n items,\n activeKey,\n onItemClick,\n linkComponent,\n maxWidth,\n \"aria-label\": ariaLabel = \"Bottom navigation\",\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const visibleItems = items.slice(0, MAX_ITEMS);\n\n return (\n <Box\n as=\"nav\"\n role=\"tablist\"\n aria-label={ariaLabel}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n maxWidth={maxWidth ?? getDefaultMaxWidth(visibleItems.length)}\n alignSelf=\"center\"\n height={56}\n padding={4}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.control.segmented.border}\n backgroundColor={theme.colors.control.segmented.bg}\n overflow=\"hidden\"\n testID={testID || \"bottom-bar\"}\n >\n {visibleItems.map((item) => (\n <BottomBarItem\n key={item.key}\n item={item}\n isActive={item.key === activeKey}\n onItemClick={onItemClick}\n linkComponent={linkComponent}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n ))}\n </Box>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { Badge } from \"@xsolla/xui-badge\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type { BottomBarItemProps } from \"./types\";\n\nconst renderIcon = (icon: React.ReactNode, size: number, color: string) => {\n if (!React.isValidElement(icon)) return icon;\n\n return React.cloneElement(\n icon as React.ReactElement<{ size?: number | string; color?: string }>,\n {\n size,\n color,\n }\n );\n};\n\nexport const BottomBarItem: React.FC<BottomBarItemProps> = ({\n item,\n state = \"default\",\n isActive,\n onItemClick,\n linkComponent: LinkComponent,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const isDisabled = Boolean(item.disabled) || state === \"disabled\";\n const resolvedState = isActive || state === \"active\" ? \"active\" : state;\n const active = resolvedState === \"active\" && !isDisabled;\n const contentColor = active\n ? theme.colors.content.primary\n : theme.colors.content.secondary;\n const backgroundColor = active\n ? theme.colors.control.segmented.bgActive\n : \"transparent\";\n const hoverBackground =\n theme.colors.control.segmented.bgHover || theme.colors.overlay.mono;\n\n const handlePress = () => {\n if (isDisabled) return;\n item.onPress?.();\n onItemClick?.(item);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n handlePress();\n };\n\n const content = (\n <Box\n width=\"100%\"\n height=\"100%\"\n minWidth={48}\n flex={1}\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n paddingHorizontal={8}\n paddingVertical={4}\n borderRadius={4}\n backgroundColor={backgroundColor}\n role={LinkComponent ? undefined : \"tab\"}\n aria-label={item.accessibilityLabel || item.label}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={isDisabled || undefined}\n tabIndex={isDisabled || LinkComponent ? undefined : 0}\n disabled={isDisabled}\n onPress={!LinkComponent && !isDisabled ? handlePress : undefined}\n onKeyDown={!LinkComponent && !isDisabled ? handleKeyDown : undefined}\n hoverStyle={\n !active && !isDisabled\n ? { backgroundColor: hoverBackground }\n : undefined\n }\n pressStyle={{ backgroundColor: hoverBackground }}\n testID={item.testID || `bottom-bar-item-${item.key}`}\n >\n <Box\n width={56}\n height={24}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {item.icon && renderIcon(item.icon, 24, contentColor)}\n {item.badge && (\n <Box position=\"absolute\" top={0} right={12} width={8} height={8}>\n <Badge\n size=\"sm\"\n square\n aria-label={`${item.label} has updates`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n )}\n </Box>\n <Text\n color={contentColor}\n fontFamily={theme.fonts.body}\n fontSize={10}\n lineHeight={14}\n fontWeight=\"400\"\n textAlign=\"center\"\n numberOfLines={1}\n style={{\n maxWidth: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </Text>\n </Box>\n );\n\n if (!LinkComponent) return content;\n\n return (\n <LinkComponent\n item={item}\n href={item.href}\n isActive={active}\n disabled={isDisabled}\n onPress={handlePress}\n testID={item.testID || `bottom-bar-link-${item.key}`}\n >\n {content}\n </LinkComponent>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_xui_core","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","../../src/BottomBar.tsx","../../src/BottomBarItem.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { BottomBarItem } from \"./BottomBarItem\";\nimport type { BottomBarProps } from \"./types\";\n\nconst MAX_ITEMS = 5;\n\nconst getDefaultMaxWidth = (count: number): number | string => {\n if (count <= 3) return 240;\n if (count === 4) return 294;\n return \"100%\";\n};\n\nexport const BottomBar: React.FC<BottomBarProps> = ({\n items,\n activeKey,\n onItemClick,\n linkComponent,\n maxWidth,\n \"aria-label\": ariaLabel = \"Bottom navigation\",\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const visibleItems = items.slice(0, MAX_ITEMS);\n\n return (\n <Box\n as=\"nav\"\n role=\"tablist\"\n aria-label={ariaLabel}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n maxWidth={maxWidth ?? getDefaultMaxWidth(visibleItems.length)}\n alignSelf=\"center\"\n height={56}\n padding={4}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.control.segmented.border}\n backgroundColor={theme.colors.control.segmented.bg}\n overflow=\"hidden\"\n testID={testID || \"bottom-bar\"}\n >\n {visibleItems.map((item) => (\n <BottomBarItem\n key={item.key}\n item={item}\n isActive={item.key === activeKey}\n onItemClick={onItemClick}\n linkComponent={linkComponent}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n ))}\n </Box>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { Badge } from \"@xsolla/xui-badge\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type { BottomBarItemProps } from \"./types\";\n\nconst renderIcon = (icon: React.ReactNode, size: number, color: string) => {\n if (!React.isValidElement(icon)) return icon;\n\n return React.cloneElement(\n icon as React.ReactElement<{ size?: number | string; color?: string }>,\n {\n size,\n color,\n }\n );\n};\n\nexport const BottomBarItem: React.FC<BottomBarItemProps> = ({\n item,\n state = \"default\",\n isActive,\n onItemClick,\n linkComponent: LinkComponent,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const isDisabled = Boolean(item.disabled) || state === \"disabled\";\n const resolvedState = isActive || state === \"active\" ? \"active\" : state;\n const active = resolvedState === \"active\" && !isDisabled;\n const contentColor = active\n ? theme.colors.content.primary\n : theme.colors.content.secondary;\n const backgroundColor = active\n ? theme.colors.control.segmented.bgActive\n : \"transparent\";\n const hoverBackground =\n theme.colors.control.segmented.bgHover || theme.colors.overlay.mono;\n\n const handlePress = () => {\n if (isDisabled) return;\n item.onPress?.();\n onItemClick?.(item);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n handlePress();\n };\n\n const content = (\n <Box\n width=\"100%\"\n height=\"100%\"\n minWidth={48}\n flex={1}\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n paddingHorizontal={8}\n paddingVertical={4}\n borderRadius={4}\n backgroundColor={backgroundColor}\n role={LinkComponent ? undefined : \"tab\"}\n aria-label={item.accessibilityLabel || item.label}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={isDisabled || undefined}\n tabIndex={isDisabled || LinkComponent ? undefined : 0}\n disabled={isDisabled}\n onPress={!LinkComponent && !isDisabled ? handlePress : undefined}\n onKeyDown={!LinkComponent && !isDisabled ? handleKeyDown : undefined}\n hoverStyle={\n !active && !isDisabled\n ? { backgroundColor: hoverBackground }\n : undefined\n }\n pressStyle={{ backgroundColor: hoverBackground }}\n testID={item.testID || `bottom-bar-item-${item.key}`}\n >\n <Box\n width={56}\n height={24}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {item.icon && renderIcon(item.icon, 24, contentColor)}\n {item.badge && (\n <Box position=\"absolute\" top={0} right={12} width={8} height={8}>\n <Badge\n size=\"sm\"\n square\n aria-label={`${item.label} has updates`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n )}\n </Box>\n <Text\n color={contentColor}\n fontFamily={theme.fonts.body}\n fontSize={10}\n lineHeight={14}\n fontWeight=\"400\"\n textAlign=\"center\"\n numberOfLines={1}\n style={{\n maxWidth: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </Text>\n </Box>\n );\n\n if (!LinkComponent) return content;\n\n return (\n <LinkComponent\n item={item}\n href={item.href}\n isActive={active}\n disabled={isDisabled}\n onPress={handlePress}\n testID={item.testID || `bottom-bar-link-${item.key}`}\n >\n {content}\n </LinkComponent>\n );\n};\n"],"mappings":"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","names":["jsx","useResolvedTheme","jsx","jsx","useResolvedTheme"]}
1
+ {"version":3,"sources":["../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/BottomBar.tsx","../../src/BottomBarItem.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { BottomBarItem } from \"./BottomBarItem\";\nimport type { BottomBarProps } from \"./types\";\n\nconst MAX_ITEMS = 5;\n\nconst getDefaultMaxWidth = (count: number): number | string => {\n if (count <= 3) return 240;\n if (count === 4) return 294;\n return \"100%\";\n};\n\nexport const BottomBar: React.FC<BottomBarProps> = ({\n items,\n activeKey,\n onItemClick,\n linkComponent,\n maxWidth,\n \"aria-label\": ariaLabel = \"Bottom navigation\",\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const visibleItems = items.slice(0, MAX_ITEMS);\n\n return (\n <Box\n as=\"nav\"\n role=\"tablist\"\n aria-label={ariaLabel}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n maxWidth={maxWidth ?? getDefaultMaxWidth(visibleItems.length)}\n alignSelf=\"center\"\n height={56}\n padding={4}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.control.segmented.border}\n backgroundColor={theme.colors.control.segmented.bg}\n overflow=\"hidden\"\n testID={testID || \"bottom-bar\"}\n >\n {visibleItems.map((item) => (\n <BottomBarItem\n key={item.key}\n item={item}\n isActive={item.key === activeKey}\n onItemClick={onItemClick}\n linkComponent={linkComponent}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n ))}\n </Box>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { Badge } from \"@xsolla/xui-badge\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type { BottomBarItemProps } from \"./types\";\n\nconst renderIcon = (icon: React.ReactNode, size: number, color: string) => {\n if (!React.isValidElement(icon)) return icon;\n\n return React.cloneElement(\n icon as React.ReactElement<{ size?: number | string; color?: string }>,\n {\n size,\n color,\n }\n );\n};\n\nexport const BottomBarItem: React.FC<BottomBarItemProps> = ({\n item,\n state = \"default\",\n isActive,\n onItemClick,\n linkComponent: LinkComponent,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const isDisabled = Boolean(item.disabled) || state === \"disabled\";\n const resolvedState = isActive || state === \"active\" ? \"active\" : state;\n const active = resolvedState === \"active\" && !isDisabled;\n const contentColor = active\n ? theme.colors.content.primary\n : theme.colors.content.secondary;\n const backgroundColor = active\n ? theme.colors.control.segmented.bgActive\n : \"transparent\";\n const hoverBackground =\n theme.colors.control.segmented.bgHover || theme.colors.overlay.mono;\n\n const handlePress = () => {\n if (isDisabled) return;\n item.onPress?.();\n onItemClick?.(item);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n event.preventDefault();\n handlePress();\n };\n\n const content = (\n <Box\n width=\"100%\"\n height=\"100%\"\n minWidth={48}\n flex={1}\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={2}\n paddingHorizontal={8}\n paddingVertical={4}\n borderRadius={4}\n backgroundColor={backgroundColor}\n role={LinkComponent ? undefined : \"tab\"}\n aria-label={item.accessibilityLabel || item.label}\n aria-current={active ? \"page\" : undefined}\n aria-disabled={isDisabled || undefined}\n tabIndex={isDisabled || LinkComponent ? undefined : 0}\n disabled={isDisabled}\n onPress={!LinkComponent && !isDisabled ? handlePress : undefined}\n onKeyDown={!LinkComponent && !isDisabled ? handleKeyDown : undefined}\n hoverStyle={\n !active && !isDisabled\n ? { backgroundColor: hoverBackground }\n : undefined\n }\n pressStyle={{ backgroundColor: hoverBackground }}\n testID={item.testID || `bottom-bar-item-${item.key}`}\n >\n <Box\n width={56}\n height={24}\n position=\"relative\"\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n >\n {item.icon && renderIcon(item.icon, 24, contentColor)}\n {item.badge && (\n <Box position=\"absolute\" top={0} right={12} width={8} height={8}>\n <Badge\n size=\"sm\"\n square\n aria-label={`${item.label} has updates`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n </Box>\n )}\n </Box>\n <Text\n color={contentColor}\n fontFamily={theme.fonts.body}\n fontSize={10}\n lineHeight={14}\n fontWeight=\"400\"\n textAlign=\"center\"\n numberOfLines={1}\n style={{\n maxWidth: \"100%\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {item.label}\n </Text>\n </Box>\n );\n\n if (!LinkComponent) return content;\n\n return (\n <LinkComponent\n item={item}\n href={item.href}\n isActive={active}\n disabled={isDisabled}\n onPress={handlePress}\n testID={item.testID || `bottom-bar-link-${item.key}`}\n >\n {content}\n </LinkComponent>\n );\n};\n"],"mappings":"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","names":["jsx","useResolvedTheme","jsx","jsx","useResolvedTheme"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-b2c-bottom-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",
@@ -13,10 +13,10 @@
13
13
  "test:coverage": "vitest run --coverage"
14
14
  },
15
15
  "dependencies": {
16
- "@xsolla/xui-badge": "0.199.0",
17
- "@xsolla/xui-core": "0.199.0",
18
- "@xsolla/xui-icons": "0.199.0",
19
- "@xsolla/xui-primitives-core": "0.199.0"
16
+ "@xsolla/xui-badge": "0.201.0",
17
+ "@xsolla/xui-core": "0.201.0",
18
+ "@xsolla/xui-icons": "0.201.0",
19
+ "@xsolla/xui-primitives-core": "0.201.0"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "react": ">=16.8.0",