@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-button",
3
- "version": "0.135.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.135.0",
17
- "@xsolla/xui-icons": "0.135.0",
18
- "@xsolla/xui-primitives-core": "0.135.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 import_react2 = __toESM(require("react"));
42
+ var import_react3 = __toESM(require("react"));
43
43
 
44
44
  // ../primitives-web/src/Box.tsx
45
- var import_react = __toESM(require("react"));
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 StyledBox = import_styled_components.default.div`
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 = import_react.default.forwardRef(
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 StyledText = import_styled_components2.default.span`
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 StyledSpinner = import_styled_components3.default.div`
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 StyledIcon = import_styled_components4.default.div`
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 (!import_react2.default.isValidElement(icon)) return icon;
396
+ if (!import_react3.default.isValidElement(icon)) return icon;
319
397
  const iconElement = icon;
320
398
  const existingProps = iconElement.props || {};
321
- return import_react2.default.cloneElement(iconElement, {
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, import_react2.useState)(false);
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 import_react3 = __toESM(require("react"));
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 (!import_react3.default.isValidElement(icon)) return icon;
630
+ if (!import_react4.default.isValidElement(icon)) return icon;
553
631
  const iconElement = icon;
554
632
  const existingProps = iconElement.props || {};
555
- return import_react3.default.cloneElement(iconElement, {
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, import_react3.useState)(false);
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 import_react4 = require("react");
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, import_react4.useState)("default");
784
- const [isFocused, setIsFocused] = (0, import_react4.useState)(false);
785
- const isMouseOverRef = (0, import_react4.useRef)(false);
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 import_react5 = __toESM(require("react"));
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 (!import_react5.default.isValidElement(icon)) return icon;
1138
+ if (!import_react6.default.isValidElement(icon)) return icon;
1061
1139
  const iconElement = icon;
1062
1140
  const existingProps = iconElement.props || {};
1063
- return import_react5.default.cloneElement(iconElement, {
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, import_react5.useState)(false);
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 import_react6 = __toESM(require("react"));
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
- import_react6.default.Children.forEach(children2, (child) => {
1301
- if (import_react6.default.isValidElement(child) && child.type === import_react6.default.Fragment) {
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, index) => {
1337
- if (import_react6.default.isValidElement(child)) {
1338
- return import_react6.default.cloneElement(child, {
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 ?? index
1419
+ key: child.key ?? index2
1342
1420
  });
1343
1421
  }
1344
1422
  return child;