@xsolla/xui-button 0.135.0 → 0.136.0-pr226.1776414443
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 +108 -30
- package/web/index.js.map +1 -1
- package/web/index.mjs +101 -23
- 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.136.0-pr226.1776414443",
|
|
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.136.0-pr226.1776414443",
|
|
17
|
+
"@xsolla/xui-icons": "0.136.0-pr226.1776414443",
|
|
18
|
+
"@xsolla/xui-primitives-core": "0.136.0-pr226.1776414443"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=16.8.0",
|
package/web/index.js
CHANGED
|
@@ -39,13 +39,85 @@ __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
|
+
|
|
51
|
+
// ../../node_modules/@emotion/memoize/dist/memoize.esm.js
|
|
52
|
+
function memoize(fn) {
|
|
53
|
+
var cache = {};
|
|
54
|
+
return function(arg) {
|
|
55
|
+
if (cache[arg] === void 0) cache[arg] = fn(arg);
|
|
56
|
+
return cache[arg];
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
var memoize_esm_default = memoize;
|
|
60
|
+
|
|
61
|
+
// ../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js
|
|
62
|
+
var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;
|
|
63
|
+
var index = memoize_esm_default(
|
|
64
|
+
function(prop) {
|
|
65
|
+
return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111 && prop.charCodeAt(1) === 110 && prop.charCodeAt(2) < 91;
|
|
66
|
+
}
|
|
67
|
+
/* Z+1 */
|
|
68
|
+
);
|
|
69
|
+
var is_prop_valid_esm_default = index;
|
|
70
|
+
|
|
71
|
+
// ../primitives-web/src/filterDOMProps.ts
|
|
72
|
+
var ADDITIONAL_BLOCKED_PROPS = /* @__PURE__ */ new Set([
|
|
73
|
+
// RN-only event handlers (pass isPropValid's on* pattern)
|
|
74
|
+
"onPress",
|
|
75
|
+
"onChangeText",
|
|
76
|
+
"onLayout",
|
|
77
|
+
"onMoveShouldSetResponder",
|
|
78
|
+
"onResponderGrant",
|
|
79
|
+
"onResponderMove",
|
|
80
|
+
"onResponderRelease",
|
|
81
|
+
"onResponderTerminate",
|
|
82
|
+
// SVG attributes that pass isPropValid
|
|
83
|
+
"strokeWidth",
|
|
84
|
+
// CSS properties that pass isPropValid but are used as component props
|
|
85
|
+
"overflow",
|
|
86
|
+
"cursor",
|
|
87
|
+
"fontSize",
|
|
88
|
+
"fontWeight",
|
|
89
|
+
"fontFamily",
|
|
90
|
+
"textDecoration"
|
|
91
|
+
]);
|
|
92
|
+
function shouldForwardProp(key) {
|
|
93
|
+
if (ADDITIONAL_BLOCKED_PROPS.has(key)) return false;
|
|
94
|
+
return is_prop_valid_esm_default(key);
|
|
95
|
+
}
|
|
96
|
+
function createFilteredElement(defaultTag) {
|
|
97
|
+
const Component = import_react.default.forwardRef(
|
|
98
|
+
({ children, elementType, ...props }, ref) => {
|
|
99
|
+
const Tag = elementType || defaultTag;
|
|
100
|
+
const htmlProps = {};
|
|
101
|
+
for (const key of Object.keys(props)) {
|
|
102
|
+
if (shouldForwardProp(key)) {
|
|
103
|
+
htmlProps[key] = props[key];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return import_react.default.createElement(
|
|
107
|
+
Tag,
|
|
108
|
+
{ ref, ...htmlProps },
|
|
109
|
+
children
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
Component.displayName = `Filtered(${defaultTag})`;
|
|
114
|
+
return Component;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ../primitives-web/src/Box.tsx
|
|
47
118
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
48
|
-
var
|
|
119
|
+
var FilteredDiv = createFilteredElement("div");
|
|
120
|
+
var StyledBox = (0, import_styled_components.default)(FilteredDiv)`
|
|
49
121
|
display: flex;
|
|
50
122
|
box-sizing: border-box;
|
|
51
123
|
background-color: ${(props) => props.backgroundColor || "transparent"};
|
|
@@ -132,7 +204,7 @@ var StyledBox = import_styled_components.default.div`
|
|
|
132
204
|
${(props) => props.pressStyle?.backgroundColor && `background-color: ${props.pressStyle.backgroundColor};`}
|
|
133
205
|
}
|
|
134
206
|
`;
|
|
135
|
-
var Box =
|
|
207
|
+
var Box = import_react2.default.forwardRef(
|
|
136
208
|
({
|
|
137
209
|
children,
|
|
138
210
|
onPress,
|
|
@@ -157,6 +229,8 @@ var Box = import_react.default.forwardRef(
|
|
|
157
229
|
type,
|
|
158
230
|
disabled,
|
|
159
231
|
id,
|
|
232
|
+
testID,
|
|
233
|
+
"data-testid": dataTestId,
|
|
160
234
|
...props
|
|
161
235
|
}, ref) => {
|
|
162
236
|
if (as === "img" && src) {
|
|
@@ -184,7 +258,7 @@ var Box = import_react.default.forwardRef(
|
|
|
184
258
|
StyledBox,
|
|
185
259
|
{
|
|
186
260
|
ref,
|
|
187
|
-
as,
|
|
261
|
+
elementType: as,
|
|
188
262
|
id,
|
|
189
263
|
type: as === "button" ? type || "button" : void 0,
|
|
190
264
|
disabled: as === "button" ? disabled : void 0,
|
|
@@ -204,6 +278,7 @@ var Box = import_react.default.forwardRef(
|
|
|
204
278
|
"aria-controls": ariaControls,
|
|
205
279
|
"aria-live": ariaLive,
|
|
206
280
|
tabIndex: tabIndex !== void 0 ? tabIndex : void 0,
|
|
281
|
+
"data-testid": dataTestId || testID,
|
|
207
282
|
...props,
|
|
208
283
|
children
|
|
209
284
|
}
|
|
@@ -215,7 +290,8 @@ Box.displayName = "Box";
|
|
|
215
290
|
// ../primitives-web/src/Text.tsx
|
|
216
291
|
var import_styled_components2 = __toESM(require("styled-components"));
|
|
217
292
|
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
218
|
-
var
|
|
293
|
+
var FilteredSpan = createFilteredElement("span");
|
|
294
|
+
var StyledText = (0, import_styled_components2.default)(FilteredSpan)`
|
|
219
295
|
color: ${(props) => props.color || "inherit"};
|
|
220
296
|
font-size: ${(props) => typeof props.fontSize === "number" ? `${props.fontSize}px` : props.fontSize || "inherit"};
|
|
221
297
|
font-weight: ${(props) => props.fontWeight || "normal"};
|
|
@@ -256,7 +332,8 @@ var rotate = import_styled_components3.keyframes`
|
|
|
256
332
|
transform: rotate(360deg);
|
|
257
333
|
}
|
|
258
334
|
`;
|
|
259
|
-
var
|
|
335
|
+
var FilteredDiv2 = createFilteredElement("div");
|
|
336
|
+
var StyledSpinner = (0, import_styled_components3.default)(FilteredDiv2)`
|
|
260
337
|
width: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
|
|
261
338
|
height: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
|
|
262
339
|
border: ${(props) => props.strokeWidth || 2}px solid
|
|
@@ -292,7 +369,8 @@ Spinner.displayName = "Spinner";
|
|
|
292
369
|
// ../primitives-web/src/Icon.tsx
|
|
293
370
|
var import_styled_components4 = __toESM(require("styled-components"));
|
|
294
371
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
295
|
-
var
|
|
372
|
+
var FilteredDiv3 = createFilteredElement("div");
|
|
373
|
+
var StyledIcon = (0, import_styled_components4.default)(FilteredDiv3)`
|
|
296
374
|
display: flex;
|
|
297
375
|
align-items: center;
|
|
298
376
|
justify-content: center;
|
|
@@ -315,10 +393,10 @@ var Icon = ({ children, ...props }) => {
|
|
|
315
393
|
var import_xui_core = require("@xsolla/xui-core");
|
|
316
394
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
317
395
|
var cloneIconWithDefaults = (icon, defaultSize, defaultColor) => {
|
|
318
|
-
if (!
|
|
396
|
+
if (!import_react3.default.isValidElement(icon)) return icon;
|
|
319
397
|
const iconElement = icon;
|
|
320
398
|
const existingProps = iconElement.props || {};
|
|
321
|
-
return
|
|
399
|
+
return import_react3.default.cloneElement(iconElement, {
|
|
322
400
|
...existingProps,
|
|
323
401
|
// Preserve existing props (including accessibility attributes)
|
|
324
402
|
size: existingProps.size ?? defaultSize,
|
|
@@ -353,7 +431,7 @@ var Button = ({
|
|
|
353
431
|
themeProductContext
|
|
354
432
|
}) => {
|
|
355
433
|
const { theme } = (0, import_xui_core.useResolvedTheme)({ themeMode, themeProductContext });
|
|
356
|
-
const [isKeyboardPressed, setIsKeyboardPressed] = (0,
|
|
434
|
+
const [isKeyboardPressed, setIsKeyboardPressed] = (0, import_react3.useState)(false);
|
|
357
435
|
const isDisabled = disabled || loading;
|
|
358
436
|
const sizeStyles = theme.sizing.button(size);
|
|
359
437
|
const controlTone = theme?.colors?.control?.[tone];
|
|
@@ -545,14 +623,14 @@ var Button = ({
|
|
|
545
623
|
Button.displayName = "Button";
|
|
546
624
|
|
|
547
625
|
// src/IconButton.tsx
|
|
548
|
-
var
|
|
626
|
+
var import_react4 = __toESM(require("react"));
|
|
549
627
|
var import_xui_core2 = require("@xsolla/xui-core");
|
|
550
628
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
551
629
|
var cloneIconWithDefaults2 = (icon, defaultSize, defaultColor) => {
|
|
552
|
-
if (!
|
|
630
|
+
if (!import_react4.default.isValidElement(icon)) return icon;
|
|
553
631
|
const iconElement = icon;
|
|
554
632
|
const existingProps = iconElement.props || {};
|
|
555
|
-
return
|
|
633
|
+
return import_react4.default.cloneElement(iconElement, {
|
|
556
634
|
...existingProps,
|
|
557
635
|
// Preserve existing props (including accessibility attributes)
|
|
558
636
|
size: existingProps.size ?? defaultSize,
|
|
@@ -581,7 +659,7 @@ var IconButton = ({
|
|
|
581
659
|
hoverBackground
|
|
582
660
|
}) => {
|
|
583
661
|
const { theme } = (0, import_xui_core2.useResolvedTheme)({ themeMode, themeProductContext });
|
|
584
|
-
const [isKeyboardPressed, setIsKeyboardPressed] = (0,
|
|
662
|
+
const [isKeyboardPressed, setIsKeyboardPressed] = (0, import_react4.useState)(false);
|
|
585
663
|
const isDisabled = disabled || loading;
|
|
586
664
|
const sizeStyles = theme.sizing.button(size);
|
|
587
665
|
const controlTone = theme?.colors?.control?.[tone];
|
|
@@ -716,7 +794,7 @@ var IconButton = ({
|
|
|
716
794
|
IconButton.displayName = "IconButton";
|
|
717
795
|
|
|
718
796
|
// src/FlexButton.tsx
|
|
719
|
-
var
|
|
797
|
+
var import_react5 = require("react");
|
|
720
798
|
var import_xui_core3 = require("@xsolla/xui-core");
|
|
721
799
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
722
800
|
var ICON_SIZES = {
|
|
@@ -780,9 +858,9 @@ var FlexButton = ({
|
|
|
780
858
|
...buttonProps
|
|
781
859
|
}) => {
|
|
782
860
|
const { theme } = (0, import_xui_core3.useResolvedTheme)({ themeMode, themeProductContext });
|
|
783
|
-
const [state, setState] = (0,
|
|
784
|
-
const [isFocused, setIsFocused] = (0,
|
|
785
|
-
const isMouseOverRef = (0,
|
|
861
|
+
const [state, setState] = (0, import_react5.useState)("default");
|
|
862
|
+
const [isFocused, setIsFocused] = (0, import_react5.useState)(false);
|
|
863
|
+
const isMouseOverRef = (0, import_react5.useRef)(false);
|
|
786
864
|
const isDisabled = disabled || loading;
|
|
787
865
|
const getVariantColors = (currentState) => {
|
|
788
866
|
if (isDisabled) {
|
|
@@ -1053,14 +1131,14 @@ var FlexButton = ({
|
|
|
1053
1131
|
FlexButton.displayName = "FlexButton";
|
|
1054
1132
|
|
|
1055
1133
|
// src/AppButton.tsx
|
|
1056
|
-
var
|
|
1134
|
+
var import_react6 = __toESM(require("react"));
|
|
1057
1135
|
var import_xui_core4 = require("@xsolla/xui-core");
|
|
1058
1136
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1059
1137
|
var cloneIconWithDefaults3 = (icon, defaultSize, defaultColor) => {
|
|
1060
|
-
if (!
|
|
1138
|
+
if (!import_react6.default.isValidElement(icon)) return icon;
|
|
1061
1139
|
const iconElement = icon;
|
|
1062
1140
|
const existingProps = iconElement.props || {};
|
|
1063
|
-
return
|
|
1141
|
+
return import_react6.default.cloneElement(iconElement, {
|
|
1064
1142
|
...existingProps,
|
|
1065
1143
|
size: existingProps.size ?? defaultSize,
|
|
1066
1144
|
color: existingProps.color ?? defaultColor
|
|
@@ -1092,7 +1170,7 @@ var AppButton = ({
|
|
|
1092
1170
|
themeProductContext
|
|
1093
1171
|
}) => {
|
|
1094
1172
|
const { theme } = (0, import_xui_core4.useResolvedTheme)({ themeMode, themeProductContext });
|
|
1095
|
-
const [isKeyboardPressed, setIsKeyboardPressed] = (0,
|
|
1173
|
+
const [isKeyboardPressed, setIsKeyboardPressed] = (0, import_react6.useState)(false);
|
|
1096
1174
|
const isDisabled = disabled || loading;
|
|
1097
1175
|
const sizeStyles = theme.sizing.button(size);
|
|
1098
1176
|
const tokens = theme?.colors?.control?.appButton || {
|
|
@@ -1276,7 +1354,7 @@ var AppButton = ({
|
|
|
1276
1354
|
AppButton.displayName = "AppButton";
|
|
1277
1355
|
|
|
1278
1356
|
// src/ButtonGroup.tsx
|
|
1279
|
-
var
|
|
1357
|
+
var import_react7 = __toESM(require("react"));
|
|
1280
1358
|
var import_xui_core5 = require("@xsolla/xui-core");
|
|
1281
1359
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
1282
1360
|
var ButtonGroup = ({
|
|
@@ -1297,8 +1375,8 @@ var ButtonGroup = ({
|
|
|
1297
1375
|
const { theme } = (0, import_xui_core5.useResolvedTheme)({ themeMode, themeProductContext });
|
|
1298
1376
|
const flattenChildren = (children2) => {
|
|
1299
1377
|
const result = [];
|
|
1300
|
-
|
|
1301
|
-
if (
|
|
1378
|
+
import_react7.default.Children.forEach(children2, (child) => {
|
|
1379
|
+
if (import_react7.default.isValidElement(child) && child.type === import_react7.default.Fragment) {
|
|
1302
1380
|
result.push(...flattenChildren(child.props.children));
|
|
1303
1381
|
} else if (child !== null && child !== void 0) {
|
|
1304
1382
|
result.push(child);
|
|
@@ -1333,12 +1411,12 @@ var ButtonGroup = ({
|
|
|
1333
1411
|
].filter(Boolean).join(" ") || void 0;
|
|
1334
1412
|
const processChildren = (childrenToProcess) => {
|
|
1335
1413
|
if (orientation === "vertical") {
|
|
1336
|
-
return childrenToProcess.map((child,
|
|
1337
|
-
if (
|
|
1338
|
-
return
|
|
1414
|
+
return childrenToProcess.map((child, index2) => {
|
|
1415
|
+
if (import_react7.default.isValidElement(child)) {
|
|
1416
|
+
return import_react7.default.cloneElement(child, {
|
|
1339
1417
|
...child.props,
|
|
1340
1418
|
fullWidth: true,
|
|
1341
|
-
key: child.key ??
|
|
1419
|
+
key: child.key ?? index2
|
|
1342
1420
|
});
|
|
1343
1421
|
}
|
|
1344
1422
|
return child;
|