@xsolla/xui-button 0.133.0 → 0.134.0-pr226.1776269216
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/package.json +4 -4
- package/web/index.js +141 -28
- package/web/index.js.map +1 -1
- package/web/index.mjs +134 -21
- package/web/index.mjs.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsolla/xui-button",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.134.0-pr226.1776269216",
|
|
4
4
|
"main": "./web/index.js",
|
|
5
5
|
"module": "./web/index.mjs",
|
|
6
6
|
"types": "./web/index.d.ts",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"test:coverage": "vitest run --coverage"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@xsolla/xui-core": "0.
|
|
17
|
-
"@xsolla/xui-icons": "0.
|
|
18
|
-
"@xsolla/xui-primitives-core": "0.
|
|
16
|
+
"@xsolla/xui-core": "0.134.0-pr226.1776269216",
|
|
17
|
+
"@xsolla/xui-icons": "0.134.0-pr226.1776269216",
|
|
18
|
+
"@xsolla/xui-primitives-core": "0.134.0-pr226.1776269216"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=16.8.0",
|
package/web/index.js
CHANGED
|
@@ -39,13 +39,120 @@ __export(index_exports, {
|
|
|
39
39
|
module.exports = __toCommonJS(index_exports);
|
|
40
40
|
|
|
41
41
|
// src/Button.tsx
|
|
42
|
-
var
|
|
42
|
+
var import_react3 = __toESM(require("react"));
|
|
43
43
|
|
|
44
44
|
// ../primitives-web/src/Box.tsx
|
|
45
|
-
var
|
|
45
|
+
var import_react2 = __toESM(require("react"));
|
|
46
46
|
var import_styled_components = __toESM(require("styled-components"));
|
|
47
|
+
|
|
48
|
+
// ../primitives-web/src/filterDOMProps.ts
|
|
49
|
+
var import_react = __toESM(require("react"));
|
|
50
|
+
var NON_HTML_PROPS = /* @__PURE__ */ new Set([
|
|
51
|
+
// BoxProps — layout & styling
|
|
52
|
+
"backgroundColor",
|
|
53
|
+
"borderColor",
|
|
54
|
+
"borderWidth",
|
|
55
|
+
"borderBottomWidth",
|
|
56
|
+
"borderBottomColor",
|
|
57
|
+
"borderTopWidth",
|
|
58
|
+
"borderTopColor",
|
|
59
|
+
"borderLeftWidth",
|
|
60
|
+
"borderLeftColor",
|
|
61
|
+
"borderRightWidth",
|
|
62
|
+
"borderRightColor",
|
|
63
|
+
"borderRadius",
|
|
64
|
+
"borderStyle",
|
|
65
|
+
"flexDirection",
|
|
66
|
+
"flexWrap",
|
|
67
|
+
"alignItems",
|
|
68
|
+
"justifyContent",
|
|
69
|
+
"alignSelf",
|
|
70
|
+
"flex",
|
|
71
|
+
"flexShrink",
|
|
72
|
+
"gap",
|
|
73
|
+
"position",
|
|
74
|
+
"top",
|
|
75
|
+
"bottom",
|
|
76
|
+
"left",
|
|
77
|
+
"right",
|
|
78
|
+
"outline",
|
|
79
|
+
"overflow",
|
|
80
|
+
"overflowX",
|
|
81
|
+
"overflowY",
|
|
82
|
+
"zIndex",
|
|
83
|
+
"cursor",
|
|
84
|
+
"padding",
|
|
85
|
+
"paddingHorizontal",
|
|
86
|
+
"paddingVertical",
|
|
87
|
+
"paddingTop",
|
|
88
|
+
"paddingBottom",
|
|
89
|
+
"paddingLeft",
|
|
90
|
+
"paddingRight",
|
|
91
|
+
"margin",
|
|
92
|
+
"marginTop",
|
|
93
|
+
"marginBottom",
|
|
94
|
+
"marginLeft",
|
|
95
|
+
"marginRight",
|
|
96
|
+
"minWidth",
|
|
97
|
+
"minHeight",
|
|
98
|
+
"maxWidth",
|
|
99
|
+
"maxHeight",
|
|
100
|
+
"hoverStyle",
|
|
101
|
+
"pressStyle",
|
|
102
|
+
"focusStyle",
|
|
103
|
+
"outlineColor",
|
|
104
|
+
"outlineWidth",
|
|
105
|
+
"outlineOffset",
|
|
106
|
+
"outlineStyle",
|
|
107
|
+
// BoxProps — RN-only
|
|
108
|
+
"onPress",
|
|
109
|
+
"onLayout",
|
|
110
|
+
"onMoveShouldSetResponder",
|
|
111
|
+
"onResponderGrant",
|
|
112
|
+
"onResponderMove",
|
|
113
|
+
"onResponderRelease",
|
|
114
|
+
"onResponderTerminate",
|
|
115
|
+
"testID",
|
|
116
|
+
// Box — custom element type
|
|
117
|
+
"elementType",
|
|
118
|
+
// TextProps
|
|
119
|
+
"fontSize",
|
|
120
|
+
"fontWeight",
|
|
121
|
+
"fontFamily",
|
|
122
|
+
"lineHeight",
|
|
123
|
+
"whiteSpace",
|
|
124
|
+
"textAlign",
|
|
125
|
+
"textDecoration",
|
|
126
|
+
"numberOfLines",
|
|
127
|
+
"letterSpacing",
|
|
128
|
+
"textTransform",
|
|
129
|
+
// SpinnerProps
|
|
130
|
+
"strokeWidth",
|
|
131
|
+
// DividerProps
|
|
132
|
+
"vertical",
|
|
133
|
+
"dashStroke"
|
|
134
|
+
]);
|
|
135
|
+
function createFilteredElement(defaultTag) {
|
|
136
|
+
const Component = import_react.default.forwardRef(
|
|
137
|
+
({ children, elementType, ...props }, ref) => {
|
|
138
|
+
const Tag = elementType || defaultTag;
|
|
139
|
+
const htmlProps = {};
|
|
140
|
+
for (const key of Object.keys(props)) {
|
|
141
|
+
if (!NON_HTML_PROPS.has(key)) {
|
|
142
|
+
htmlProps[key] = props[key];
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return import_react.default.createElement(Tag, { ref, ...htmlProps }, children);
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
Component.displayName = `Filtered(${defaultTag})`;
|
|
149
|
+
return Component;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// ../primitives-web/src/Box.tsx
|
|
47
153
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
48
|
-
var
|
|
154
|
+
var FilteredDiv = createFilteredElement("div");
|
|
155
|
+
var StyledBox = (0, import_styled_components.default)(FilteredDiv)`
|
|
49
156
|
display: flex;
|
|
50
157
|
box-sizing: border-box;
|
|
51
158
|
background-color: ${(props) => props.backgroundColor || "transparent"};
|
|
@@ -132,7 +239,7 @@ var StyledBox = import_styled_components.default.div`
|
|
|
132
239
|
${(props) => props.pressStyle?.backgroundColor && `background-color: ${props.pressStyle.backgroundColor};`}
|
|
133
240
|
}
|
|
134
241
|
`;
|
|
135
|
-
var Box =
|
|
242
|
+
var Box = import_react2.default.forwardRef(
|
|
136
243
|
({
|
|
137
244
|
children,
|
|
138
245
|
onPress,
|
|
@@ -157,6 +264,8 @@ var Box = import_react.default.forwardRef(
|
|
|
157
264
|
type,
|
|
158
265
|
disabled,
|
|
159
266
|
id,
|
|
267
|
+
testID,
|
|
268
|
+
"data-testid": dataTestId,
|
|
160
269
|
...props
|
|
161
270
|
}, ref) => {
|
|
162
271
|
if (as === "img" && src) {
|
|
@@ -184,7 +293,7 @@ var Box = import_react.default.forwardRef(
|
|
|
184
293
|
StyledBox,
|
|
185
294
|
{
|
|
186
295
|
ref,
|
|
187
|
-
as,
|
|
296
|
+
elementType: as,
|
|
188
297
|
id,
|
|
189
298
|
type: as === "button" ? type || "button" : void 0,
|
|
190
299
|
disabled: as === "button" ? disabled : void 0,
|
|
@@ -204,6 +313,7 @@ var Box = import_react.default.forwardRef(
|
|
|
204
313
|
"aria-controls": ariaControls,
|
|
205
314
|
"aria-live": ariaLive,
|
|
206
315
|
tabIndex: tabIndex !== void 0 ? tabIndex : void 0,
|
|
316
|
+
"data-testid": dataTestId || testID,
|
|
207
317
|
...props,
|
|
208
318
|
children
|
|
209
319
|
}
|
|
@@ -215,7 +325,8 @@ Box.displayName = "Box";
|
|
|
215
325
|
// ../primitives-web/src/Text.tsx
|
|
216
326
|
var import_styled_components2 = __toESM(require("styled-components"));
|
|
217
327
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
218
|
-
var
|
|
328
|
+
var FilteredSpan = createFilteredElement("span");
|
|
329
|
+
var StyledText = (0, import_styled_components2.default)(FilteredSpan)`
|
|
219
330
|
color: ${(props) => props.color || "inherit"};
|
|
220
331
|
font-size: ${(props) => typeof props.fontSize === "number" ? `${props.fontSize}px` : props.fontSize || "inherit"};
|
|
221
332
|
font-weight: ${(props) => props.fontWeight || "normal"};
|
|
@@ -256,7 +367,8 @@ var rotate = import_styled_components3.keyframes`
|
|
|
256
367
|
transform: rotate(360deg);
|
|
257
368
|
}
|
|
258
369
|
`;
|
|
259
|
-
var
|
|
370
|
+
var FilteredDiv2 = createFilteredElement("div");
|
|
371
|
+
var StyledSpinner = (0, import_styled_components3.default)(FilteredDiv2)`
|
|
260
372
|
width: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
|
|
261
373
|
height: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
|
|
262
374
|
border: ${(props) => props.strokeWidth || 2}px solid
|
|
@@ -292,7 +404,8 @@ Spinner.displayName = "Spinner";
|
|
|
292
404
|
// ../primitives-web/src/Icon.tsx
|
|
293
405
|
var import_styled_components4 = __toESM(require("styled-components"));
|
|
294
406
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
295
|
-
var
|
|
407
|
+
var FilteredDiv3 = createFilteredElement("div");
|
|
408
|
+
var StyledIcon = (0, import_styled_components4.default)(FilteredDiv3)`
|
|
296
409
|
display: flex;
|
|
297
410
|
align-items: center;
|
|
298
411
|
justify-content: center;
|
|
@@ -315,10 +428,10 @@ var Icon = ({ children, ...props }) => {
|
|
|
315
428
|
var import_xui_core = require("@xsolla/xui-core");
|
|
316
429
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
317
430
|
var cloneIconWithDefaults = (icon, defaultSize, defaultColor) => {
|
|
318
|
-
if (!
|
|
431
|
+
if (!import_react3.default.isValidElement(icon)) return icon;
|
|
319
432
|
const iconElement = icon;
|
|
320
433
|
const existingProps = iconElement.props || {};
|
|
321
|
-
return
|
|
434
|
+
return import_react3.default.cloneElement(iconElement, {
|
|
322
435
|
...existingProps,
|
|
323
436
|
// Preserve existing props (including accessibility attributes)
|
|
324
437
|
size: existingProps.size ?? defaultSize,
|
|
@@ -353,7 +466,7 @@ var Button = ({
|
|
|
353
466
|
themeProductContext
|
|
354
467
|
}) => {
|
|
355
468
|
const { theme } = (0, import_xui_core.useResolvedTheme)({ themeMode, themeProductContext });
|
|
356
|
-
const [isKeyboardPressed, setIsKeyboardPressed] = (0,
|
|
469
|
+
const [isKeyboardPressed, setIsKeyboardPressed] = (0, import_react3.useState)(false);
|
|
357
470
|
const isDisabled = disabled || loading;
|
|
358
471
|
const sizeStyles = theme.sizing.button(size);
|
|
359
472
|
const controlTone = theme?.colors?.control?.[tone];
|
|
@@ -545,14 +658,14 @@ var Button = ({
|
|
|
545
658
|
Button.displayName = "Button";
|
|
546
659
|
|
|
547
660
|
// src/IconButton.tsx
|
|
548
|
-
var
|
|
661
|
+
var import_react4 = __toESM(require("react"));
|
|
549
662
|
var import_xui_core2 = require("@xsolla/xui-core");
|
|
550
663
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
551
664
|
var cloneIconWithDefaults2 = (icon, defaultSize, defaultColor) => {
|
|
552
|
-
if (!
|
|
665
|
+
if (!import_react4.default.isValidElement(icon)) return icon;
|
|
553
666
|
const iconElement = icon;
|
|
554
667
|
const existingProps = iconElement.props || {};
|
|
555
|
-
return
|
|
668
|
+
return import_react4.default.cloneElement(iconElement, {
|
|
556
669
|
...existingProps,
|
|
557
670
|
// Preserve existing props (including accessibility attributes)
|
|
558
671
|
size: existingProps.size ?? defaultSize,
|
|
@@ -581,7 +694,7 @@ var IconButton = ({
|
|
|
581
694
|
hoverBackground
|
|
582
695
|
}) => {
|
|
583
696
|
const { theme } = (0, import_xui_core2.useResolvedTheme)({ themeMode, themeProductContext });
|
|
584
|
-
const [isKeyboardPressed, setIsKeyboardPressed] = (0,
|
|
697
|
+
const [isKeyboardPressed, setIsKeyboardPressed] = (0, import_react4.useState)(false);
|
|
585
698
|
const isDisabled = disabled || loading;
|
|
586
699
|
const sizeStyles = theme.sizing.button(size);
|
|
587
700
|
const controlTone = theme?.colors?.control?.[tone];
|
|
@@ -716,7 +829,7 @@ var IconButton = ({
|
|
|
716
829
|
IconButton.displayName = "IconButton";
|
|
717
830
|
|
|
718
831
|
// src/FlexButton.tsx
|
|
719
|
-
var
|
|
832
|
+
var import_react5 = require("react");
|
|
720
833
|
var import_xui_core3 = require("@xsolla/xui-core");
|
|
721
834
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
722
835
|
var ICON_SIZES = {
|
|
@@ -780,9 +893,9 @@ var FlexButton = ({
|
|
|
780
893
|
...buttonProps
|
|
781
894
|
}) => {
|
|
782
895
|
const { theme } = (0, import_xui_core3.useResolvedTheme)({ themeMode, themeProductContext });
|
|
783
|
-
const [state, setState] = (0,
|
|
784
|
-
const [isFocused, setIsFocused] = (0,
|
|
785
|
-
const isMouseOverRef = (0,
|
|
896
|
+
const [state, setState] = (0, import_react5.useState)("default");
|
|
897
|
+
const [isFocused, setIsFocused] = (0, import_react5.useState)(false);
|
|
898
|
+
const isMouseOverRef = (0, import_react5.useRef)(false);
|
|
786
899
|
const isDisabled = disabled || loading;
|
|
787
900
|
const getVariantColors = (currentState) => {
|
|
788
901
|
if (isDisabled) {
|
|
@@ -1053,14 +1166,14 @@ var FlexButton = ({
|
|
|
1053
1166
|
FlexButton.displayName = "FlexButton";
|
|
1054
1167
|
|
|
1055
1168
|
// src/AppButton.tsx
|
|
1056
|
-
var
|
|
1169
|
+
var import_react6 = __toESM(require("react"));
|
|
1057
1170
|
var import_xui_core4 = require("@xsolla/xui-core");
|
|
1058
1171
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1059
1172
|
var cloneIconWithDefaults3 = (icon, defaultSize, defaultColor) => {
|
|
1060
|
-
if (!
|
|
1173
|
+
if (!import_react6.default.isValidElement(icon)) return icon;
|
|
1061
1174
|
const iconElement = icon;
|
|
1062
1175
|
const existingProps = iconElement.props || {};
|
|
1063
|
-
return
|
|
1176
|
+
return import_react6.default.cloneElement(iconElement, {
|
|
1064
1177
|
...existingProps,
|
|
1065
1178
|
size: existingProps.size ?? defaultSize,
|
|
1066
1179
|
color: existingProps.color ?? defaultColor
|
|
@@ -1092,7 +1205,7 @@ var AppButton = ({
|
|
|
1092
1205
|
themeProductContext
|
|
1093
1206
|
}) => {
|
|
1094
1207
|
const { theme } = (0, import_xui_core4.useResolvedTheme)({ themeMode, themeProductContext });
|
|
1095
|
-
const [isKeyboardPressed, setIsKeyboardPressed] = (0,
|
|
1208
|
+
const [isKeyboardPressed, setIsKeyboardPressed] = (0, import_react6.useState)(false);
|
|
1096
1209
|
const isDisabled = disabled || loading;
|
|
1097
1210
|
const sizeStyles = theme.sizing.button(size);
|
|
1098
1211
|
const tokens = theme?.colors?.control?.appButton || {
|
|
@@ -1276,7 +1389,7 @@ var AppButton = ({
|
|
|
1276
1389
|
AppButton.displayName = "AppButton";
|
|
1277
1390
|
|
|
1278
1391
|
// src/ButtonGroup.tsx
|
|
1279
|
-
var
|
|
1392
|
+
var import_react7 = __toESM(require("react"));
|
|
1280
1393
|
var import_xui_core5 = require("@xsolla/xui-core");
|
|
1281
1394
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
1282
1395
|
var ButtonGroup = ({
|
|
@@ -1297,8 +1410,8 @@ var ButtonGroup = ({
|
|
|
1297
1410
|
const { theme } = (0, import_xui_core5.useResolvedTheme)({ themeMode, themeProductContext });
|
|
1298
1411
|
const flattenChildren = (children2) => {
|
|
1299
1412
|
const result = [];
|
|
1300
|
-
|
|
1301
|
-
if (
|
|
1413
|
+
import_react7.default.Children.forEach(children2, (child) => {
|
|
1414
|
+
if (import_react7.default.isValidElement(child) && child.type === import_react7.default.Fragment) {
|
|
1302
1415
|
result.push(...flattenChildren(child.props.children));
|
|
1303
1416
|
} else if (child !== null && child !== void 0) {
|
|
1304
1417
|
result.push(child);
|
|
@@ -1334,8 +1447,8 @@ var ButtonGroup = ({
|
|
|
1334
1447
|
const processChildren = (childrenToProcess) => {
|
|
1335
1448
|
if (orientation === "vertical") {
|
|
1336
1449
|
return childrenToProcess.map((child, index) => {
|
|
1337
|
-
if (
|
|
1338
|
-
return
|
|
1450
|
+
if (import_react7.default.isValidElement(child)) {
|
|
1451
|
+
return import_react7.default.cloneElement(child, {
|
|
1339
1452
|
...child.props,
|
|
1340
1453
|
fullWidth: true,
|
|
1341
1454
|
key: child.key ?? index
|