@xsolla/xui-b2c-other-card 0.202.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/README.md +4 -0
- package/native/index.d.mts +49 -0
- package/native/index.d.ts +49 -0
- package/native/index.js +629 -0
- package/native/index.js.map +1 -0
- package/native/index.mjs +599 -0
- package/native/index.mjs.map +1 -0
- package/package.json +57 -0
- package/web/index.d.mts +49 -0
- package/web/index.d.ts +49 -0
- package/web/index.js +4185 -0
- package/web/index.js.map +1 -0
- package/web/index.mjs +4171 -0
- package/web/index.mjs.map +1 -0
package/native/index.js
ADDED
|
@@ -0,0 +1,629 @@
|
|
|
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
|
+
OtherCard: () => OtherCard
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(index_exports);
|
|
36
|
+
|
|
37
|
+
// src/OtherCard.tsx
|
|
38
|
+
var import_react = __toESM(require("react"));
|
|
39
|
+
|
|
40
|
+
// ../../foundation/primitives-native/src/Box.tsx
|
|
41
|
+
var import_react_native = require("react-native");
|
|
42
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
43
|
+
var roleToAccessibilityRole = {
|
|
44
|
+
button: "button",
|
|
45
|
+
link: "link",
|
|
46
|
+
img: "image",
|
|
47
|
+
image: "image",
|
|
48
|
+
summary: "summary",
|
|
49
|
+
switch: "switch",
|
|
50
|
+
checkbox: "checkbox",
|
|
51
|
+
radio: "radio",
|
|
52
|
+
heading: "header",
|
|
53
|
+
text: "text",
|
|
54
|
+
search: "search",
|
|
55
|
+
alert: "alert",
|
|
56
|
+
none: "none",
|
|
57
|
+
presentation: "none",
|
|
58
|
+
progressbar: "progressbar",
|
|
59
|
+
scrollbar: "scrollbar",
|
|
60
|
+
adjustable: "adjustable",
|
|
61
|
+
tab: "tab",
|
|
62
|
+
menu: "menu",
|
|
63
|
+
menuitem: "menuitem",
|
|
64
|
+
list: "list",
|
|
65
|
+
timer: "timer"
|
|
66
|
+
};
|
|
67
|
+
var toGapValue = (gap) => {
|
|
68
|
+
if (gap === void 0) return void 0;
|
|
69
|
+
if (typeof gap === "number") return gap;
|
|
70
|
+
const pxMatch = /^(\d+(?:\.\d+)?)px$/.exec(gap);
|
|
71
|
+
if (pxMatch) return Number(pxMatch[1]);
|
|
72
|
+
const asNumber = Number(gap);
|
|
73
|
+
return Number.isFinite(asNumber) ? asNumber : void 0;
|
|
74
|
+
};
|
|
75
|
+
var Box = ({
|
|
76
|
+
children,
|
|
77
|
+
onPress,
|
|
78
|
+
onLayout,
|
|
79
|
+
onMoveShouldSetResponder,
|
|
80
|
+
onResponderGrant,
|
|
81
|
+
onResponderMove,
|
|
82
|
+
onResponderRelease,
|
|
83
|
+
onResponderTerminate,
|
|
84
|
+
backgroundColor,
|
|
85
|
+
borderColor,
|
|
86
|
+
borderWidth,
|
|
87
|
+
borderBottomWidth,
|
|
88
|
+
borderBottomColor,
|
|
89
|
+
borderTopWidth,
|
|
90
|
+
borderTopColor,
|
|
91
|
+
borderLeftWidth,
|
|
92
|
+
borderLeftColor,
|
|
93
|
+
borderRightWidth,
|
|
94
|
+
borderRightColor,
|
|
95
|
+
borderRadius,
|
|
96
|
+
borderStyle,
|
|
97
|
+
height,
|
|
98
|
+
padding,
|
|
99
|
+
paddingHorizontal,
|
|
100
|
+
paddingVertical,
|
|
101
|
+
margin,
|
|
102
|
+
marginTop,
|
|
103
|
+
marginBottom,
|
|
104
|
+
marginLeft,
|
|
105
|
+
marginRight,
|
|
106
|
+
flexDirection,
|
|
107
|
+
flexWrap,
|
|
108
|
+
alignItems,
|
|
109
|
+
justifyContent,
|
|
110
|
+
alignSelf,
|
|
111
|
+
position,
|
|
112
|
+
top,
|
|
113
|
+
bottom,
|
|
114
|
+
left,
|
|
115
|
+
right,
|
|
116
|
+
width,
|
|
117
|
+
minWidth,
|
|
118
|
+
minHeight,
|
|
119
|
+
maxWidth,
|
|
120
|
+
maxHeight,
|
|
121
|
+
flex,
|
|
122
|
+
flexShrink,
|
|
123
|
+
gap,
|
|
124
|
+
overflow,
|
|
125
|
+
opacity,
|
|
126
|
+
zIndex,
|
|
127
|
+
hoverStyle,
|
|
128
|
+
pressStyle,
|
|
129
|
+
style,
|
|
130
|
+
disabled,
|
|
131
|
+
"data-testid": dataTestId,
|
|
132
|
+
testID,
|
|
133
|
+
as,
|
|
134
|
+
src,
|
|
135
|
+
alt,
|
|
136
|
+
...rest
|
|
137
|
+
}) => {
|
|
138
|
+
const getContainerStyle = (pressed) => ({
|
|
139
|
+
backgroundColor: pressed && pressStyle?.backgroundColor ? pressStyle.backgroundColor : backgroundColor,
|
|
140
|
+
borderColor,
|
|
141
|
+
borderWidth,
|
|
142
|
+
borderBottomWidth,
|
|
143
|
+
borderBottomColor,
|
|
144
|
+
borderTopWidth,
|
|
145
|
+
borderTopColor,
|
|
146
|
+
borderLeftWidth,
|
|
147
|
+
borderLeftColor,
|
|
148
|
+
borderRightWidth,
|
|
149
|
+
borderRightColor,
|
|
150
|
+
borderRadius,
|
|
151
|
+
borderStyle,
|
|
152
|
+
overflow,
|
|
153
|
+
opacity: opacity ?? (disabled ? 0.5 : void 0),
|
|
154
|
+
zIndex,
|
|
155
|
+
height,
|
|
156
|
+
width,
|
|
157
|
+
minWidth,
|
|
158
|
+
minHeight,
|
|
159
|
+
maxWidth,
|
|
160
|
+
maxHeight,
|
|
161
|
+
padding,
|
|
162
|
+
paddingHorizontal,
|
|
163
|
+
paddingVertical,
|
|
164
|
+
margin,
|
|
165
|
+
marginTop,
|
|
166
|
+
marginBottom,
|
|
167
|
+
marginLeft,
|
|
168
|
+
marginRight,
|
|
169
|
+
flexDirection,
|
|
170
|
+
flexWrap,
|
|
171
|
+
alignItems,
|
|
172
|
+
justifyContent,
|
|
173
|
+
alignSelf,
|
|
174
|
+
position,
|
|
175
|
+
top,
|
|
176
|
+
bottom,
|
|
177
|
+
left,
|
|
178
|
+
right,
|
|
179
|
+
flex,
|
|
180
|
+
flexShrink,
|
|
181
|
+
gap: toGapValue(gap),
|
|
182
|
+
...style
|
|
183
|
+
});
|
|
184
|
+
const finalTestID = dataTestId || testID;
|
|
185
|
+
const {
|
|
186
|
+
role,
|
|
187
|
+
tabIndex,
|
|
188
|
+
onKeyDown,
|
|
189
|
+
onKeyUp,
|
|
190
|
+
"aria-label": ariaLabel,
|
|
191
|
+
"aria-labelledby": _ariaLabelledBy,
|
|
192
|
+
"aria-current": _ariaCurrent,
|
|
193
|
+
"aria-disabled": ariaDisabled,
|
|
194
|
+
"aria-live": ariaLive,
|
|
195
|
+
"aria-busy": ariaBusy,
|
|
196
|
+
className,
|
|
197
|
+
"data-testid": _dataTestId,
|
|
198
|
+
cursor: _cursor,
|
|
199
|
+
type: _type,
|
|
200
|
+
...nativeRest
|
|
201
|
+
} = rest;
|
|
202
|
+
const accessibilityRole = typeof role === "string" && roleToAccessibilityRole[role] || (as === "button" ? "button" : void 0);
|
|
203
|
+
const isDisabled = Boolean(disabled || ariaDisabled);
|
|
204
|
+
const accessibilityState = {
|
|
205
|
+
disabled: isDisabled || void 0,
|
|
206
|
+
busy: Boolean(ariaBusy) || void 0
|
|
207
|
+
};
|
|
208
|
+
const accessibilityLiveRegion = ariaLive === "polite" || ariaLive === "assertive" ? ariaLive : void 0;
|
|
209
|
+
if (as === "img" && src) {
|
|
210
|
+
const imageStyle = {
|
|
211
|
+
width,
|
|
212
|
+
height,
|
|
213
|
+
borderRadius,
|
|
214
|
+
position,
|
|
215
|
+
top,
|
|
216
|
+
bottom,
|
|
217
|
+
left,
|
|
218
|
+
right,
|
|
219
|
+
...style
|
|
220
|
+
};
|
|
221
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
222
|
+
import_react_native.Image,
|
|
223
|
+
{
|
|
224
|
+
source: { uri: src },
|
|
225
|
+
style: imageStyle,
|
|
226
|
+
testID: finalTestID,
|
|
227
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : alt,
|
|
228
|
+
resizeMode: "cover",
|
|
229
|
+
...nativeRest
|
|
230
|
+
}
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
if (onPress || as === "button") {
|
|
234
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
235
|
+
import_react_native.Pressable,
|
|
236
|
+
{
|
|
237
|
+
onPress: !isDisabled && onPress ? onPress : void 0,
|
|
238
|
+
disabled: isDisabled,
|
|
239
|
+
onLayout,
|
|
240
|
+
onMoveShouldSetResponder,
|
|
241
|
+
onResponderGrant,
|
|
242
|
+
onResponderMove,
|
|
243
|
+
onResponderRelease,
|
|
244
|
+
onResponderTerminate,
|
|
245
|
+
style: ({ pressed }) => getContainerStyle(pressed),
|
|
246
|
+
testID: finalTestID,
|
|
247
|
+
accessibilityRole,
|
|
248
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
|
|
249
|
+
accessibilityState,
|
|
250
|
+
accessibilityLiveRegion,
|
|
251
|
+
...nativeRest,
|
|
252
|
+
children
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
257
|
+
import_react_native.View,
|
|
258
|
+
{
|
|
259
|
+
style: getContainerStyle(),
|
|
260
|
+
testID: finalTestID,
|
|
261
|
+
onLayout,
|
|
262
|
+
onMoveShouldSetResponder,
|
|
263
|
+
onResponderGrant,
|
|
264
|
+
onResponderMove,
|
|
265
|
+
onResponderRelease,
|
|
266
|
+
onResponderTerminate,
|
|
267
|
+
accessibilityRole,
|
|
268
|
+
accessibilityLabel: typeof ariaLabel === "string" ? ariaLabel : void 0,
|
|
269
|
+
accessibilityState,
|
|
270
|
+
accessibilityLiveRegion,
|
|
271
|
+
...nativeRest,
|
|
272
|
+
children
|
|
273
|
+
}
|
|
274
|
+
);
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
// ../../foundation/primitives-native/src/Text.tsx
|
|
278
|
+
var import_react_native2 = require("react-native");
|
|
279
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
280
|
+
var roleMap = {
|
|
281
|
+
alert: "alert",
|
|
282
|
+
heading: "header",
|
|
283
|
+
button: "button",
|
|
284
|
+
link: "link",
|
|
285
|
+
text: "text"
|
|
286
|
+
};
|
|
287
|
+
var parseNumericValue = (value) => {
|
|
288
|
+
if (value === void 0) return void 0;
|
|
289
|
+
if (typeof value === "number") return value;
|
|
290
|
+
const parsed = parseFloat(value);
|
|
291
|
+
return isNaN(parsed) ? void 0 : parsed;
|
|
292
|
+
};
|
|
293
|
+
var Text = ({
|
|
294
|
+
children,
|
|
295
|
+
color,
|
|
296
|
+
fontSize,
|
|
297
|
+
fontWeight,
|
|
298
|
+
fontFamily,
|
|
299
|
+
textAlign,
|
|
300
|
+
lineHeight,
|
|
301
|
+
numberOfLines,
|
|
302
|
+
id,
|
|
303
|
+
role,
|
|
304
|
+
testID,
|
|
305
|
+
"data-testid": dataTestId,
|
|
306
|
+
style: styleProp,
|
|
307
|
+
...props
|
|
308
|
+
}) => {
|
|
309
|
+
let resolvedFontFamily = fontFamily ? fontFamily.split(",")[0].replace(/['"]/g, "").trim() : void 0;
|
|
310
|
+
if (resolvedFontFamily === "Pilat Wide" || resolvedFontFamily === "Pilat Wide Bold" || resolvedFontFamily === "Aktiv Grotesk") {
|
|
311
|
+
resolvedFontFamily = void 0;
|
|
312
|
+
}
|
|
313
|
+
const incomingStyle = import_react_native2.StyleSheet.flatten(styleProp);
|
|
314
|
+
const baseStyle = {
|
|
315
|
+
color: color ?? incomingStyle?.color,
|
|
316
|
+
fontSize: typeof fontSize === "number" ? fontSize : void 0,
|
|
317
|
+
fontWeight,
|
|
318
|
+
fontFamily: resolvedFontFamily,
|
|
319
|
+
textDecorationLine: props.textDecoration,
|
|
320
|
+
textAlign: textAlign ?? incomingStyle?.textAlign,
|
|
321
|
+
lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),
|
|
322
|
+
marginTop: parseNumericValue(
|
|
323
|
+
incomingStyle?.marginTop
|
|
324
|
+
),
|
|
325
|
+
marginBottom: parseNumericValue(
|
|
326
|
+
incomingStyle?.marginBottom
|
|
327
|
+
)
|
|
328
|
+
};
|
|
329
|
+
const accessibilityRole = role ? roleMap[role] : void 0;
|
|
330
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
331
|
+
import_react_native2.Text,
|
|
332
|
+
{
|
|
333
|
+
style: baseStyle,
|
|
334
|
+
numberOfLines,
|
|
335
|
+
testID: dataTestId || testID || id,
|
|
336
|
+
accessibilityRole,
|
|
337
|
+
children
|
|
338
|
+
}
|
|
339
|
+
);
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
// src/OtherCard.tsx
|
|
343
|
+
var import_xui_core = require("@xsolla/xui-core");
|
|
344
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
345
|
+
var CARD_WIDTH = 366;
|
|
346
|
+
var IMAGE_SIZE = 160;
|
|
347
|
+
var IMAGE_OFFSET_RIGHT = -28;
|
|
348
|
+
var IMAGE_OFFSET_BOTTOM = -8;
|
|
349
|
+
var IMAGE_GUTTER = 136;
|
|
350
|
+
var renderIcon = (icon, size, color) => {
|
|
351
|
+
if (!import_react.default.isValidElement(icon)) return icon;
|
|
352
|
+
return import_react.default.cloneElement(
|
|
353
|
+
icon,
|
|
354
|
+
{
|
|
355
|
+
size,
|
|
356
|
+
color
|
|
357
|
+
}
|
|
358
|
+
);
|
|
359
|
+
};
|
|
360
|
+
var asPlainText = (value) => typeof value === "string" ? value : void 0;
|
|
361
|
+
var Tag = ({ tag, tone, theme }) => {
|
|
362
|
+
const palette = tone === "alert" ? theme.colors.control.alert : theme.colors.control.brand;
|
|
363
|
+
const textColor = palette.text.primary;
|
|
364
|
+
const size = theme.sizing.tag("sm");
|
|
365
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
366
|
+
Box,
|
|
367
|
+
{
|
|
368
|
+
height: size.height,
|
|
369
|
+
flexShrink: 0,
|
|
370
|
+
flexDirection: "row",
|
|
371
|
+
alignItems: "center",
|
|
372
|
+
justifyContent: "center",
|
|
373
|
+
gap: size.gap,
|
|
374
|
+
paddingHorizontal: size.padding,
|
|
375
|
+
borderRadius: size.radius,
|
|
376
|
+
borderWidth: size.borderWidth,
|
|
377
|
+
borderStyle: "solid",
|
|
378
|
+
borderColor: palette.primary.border,
|
|
379
|
+
backgroundColor: palette.primary.bg,
|
|
380
|
+
children: [
|
|
381
|
+
tag.icon && renderIcon(tag.icon, size.iconSize, textColor),
|
|
382
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
383
|
+
Text,
|
|
384
|
+
{
|
|
385
|
+
color: textColor,
|
|
386
|
+
fontFamily: theme.fonts.body,
|
|
387
|
+
fontSize: size.fontSize,
|
|
388
|
+
lineHeight: size.lineHeight,
|
|
389
|
+
fontWeight: "500",
|
|
390
|
+
numberOfLines: 1,
|
|
391
|
+
children: tag.label
|
|
392
|
+
}
|
|
393
|
+
)
|
|
394
|
+
]
|
|
395
|
+
}
|
|
396
|
+
);
|
|
397
|
+
};
|
|
398
|
+
var OtherCard = ({
|
|
399
|
+
title,
|
|
400
|
+
description,
|
|
401
|
+
publisherName,
|
|
402
|
+
publisherAvatarSrc,
|
|
403
|
+
publisherAvatarAlt = "",
|
|
404
|
+
tags = [],
|
|
405
|
+
status,
|
|
406
|
+
actionLabel,
|
|
407
|
+
onActionPress,
|
|
408
|
+
onPress,
|
|
409
|
+
imageSrc,
|
|
410
|
+
imageAlt = "",
|
|
411
|
+
imageVisible = true,
|
|
412
|
+
state = "default",
|
|
413
|
+
disabled,
|
|
414
|
+
width = CARD_WIDTH,
|
|
415
|
+
"aria-label": ariaLabel,
|
|
416
|
+
testID,
|
|
417
|
+
themeMode,
|
|
418
|
+
themeProductContext = "b2c"
|
|
419
|
+
}) => {
|
|
420
|
+
const { theme } = (0, import_xui_core.useResolvedTheme)({ themeMode, themeProductContext });
|
|
421
|
+
const isDisabled = Boolean(disabled) || state === "disabled";
|
|
422
|
+
const isInteractive = Boolean(onPress) && !isDisabled;
|
|
423
|
+
const isActionInteractive = Boolean(onActionPress) && !isDisabled;
|
|
424
|
+
const showImage = imageVisible && Boolean(imageSrc);
|
|
425
|
+
const cardBackground = state === "press" ? theme.colors.overlay.brand : state === "hover" ? theme.colors.overlay.monoHover : theme.colors.overlay.mono;
|
|
426
|
+
const derivedLabel = [publisherName, title, status].map(asPlainText).filter(Boolean).join(", ");
|
|
427
|
+
const resolvedAriaLabel = ariaLabel || derivedLabel || void 0;
|
|
428
|
+
const plainActionLabel = asPlainText(actionLabel);
|
|
429
|
+
const plainTitle = asPlainText(title);
|
|
430
|
+
const actionAriaLabel = plainActionLabel && plainTitle ? `${plainActionLabel} for ${plainTitle}` : plainActionLabel;
|
|
431
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
432
|
+
Box,
|
|
433
|
+
{
|
|
434
|
+
width,
|
|
435
|
+
flexDirection: "column",
|
|
436
|
+
gap: 16,
|
|
437
|
+
padding: 12,
|
|
438
|
+
borderRadius: 8,
|
|
439
|
+
borderWidth: 1,
|
|
440
|
+
borderStyle: "solid",
|
|
441
|
+
borderColor: theme.colors.border.secondary,
|
|
442
|
+
backgroundColor: cardBackground,
|
|
443
|
+
position: "relative",
|
|
444
|
+
overflow: "hidden",
|
|
445
|
+
opacity: isDisabled ? 0.48 : 1,
|
|
446
|
+
cursor: isInteractive ? "pointer" : void 0,
|
|
447
|
+
role: isInteractive ? "button" : "group",
|
|
448
|
+
"aria-label": resolvedAriaLabel,
|
|
449
|
+
"aria-disabled": isDisabled || void 0,
|
|
450
|
+
tabIndex: isInteractive ? 0 : void 0,
|
|
451
|
+
onPress: isInteractive ? onPress : void 0,
|
|
452
|
+
hoverStyle: isInteractive && state === "default" ? { backgroundColor: theme.colors.overlay.monoHover } : void 0,
|
|
453
|
+
pressStyle: isInteractive ? { backgroundColor: theme.colors.overlay.brand } : void 0,
|
|
454
|
+
testID: testID || "other-card",
|
|
455
|
+
children: [
|
|
456
|
+
tags.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
457
|
+
Box,
|
|
458
|
+
{
|
|
459
|
+
flexDirection: "row",
|
|
460
|
+
alignItems: "center",
|
|
461
|
+
gap: 4,
|
|
462
|
+
overflow: "hidden",
|
|
463
|
+
testID: "other-card-tags",
|
|
464
|
+
children: tags.map((tag, index) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
465
|
+
Tag,
|
|
466
|
+
{
|
|
467
|
+
tag,
|
|
468
|
+
tone: tag.tone || (index === 0 ? "brand" : "alert"),
|
|
469
|
+
theme
|
|
470
|
+
},
|
|
471
|
+
`${String(tag.label)}-${index}`
|
|
472
|
+
))
|
|
473
|
+
}
|
|
474
|
+
),
|
|
475
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
476
|
+
Box,
|
|
477
|
+
{
|
|
478
|
+
flexDirection: "column",
|
|
479
|
+
gap: 16,
|
|
480
|
+
paddingRight: showImage ? IMAGE_GUTTER : 0,
|
|
481
|
+
children: [
|
|
482
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Box, { flexDirection: "column", gap: 16, children: [
|
|
483
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Box, { flexDirection: "column", gap: 8, children: [
|
|
484
|
+
publisherName && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Box, { flexDirection: "row", alignItems: "center", gap: 6, children: [
|
|
485
|
+
publisherAvatarSrc && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
486
|
+
Box,
|
|
487
|
+
{
|
|
488
|
+
as: "img",
|
|
489
|
+
src: publisherAvatarSrc,
|
|
490
|
+
alt: publisherAvatarAlt,
|
|
491
|
+
width: 24,
|
|
492
|
+
height: 24,
|
|
493
|
+
borderRadius: 999,
|
|
494
|
+
flexShrink: 0,
|
|
495
|
+
style: { objectFit: "cover" }
|
|
496
|
+
}
|
|
497
|
+
),
|
|
498
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
499
|
+
Text,
|
|
500
|
+
{
|
|
501
|
+
color: theme.colors.content.tertiary,
|
|
502
|
+
fontFamily: theme.fonts.body,
|
|
503
|
+
fontSize: 12,
|
|
504
|
+
lineHeight: 16,
|
|
505
|
+
fontWeight: "400",
|
|
506
|
+
numberOfLines: 1,
|
|
507
|
+
children: publisherName
|
|
508
|
+
}
|
|
509
|
+
)
|
|
510
|
+
] }),
|
|
511
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
512
|
+
Text,
|
|
513
|
+
{
|
|
514
|
+
color: theme.colors.content.primary,
|
|
515
|
+
fontFamily: theme.fonts.heading,
|
|
516
|
+
fontSize: 20,
|
|
517
|
+
lineHeight: 20,
|
|
518
|
+
fontWeight: "700",
|
|
519
|
+
numberOfLines: 2,
|
|
520
|
+
children: title
|
|
521
|
+
}
|
|
522
|
+
),
|
|
523
|
+
description && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
524
|
+
Text,
|
|
525
|
+
{
|
|
526
|
+
color: theme.colors.content.tertiary,
|
|
527
|
+
fontFamily: theme.fonts.body,
|
|
528
|
+
fontSize: 12,
|
|
529
|
+
lineHeight: 16,
|
|
530
|
+
fontWeight: "400",
|
|
531
|
+
numberOfLines: 3,
|
|
532
|
+
children: description
|
|
533
|
+
}
|
|
534
|
+
)
|
|
535
|
+
] }),
|
|
536
|
+
status && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(Box, { flexDirection: "row", alignItems: "center", gap: 6, children: [
|
|
537
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
538
|
+
Box,
|
|
539
|
+
{
|
|
540
|
+
width: 6,
|
|
541
|
+
height: 6,
|
|
542
|
+
borderRadius: 999,
|
|
543
|
+
flexShrink: 0,
|
|
544
|
+
backgroundColor: theme.colors.content.success.primary
|
|
545
|
+
}
|
|
546
|
+
),
|
|
547
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
548
|
+
Text,
|
|
549
|
+
{
|
|
550
|
+
color: theme.colors.content.success.primary,
|
|
551
|
+
fontFamily: theme.fonts.body,
|
|
552
|
+
fontSize: 14,
|
|
553
|
+
lineHeight: 16,
|
|
554
|
+
fontWeight: "400",
|
|
555
|
+
numberOfLines: 1,
|
|
556
|
+
children: status
|
|
557
|
+
}
|
|
558
|
+
)
|
|
559
|
+
] })
|
|
560
|
+
] }),
|
|
561
|
+
actionLabel && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
562
|
+
Box,
|
|
563
|
+
{
|
|
564
|
+
alignSelf: "flex-start",
|
|
565
|
+
height: 32,
|
|
566
|
+
flexDirection: "row",
|
|
567
|
+
alignItems: "center",
|
|
568
|
+
justifyContent: "center",
|
|
569
|
+
paddingHorizontal: 12,
|
|
570
|
+
borderRadius: 4,
|
|
571
|
+
borderWidth: 1,
|
|
572
|
+
borderStyle: "solid",
|
|
573
|
+
borderColor: theme.colors.control.brand.secondary.border,
|
|
574
|
+
backgroundColor: theme.colors.control.brand.secondary.bg,
|
|
575
|
+
cursor: isActionInteractive ? "pointer" : void 0,
|
|
576
|
+
role: isActionInteractive ? "button" : void 0,
|
|
577
|
+
"aria-label": isActionInteractive ? actionAriaLabel : void 0,
|
|
578
|
+
"aria-disabled": isDisabled || void 0,
|
|
579
|
+
tabIndex: isActionInteractive ? 0 : void 0,
|
|
580
|
+
onPress: isActionInteractive ? onActionPress : void 0,
|
|
581
|
+
hoverStyle: isActionInteractive ? {
|
|
582
|
+
backgroundColor: theme.colors.control.brand.secondary.bgHover
|
|
583
|
+
} : void 0,
|
|
584
|
+
pressStyle: isActionInteractive ? {
|
|
585
|
+
backgroundColor: theme.colors.control.brand.secondary.bgPress
|
|
586
|
+
} : void 0,
|
|
587
|
+
testID: "other-card-action",
|
|
588
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
589
|
+
Text,
|
|
590
|
+
{
|
|
591
|
+
color: theme.colors.control.brand.text.secondary,
|
|
592
|
+
fontFamily: theme.fonts.body,
|
|
593
|
+
fontSize: 12,
|
|
594
|
+
lineHeight: 14,
|
|
595
|
+
fontWeight: "500",
|
|
596
|
+
numberOfLines: 1,
|
|
597
|
+
children: actionLabel
|
|
598
|
+
}
|
|
599
|
+
)
|
|
600
|
+
}
|
|
601
|
+
)
|
|
602
|
+
]
|
|
603
|
+
}
|
|
604
|
+
),
|
|
605
|
+
showImage && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
606
|
+
Box,
|
|
607
|
+
{
|
|
608
|
+
as: "img",
|
|
609
|
+
src: imageSrc,
|
|
610
|
+
alt: imageAlt,
|
|
611
|
+
position: "absolute",
|
|
612
|
+
right: IMAGE_OFFSET_RIGHT,
|
|
613
|
+
bottom: IMAGE_OFFSET_BOTTOM,
|
|
614
|
+
width: IMAGE_SIZE,
|
|
615
|
+
height: IMAGE_SIZE,
|
|
616
|
+
borderRadius: 8,
|
|
617
|
+
style: { objectFit: "cover", pointerEvents: "none" },
|
|
618
|
+
testID: "other-card-image"
|
|
619
|
+
}
|
|
620
|
+
)
|
|
621
|
+
]
|
|
622
|
+
}
|
|
623
|
+
);
|
|
624
|
+
};
|
|
625
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
626
|
+
0 && (module.exports = {
|
|
627
|
+
OtherCard
|
|
628
|
+
});
|
|
629
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx","../../src/OtherCard.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx"],"sourcesContent":["export { OtherCard } from \"./OtherCard\";\n\nexport type {\n OtherCardInteractiveState,\n OtherCardProps,\n OtherCardTagData,\n OtherCardTagTone,\n} from \"./types\";\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 OtherCardProps,\n OtherCardTagData,\n OtherCardTagTone,\n} from \"./types\";\n\ntype ResolvedTheme = ReturnType<typeof useResolvedTheme>[\"theme\"];\n\n/** Figma `OtherCard` (6828:17558): 366 px frame, 12 px padding, 16 px item spacing, 8 px radius. */\nconst CARD_WIDTH = 366;\n/** Figma: the promo image is a 160 x 160 (1:1) frame anchored bottom-right and clipped by the card. */\nconst IMAGE_SIZE = 160;\nconst IMAGE_OFFSET_RIGHT = -28;\nconst IMAGE_OFFSET_BOTTOM = -8;\n/** Figma: `Text & Controls` carries paddingRight 136 so copy never runs under the promo image. */\nconst IMAGE_GUTTER = 136;\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\nconst asPlainText = (value: React.ReactNode): string | undefined =>\n typeof value === \"string\" ? value : undefined;\n\nconst Tag: React.FC<{\n tag: OtherCardTagData;\n tone: OtherCardTagTone;\n theme: ResolvedTheme;\n}> = ({ tag, tone, theme }) => {\n const palette =\n tone === \"alert\" ? theme.colors.control.alert : theme.colors.control.brand;\n const textColor = palette.text.primary;\n const size = theme.sizing.tag(\"sm\");\n\n return (\n <Box\n height={size.height}\n flexShrink={0}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n gap={size.gap}\n paddingHorizontal={size.padding}\n borderRadius={size.radius}\n borderWidth={size.borderWidth}\n borderStyle=\"solid\"\n borderColor={palette.primary.border}\n backgroundColor={palette.primary.bg}\n >\n {tag.icon && renderIcon(tag.icon, size.iconSize, textColor)}\n <Text\n color={textColor}\n fontFamily={theme.fonts.body}\n fontSize={size.fontSize}\n lineHeight={size.lineHeight}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {tag.label}\n </Text>\n </Box>\n );\n};\n\nexport const OtherCard: React.FC<OtherCardProps> = ({\n title,\n description,\n publisherName,\n publisherAvatarSrc,\n publisherAvatarAlt = \"\",\n tags = [],\n status,\n actionLabel,\n onActionPress,\n onPress,\n imageSrc,\n imageAlt = \"\",\n imageVisible = true,\n state = \"default\",\n disabled,\n width = CARD_WIDTH,\n \"aria-label\": ariaLabel,\n testID,\n themeMode,\n themeProductContext = \"b2c\",\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n const isDisabled = Boolean(disabled) || state === \"disabled\";\n const isInteractive = Boolean(onPress) && !isDisabled;\n const isActionInteractive = Boolean(onActionPress) && !isDisabled;\n const showImage = imageVisible && Boolean(imageSrc);\n\n const cardBackground =\n state === \"press\"\n ? theme.colors.overlay.brand\n : state === \"hover\"\n ? theme.colors.overlay.monoHover\n : theme.colors.overlay.mono;\n\n // Urgency and availability must not rely on colour alone, so the accessible\n // name repeats the publisher, the title and the status as text.\n const derivedLabel = [publisherName, title, status]\n .map(asPlainText)\n .filter(Boolean)\n .join(\", \");\n const resolvedAriaLabel = ariaLabel || derivedLabel || undefined;\n\n const plainActionLabel = asPlainText(actionLabel);\n const plainTitle = asPlainText(title);\n const actionAriaLabel =\n plainActionLabel && plainTitle\n ? `${plainActionLabel} for ${plainTitle}`\n : plainActionLabel;\n\n return (\n <Box\n width={width}\n flexDirection=\"column\"\n gap={16}\n padding={12}\n borderRadius={8}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.border.secondary}\n backgroundColor={cardBackground}\n position=\"relative\"\n overflow=\"hidden\"\n opacity={isDisabled ? 0.48 : 1}\n cursor={isInteractive ? \"pointer\" : undefined}\n role={isInteractive ? \"button\" : \"group\"}\n aria-label={resolvedAriaLabel}\n aria-disabled={isDisabled || undefined}\n tabIndex={isInteractive ? 0 : undefined}\n onPress={isInteractive ? onPress : undefined}\n hoverStyle={\n isInteractive && state === \"default\"\n ? { backgroundColor: theme.colors.overlay.monoHover }\n : undefined\n }\n pressStyle={\n isInteractive\n ? { backgroundColor: theme.colors.overlay.brand }\n : undefined\n }\n testID={testID || \"other-card\"}\n >\n {tags.length > 0 && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={4}\n overflow=\"hidden\"\n testID=\"other-card-tags\"\n >\n {tags.map((tag, index) => (\n <Tag\n key={`${String(tag.label)}-${index}`}\n tag={tag}\n tone={tag.tone || (index === 0 ? \"brand\" : \"alert\")}\n theme={theme}\n />\n ))}\n </Box>\n )}\n\n <Box\n flexDirection=\"column\"\n gap={16}\n paddingRight={showImage ? IMAGE_GUTTER : 0}\n >\n <Box flexDirection=\"column\" gap={16}>\n <Box flexDirection=\"column\" gap={8}>\n {publisherName && (\n <Box flexDirection=\"row\" alignItems=\"center\" gap={6}>\n {publisherAvatarSrc && (\n <Box\n as=\"img\"\n src={publisherAvatarSrc}\n alt={publisherAvatarAlt}\n width={24}\n height={24}\n borderRadius={999}\n flexShrink={0}\n style={{ objectFit: \"cover\" }}\n />\n )}\n <Text\n color={theme.colors.content.tertiary}\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={16}\n fontWeight=\"400\"\n numberOfLines={1}\n >\n {publisherName}\n </Text>\n </Box>\n )}\n\n <Text\n color={theme.colors.content.primary}\n fontFamily={theme.fonts.heading}\n fontSize={20}\n lineHeight={20}\n fontWeight=\"700\"\n numberOfLines={2}\n >\n {title}\n </Text>\n {description && (\n <Text\n color={theme.colors.content.tertiary}\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={16}\n fontWeight=\"400\"\n numberOfLines={3}\n >\n {description}\n </Text>\n )}\n </Box>\n\n {status && (\n <Box flexDirection=\"row\" alignItems=\"center\" gap={6}>\n <Box\n width={6}\n height={6}\n borderRadius={999}\n flexShrink={0}\n backgroundColor={theme.colors.content.success.primary}\n />\n <Text\n color={theme.colors.content.success.primary}\n fontFamily={theme.fonts.body}\n fontSize={14}\n lineHeight={16}\n fontWeight=\"400\"\n numberOfLines={1}\n >\n {status}\n </Text>\n </Box>\n )}\n </Box>\n\n {actionLabel && (\n <Box\n alignSelf=\"flex-start\"\n height={32}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n paddingHorizontal={12}\n borderRadius={4}\n borderWidth={1}\n borderStyle=\"solid\"\n borderColor={theme.colors.control.brand.secondary.border}\n backgroundColor={theme.colors.control.brand.secondary.bg}\n cursor={isActionInteractive ? \"pointer\" : undefined}\n role={isActionInteractive ? \"button\" : undefined}\n aria-label={isActionInteractive ? actionAriaLabel : undefined}\n aria-disabled={isDisabled || undefined}\n tabIndex={isActionInteractive ? 0 : undefined}\n onPress={isActionInteractive ? onActionPress : undefined}\n hoverStyle={\n isActionInteractive\n ? {\n backgroundColor:\n theme.colors.control.brand.secondary.bgHover,\n }\n : undefined\n }\n pressStyle={\n isActionInteractive\n ? {\n backgroundColor:\n theme.colors.control.brand.secondary.bgPress,\n }\n : undefined\n }\n testID=\"other-card-action\"\n >\n <Text\n color={theme.colors.control.brand.text.secondary}\n fontFamily={theme.fonts.body}\n fontSize={12}\n lineHeight={14}\n fontWeight=\"500\"\n numberOfLines={1}\n >\n {actionLabel}\n </Text>\n </Box>\n )}\n </Box>\n\n {showImage && (\n <Box\n as=\"img\"\n src={imageSrc}\n alt={imageAlt}\n position=\"absolute\"\n right={IMAGE_OFFSET_RIGHT}\n bottom={IMAGE_OFFSET_BOTTOM}\n width={IMAGE_SIZE}\n height={IMAGE_SIZE}\n borderRadius={8}\n style={{ objectFit: \"cover\", pointerEvents: \"none\" }}\n testID=\"other-card-image\"\n />\n )}\n </Box>\n );\n};\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 opacity,\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 opacity: opacity ?? (disabled ? 0.5 : undefined),\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"],"mappings":"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","names":["import_react_native","import_jsx_runtime","RNText","import_jsx_runtime","React"]}
|