@xsolla/xui-b2c-side-navigation 0.156.0-pr297.1779158853

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/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # @xsolla/xui-b2c-side-navigation
2
+
3
+ B2C side navigation for player-facing product surfaces.
@@ -0,0 +1,48 @@
1
+ import React$1, { ReactNode } from 'react';
2
+ import { ThemeOverrideProps } from '@xsolla/xui-core';
3
+
4
+ type SideNavigationMode = "expanded" | "collapsed";
5
+ type SideNavigationItemState = "default" | "hover" | "active";
6
+ interface SideNavigationItemData {
7
+ key: string;
8
+ label: string;
9
+ shortLabel?: string;
10
+ href?: string;
11
+ icon?: ReactNode;
12
+ disabled?: boolean;
13
+ testID?: string;
14
+ accessibilityLabel?: string;
15
+ onPress?: () => void;
16
+ }
17
+ interface SideNavigationLinkProps {
18
+ item: SideNavigationItemData;
19
+ href?: string;
20
+ isActive: boolean;
21
+ disabled?: boolean;
22
+ onPress: () => void;
23
+ testID?: string;
24
+ children: ReactNode;
25
+ }
26
+ interface SideNavigationItemProps extends ThemeOverrideProps {
27
+ item: SideNavigationItemData;
28
+ mode?: SideNavigationMode;
29
+ state?: SideNavigationItemState;
30
+ isActive?: boolean;
31
+ onItemClick?: (item: SideNavigationItemData) => void;
32
+ linkComponent?: React.ComponentType<SideNavigationLinkProps>;
33
+ }
34
+ interface SideNavigationProps extends ThemeOverrideProps {
35
+ mode?: SideNavigationMode;
36
+ items: SideNavigationItemData[];
37
+ activeKey?: string;
38
+ onItemClick?: (item: SideNavigationItemData) => void;
39
+ linkComponent?: React.ComponentType<SideNavigationLinkProps>;
40
+ "aria-label"?: string;
41
+ testID?: string;
42
+ }
43
+
44
+ declare const SideNavigation: React$1.FC<SideNavigationProps>;
45
+
46
+ declare const SideNavigationItem: React$1.FC<SideNavigationItemProps>;
47
+
48
+ export { SideNavigation, SideNavigationItem, type SideNavigationItemData, type SideNavigationItemProps, type SideNavigationItemState, type SideNavigationLinkProps, type SideNavigationMode, type SideNavigationProps };
@@ -0,0 +1,48 @@
1
+ import React$1, { ReactNode } from 'react';
2
+ import { ThemeOverrideProps } from '@xsolla/xui-core';
3
+
4
+ type SideNavigationMode = "expanded" | "collapsed";
5
+ type SideNavigationItemState = "default" | "hover" | "active";
6
+ interface SideNavigationItemData {
7
+ key: string;
8
+ label: string;
9
+ shortLabel?: string;
10
+ href?: string;
11
+ icon?: ReactNode;
12
+ disabled?: boolean;
13
+ testID?: string;
14
+ accessibilityLabel?: string;
15
+ onPress?: () => void;
16
+ }
17
+ interface SideNavigationLinkProps {
18
+ item: SideNavigationItemData;
19
+ href?: string;
20
+ isActive: boolean;
21
+ disabled?: boolean;
22
+ onPress: () => void;
23
+ testID?: string;
24
+ children: ReactNode;
25
+ }
26
+ interface SideNavigationItemProps extends ThemeOverrideProps {
27
+ item: SideNavigationItemData;
28
+ mode?: SideNavigationMode;
29
+ state?: SideNavigationItemState;
30
+ isActive?: boolean;
31
+ onItemClick?: (item: SideNavigationItemData) => void;
32
+ linkComponent?: React.ComponentType<SideNavigationLinkProps>;
33
+ }
34
+ interface SideNavigationProps extends ThemeOverrideProps {
35
+ mode?: SideNavigationMode;
36
+ items: SideNavigationItemData[];
37
+ activeKey?: string;
38
+ onItemClick?: (item: SideNavigationItemData) => void;
39
+ linkComponent?: React.ComponentType<SideNavigationLinkProps>;
40
+ "aria-label"?: string;
41
+ testID?: string;
42
+ }
43
+
44
+ declare const SideNavigation: React$1.FC<SideNavigationProps>;
45
+
46
+ declare const SideNavigationItem: React$1.FC<SideNavigationItemProps>;
47
+
48
+ export { SideNavigation, SideNavigationItem, type SideNavigationItemData, type SideNavigationItemProps, type SideNavigationItemState, type SideNavigationLinkProps, type SideNavigationMode, type SideNavigationProps };
@@ -0,0 +1,471 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.tsx
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ SideNavigation: () => SideNavigation,
34
+ SideNavigationItem: () => SideNavigationItem
35
+ });
36
+ module.exports = __toCommonJS(index_exports);
37
+
38
+ // ../../foundation/primitives-native/src/Box.tsx
39
+ var import_react_native = require("react-native");
40
+ var import_jsx_runtime = require("react/jsx-runtime");
41
+ var Box = ({
42
+ children,
43
+ onPress,
44
+ onLayout,
45
+ onMoveShouldSetResponder,
46
+ onResponderGrant,
47
+ onResponderMove,
48
+ onResponderRelease,
49
+ onResponderTerminate,
50
+ backgroundColor,
51
+ borderColor,
52
+ borderWidth,
53
+ borderBottomWidth,
54
+ borderBottomColor,
55
+ borderTopWidth,
56
+ borderTopColor,
57
+ borderLeftWidth,
58
+ borderLeftColor,
59
+ borderRightWidth,
60
+ borderRightColor,
61
+ borderRadius,
62
+ borderStyle,
63
+ height,
64
+ padding,
65
+ paddingHorizontal,
66
+ paddingVertical,
67
+ margin,
68
+ marginTop,
69
+ marginBottom,
70
+ marginLeft,
71
+ marginRight,
72
+ flexDirection,
73
+ alignItems,
74
+ justifyContent,
75
+ position,
76
+ top,
77
+ bottom,
78
+ left,
79
+ right,
80
+ width,
81
+ minWidth,
82
+ minHeight,
83
+ maxWidth,
84
+ maxHeight,
85
+ flex,
86
+ overflow,
87
+ zIndex,
88
+ hoverStyle,
89
+ pressStyle,
90
+ style,
91
+ "data-testid": dataTestId,
92
+ testID,
93
+ as,
94
+ src,
95
+ alt,
96
+ ...rest
97
+ }) => {
98
+ const getContainerStyle = (pressed) => ({
99
+ backgroundColor: pressed && pressStyle?.backgroundColor ? pressStyle.backgroundColor : backgroundColor,
100
+ borderColor,
101
+ borderWidth,
102
+ borderBottomWidth,
103
+ borderBottomColor,
104
+ borderTopWidth,
105
+ borderTopColor,
106
+ borderLeftWidth,
107
+ borderLeftColor,
108
+ borderRightWidth,
109
+ borderRightColor,
110
+ borderRadius,
111
+ borderStyle,
112
+ overflow,
113
+ zIndex,
114
+ height,
115
+ width,
116
+ minWidth,
117
+ minHeight,
118
+ maxWidth,
119
+ maxHeight,
120
+ padding,
121
+ paddingHorizontal,
122
+ paddingVertical,
123
+ margin,
124
+ marginTop,
125
+ marginBottom,
126
+ marginLeft,
127
+ marginRight,
128
+ flexDirection,
129
+ alignItems,
130
+ justifyContent,
131
+ position,
132
+ top,
133
+ bottom,
134
+ left,
135
+ right,
136
+ flex,
137
+ ...style
138
+ });
139
+ const finalTestID = dataTestId || testID;
140
+ const {
141
+ role,
142
+ tabIndex,
143
+ onKeyDown,
144
+ onKeyUp,
145
+ "aria-label": _ariaLabel,
146
+ "aria-labelledby": _ariaLabelledBy,
147
+ "aria-current": _ariaCurrent,
148
+ "aria-disabled": _ariaDisabled,
149
+ "aria-live": _ariaLive,
150
+ className,
151
+ "data-testid": _dataTestId,
152
+ ...nativeRest
153
+ } = rest;
154
+ if (as === "img" && src) {
155
+ const imageStyle = {
156
+ width,
157
+ height,
158
+ borderRadius,
159
+ position,
160
+ top,
161
+ bottom,
162
+ left,
163
+ right,
164
+ ...style
165
+ };
166
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
167
+ import_react_native.Image,
168
+ {
169
+ source: { uri: src },
170
+ style: imageStyle,
171
+ testID: finalTestID,
172
+ resizeMode: "cover",
173
+ ...nativeRest
174
+ }
175
+ );
176
+ }
177
+ if (onPress) {
178
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
179
+ import_react_native.Pressable,
180
+ {
181
+ onPress,
182
+ onLayout,
183
+ onMoveShouldSetResponder,
184
+ onResponderGrant,
185
+ onResponderMove,
186
+ onResponderRelease,
187
+ onResponderTerminate,
188
+ style: ({ pressed }) => getContainerStyle(pressed),
189
+ testID: finalTestID,
190
+ ...nativeRest,
191
+ children
192
+ }
193
+ );
194
+ }
195
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
196
+ import_react_native.View,
197
+ {
198
+ style: getContainerStyle(),
199
+ testID: finalTestID,
200
+ onLayout,
201
+ onMoveShouldSetResponder,
202
+ onResponderGrant,
203
+ onResponderMove,
204
+ onResponderRelease,
205
+ onResponderTerminate,
206
+ ...nativeRest,
207
+ children
208
+ }
209
+ );
210
+ };
211
+
212
+ // ../../foundation/primitives-native/src/Text.tsx
213
+ var import_react_native2 = require("react-native");
214
+ var import_jsx_runtime2 = require("react/jsx-runtime");
215
+ var roleMap = {
216
+ alert: "alert",
217
+ heading: "header",
218
+ button: "button",
219
+ link: "link",
220
+ text: "text"
221
+ };
222
+ var parseNumericValue = (value) => {
223
+ if (value === void 0) return void 0;
224
+ if (typeof value === "number") return value;
225
+ const parsed = parseFloat(value);
226
+ return isNaN(parsed) ? void 0 : parsed;
227
+ };
228
+ var Text = ({
229
+ children,
230
+ color,
231
+ fontSize,
232
+ fontWeight,
233
+ fontFamily,
234
+ textAlign,
235
+ lineHeight,
236
+ numberOfLines,
237
+ id,
238
+ role,
239
+ style: styleProp,
240
+ ...props
241
+ }) => {
242
+ let resolvedFontFamily = fontFamily ? fontFamily.split(",")[0].replace(/['"]/g, "").trim() : void 0;
243
+ if (resolvedFontFamily === "Pilat Wide" || resolvedFontFamily === "Pilat Wide Bold" || resolvedFontFamily === "Aktiv Grotesk") {
244
+ resolvedFontFamily = void 0;
245
+ }
246
+ const incomingStyle = import_react_native2.StyleSheet.flatten(styleProp);
247
+ const baseStyle = {
248
+ color: color ?? incomingStyle?.color,
249
+ fontSize: typeof fontSize === "number" ? fontSize : void 0,
250
+ fontWeight,
251
+ fontFamily: resolvedFontFamily,
252
+ textDecorationLine: props.textDecoration,
253
+ textAlign: textAlign ?? incomingStyle?.textAlign,
254
+ lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),
255
+ marginTop: parseNumericValue(
256
+ incomingStyle?.marginTop
257
+ ),
258
+ marginBottom: parseNumericValue(
259
+ incomingStyle?.marginBottom
260
+ )
261
+ };
262
+ const accessibilityRole = role ? roleMap[role] : void 0;
263
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
264
+ import_react_native2.Text,
265
+ {
266
+ style: baseStyle,
267
+ numberOfLines,
268
+ testID: id,
269
+ accessibilityRole,
270
+ children
271
+ }
272
+ );
273
+ };
274
+
275
+ // src/SideNavigationItem.tsx
276
+ var import_react = __toESM(require("react"));
277
+ var import_xui_core = require("@xsolla/xui-core");
278
+ var import_jsx_runtime3 = require("react/jsx-runtime");
279
+ var ACTIVE_ICON_COLOR_FALLBACK = "#80eaff";
280
+ var modeConfig = {
281
+ expanded: {
282
+ itemWidth: "100%",
283
+ minHeight: 56,
284
+ flexDirection: "row",
285
+ alignItems: "center",
286
+ justifyContent: "flex-start",
287
+ paddingHorizontal: 16,
288
+ paddingVertical: 16,
289
+ gap: 12,
290
+ iconSize: 24,
291
+ labelFontSize: 16,
292
+ labelLineHeight: 20,
293
+ labelAlign: "left",
294
+ labelLines: 1
295
+ },
296
+ collapsed: {
297
+ itemWidth: 62,
298
+ minHeight: 56,
299
+ flexDirection: "column",
300
+ alignItems: "center",
301
+ justifyContent: "center",
302
+ paddingHorizontal: 4,
303
+ paddingVertical: 8,
304
+ gap: 4,
305
+ iconSize: 24,
306
+ labelFontSize: 12,
307
+ labelLineHeight: 16,
308
+ labelAlign: "center",
309
+ labelLines: 2
310
+ }
311
+ };
312
+ var getDisplayLabel = (item, mode) => mode === "collapsed" ? item.shortLabel || item.label : item.label;
313
+ var renderIcon = (icon, size, color) => {
314
+ if (!import_react.default.isValidElement(icon)) return icon;
315
+ return import_react.default.cloneElement(
316
+ icon,
317
+ {
318
+ size,
319
+ color
320
+ }
321
+ );
322
+ };
323
+ var SideNavigationItem = ({
324
+ item,
325
+ mode = "expanded",
326
+ state = "default",
327
+ isActive,
328
+ onItemClick,
329
+ linkComponent: LinkComponent,
330
+ themeMode,
331
+ themeProductContext = "b2c"
332
+ }) => {
333
+ const { theme } = (0, import_xui_core.useResolvedTheme)({ themeMode, themeProductContext });
334
+ const config = modeConfig[mode];
335
+ const resolvedState = isActive || state === "active" ? "active" : state;
336
+ const isDisabled = Boolean(item.disabled);
337
+ const backgroundColor = resolvedState === "active" || resolvedState === "hover" ? theme.colors.overlay.mono : "transparent";
338
+ const borderColor = resolvedState === "active" ? theme.colors.border.secondary : "transparent";
339
+ const labelColor = theme.colors.content.primary;
340
+ const iconColor = resolvedState === "active" ? theme.colors.background.brand?.primary || ACTIVE_ICON_COLOR_FALLBACK : theme.colors.content.tertiary;
341
+ const handlePress = () => {
342
+ if (isDisabled) return;
343
+ item.onPress?.();
344
+ onItemClick?.(item);
345
+ };
346
+ const content = /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
347
+ Box,
348
+ {
349
+ as: !LinkComponent && !isDisabled ? "button" : void 0,
350
+ width: config.itemWidth,
351
+ minHeight: config.minHeight,
352
+ flexDirection: config.flexDirection,
353
+ alignItems: config.alignItems,
354
+ justifyContent: config.justifyContent,
355
+ paddingHorizontal: config.paddingHorizontal,
356
+ paddingVertical: config.paddingVertical,
357
+ gap: config.gap,
358
+ backgroundColor,
359
+ borderColor,
360
+ borderWidth: resolvedState === "active" ? 1 : 0,
361
+ borderRadius: 8,
362
+ role: LinkComponent ? void 0 : "button",
363
+ "aria-label": item.accessibilityLabel || item.label,
364
+ "aria-current": resolvedState === "active" ? "page" : void 0,
365
+ "aria-disabled": isDisabled || void 0,
366
+ disabled: isDisabled,
367
+ onPress: !LinkComponent && !isDisabled ? handlePress : void 0,
368
+ hoverStyle: resolvedState === "default" ? { backgroundColor: theme.colors.overlay.mono } : void 0,
369
+ pressStyle: { backgroundColor: theme.colors.overlay.mono },
370
+ testID: item.testID || `side-navigation-item-${item.key}`,
371
+ children: [
372
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
373
+ Box,
374
+ {
375
+ width: config.iconSize,
376
+ height: config.iconSize,
377
+ flexShrink: 0,
378
+ alignItems: "center",
379
+ justifyContent: "center",
380
+ children: renderIcon(item.icon, config.iconSize, iconColor)
381
+ }
382
+ ),
383
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
384
+ Text,
385
+ {
386
+ color: labelColor,
387
+ fontFamily: theme.fonts.body,
388
+ fontSize: config.labelFontSize,
389
+ lineHeight: config.labelLineHeight,
390
+ fontWeight: "400",
391
+ textAlign: config.labelAlign,
392
+ numberOfLines: config.labelLines,
393
+ children: getDisplayLabel(item, mode)
394
+ }
395
+ )
396
+ ]
397
+ }
398
+ );
399
+ if (!LinkComponent) return content;
400
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
401
+ LinkComponent,
402
+ {
403
+ item,
404
+ href: item.href,
405
+ isActive: resolvedState === "active",
406
+ disabled: isDisabled,
407
+ onPress: handlePress,
408
+ testID: item.testID || `side-navigation-link-${item.key}`,
409
+ children: content
410
+ }
411
+ );
412
+ };
413
+
414
+ // src/SideNavigation.tsx
415
+ var import_jsx_runtime4 = require("react/jsx-runtime");
416
+ var modeConfig2 = {
417
+ expanded: {
418
+ width: 280,
419
+ alignItems: "stretch"
420
+ },
421
+ collapsed: {
422
+ width: 78,
423
+ alignItems: "center"
424
+ }
425
+ };
426
+ var SideNavigation = ({
427
+ mode = "expanded",
428
+ items = [],
429
+ activeKey,
430
+ onItemClick,
431
+ linkComponent,
432
+ "aria-label": ariaLabel = "Side navigation",
433
+ testID,
434
+ themeMode,
435
+ themeProductContext = "b2c"
436
+ }) => {
437
+ const config = modeConfig2[mode];
438
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
439
+ Box,
440
+ {
441
+ as: "nav",
442
+ role: "navigation",
443
+ "aria-label": ariaLabel,
444
+ width: config.width,
445
+ flexDirection: "column",
446
+ alignItems: config.alignItems,
447
+ gap: 16,
448
+ paddingHorizontal: 8,
449
+ testID: testID || "side-navigation",
450
+ children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
451
+ SideNavigationItem,
452
+ {
453
+ item,
454
+ mode,
455
+ isActive: item.key === activeKey,
456
+ onItemClick,
457
+ linkComponent,
458
+ themeMode,
459
+ themeProductContext
460
+ },
461
+ item.key
462
+ ))
463
+ }
464
+ );
465
+ };
466
+ // Annotate the CommonJS export names for ESM import in node:
467
+ 0 && (module.exports = {
468
+ SideNavigation,
469
+ SideNavigationItem
470
+ });
471
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../src/SideNavigationItem.tsx","../../src/SideNavigation.tsx"],"sourcesContent":["export { SideNavigation } from \"./SideNavigation\";\nexport { SideNavigationItem } from \"./SideNavigationItem\";\n\nexport type {\n SideNavigationItemData,\n SideNavigationItemProps,\n SideNavigationItemState,\n SideNavigationLinkProps,\n SideNavigationMode,\n SideNavigationProps,\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 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={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport type {\n SideNavigationItemData,\n SideNavigationItemProps,\n SideNavigationMode,\n} from \"./types\";\n\nconst ACTIVE_ICON_COLOR_FALLBACK = \"#80eaff\";\n\nconst modeConfig = {\n expanded: {\n itemWidth: \"100%\",\n minHeight: 56,\n flexDirection: \"row\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"flex-start\" as const,\n paddingHorizontal: 16,\n paddingVertical: 16,\n gap: 12,\n iconSize: 24,\n labelFontSize: 16,\n labelLineHeight: 20,\n labelAlign: \"left\" as const,\n labelLines: 1,\n },\n collapsed: {\n itemWidth: 62,\n minHeight: 56,\n flexDirection: \"column\" as const,\n alignItems: \"center\" as const,\n justifyContent: \"center\" as const,\n paddingHorizontal: 4,\n paddingVertical: 8,\n gap: 4,\n iconSize: 24,\n labelFontSize: 12,\n labelLineHeight: 16,\n labelAlign: \"center\" as const,\n labelLines: 2,\n },\n};\n\nconst getDisplayLabel = (\n item: SideNavigationItemData,\n mode: SideNavigationMode\n) => (mode === \"collapsed\" ? item.shortLabel || item.label : item.label);\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 SideNavigationItem: React.FC<SideNavigationItemProps> = ({\n item,\n mode = \"expanded\",\n state = \"default\",\n isActive,\n onItemClick,\n linkComponent: LinkComponent,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const config = modeConfig[mode];\n const resolvedState = isActive || state === \"active\" ? \"active\" : state;\n const isDisabled = Boolean(item.disabled);\n const backgroundColor =\n resolvedState === \"active\" || resolvedState === \"hover\"\n ? theme.colors.overlay.mono\n : \"transparent\";\n const borderColor =\n resolvedState === \"active\" ? theme.colors.border.secondary : \"transparent\";\n const labelColor = theme.colors.content.primary;\n const iconColor =\n resolvedState === \"active\"\n ? theme.colors.background.brand?.primary || ACTIVE_ICON_COLOR_FALLBACK\n : theme.colors.content.tertiary;\n\n const handlePress = () => {\n if (isDisabled) return;\n item.onPress?.();\n onItemClick?.(item);\n };\n\n const content = (\n <Box\n as={!LinkComponent && !isDisabled ? \"button\" : undefined}\n width={config.itemWidth}\n minHeight={config.minHeight}\n flexDirection={config.flexDirection}\n alignItems={config.alignItems}\n justifyContent={config.justifyContent}\n paddingHorizontal={config.paddingHorizontal}\n paddingVertical={config.paddingVertical}\n gap={config.gap}\n backgroundColor={backgroundColor}\n borderColor={borderColor}\n borderWidth={resolvedState === \"active\" ? 1 : 0}\n borderRadius={8}\n role={LinkComponent ? undefined : \"button\"}\n aria-label={item.accessibilityLabel || item.label}\n aria-current={resolvedState === \"active\" ? \"page\" : undefined}\n aria-disabled={isDisabled || undefined}\n disabled={isDisabled}\n onPress={!LinkComponent && !isDisabled ? handlePress : undefined}\n hoverStyle={\n resolvedState === \"default\"\n ? { backgroundColor: theme.colors.overlay.mono }\n : undefined\n }\n pressStyle={{ backgroundColor: theme.colors.overlay.mono }}\n testID={item.testID || `side-navigation-item-${item.key}`}\n >\n {item.icon && (\n <Box\n width={config.iconSize}\n height={config.iconSize}\n flexShrink={0}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {renderIcon(item.icon, config.iconSize, iconColor)}\n </Box>\n )}\n <Text\n color={labelColor}\n fontFamily={theme.fonts.body}\n fontSize={config.labelFontSize}\n lineHeight={config.labelLineHeight}\n fontWeight=\"400\"\n textAlign={config.labelAlign}\n numberOfLines={config.labelLines}\n >\n {getDisplayLabel(item, mode)}\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={resolvedState === \"active\"}\n disabled={isDisabled}\n onPress={handlePress}\n testID={item.testID || `side-navigation-link-${item.key}`}\n >\n {content}\n </LinkComponent>\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 type { SideNavigationProps } from \"./types\";\nimport { SideNavigationItem } from \"./SideNavigationItem\";\n\nconst modeConfig = {\n expanded: {\n width: 280,\n alignItems: \"stretch\" as const,\n },\n collapsed: {\n width: 78,\n alignItems: \"center\" as const,\n },\n};\n\nexport const SideNavigation: React.FC<SideNavigationProps> = ({\n mode = \"expanded\",\n items = [],\n activeKey,\n onItemClick,\n linkComponent,\n \"aria-label\": ariaLabel = \"Side navigation\",\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const config = modeConfig[mode];\n\n return (\n <Box\n as=\"nav\"\n role=\"navigation\"\n aria-label={ariaLabel}\n width={config.width}\n flexDirection=\"column\"\n alignItems={config.alignItems}\n gap={16}\n paddingHorizontal={8}\n testID={testID || \"side-navigation\"}\n >\n {items.map((item) => (\n <SideNavigationItem\n key={item.key}\n item={item}\n mode={mode}\n isActive={item.key === activeKey}\n onItemClick={onItemClick}\n linkComponent={linkComponent}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n ))}\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_jsx_runtime","React","import_jsx_runtime","modeConfig"]}