@xsolla/xui-input 0.216.1 → 0.217.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 +47 -1
- package/native/index.d.mts +7 -0
- package/native/index.d.ts +7 -0
- package/native/index.js +118 -1
- package/native/index.js.map +1 -1
- package/native/index.mjs +124 -2
- package/native/index.mjs.map +1 -1
- package/package.json +4 -4
- package/web/index.d.mts +7 -0
- package/web/index.d.ts +7 -0
- package/web/index.js +136 -1
- package/web/index.js.map +1 -1
- package/web/index.mjs +142 -2
- package/web/index.mjs.map +1 -1
package/web/index.js
CHANGED
|
@@ -424,6 +424,24 @@ var StyledInput = (0, import_styled_components4.default)(FilteredInput)`
|
|
|
424
424
|
cursor: not-allowed;
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
+
/*
|
|
428
|
+
* Hide the native number spin buttons. type="number" is rendered with the
|
|
429
|
+
* toolkit's own chevron stepper (see Input "Type number" in Figma), so the
|
|
430
|
+
* OS chrome must not show alongside it. Keyboard ArrowUp / ArrowDown are
|
|
431
|
+
* unaffected — this only removes the painted control.
|
|
432
|
+
*/
|
|
433
|
+
&[type="number"] {
|
|
434
|
+
-moz-appearance: textfield;
|
|
435
|
+
appearance: textfield;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
&[type="number"]::-webkit-outer-spin-button,
|
|
439
|
+
&[type="number"]::-webkit-inner-spin-button {
|
|
440
|
+
-webkit-appearance: none;
|
|
441
|
+
appearance: none;
|
|
442
|
+
margin: 0;
|
|
443
|
+
}
|
|
444
|
+
|
|
427
445
|
/* Override browser autofill background */
|
|
428
446
|
&:-webkit-autofill,
|
|
429
447
|
&:-webkit-autofill:hover,
|
|
@@ -515,6 +533,15 @@ var isWeb = true;
|
|
|
515
533
|
var import_xui_core = require("@xsolla/xui-core");
|
|
516
534
|
var import_xui_icons_base = require("@xsolla/xui-icons-base");
|
|
517
535
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
536
|
+
var decimalsOf = (step) => {
|
|
537
|
+
const text = String(step);
|
|
538
|
+
if (text.includes("e-")) {
|
|
539
|
+
const [, exponent] = text.split("e-");
|
|
540
|
+
return Number(exponent) || 0;
|
|
541
|
+
}
|
|
542
|
+
const [, fraction] = text.split(".");
|
|
543
|
+
return fraction ? fraction.length : 0;
|
|
544
|
+
};
|
|
518
545
|
var Input = (0, import_react4.forwardRef)(
|
|
519
546
|
({
|
|
520
547
|
value,
|
|
@@ -536,6 +563,10 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
536
563
|
checked = false,
|
|
537
564
|
checkedIcon = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_xui_icons_base.CheckCr, {}),
|
|
538
565
|
type,
|
|
566
|
+
min,
|
|
567
|
+
max,
|
|
568
|
+
step,
|
|
569
|
+
hideNumberStepper = false,
|
|
539
570
|
id: providedId,
|
|
540
571
|
"aria-label": ariaLabel,
|
|
541
572
|
borderTopLeftRadius: borderTopLeftRadiusOverride,
|
|
@@ -574,6 +605,7 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
574
605
|
const isCheckedShown = checked && !errorMessage;
|
|
575
606
|
const isExtraClearIconShown = !disabled && extraClear && !!(value !== void 0 ? value : passValue);
|
|
576
607
|
const extrasCount = Number(isExtraClearIconShown) + Number(isCheckedShown) + Number(isRightInputIconShown);
|
|
608
|
+
const isNumberStepperShown = type === "number" && !hideNumberStepper;
|
|
577
609
|
const sizeStyles = theme.sizing.input(size);
|
|
578
610
|
const inputColors = theme.colors.control.input;
|
|
579
611
|
const handleFocus = (e) => {
|
|
@@ -606,6 +638,49 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
606
638
|
onKeyDown(e);
|
|
607
639
|
}
|
|
608
640
|
};
|
|
641
|
+
const commitValue = (nextValue) => {
|
|
642
|
+
setPassValue(nextValue);
|
|
643
|
+
if (!inputRef.current) {
|
|
644
|
+
onChangeText?.(nextValue);
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
if (typeof window !== "undefined" && window.HTMLInputElement) {
|
|
648
|
+
const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
|
|
649
|
+
window.HTMLInputElement.prototype,
|
|
650
|
+
"value"
|
|
651
|
+
)?.set;
|
|
652
|
+
if (nativeInputValueSetter) {
|
|
653
|
+
nativeInputValueSetter.call(inputRef.current, nextValue);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
const syntheticEvent = {
|
|
657
|
+
target: inputRef.current,
|
|
658
|
+
currentTarget: inputRef.current,
|
|
659
|
+
type: "change"
|
|
660
|
+
};
|
|
661
|
+
onChange?.(syntheticEvent);
|
|
662
|
+
onChangeText?.(nextValue);
|
|
663
|
+
};
|
|
664
|
+
const handleStep = (direction) => {
|
|
665
|
+
if (isDisable) return;
|
|
666
|
+
const rawStep = Number(step);
|
|
667
|
+
const stepAmount = Number.isFinite(rawStep) && rawStep > 0 ? rawStep : 1;
|
|
668
|
+
const minValue = min !== void 0 && min !== "" ? Number(min) : void 0;
|
|
669
|
+
const maxValue = max !== void 0 && max !== "" ? Number(max) : void 0;
|
|
670
|
+
const currentRaw = value !== void 0 ? value : inputRef.current?.value ?? passValue;
|
|
671
|
+
const parsed = parseFloat(String(currentRaw));
|
|
672
|
+
const base = Number.isNaN(parsed) ? 0 : parsed;
|
|
673
|
+
let next = base + direction * stepAmount;
|
|
674
|
+
next = Number(next.toFixed(decimalsOf(stepAmount)));
|
|
675
|
+
if (minValue !== void 0 && Number.isFinite(minValue)) {
|
|
676
|
+
next = Math.max(next, minValue);
|
|
677
|
+
}
|
|
678
|
+
if (maxValue !== void 0 && Number.isFinite(maxValue)) {
|
|
679
|
+
next = Math.min(next, maxValue);
|
|
680
|
+
}
|
|
681
|
+
commitValue(String(next));
|
|
682
|
+
inputRef.current?.focus();
|
|
683
|
+
};
|
|
609
684
|
const handleClear = (e) => {
|
|
610
685
|
e.stopPropagation();
|
|
611
686
|
setPassValue("");
|
|
@@ -661,6 +736,13 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
661
736
|
sm: 16,
|
|
662
737
|
xs: 16
|
|
663
738
|
};
|
|
739
|
+
const stepperIconSizeConfig = {
|
|
740
|
+
xl: 14,
|
|
741
|
+
lg: 14,
|
|
742
|
+
md: 14,
|
|
743
|
+
sm: 12,
|
|
744
|
+
xs: 12
|
|
745
|
+
};
|
|
664
746
|
const focusOutlineConfig = {
|
|
665
747
|
xl: { width: 1, offset: -1 },
|
|
666
748
|
lg: { width: 1, offset: -1 },
|
|
@@ -671,6 +753,7 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
671
753
|
const padding = paddingConfig[size];
|
|
672
754
|
const borderRadius = theme.shape.input[size].borderRadius;
|
|
673
755
|
const iconSize = iconSizeConfig[size];
|
|
756
|
+
const stepperIconSize = stepperIconSizeConfig[size];
|
|
674
757
|
const focusOutline = focusOutlineConfig[size];
|
|
675
758
|
if (type === "hidden") {
|
|
676
759
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
@@ -688,6 +771,31 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
688
771
|
}
|
|
689
772
|
);
|
|
690
773
|
}
|
|
774
|
+
const renderStepperButton = (direction, icon, accessibleLabel, dataTestId) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
775
|
+
Box,
|
|
776
|
+
{
|
|
777
|
+
as: "button",
|
|
778
|
+
type: "button",
|
|
779
|
+
flex: 1,
|
|
780
|
+
alignItems: "center",
|
|
781
|
+
justifyContent: "center",
|
|
782
|
+
width: stepperIconSize,
|
|
783
|
+
paddingVertical: 0,
|
|
784
|
+
paddingHorizontal: 0,
|
|
785
|
+
backgroundColor: "transparent",
|
|
786
|
+
borderWidth: 0,
|
|
787
|
+
cursor: isDisable ? "not-allowed" : "pointer",
|
|
788
|
+
tabIndex: -1,
|
|
789
|
+
"aria-label": accessibleLabel,
|
|
790
|
+
...isWeb && {
|
|
791
|
+
onMouseDown: (e) => e.preventDefault()
|
|
792
|
+
},
|
|
793
|
+
onPress: !isDisable ? () => handleStep(direction) : void 0,
|
|
794
|
+
disabled: isDisable,
|
|
795
|
+
"data-testid": dataTestId,
|
|
796
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Icon, { size: stepperIconSize, color: iconColor, children: icon })
|
|
797
|
+
}
|
|
798
|
+
);
|
|
691
799
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Box, { flexDirection: "column", gap: sizeStyles.fieldGap, width: "100%", children: [
|
|
692
800
|
label && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Box, { as: "label", id: labelId, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
693
801
|
Text,
|
|
@@ -746,6 +854,9 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
746
854
|
onKeyDown: handleKeyDown,
|
|
747
855
|
disabled: isDisable,
|
|
748
856
|
type: type || "text",
|
|
857
|
+
min,
|
|
858
|
+
max,
|
|
859
|
+
step,
|
|
749
860
|
color: textColor,
|
|
750
861
|
fontSize: sizeStyles.fontSize,
|
|
751
862
|
fontFamily: theme.fonts.body,
|
|
@@ -799,7 +910,31 @@ var Input = (0, import_react4.forwardRef)(
|
|
|
799
910
|
}
|
|
800
911
|
),
|
|
801
912
|
isRightInputIconShown && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Box, { alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Icon, { size: iconRightSize || iconSize, color: iconColor, children: iconRight }) })
|
|
802
|
-
] })
|
|
913
|
+
] }),
|
|
914
|
+
isNumberStepperShown && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
915
|
+
Box,
|
|
916
|
+
{
|
|
917
|
+
flexDirection: "column",
|
|
918
|
+
alignItems: "center",
|
|
919
|
+
justifyContent: "center",
|
|
920
|
+
height: "100%",
|
|
921
|
+
"data-testid": "input__number-stepper",
|
|
922
|
+
children: [
|
|
923
|
+
renderStepperButton(
|
|
924
|
+
1,
|
|
925
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_xui_icons_base.ChevronUp, {}),
|
|
926
|
+
"Increase value",
|
|
927
|
+
"input__number-stepper-increment"
|
|
928
|
+
),
|
|
929
|
+
renderStepperButton(
|
|
930
|
+
-1,
|
|
931
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_xui_icons_base.ChevronDown, {}),
|
|
932
|
+
"Decrease value",
|
|
933
|
+
"input__number-stepper-decrement"
|
|
934
|
+
)
|
|
935
|
+
]
|
|
936
|
+
}
|
|
937
|
+
)
|
|
803
938
|
]
|
|
804
939
|
}
|
|
805
940
|
),
|
package/web/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.tsx","../../src/Input.tsx","../../../../foundation/primitives-web/src/Box.tsx","../../../../foundation/primitives-web/src/filterDOMProps.ts","../../../../../node_modules/@emotion/memoize/dist/memoize.esm.js","../../../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js","../../../../foundation/primitives-web/src/Text.tsx","../../../../foundation/primitives-web/src/textTruncation.ts","../../../../foundation/primitives-web/src/Icon.tsx","../../../../foundation/primitives-web/src/Input.tsx","../../../../foundation/primitives-web/src/index.tsx"],"sourcesContent":["export * from \"./Input\";\n","import React, {\n useState,\n forwardRef,\n useRef,\n type InputHTMLAttributes,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon, InputPrimitive, isWeb } from \"@xsolla/xui-primitives\";\nimport {\n useResolvedTheme,\n useId,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\nimport { CheckCr, Remove } from \"@xsolla/xui-icons-base\";\n\nexport interface InputProps\n extends\n Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"onChange\">,\n ThemeOverrideProps {\n /**\n * Property for specifying the value of the control.\n */\n value?: string;\n /**\n * Property for specifying the placeholder of the control.\n */\n placeholder?: string;\n /**\n * Event handler when the value changes (for controlled mode).\n */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler when the text changes (alternative to onChange).\n */\n onChangeText?: (text: string) => void;\n /**\n * Property for changing the size of the input.\n */\n size?: \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\n /**\n * Property for disabling the control.\n */\n disabled?: boolean;\n /**\n * Property for displaying a label above the input.\n */\n label?: string;\n /**\n * Property for displaying an error message and highlighting the control as invalid.\n */\n errorMessage?: string;\n /**\n * Property for displaying an error and highlighting the control as invalid.\n */\n error?: boolean;\n /**\n * Property to display an icon on the left side.\n */\n iconLeft?: React.ReactNode;\n /**\n * Property to display an icon on the right side.\n */\n iconRight?: React.ReactNode;\n /**\n * Add function clear for input.\n */\n extraClear?: boolean;\n /**\n * Function triggered when user clicks on extraClear button.\n */\n onRemove?: () => void;\n /**\n * Property for show checked status in input. Show only if not errorMessage.\n */\n checked?: boolean;\n /**\n * Property for passing a new icon to replace the default checked icon.\n */\n checkedIcon?: React.ReactNode;\n /**\n * Property to specify the size of the right icon.\n */\n iconRightSize?: number | string;\n /**\n * Unique identifier for the input element. Used for accessibility linking.\n */\n id?: string;\n /**\n * Accessible label for screen readers when no visible label is present.\n */\n \"aria-label\"?: string;\n /**\n * Override border radius for top-left corner.\n */\n borderTopLeftRadius?: number;\n /**\n * Override border radius for top-right corner.\n */\n borderTopRightRadius?: number;\n /**\n * Override border radius for bottom-left corner.\n */\n borderBottomLeftRadius?: number;\n /**\n * Override border radius for bottom-right corner.\n */\n borderBottomRightRadius?: number;\n /**\n * Custom background color for the input.\n */\n backgroundColor?: string;\n testID?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onKeyDown,\n size = \"md\",\n disabled = false,\n name,\n label,\n errorMessage,\n error,\n iconLeft,\n iconRight,\n iconRightSize,\n extraClear = false,\n onRemove,\n checked = false,\n checkedIcon = <CheckCr />,\n type,\n id: providedId,\n \"aria-label\": ariaLabel,\n borderTopLeftRadius: borderTopLeftRadiusOverride,\n borderTopRightRadius: borderTopRightRadiusOverride,\n borderBottomLeftRadius: borderBottomLeftRadiusOverride,\n borderBottomRightRadius: borderBottomRightRadiusOverride,\n backgroundColor: backgroundColorProp,\n testID,\n onBlur: externalOnBlur,\n onFocus: externalOnFocus,\n themeMode,\n themeProductContext,\n ...rest\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const [internalState, setInternalState] = useState<\"default\" | \"focus\">(\n \"default\"\n );\n const [passValue, setPassValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Sanitize useId() output to remove colons (e.g., :r0: -> r0)\n // This ensures valid HTML id attributes and ARIA references\n const rawId = useId();\n const safeId = rawId.replace(/:/g, \"\");\n const inputId = providedId || `input-${safeId}`;\n const labelId = `${inputId}-label`;\n const errorId = `${inputId}-error`;\n\n React.useImperativeHandle(\n ref,\n () => inputRef.current as HTMLInputElement,\n []\n );\n\n const isDisable = disabled;\n const isError = !!(errorMessage || error);\n const isFocus = internalState === \"focus\";\n\n const isLeftInputIconShown = !!iconLeft;\n const isRightInputIconShown = !!iconRight;\n\n // Handle checked status (only show if not error)\n const isCheckedShown = checked && !errorMessage;\n const isExtraClearIconShown =\n !disabled && extraClear && !!(value !== undefined ? value : passValue);\n const extrasCount =\n Number(isExtraClearIconShown) +\n Number(isCheckedShown) +\n Number(isRightInputIconShown);\n\n const sizeStyles = theme.sizing.input(size);\n const inputColors = theme.colors.control.input;\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!isDisable) {\n setInternalState(\"focus\");\n }\n externalOnFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!isDisable) {\n setInternalState(\"default\");\n }\n externalOnBlur?.(e);\n };\n\n // Match switch-repo handleChange pattern exactly\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (onChange) {\n onChange(e);\n }\n if (onChangeText) {\n onChangeText(newValue);\n }\n\n setPassValue(newValue);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n e.currentTarget?.blur();\n }\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n // Match switch-repo onClear pattern - NO direct DOM manipulation\n const handleClear = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n\n // Update internal state first (this makes the input show empty)\n setPassValue(\"\");\n\n onRemove?.();\n\n // Create synthetic change event and call onChange if provided\n if (inputRef.current) {\n // Web-specific: Use the native setter to properly set the value\n // without shadowing the property (only on web platform)\n if (typeof window !== \"undefined\" && window.HTMLInputElement) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set;\n\n if (nativeInputValueSetter) {\n nativeInputValueSetter.call(inputRef.current, \"\");\n }\n }\n\n const syntheticEvent = {\n target: inputRef.current,\n currentTarget: inputRef.current,\n type: \"change\",\n } as React.ChangeEvent<HTMLInputElement>;\n\n onChange?.(syntheticEvent);\n inputRef.current.focus();\n }\n };\n\n let backgroundColor = backgroundColorProp || inputColors.bg;\n let borderColor = inputColors.border;\n let outlineColor: string | undefined;\n\n if (isDisable) {\n backgroundColor = inputColors.bgDisable;\n borderColor = inputColors.borderDisable;\n } else if (isError) {\n outlineColor = theme.colors.border.alert;\n if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n }\n } else if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n outlineColor = theme.colors.border.brand;\n }\n\n const textColor = isDisable ? inputColors.textDisable : inputColors.text;\n const placeholderColor = inputColors.placeholder;\n // Adornment icons (leading, trailing, clear) use the muted placeholder tint\n // per Figma (control/input/placeholder), not the full-weight text colour.\n // The checked ✓ keeps its semantic success colour. See FEP-877.\n const iconColor = isDisable ? inputColors.textDisable : placeholderColor;\n\n // Padding values from Figma design\n const paddingConfig = {\n xl: { vertical: 12, horizontal: 12 },\n lg: { vertical: 14, horizontal: 12 },\n md: { vertical: 11, horizontal: 12 },\n sm: { vertical: 7, horizontal: 10 },\n xs: { vertical: 7, horizontal: 10 },\n };\n\n // Icon sizes from Figma design\n const iconSizeConfig = {\n xl: 18,\n lg: 18,\n md: 18,\n sm: 16,\n xs: 16,\n };\n\n // Focus outline config from Figma design\n const focusOutlineConfig = {\n xl: { width: 1, offset: -1 },\n lg: { width: 1, offset: -1 },\n md: { width: 1, offset: -1 },\n sm: { width: 1, offset: -1 },\n xs: { width: 1, offset: -1 },\n };\n\n const padding = paddingConfig[size];\n const borderRadius = theme.shape.input[size].borderRadius;\n const iconSize = iconSizeConfig[size];\n const focusOutline = focusOutlineConfig[size];\n\n // A hidden input carries no visual chrome (no label, border, background, or\n // extras). Render only the bare field so nothing is shown on screen.\n if (type === \"hidden\") {\n return (\n <InputPrimitive\n ref={inputRef}\n id={inputId}\n type=\"hidden\"\n name={name}\n value={value}\n onChange={handleChange}\n disabled={isDisable}\n data-testid={testID}\n {...rest}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\" gap={sizeStyles.fieldGap} width=\"100%\">\n {label && (\n <Box as=\"label\" id={labelId}>\n <Text\n color={theme.colors.content.secondary}\n fontSize={sizeStyles.fontSize - 2}\n fontWeight=\"500\"\n >\n {label}\n </Text>\n </Box>\n )}\n <Box\n backgroundColor={backgroundColor}\n borderColor={borderColor}\n borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n height={sizeStyles.height}\n paddingVertical={padding.vertical}\n paddingHorizontal={padding.horizontal}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={10}\n position=\"relative\"\n cursor={isDisable ? \"not-allowed\" : \"text\"}\n onPress={() => {\n if (!isDisable) inputRef.current?.focus();\n }}\n data-testid=\"input__container\"\n style={{\n borderTopLeftRadius: borderTopLeftRadiusOverride ?? borderRadius,\n borderTopRightRadius: borderTopRightRadiusOverride ?? borderRadius,\n borderBottomLeftRadius:\n borderBottomLeftRadiusOverride ?? borderRadius,\n borderBottomRightRadius:\n borderBottomRightRadiusOverride ?? borderRadius,\n ...(outlineColor && isWeb\n ? {\n outline: `${focusOutline.width}px solid ${outlineColor}`,\n outlineOffset: `${focusOutline.offset}px`,\n }\n : outlineColor && !isWeb\n ? { borderColor: outlineColor, borderWidth: focusOutline.width }\n : {}),\n }}\n hoverStyle={\n !isDisable && !isFocus && !isError\n ? {\n backgroundColor: inputColors.bgHover,\n borderColor: inputColors.borderHover,\n }\n : undefined\n }\n >\n {isLeftInputIconShown && (\n <Box alignItems=\"center\" justifyContent=\"center\">\n <Icon size={iconSize} color={iconColor}>\n {iconLeft}\n </Icon>\n </Box>\n )}\n\n <Box flex={1} height=\"100%\" justifyContent=\"center\">\n <InputPrimitive\n ref={inputRef}\n id={inputId}\n value={value}\n name={name}\n placeholder={placeholder}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={isDisable}\n type={type || \"text\"}\n color={textColor}\n fontSize={sizeStyles.fontSize}\n fontFamily={theme.fonts.body}\n placeholderTextColor={placeholderColor}\n aria-invalid={isError || undefined}\n aria-describedby={errorMessage ? errorId : undefined}\n aria-labelledby={label ? labelId : undefined}\n aria-label={!label ? ariaLabel : undefined}\n aria-disabled={isDisable || undefined}\n data-testid={testID}\n {...rest}\n />\n </Box>\n\n {/* Right-side Extras Wrapper */}\n {extrasCount > 0 && (\n <Box flexDirection=\"row\" alignItems=\"center\" gap={4}>\n {isExtraClearIconShown && (\n <Box\n as=\"button\"\n type=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={iconSize}\n height=\"100%\"\n backgroundColor=\"transparent\"\n borderWidth={0}\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n {...(isWeb && {\n onMouseDown: (e: React.MouseEvent<HTMLButtonElement>) =>\n e.preventDefault(),\n })}\n onPress={!disabled ? handleClear : undefined}\n disabled={disabled}\n data-testid=\"input__extra-clear-button\"\n >\n <Icon size={iconSize} color={iconColor}>\n <Remove />\n </Icon>\n </Box>\n )}\n {isCheckedShown && (\n <Box\n alignItems=\"center\"\n justifyContent=\"center\"\n width={iconSize}\n height=\"100%\"\n >\n <Icon\n size={iconSize}\n color={theme.colors.content.success.primary}\n >\n {checkedIcon}\n </Icon>\n </Box>\n )}\n {isRightInputIconShown && (\n <Box alignItems=\"center\" justifyContent=\"center\">\n <Icon size={iconRightSize || iconSize} color={iconColor}>\n {iconRight}\n </Icon>\n </Box>\n )}\n </Box>\n )}\n </Box>\n\n {errorMessage && (\n <Text\n id={errorId}\n role=\"alert\"\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.fontSize - 2}\n style={{ lineHeight: sizeStyles.lineHeight + \"px\" }}\n >\n {errorMessage}\n </Text>\n )}\n </Box>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport type { BoxProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledBox = styled(FilteredDiv)<BoxProps>`\n display: flex;\n box-sizing: border-box;\n background-color: ${(props) => props.backgroundColor || \"transparent\"};\n border-color: ${(props) => props.borderColor || \"transparent\"};\n border-width: ${(props) =>\n typeof props.borderWidth === \"number\"\n ? `${props.borderWidth}px`\n : props.borderWidth || 0};\n\n ${(props) =>\n props.borderBottomWidth !== undefined &&\n `\n border-bottom-width: ${typeof props.borderBottomWidth === \"number\" ? `${props.borderBottomWidth}px` : props.borderBottomWidth};\n border-bottom-color: ${props.borderBottomColor || props.borderColor || \"transparent\"};\n border-bottom-style: solid;\n `}\n ${(props) =>\n props.borderTopWidth !== undefined &&\n `\n border-top-width: ${typeof props.borderTopWidth === \"number\" ? `${props.borderTopWidth}px` : props.borderTopWidth};\n border-top-color: ${props.borderTopColor || props.borderColor || \"transparent\"};\n border-top-style: solid;\n `}\n ${(props) =>\n props.borderLeftWidth !== undefined &&\n `\n border-left-width: ${typeof props.borderLeftWidth === \"number\" ? `${props.borderLeftWidth}px` : props.borderLeftWidth};\n border-left-color: ${props.borderLeftColor || props.borderColor || \"transparent\"};\n border-left-style: solid;\n `}\n ${(props) =>\n props.borderRightWidth !== undefined &&\n `\n border-right-width: ${typeof props.borderRightWidth === \"number\" ? `${props.borderRightWidth}px` : props.borderRightWidth};\n border-right-color: ${props.borderRightColor || props.borderColor || \"transparent\"};\n border-right-style: solid;\n `}\n\n border-style: ${(props) =>\n props.borderStyle ||\n (props.borderWidth ||\n props.borderBottomWidth ||\n props.borderTopWidth ||\n props.borderLeftWidth ||\n props.borderRightWidth\n ? \"solid\"\n : \"none\")};\n border-radius: ${(props) =>\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius || 0};\n height: ${(props) =>\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height || \"auto\"};\n width: ${(props) =>\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width || \"auto\"};\n min-width: ${(props) =>\n typeof props.minWidth === \"number\"\n ? `${props.minWidth}px`\n : props.minWidth || \"auto\"};\n min-height: ${(props) =>\n typeof props.minHeight === \"number\"\n ? `${props.minHeight}px`\n : props.minHeight || \"auto\"};\n max-width: ${(props) =>\n typeof props.maxWidth === \"number\"\n ? `${props.maxWidth}px`\n : props.maxWidth || \"none\"};\n max-height: ${(props) =>\n typeof props.maxHeight === \"number\"\n ? `${props.maxHeight}px`\n : props.maxHeight || \"none\"};\n\n padding: ${(props) =>\n typeof props.padding === \"number\"\n ? `${props.padding}px`\n : props.padding || 0};\n ${(props) =>\n props.paddingHorizontal &&\n `\n padding-left: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n padding-right: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n `}\n ${(props) =>\n props.paddingVertical &&\n `\n padding-top: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n padding-bottom: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n `}\n ${(props) =>\n props.paddingTop !== undefined &&\n `padding-top: ${typeof props.paddingTop === \"number\" ? `${props.paddingTop}px` : props.paddingTop};`}\n ${(props) =>\n props.paddingBottom !== undefined &&\n `padding-bottom: ${typeof props.paddingBottom === \"number\" ? `${props.paddingBottom}px` : props.paddingBottom};`}\n ${(props) =>\n props.paddingLeft !== undefined &&\n `padding-left: ${typeof props.paddingLeft === \"number\" ? `${props.paddingLeft}px` : props.paddingLeft};`}\n ${(props) =>\n props.paddingRight !== undefined &&\n `padding-right: ${typeof props.paddingRight === \"number\" ? `${props.paddingRight}px` : props.paddingRight};`}\n\n margin: ${(props) =>\n typeof props.margin === \"number\" ? `${props.margin}px` : props.margin || 0};\n ${(props) =>\n props.marginTop !== undefined &&\n `margin-top: ${typeof props.marginTop === \"number\" ? `${props.marginTop}px` : props.marginTop};`}\n ${(props) =>\n props.marginBottom !== undefined &&\n `margin-bottom: ${typeof props.marginBottom === \"number\" ? `${props.marginBottom}px` : props.marginBottom};`}\n ${(props) =>\n props.marginLeft !== undefined &&\n `margin-left: ${typeof props.marginLeft === \"number\" ? `${props.marginLeft}px` : props.marginLeft};`}\n ${(props) =>\n props.marginRight !== undefined &&\n `margin-right: ${typeof props.marginRight === \"number\" ? `${props.marginRight}px` : props.marginRight};`}\n\n flex-direction: ${(props) => props.flexDirection || \"column\"};\n flex-wrap: ${(props) => props.flexWrap || \"nowrap\"};\n align-items: ${(props) => props.alignItems || \"stretch\"};\n justify-content: ${(props) => props.justifyContent || \"flex-start\"};\n cursor: ${(props) =>\n props.cursor\n ? props.cursor\n : props.onClick || props.onPress\n ? \"pointer\"\n : \"inherit\"};\n position: ${(props) => props.position || \"static\"};\n top: ${(props) =>\n typeof props.top === \"number\" ? `${props.top}px` : props.top};\n bottom: ${(props) =>\n typeof props.bottom === \"number\" ? `${props.bottom}px` : props.bottom};\n left: ${(props) =>\n typeof props.left === \"number\" ? `${props.left}px` : props.left};\n right: ${(props) =>\n typeof props.right === \"number\" ? `${props.right}px` : props.right};\n flex: ${(props) => props.flex};\n flex-shrink: ${(props) => props.flexShrink ?? 1};\n gap: ${(props) =>\n typeof props.gap === \"number\" ? `${props.gap}px` : props.gap || 0};\n align-self: ${(props) => props.alignSelf || \"auto\"};\n /* Only emit overflow-x/y when explicitly set. Defaulting them to\n visible after overflow would override the shorthand and break\n clipping (e.g. OtherCard bottom-right promo image). */\n overflow: ${(props) => props.overflow || \"visible\"};\n ${(props) =>\n props.overflowX != null ? `overflow-x: ${props.overflowX};` : \"\"}\n ${(props) =>\n props.overflowY != null ? `overflow-y: ${props.overflowY};` : \"\"}\n z-index: ${(props) => props.zIndex};\n opacity: ${(props) =>\n props.opacity != null ? props.opacity : props.disabled ? 0.5 : 1};\n pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n\n /* \\`background\\` is emitted before \\`background-color\\` so a caller passing\n both still gets backgroundColor as the winner. Use the shorthand for a\n layered fill (e.g. an overlay tint over a resting surface colour), which\n a single background-color cannot express. */\n &:hover {\n ${(props) =>\n props.hoverStyle?.background &&\n `background: ${props.hoverStyle.background};`}\n ${(props) =>\n props.hoverStyle?.backgroundColor &&\n `background-color: ${props.hoverStyle.backgroundColor};`}\n ${(props) =>\n props.hoverStyle?.borderColor &&\n `border-color: ${props.hoverStyle.borderColor};`}\n }\n\n &:active {\n ${(props) =>\n props.pressStyle?.background &&\n `background: ${props.pressStyle.background};`}\n ${(props) =>\n props.pressStyle?.backgroundColor &&\n `background-color: ${props.pressStyle.backgroundColor};`}\n }\n`;\n\nexport const Box = React.forwardRef<\n HTMLDivElement | HTMLButtonElement,\n BoxProps\n>(\n (\n {\n children,\n onPress,\n onKeyDown,\n onKeyUp,\n role,\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 \"aria-describedby\": ariaDescribedBy,\n \"aria-expanded\": ariaExpanded,\n \"aria-haspopup\": ariaHasPopup,\n \"aria-pressed\": ariaPressed,\n \"aria-controls\": ariaControls,\n tabIndex,\n as,\n src,\n alt,\n onError,\n onLoad,\n type,\n disabled,\n id,\n testID,\n \"data-testid\": dataTestId,\n ...props\n },\n ref\n ) => {\n // Handle as=\"img\" for rendering images with proper border-radius\n if (as === \"img\" && src) {\n return (\n <img\n src={src}\n alt={alt || \"\"}\n onError={onError}\n onLoad={onLoad}\n data-testid={dataTestId || testID}\n style={{\n display: \"block\",\n objectFit: \"cover\",\n width:\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width,\n height:\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height,\n borderRadius:\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius,\n position: props.position,\n top: typeof props.top === \"number\" ? `${props.top}px` : props.top,\n left:\n typeof props.left === \"number\" ? `${props.left}px` : props.left,\n right:\n typeof props.right === \"number\"\n ? `${props.right}px`\n : props.right,\n bottom:\n typeof props.bottom === \"number\"\n ? `${props.bottom}px`\n : props.bottom,\n ...props.style,\n }}\n />\n );\n }\n\n return (\n <StyledBox\n ref={ref}\n elementType={as}\n id={id}\n type={as === \"button\" ? type || \"button\" : undefined}\n disabled={as === \"button\" ? disabled : undefined}\n onClick={onPress}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-current={ariaCurrent}\n aria-disabled={ariaDisabled}\n aria-busy={ariaBusy}\n aria-describedby={ariaDescribedBy}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-pressed={ariaPressed}\n aria-controls={ariaControls}\n aria-live={ariaLive}\n tabIndex={tabIndex !== undefined ? tabIndex : undefined}\n data-testid={dataTestId || testID}\n {...props}\n >\n {children}\n </StyledBox>\n );\n }\n);\n\nBox.displayName = \"Box\";\n","import React from \"react\";\nimport isPropValid from \"@emotion/is-prop-valid\";\n\n// Props that @emotion/is-prop-valid incorrectly treats as valid HTML.\n// These are React Native or component-specific props that match\n// valid HTML patterns (on* event handlers, SVG attributes).\nexport const ADDITIONAL_BLOCKED_PROPS = new Set([\n // RN-only event handlers (pass isPropValid's on* pattern)\n \"onPress\",\n \"onChangeText\",\n \"onLayout\",\n \"onMoveShouldSetResponder\",\n \"onResponderGrant\",\n \"onResponderMove\",\n \"onResponderRelease\",\n \"onResponderTerminate\",\n // SVG attributes that pass isPropValid\n \"strokeWidth\",\n // CSS properties that pass isPropValid but are used as component props\n \"overflow\",\n \"opacity\",\n \"cursor\",\n \"fontSize\",\n \"fontWeight\",\n \"fontFamily\",\n \"textDecoration\",\n // Cross-platform layout prop that Text consumes as CSS, never as an\n // attribute. Pinned explicitly because it is now spread into the styled\n // component rather than destructured away before it can reach the DOM.\n \"numberOfLines\",\n]);\n\nfunction shouldForwardProp(key: string): boolean {\n if (ADDITIONAL_BLOCKED_PROPS.has(key)) return false;\n return isPropValid(key);\n}\n\n/**\n * Creates a React component that renders the given HTML tag\n * but filters out non-HTML props before they reach the DOM.\n *\n * Uses @emotion/is-prop-valid (same library styled-components v4\n * uses internally) to automatically block invalid HTML attributes,\n * plus a small blocklist for false positives (RN on* handlers, SVG attrs).\n *\n * Usage: `const FilteredDiv = createFilteredElement(\"div\");`\n * Then: `const StyledBox = styled(FilteredDiv)<BoxProps>\\`...\\`;`\n *\n * styled-components can still read ALL props for CSS interpolation,\n * but only valid HTML attributes are forwarded to the DOM element.\n */\nexport function createFilteredElement(defaultTag: string) {\n const Component = React.forwardRef<HTMLElement, Record<string, unknown>>(\n ({ children, elementType, ...props }, ref) => {\n const Tag = (elementType as string) || defaultTag;\n const htmlProps: Record<string, unknown> = {};\n for (const key of Object.keys(props)) {\n if (shouldForwardProp(key)) {\n htmlProps[key] = props[key];\n }\n }\n return React.createElement(\n Tag,\n { ref, ...htmlProps },\n children as React.ReactNode\n );\n }\n );\n Component.displayName = `Filtered(${defaultTag})`;\n return Component;\n}\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar 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)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\nimport { truncationStyles } from \"./textTruncation\";\n\nconst FilteredSpan = createFilteredElement(\"span\");\n\nconst StyledText = styled(FilteredSpan)<TextProps>`\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-weight: ${(props) => props.fontWeight || \"normal\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n line-height: ${(props) =>\n typeof props.lineHeight === \"number\"\n ? `${props.lineHeight}px`\n : props.lineHeight || \"inherit\"};\n white-space: ${(props) => props.whiteSpace || \"normal\"};\n text-align: ${(props) => props.textAlign || \"inherit\"};\n text-decoration: ${(props) => props.textDecoration || \"none\"};\n\n /* Keep last: single-line truncation has to win over white-space above. */\n ${(props) => truncationStyles(props.numberOfLines)}\n`;\n\nexport const Text: React.FC<TextProps> = ({\n style,\n className,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n ...props\n}) => {\n return (\n <StyledText\n {...props}\n style={style}\n className={className}\n id={id}\n role={role}\n data-testid={dataTestId || testID}\n />\n );\n};\n","/**\n * Web implementation of the cross-platform `numberOfLines` text prop.\n *\n * Native maps `numberOfLines` straight onto `RNText`. A web `<span>` has no\n * equivalent, so emit the CSS that produces the same result.\n *\n * Two details matter for the single-line case:\n * - `text-overflow` only takes effect on a block container, so the inline\n * `<span>` is promoted to `display: block` and capped at `max-width: 100%`.\n * - `min-width: 0` lets the text shrink below its own content width when it\n * sits in a flex row. Without it a `nowrap` label keeps its full intrinsic\n * width and pushes its siblings (icons, chevrons) out of a fixed-width field.\n *\n * Returns an empty string when there is nothing to clamp, so the declaration\n * block stays untouched for the majority of callers.\n */\nexport const truncationStyles = (numberOfLines?: number): string => {\n if (!numberOfLines || numberOfLines < 1) return \"\";\n\n if (numberOfLines === 1) {\n return `\n display: block;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n }\n\n return `\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: ${numberOfLines};\n line-clamp: ${numberOfLines};\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n `;\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledIcon = styled(FilteredDiv)<IconProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${(props) =>\n typeof props.size === \"number\" ? `${props.size}px` : props.size || \"24px\"};\n height: ${(props) =>\n typeof props.size === \"number\" ? `${props.size}px` : props.size || \"24px\"};\n color: ${(props) => props.color || \"currentColor\"};\n\n /* Icons paint themselves — each icon's own SVG sets its fill/stroke\n (icons-base via inline \"fill: currentColor\", Lucide via \"fill\"/\"stroke\"\n attributes). Do not add fill/stroke here: it re-strokes fill-based icons\n and thickens the glyph. See FEP-877. */\n svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n testID,\n \"data-testid\": dataTestId,\n ...props\n}) => {\n return (\n <StyledIcon data-testid={dataTestId || testID} {...props}>\n {children}\n </StyledIcon>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport styled from \"styled-components\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredInput = createFilteredElement(\"input\");\n\nconst StyledInput = styled(FilteredInput)<InputPrimitiveProps>`\n background: transparent;\n border: none;\n outline: none;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n text-align: inherit;\n\n &::placeholder {\n color: ${(props) =>\n props.placeholderTextColor || \"rgba(255, 255, 255, 0.5)\"};\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n\n /* Override browser autofill background */\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus,\n &:-webkit-autofill:active {\n -webkit-box-shadow: 0 0 0 1000px transparent inset !important;\n -webkit-background-clip: text !important;\n -webkit-text-fill-color: ${(props) => props.color || \"inherit\"} !important;\n }\n`;\n\nexport const InputPrimitive = forwardRef<HTMLInputElement, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n name,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-invalid\": ariaInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n testID,\n ...rest\n },\n ref\n ) => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(e);\n }\n if (onChangeText) {\n onChangeText(e.target.value);\n }\n };\n\n return (\n <StyledInput\n ref={ref}\n id={id}\n value={value}\n name={name}\n placeholder={placeholder}\n onChange={handleChange}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n disabled={disabled}\n type={secureTextEntry ? \"password\" : type || \"text\"}\n inputMode={inputMode}\n autoComplete={autoComplete}\n style={style}\n color={color}\n fontSize={fontSize}\n fontFamily={fontFamily}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel}\n aria-disabled={ariaDisabled}\n data-testid={dataTestId || testID}\n {...rest}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","export * from \"./Box\";\nexport * from \"./Text\";\nexport * from \"./Spinner\";\nexport * from \"./Icon\";\nexport * from \"./Divider\";\nexport * from \"./Input\";\nexport * from \"./TextArea\";\nexport * from \"./LinearGradient\";\n\nexport const isWeb = true;\nexport const isNative = false;\n"],"mappings":"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","names":["import_react","import_react","React","styled","React","import_styled_components","import_jsx_runtime","styled","import_styled_components","import_jsx_runtime","FilteredDiv","styled","import_react","import_styled_components","import_jsx_runtime","styled","import_jsx_runtime","React"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.tsx","../../src/Input.tsx","../../../../foundation/primitives-web/src/Box.tsx","../../../../foundation/primitives-web/src/filterDOMProps.ts","../../../../../node_modules/@emotion/memoize/dist/memoize.esm.js","../../../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js","../../../../foundation/primitives-web/src/Text.tsx","../../../../foundation/primitives-web/src/textTruncation.ts","../../../../foundation/primitives-web/src/Icon.tsx","../../../../foundation/primitives-web/src/Input.tsx","../../../../foundation/primitives-web/src/index.tsx"],"sourcesContent":["export * from \"./Input\";\n","import React, {\n useState,\n forwardRef,\n useRef,\n type InputHTMLAttributes,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon, InputPrimitive, isWeb } from \"@xsolla/xui-primitives\";\nimport {\n useResolvedTheme,\n useId,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\nimport {\n CheckCr,\n ChevronDown,\n ChevronUp,\n Remove,\n} from \"@xsolla/xui-icons-base\";\n\nexport interface InputProps\n extends\n Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"onChange\">,\n ThemeOverrideProps {\n /**\n * Property for specifying the value of the control.\n */\n value?: string;\n /**\n * Property for specifying the placeholder of the control.\n */\n placeholder?: string;\n /**\n * Event handler when the value changes (for controlled mode).\n */\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler when the text changes (alternative to onChange).\n */\n onChangeText?: (text: string) => void;\n /**\n * Property for changing the size of the input.\n */\n size?: \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\n /**\n * Property for disabling the control.\n */\n disabled?: boolean;\n /**\n * Property for displaying a label above the input.\n */\n label?: string;\n /**\n * Property for displaying an error message and highlighting the control as invalid.\n */\n errorMessage?: string;\n /**\n * Property for displaying an error and highlighting the control as invalid.\n */\n error?: boolean;\n /**\n * Property to display an icon on the left side.\n */\n iconLeft?: React.ReactNode;\n /**\n * Property to display an icon on the right side.\n */\n iconRight?: React.ReactNode;\n /**\n * Add function clear for input.\n */\n extraClear?: boolean;\n /**\n * Function triggered when user clicks on extraClear button.\n */\n onRemove?: () => void;\n /**\n * Property for show checked status in input. Show only if not errorMessage.\n */\n checked?: boolean;\n /**\n * Property for passing a new icon to replace the default checked icon.\n */\n checkedIcon?: React.ReactNode;\n /**\n * Property to specify the size of the right icon.\n */\n iconRightSize?: number | string;\n /**\n * Hide the custom increment/decrement stepper rendered for `type=\"number\"`.\n *\n * The stepper is shown by default on numeric inputs. Set this to `true` when\n * the field is numeric but the surrounding UI supplies its own controls.\n */\n hideNumberStepper?: boolean;\n /**\n * Unique identifier for the input element. Used for accessibility linking.\n */\n id?: string;\n /**\n * Accessible label for screen readers when no visible label is present.\n */\n \"aria-label\"?: string;\n /**\n * Override border radius for top-left corner.\n */\n borderTopLeftRadius?: number;\n /**\n * Override border radius for top-right corner.\n */\n borderTopRightRadius?: number;\n /**\n * Override border radius for bottom-left corner.\n */\n borderBottomLeftRadius?: number;\n /**\n * Override border radius for bottom-right corner.\n */\n borderBottomRightRadius?: number;\n /**\n * Custom background color for the input.\n */\n backgroundColor?: string;\n testID?: string;\n}\n\n/**\n * Number of decimal places implied by a `step` value, so that repeated\n * increments of e.g. 0.1 do not accumulate binary floating-point noise\n * (0.1 + 0.2 -> 0.30000000000000004).\n */\nconst decimalsOf = (step: number): number => {\n const text = String(step);\n if (text.includes(\"e-\")) {\n const [, exponent] = text.split(\"e-\");\n return Number(exponent) || 0;\n }\n const [, fraction] = text.split(\".\");\n return fraction ? fraction.length : 0;\n};\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onKeyDown,\n size = \"md\",\n disabled = false,\n name,\n label,\n errorMessage,\n error,\n iconLeft,\n iconRight,\n iconRightSize,\n extraClear = false,\n onRemove,\n checked = false,\n checkedIcon = <CheckCr />,\n type,\n min,\n max,\n step,\n hideNumberStepper = false,\n id: providedId,\n \"aria-label\": ariaLabel,\n borderTopLeftRadius: borderTopLeftRadiusOverride,\n borderTopRightRadius: borderTopRightRadiusOverride,\n borderBottomLeftRadius: borderBottomLeftRadiusOverride,\n borderBottomRightRadius: borderBottomRightRadiusOverride,\n backgroundColor: backgroundColorProp,\n testID,\n onBlur: externalOnBlur,\n onFocus: externalOnFocus,\n themeMode,\n themeProductContext,\n ...rest\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const [internalState, setInternalState] = useState<\"default\" | \"focus\">(\n \"default\"\n );\n const [passValue, setPassValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Sanitize useId() output to remove colons (e.g., :r0: -> r0)\n // This ensures valid HTML id attributes and ARIA references\n const rawId = useId();\n const safeId = rawId.replace(/:/g, \"\");\n const inputId = providedId || `input-${safeId}`;\n const labelId = `${inputId}-label`;\n const errorId = `${inputId}-error`;\n\n React.useImperativeHandle(\n ref,\n () => inputRef.current as HTMLInputElement,\n []\n );\n\n const isDisable = disabled;\n const isError = !!(errorMessage || error);\n const isFocus = internalState === \"focus\";\n\n const isLeftInputIconShown = !!iconLeft;\n const isRightInputIconShown = !!iconRight;\n\n // Handle checked status (only show if not error)\n const isCheckedShown = checked && !errorMessage;\n const isExtraClearIconShown =\n !disabled && extraClear && !!(value !== undefined ? value : passValue);\n const extrasCount =\n Number(isExtraClearIconShown) +\n Number(isCheckedShown) +\n Number(isRightInputIconShown);\n\n // Figma \"Type number\" replaces the native browser spin buttons with a\n // stacked chevron stepper. Per the frame copy the stepper is always\n // visible for type=\"number\" — empty, filled, focused and unfocused alike.\n const isNumberStepperShown = type === \"number\" && !hideNumberStepper;\n\n const sizeStyles = theme.sizing.input(size);\n const inputColors = theme.colors.control.input;\n\n const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!isDisable) {\n setInternalState(\"focus\");\n }\n externalOnFocus?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (!isDisable) {\n setInternalState(\"default\");\n }\n externalOnBlur?.(e);\n };\n\n // Match switch-repo handleChange pattern exactly\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n\n if (onChange) {\n onChange(e);\n }\n if (onChangeText) {\n onChangeText(newValue);\n }\n\n setPassValue(newValue);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === \"Escape\") {\n e.currentTarget?.blur();\n }\n if (onKeyDown) {\n onKeyDown(e);\n }\n };\n\n /**\n * Write `nextValue` into the field and notify consumers, without direct\n * DOM mutation leaking past React. Mirrors the `handleClear` pattern: use\n * the native value setter so React's synthetic change plumbing sees the\n * update in controlled mode too.\n */\n const commitValue = (nextValue: string) => {\n setPassValue(nextValue);\n\n if (!inputRef.current) {\n onChangeText?.(nextValue);\n return;\n }\n\n if (typeof window !== \"undefined\" && window.HTMLInputElement) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set;\n\n if (nativeInputValueSetter) {\n nativeInputValueSetter.call(inputRef.current, nextValue);\n }\n }\n\n const syntheticEvent = {\n target: inputRef.current,\n currentTarget: inputRef.current,\n type: \"change\",\n } as React.ChangeEvent<HTMLInputElement>;\n\n onChange?.(syntheticEvent);\n onChangeText?.(nextValue);\n };\n\n /**\n * Step the numeric value up (`direction: 1`) or down (`direction: -1`),\n * honouring `min` / `max` / `step` exactly as the native spin buttons do.\n */\n const handleStep = (direction: 1 | -1) => {\n if (isDisable) return;\n\n const rawStep = Number(step);\n // step=\"any\" (and any non-numeric step) falls back to 1, matching the\n // browser's own behaviour for the spin buttons.\n const stepAmount =\n Number.isFinite(rawStep) && rawStep > 0 ? rawStep : 1;\n\n const minValue = min !== undefined && min !== \"\" ? Number(min) : undefined;\n const maxValue = max !== undefined && max !== \"\" ? Number(max) : undefined;\n\n const currentRaw =\n value !== undefined ? value : (inputRef.current?.value ?? passValue);\n const parsed = parseFloat(String(currentRaw));\n const base = Number.isNaN(parsed) ? 0 : parsed;\n\n let next = base + direction * stepAmount;\n\n // Trim float artifacts introduced by fractional steps.\n next = Number(next.toFixed(decimalsOf(stepAmount)));\n\n if (minValue !== undefined && Number.isFinite(minValue)) {\n next = Math.max(next, minValue);\n }\n if (maxValue !== undefined && Number.isFinite(maxValue)) {\n next = Math.min(next, maxValue);\n }\n\n commitValue(String(next));\n\n // Keep focus on the field so the user can keep typing / arrowing.\n inputRef.current?.focus();\n };\n\n // Match switch-repo onClear pattern - NO direct DOM manipulation\n const handleClear = (e: React.MouseEvent<HTMLElement>) => {\n e.stopPropagation();\n\n // Update internal state first (this makes the input show empty)\n setPassValue(\"\");\n\n onRemove?.();\n\n // Create synthetic change event and call onChange if provided\n if (inputRef.current) {\n // Web-specific: Use the native setter to properly set the value\n // without shadowing the property (only on web platform)\n if (typeof window !== \"undefined\" && window.HTMLInputElement) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\"\n )?.set;\n\n if (nativeInputValueSetter) {\n nativeInputValueSetter.call(inputRef.current, \"\");\n }\n }\n\n const syntheticEvent = {\n target: inputRef.current,\n currentTarget: inputRef.current,\n type: \"change\",\n } as React.ChangeEvent<HTMLInputElement>;\n\n onChange?.(syntheticEvent);\n inputRef.current.focus();\n }\n };\n\n let backgroundColor = backgroundColorProp || inputColors.bg;\n let borderColor = inputColors.border;\n let outlineColor: string | undefined;\n\n if (isDisable) {\n backgroundColor = inputColors.bgDisable;\n borderColor = inputColors.borderDisable;\n } else if (isError) {\n outlineColor = theme.colors.border.alert;\n if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n }\n } else if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n outlineColor = theme.colors.border.brand;\n }\n\n const textColor = isDisable ? inputColors.textDisable : inputColors.text;\n const placeholderColor = inputColors.placeholder;\n // Adornment icons (leading, trailing, clear) use the muted placeholder tint\n // per Figma (control/input/placeholder), not the full-weight text colour.\n // The checked ✓ keeps its semantic success colour. See FEP-877.\n const iconColor = isDisable ? inputColors.textDisable : placeholderColor;\n\n // Padding values from Figma design\n const paddingConfig = {\n xl: { vertical: 12, horizontal: 12 },\n lg: { vertical: 14, horizontal: 12 },\n md: { vertical: 11, horizontal: 12 },\n sm: { vertical: 7, horizontal: 10 },\n xs: { vertical: 7, horizontal: 10 },\n };\n\n // Icon sizes from Figma design\n const iconSizeConfig = {\n xl: 18,\n lg: 18,\n md: 18,\n sm: 16,\n xs: 16,\n };\n\n // Stepper chevrons sit stacked in one field-height column, so they read\n // smaller than the standalone adornment icons (Figma \"Type number\").\n const stepperIconSizeConfig = {\n xl: 14,\n lg: 14,\n md: 14,\n sm: 12,\n xs: 12,\n };\n\n // Focus outline config from Figma design\n const focusOutlineConfig = {\n xl: { width: 1, offset: -1 },\n lg: { width: 1, offset: -1 },\n md: { width: 1, offset: -1 },\n sm: { width: 1, offset: -1 },\n xs: { width: 1, offset: -1 },\n };\n\n const padding = paddingConfig[size];\n const borderRadius = theme.shape.input[size].borderRadius;\n const iconSize = iconSizeConfig[size];\n const stepperIconSize = stepperIconSizeConfig[size];\n const focusOutline = focusOutlineConfig[size];\n\n // A hidden input carries no visual chrome (no label, border, background, or\n // extras). Render only the bare field so nothing is shown on screen.\n if (type === \"hidden\") {\n return (\n <InputPrimitive\n ref={inputRef}\n id={inputId}\n type=\"hidden\"\n name={name}\n value={value}\n onChange={handleChange}\n disabled={isDisable}\n data-testid={testID}\n {...rest}\n />\n );\n }\n\n const renderStepperButton = (\n direction: 1 | -1,\n icon: React.ReactNode,\n accessibleLabel: string,\n dataTestId: string\n ) => (\n <Box\n as=\"button\"\n type=\"button\"\n flex={1}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={stepperIconSize}\n paddingVertical={0}\n paddingHorizontal={0}\n backgroundColor=\"transparent\"\n borderWidth={0}\n cursor={isDisable ? \"not-allowed\" : \"pointer\"}\n // The stepper duplicates the keyboard ArrowUp / ArrowDown the field\n // already handles natively, so keep it out of the tab order.\n tabIndex={-1}\n aria-label={accessibleLabel}\n {...(isWeb && {\n onMouseDown: (e: React.MouseEvent<HTMLButtonElement>) =>\n e.preventDefault(),\n })}\n onPress={!isDisable ? () => handleStep(direction) : undefined}\n disabled={isDisable}\n data-testid={dataTestId}\n >\n <Icon size={stepperIconSize} color={iconColor}>\n {icon}\n </Icon>\n </Box>\n );\n\n return (\n <Box flexDirection=\"column\" gap={sizeStyles.fieldGap} width=\"100%\">\n {label && (\n <Box as=\"label\" id={labelId}>\n <Text\n color={theme.colors.content.secondary}\n fontSize={sizeStyles.fontSize - 2}\n fontWeight=\"500\"\n >\n {label}\n </Text>\n </Box>\n )}\n <Box\n backgroundColor={backgroundColor}\n borderColor={borderColor}\n borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n height={sizeStyles.height}\n paddingVertical={padding.vertical}\n paddingHorizontal={padding.horizontal}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={10}\n position=\"relative\"\n cursor={isDisable ? \"not-allowed\" : \"text\"}\n onPress={() => {\n if (!isDisable) inputRef.current?.focus();\n }}\n data-testid=\"input__container\"\n style={{\n borderTopLeftRadius: borderTopLeftRadiusOverride ?? borderRadius,\n borderTopRightRadius: borderTopRightRadiusOverride ?? borderRadius,\n borderBottomLeftRadius:\n borderBottomLeftRadiusOverride ?? borderRadius,\n borderBottomRightRadius:\n borderBottomRightRadiusOverride ?? borderRadius,\n ...(outlineColor && isWeb\n ? {\n outline: `${focusOutline.width}px solid ${outlineColor}`,\n outlineOffset: `${focusOutline.offset}px`,\n }\n : outlineColor && !isWeb\n ? { borderColor: outlineColor, borderWidth: focusOutline.width }\n : {}),\n }}\n hoverStyle={\n !isDisable && !isFocus && !isError\n ? {\n backgroundColor: inputColors.bgHover,\n borderColor: inputColors.borderHover,\n }\n : undefined\n }\n >\n {isLeftInputIconShown && (\n <Box alignItems=\"center\" justifyContent=\"center\">\n <Icon size={iconSize} color={iconColor}>\n {iconLeft}\n </Icon>\n </Box>\n )}\n\n <Box flex={1} height=\"100%\" justifyContent=\"center\">\n <InputPrimitive\n ref={inputRef}\n id={inputId}\n value={value}\n name={name}\n placeholder={placeholder}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={isDisable}\n type={type || \"text\"}\n min={min}\n max={max}\n step={step}\n color={textColor}\n fontSize={sizeStyles.fontSize}\n fontFamily={theme.fonts.body}\n placeholderTextColor={placeholderColor}\n aria-invalid={isError || undefined}\n aria-describedby={errorMessage ? errorId : undefined}\n aria-labelledby={label ? labelId : undefined}\n aria-label={!label ? ariaLabel : undefined}\n aria-disabled={isDisable || undefined}\n data-testid={testID}\n {...rest}\n />\n </Box>\n\n {/* Right-side Extras Wrapper */}\n {extrasCount > 0 && (\n <Box flexDirection=\"row\" alignItems=\"center\" gap={4}>\n {isExtraClearIconShown && (\n <Box\n as=\"button\"\n type=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n width={iconSize}\n height=\"100%\"\n backgroundColor=\"transparent\"\n borderWidth={0}\n cursor={disabled ? \"not-allowed\" : \"pointer\"}\n {...(isWeb && {\n onMouseDown: (e: React.MouseEvent<HTMLButtonElement>) =>\n e.preventDefault(),\n })}\n onPress={!disabled ? handleClear : undefined}\n disabled={disabled}\n data-testid=\"input__extra-clear-button\"\n >\n <Icon size={iconSize} color={iconColor}>\n <Remove />\n </Icon>\n </Box>\n )}\n {isCheckedShown && (\n <Box\n alignItems=\"center\"\n justifyContent=\"center\"\n width={iconSize}\n height=\"100%\"\n >\n <Icon\n size={iconSize}\n color={theme.colors.content.success.primary}\n >\n {checkedIcon}\n </Icon>\n </Box>\n )}\n {isRightInputIconShown && (\n <Box alignItems=\"center\" justifyContent=\"center\">\n <Icon size={iconRightSize || iconSize} color={iconColor}>\n {iconRight}\n </Icon>\n </Box>\n )}\n </Box>\n )}\n\n {/* Numeric stepper (Figma \"Type number\") — always rightmost. */}\n {isNumberStepperShown && (\n <Box\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n height=\"100%\"\n data-testid=\"input__number-stepper\"\n >\n {renderStepperButton(\n 1,\n <ChevronUp />,\n \"Increase value\",\n \"input__number-stepper-increment\"\n )}\n {renderStepperButton(\n -1,\n <ChevronDown />,\n \"Decrease value\",\n \"input__number-stepper-decrement\"\n )}\n </Box>\n )}\n </Box>\n\n {errorMessage && (\n <Text\n id={errorId}\n role=\"alert\"\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.fontSize - 2}\n style={{ lineHeight: sizeStyles.lineHeight + \"px\" }}\n >\n {errorMessage}\n </Text>\n )}\n </Box>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport type { BoxProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledBox = styled(FilteredDiv)<BoxProps>`\n display: flex;\n box-sizing: border-box;\n background-color: ${(props) => props.backgroundColor || \"transparent\"};\n border-color: ${(props) => props.borderColor || \"transparent\"};\n border-width: ${(props) =>\n typeof props.borderWidth === \"number\"\n ? `${props.borderWidth}px`\n : props.borderWidth || 0};\n\n ${(props) =>\n props.borderBottomWidth !== undefined &&\n `\n border-bottom-width: ${typeof props.borderBottomWidth === \"number\" ? `${props.borderBottomWidth}px` : props.borderBottomWidth};\n border-bottom-color: ${props.borderBottomColor || props.borderColor || \"transparent\"};\n border-bottom-style: solid;\n `}\n ${(props) =>\n props.borderTopWidth !== undefined &&\n `\n border-top-width: ${typeof props.borderTopWidth === \"number\" ? `${props.borderTopWidth}px` : props.borderTopWidth};\n border-top-color: ${props.borderTopColor || props.borderColor || \"transparent\"};\n border-top-style: solid;\n `}\n ${(props) =>\n props.borderLeftWidth !== undefined &&\n `\n border-left-width: ${typeof props.borderLeftWidth === \"number\" ? `${props.borderLeftWidth}px` : props.borderLeftWidth};\n border-left-color: ${props.borderLeftColor || props.borderColor || \"transparent\"};\n border-left-style: solid;\n `}\n ${(props) =>\n props.borderRightWidth !== undefined &&\n `\n border-right-width: ${typeof props.borderRightWidth === \"number\" ? `${props.borderRightWidth}px` : props.borderRightWidth};\n border-right-color: ${props.borderRightColor || props.borderColor || \"transparent\"};\n border-right-style: solid;\n `}\n\n border-style: ${(props) =>\n props.borderStyle ||\n (props.borderWidth ||\n props.borderBottomWidth ||\n props.borderTopWidth ||\n props.borderLeftWidth ||\n props.borderRightWidth\n ? \"solid\"\n : \"none\")};\n border-radius: ${(props) =>\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius || 0};\n height: ${(props) =>\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height || \"auto\"};\n width: ${(props) =>\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width || \"auto\"};\n min-width: ${(props) =>\n typeof props.minWidth === \"number\"\n ? `${props.minWidth}px`\n : props.minWidth || \"auto\"};\n min-height: ${(props) =>\n typeof props.minHeight === \"number\"\n ? `${props.minHeight}px`\n : props.minHeight || \"auto\"};\n max-width: ${(props) =>\n typeof props.maxWidth === \"number\"\n ? `${props.maxWidth}px`\n : props.maxWidth || \"none\"};\n max-height: ${(props) =>\n typeof props.maxHeight === \"number\"\n ? `${props.maxHeight}px`\n : props.maxHeight || \"none\"};\n\n padding: ${(props) =>\n typeof props.padding === \"number\"\n ? `${props.padding}px`\n : props.padding || 0};\n ${(props) =>\n props.paddingHorizontal &&\n `\n padding-left: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n padding-right: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n `}\n ${(props) =>\n props.paddingVertical &&\n `\n padding-top: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n padding-bottom: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n `}\n ${(props) =>\n props.paddingTop !== undefined &&\n `padding-top: ${typeof props.paddingTop === \"number\" ? `${props.paddingTop}px` : props.paddingTop};`}\n ${(props) =>\n props.paddingBottom !== undefined &&\n `padding-bottom: ${typeof props.paddingBottom === \"number\" ? `${props.paddingBottom}px` : props.paddingBottom};`}\n ${(props) =>\n props.paddingLeft !== undefined &&\n `padding-left: ${typeof props.paddingLeft === \"number\" ? `${props.paddingLeft}px` : props.paddingLeft};`}\n ${(props) =>\n props.paddingRight !== undefined &&\n `padding-right: ${typeof props.paddingRight === \"number\" ? `${props.paddingRight}px` : props.paddingRight};`}\n\n margin: ${(props) =>\n typeof props.margin === \"number\" ? `${props.margin}px` : props.margin || 0};\n ${(props) =>\n props.marginTop !== undefined &&\n `margin-top: ${typeof props.marginTop === \"number\" ? `${props.marginTop}px` : props.marginTop};`}\n ${(props) =>\n props.marginBottom !== undefined &&\n `margin-bottom: ${typeof props.marginBottom === \"number\" ? `${props.marginBottom}px` : props.marginBottom};`}\n ${(props) =>\n props.marginLeft !== undefined &&\n `margin-left: ${typeof props.marginLeft === \"number\" ? `${props.marginLeft}px` : props.marginLeft};`}\n ${(props) =>\n props.marginRight !== undefined &&\n `margin-right: ${typeof props.marginRight === \"number\" ? `${props.marginRight}px` : props.marginRight};`}\n\n flex-direction: ${(props) => props.flexDirection || \"column\"};\n flex-wrap: ${(props) => props.flexWrap || \"nowrap\"};\n align-items: ${(props) => props.alignItems || \"stretch\"};\n justify-content: ${(props) => props.justifyContent || \"flex-start\"};\n cursor: ${(props) =>\n props.cursor\n ? props.cursor\n : props.onClick || props.onPress\n ? \"pointer\"\n : \"inherit\"};\n position: ${(props) => props.position || \"static\"};\n top: ${(props) =>\n typeof props.top === \"number\" ? `${props.top}px` : props.top};\n bottom: ${(props) =>\n typeof props.bottom === \"number\" ? `${props.bottom}px` : props.bottom};\n left: ${(props) =>\n typeof props.left === \"number\" ? `${props.left}px` : props.left};\n right: ${(props) =>\n typeof props.right === \"number\" ? `${props.right}px` : props.right};\n flex: ${(props) => props.flex};\n flex-shrink: ${(props) => props.flexShrink ?? 1};\n gap: ${(props) =>\n typeof props.gap === \"number\" ? `${props.gap}px` : props.gap || 0};\n align-self: ${(props) => props.alignSelf || \"auto\"};\n /* Only emit overflow-x/y when explicitly set. Defaulting them to\n visible after overflow would override the shorthand and break\n clipping (e.g. OtherCard bottom-right promo image). */\n overflow: ${(props) => props.overflow || \"visible\"};\n ${(props) =>\n props.overflowX != null ? `overflow-x: ${props.overflowX};` : \"\"}\n ${(props) =>\n props.overflowY != null ? `overflow-y: ${props.overflowY};` : \"\"}\n z-index: ${(props) => props.zIndex};\n opacity: ${(props) =>\n props.opacity != null ? props.opacity : props.disabled ? 0.5 : 1};\n pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n\n /* \\`background\\` is emitted before \\`background-color\\` so a caller passing\n both still gets backgroundColor as the winner. Use the shorthand for a\n layered fill (e.g. an overlay tint over a resting surface colour), which\n a single background-color cannot express. */\n &:hover {\n ${(props) =>\n props.hoverStyle?.background &&\n `background: ${props.hoverStyle.background};`}\n ${(props) =>\n props.hoverStyle?.backgroundColor &&\n `background-color: ${props.hoverStyle.backgroundColor};`}\n ${(props) =>\n props.hoverStyle?.borderColor &&\n `border-color: ${props.hoverStyle.borderColor};`}\n }\n\n &:active {\n ${(props) =>\n props.pressStyle?.background &&\n `background: ${props.pressStyle.background};`}\n ${(props) =>\n props.pressStyle?.backgroundColor &&\n `background-color: ${props.pressStyle.backgroundColor};`}\n }\n`;\n\nexport const Box = React.forwardRef<\n HTMLDivElement | HTMLButtonElement,\n BoxProps\n>(\n (\n {\n children,\n onPress,\n onKeyDown,\n onKeyUp,\n role,\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 \"aria-describedby\": ariaDescribedBy,\n \"aria-expanded\": ariaExpanded,\n \"aria-haspopup\": ariaHasPopup,\n \"aria-pressed\": ariaPressed,\n \"aria-controls\": ariaControls,\n tabIndex,\n as,\n src,\n alt,\n onError,\n onLoad,\n type,\n disabled,\n id,\n testID,\n \"data-testid\": dataTestId,\n ...props\n },\n ref\n ) => {\n // Handle as=\"img\" for rendering images with proper border-radius\n if (as === \"img\" && src) {\n return (\n <img\n src={src}\n alt={alt || \"\"}\n onError={onError}\n onLoad={onLoad}\n data-testid={dataTestId || testID}\n style={{\n display: \"block\",\n objectFit: \"cover\",\n width:\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width,\n height:\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height,\n borderRadius:\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius,\n position: props.position,\n top: typeof props.top === \"number\" ? `${props.top}px` : props.top,\n left:\n typeof props.left === \"number\" ? `${props.left}px` : props.left,\n right:\n typeof props.right === \"number\"\n ? `${props.right}px`\n : props.right,\n bottom:\n typeof props.bottom === \"number\"\n ? `${props.bottom}px`\n : props.bottom,\n ...props.style,\n }}\n />\n );\n }\n\n return (\n <StyledBox\n ref={ref}\n elementType={as}\n id={id}\n type={as === \"button\" ? type || \"button\" : undefined}\n disabled={as === \"button\" ? disabled : undefined}\n onClick={onPress}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-current={ariaCurrent}\n aria-disabled={ariaDisabled}\n aria-busy={ariaBusy}\n aria-describedby={ariaDescribedBy}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-pressed={ariaPressed}\n aria-controls={ariaControls}\n aria-live={ariaLive}\n tabIndex={tabIndex !== undefined ? tabIndex : undefined}\n data-testid={dataTestId || testID}\n {...props}\n >\n {children}\n </StyledBox>\n );\n }\n);\n\nBox.displayName = \"Box\";\n","import React from \"react\";\nimport isPropValid from \"@emotion/is-prop-valid\";\n\n// Props that @emotion/is-prop-valid incorrectly treats as valid HTML.\n// These are React Native or component-specific props that match\n// valid HTML patterns (on* event handlers, SVG attributes).\nexport const ADDITIONAL_BLOCKED_PROPS = new Set([\n // RN-only event handlers (pass isPropValid's on* pattern)\n \"onPress\",\n \"onChangeText\",\n \"onLayout\",\n \"onMoveShouldSetResponder\",\n \"onResponderGrant\",\n \"onResponderMove\",\n \"onResponderRelease\",\n \"onResponderTerminate\",\n // SVG attributes that pass isPropValid\n \"strokeWidth\",\n // CSS properties that pass isPropValid but are used as component props\n \"overflow\",\n \"opacity\",\n \"cursor\",\n \"fontSize\",\n \"fontWeight\",\n \"fontFamily\",\n \"textDecoration\",\n // Cross-platform layout prop that Text consumes as CSS, never as an\n // attribute. Pinned explicitly because it is now spread into the styled\n // component rather than destructured away before it can reach the DOM.\n \"numberOfLines\",\n]);\n\nfunction shouldForwardProp(key: string): boolean {\n if (ADDITIONAL_BLOCKED_PROPS.has(key)) return false;\n return isPropValid(key);\n}\n\n/**\n * Creates a React component that renders the given HTML tag\n * but filters out non-HTML props before they reach the DOM.\n *\n * Uses @emotion/is-prop-valid (same library styled-components v4\n * uses internally) to automatically block invalid HTML attributes,\n * plus a small blocklist for false positives (RN on* handlers, SVG attrs).\n *\n * Usage: `const FilteredDiv = createFilteredElement(\"div\");`\n * Then: `const StyledBox = styled(FilteredDiv)<BoxProps>\\`...\\`;`\n *\n * styled-components can still read ALL props for CSS interpolation,\n * but only valid HTML attributes are forwarded to the DOM element.\n */\nexport function createFilteredElement(defaultTag: string) {\n const Component = React.forwardRef<HTMLElement, Record<string, unknown>>(\n ({ children, elementType, ...props }, ref) => {\n const Tag = (elementType as string) || defaultTag;\n const htmlProps: Record<string, unknown> = {};\n for (const key of Object.keys(props)) {\n if (shouldForwardProp(key)) {\n htmlProps[key] = props[key];\n }\n }\n return React.createElement(\n Tag,\n { ref, ...htmlProps },\n children as React.ReactNode\n );\n }\n );\n Component.displayName = `Filtered(${defaultTag})`;\n return Component;\n}\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar 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)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\nimport { truncationStyles } from \"./textTruncation\";\n\nconst FilteredSpan = createFilteredElement(\"span\");\n\nconst StyledText = styled(FilteredSpan)<TextProps>`\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-weight: ${(props) => props.fontWeight || \"normal\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n line-height: ${(props) =>\n typeof props.lineHeight === \"number\"\n ? `${props.lineHeight}px`\n : props.lineHeight || \"inherit\"};\n white-space: ${(props) => props.whiteSpace || \"normal\"};\n text-align: ${(props) => props.textAlign || \"inherit\"};\n text-decoration: ${(props) => props.textDecoration || \"none\"};\n\n /* Keep last: single-line truncation has to win over white-space above. */\n ${(props) => truncationStyles(props.numberOfLines)}\n`;\n\nexport const Text: React.FC<TextProps> = ({\n style,\n className,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n ...props\n}) => {\n return (\n <StyledText\n {...props}\n style={style}\n className={className}\n id={id}\n role={role}\n data-testid={dataTestId || testID}\n />\n );\n};\n","/**\n * Web implementation of the cross-platform `numberOfLines` text prop.\n *\n * Native maps `numberOfLines` straight onto `RNText`. A web `<span>` has no\n * equivalent, so emit the CSS that produces the same result.\n *\n * Two details matter for the single-line case:\n * - `text-overflow` only takes effect on a block container, so the inline\n * `<span>` is promoted to `display: block` and capped at `max-width: 100%`.\n * - `min-width: 0` lets the text shrink below its own content width when it\n * sits in a flex row. Without it a `nowrap` label keeps its full intrinsic\n * width and pushes its siblings (icons, chevrons) out of a fixed-width field.\n *\n * Returns an empty string when there is nothing to clamp, so the declaration\n * block stays untouched for the majority of callers.\n */\nexport const truncationStyles = (numberOfLines?: number): string => {\n if (!numberOfLines || numberOfLines < 1) return \"\";\n\n if (numberOfLines === 1) {\n return `\n display: block;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n `;\n }\n\n return `\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: ${numberOfLines};\n line-clamp: ${numberOfLines};\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n `;\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledIcon = styled(FilteredDiv)<IconProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${(props) =>\n typeof props.size === \"number\" ? `${props.size}px` : props.size || \"24px\"};\n height: ${(props) =>\n typeof props.size === \"number\" ? `${props.size}px` : props.size || \"24px\"};\n color: ${(props) => props.color || \"currentColor\"};\n\n /* Icons paint themselves — each icon's own SVG sets its fill/stroke\n (icons-base via inline \"fill: currentColor\", Lucide via \"fill\"/\"stroke\"\n attributes). Do not add fill/stroke here: it re-strokes fill-based icons\n and thickens the glyph. See FEP-877. */\n svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n testID,\n \"data-testid\": dataTestId,\n ...props\n}) => {\n return (\n <StyledIcon data-testid={dataTestId || testID} {...props}>\n {children}\n </StyledIcon>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport styled from \"styled-components\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredInput = createFilteredElement(\"input\");\n\nconst StyledInput = styled(FilteredInput)<InputPrimitiveProps>`\n background: transparent;\n border: none;\n outline: none;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n text-align: inherit;\n\n &::placeholder {\n color: ${(props) =>\n props.placeholderTextColor || \"rgba(255, 255, 255, 0.5)\"};\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n\n /*\n * Hide the native number spin buttons. type=\"number\" is rendered with the\n * toolkit's own chevron stepper (see Input \"Type number\" in Figma), so the\n * OS chrome must not show alongside it. Keyboard ArrowUp / ArrowDown are\n * unaffected — this only removes the painted control.\n */\n &[type=\"number\"] {\n -moz-appearance: textfield;\n appearance: textfield;\n }\n\n &[type=\"number\"]::-webkit-outer-spin-button,\n &[type=\"number\"]::-webkit-inner-spin-button {\n -webkit-appearance: none;\n appearance: none;\n margin: 0;\n }\n\n /* Override browser autofill background */\n &:-webkit-autofill,\n &:-webkit-autofill:hover,\n &:-webkit-autofill:focus,\n &:-webkit-autofill:active {\n -webkit-box-shadow: 0 0 0 1000px transparent inset !important;\n -webkit-background-clip: text !important;\n -webkit-text-fill-color: ${(props) => props.color || \"inherit\"} !important;\n }\n`;\n\nexport const InputPrimitive = forwardRef<HTMLInputElement, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n name,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-invalid\": ariaInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n testID,\n ...rest\n },\n ref\n ) => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange) {\n onChange(e);\n }\n if (onChangeText) {\n onChangeText(e.target.value);\n }\n };\n\n return (\n <StyledInput\n ref={ref}\n id={id}\n value={value}\n name={name}\n placeholder={placeholder}\n onChange={handleChange}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n disabled={disabled}\n type={secureTextEntry ? \"password\" : type || \"text\"}\n inputMode={inputMode}\n autoComplete={autoComplete}\n style={style}\n color={color}\n fontSize={fontSize}\n fontFamily={fontFamily}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n aria-invalid={ariaInvalid}\n aria-describedby={ariaDescribedBy}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel}\n aria-disabled={ariaDisabled}\n data-testid={dataTestId || testID}\n {...rest}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","export * from \"./Box\";\nexport * from \"./Text\";\nexport * from \"./Spinner\";\nexport * from \"./Icon\";\nexport * from \"./Divider\";\nexport * from \"./Input\";\nexport * from \"./TextArea\";\nexport * from \"./LinearGradient\";\n\nexport const isWeb = true;\nexport const isNative = false;\n"],"mappings":"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","names":["import_react","import_react","React","styled","React","import_styled_components","import_jsx_runtime","styled","import_styled_components","import_jsx_runtime","FilteredDiv","styled","import_react","import_styled_components","import_jsx_runtime","styled","import_jsx_runtime","React"]}
|