{"version":3,"sources":["../../src/Autocomplete.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Icon.tsx","../../../../foundation/primitives-native/src/Input.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport {\n  Box,\n  Text,\n  Icon,\n  InputPrimitive,\n  // @ts-expect-error - this will be resolved at build time\n} from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, type ThemeOverrideProps } from \"@xsolla/xui-core\";\nimport { Spinner } from \"@xsolla/xui-spinner\";\n\nexport interface AutocompleteOption {\n  id: string;\n  label: string;\n  description?: string;\n  icon?: React.ReactNode;\n  disabled?: boolean;\n}\n\nexport interface AutocompleteProps extends ThemeOverrideProps {\n  value?: string;\n  placeholder?: string;\n  onValueChange?: (value: string) => void;\n  onSelect?: (option: string | AutocompleteOption) => void;\n  /** Simple string options for basic usage */\n  options?: string[];\n  /** Rich options with id, label, description, icon */\n  list?: AutocompleteOption[];\n  isLoading?: boolean;\n  size?: \"xl\" | \"lg\" | \"md\" | \"sm\" | \"xs\";\n  state?: \"default\" | \"hover\" | \"focus\" | \"disable\" | \"error\";\n  label?: string;\n  errorLabel?: string;\n  iconLeft?: React.ReactNode;\n  chevronRight?: boolean;\n  filled?: boolean;\n  /** Maximum height of the dropdown (default: 250) */\n  maxHeight?: number;\n  /** Width of the dropdown (default: matches input width) */\n  dropdownWidth?: number | string;\n  /** Empty state message when no options match */\n  emptyMessage?: string;\n  /** Test ID for testing frameworks */\n  testID?: string;\n}\n\nconst SearchIcon = () => (\n  <svg\n    width=\"100%\"\n    height=\"100%\"\n    viewBox=\"0 0 18 18\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M8.25 14.25C11.5637 14.25 14.25 11.5637 14.25 8.25C14.25 4.93629 11.5637 2.25 8.25 2.25C4.93629 2.25 2.25 4.93629 2.25 8.25C2.25 11.5637 4.93629 14.25 8.25 14.25Z\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <path\n      d=\"M15.75 15.75L12.4875 12.4875\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst ChevronDown = () => (\n  <svg\n    width=\"100%\"\n    height=\"100%\"\n    viewBox=\"0 0 18 18\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M4.5 6.75L9 11.25L13.5 6.75\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst ChevronUp = () => (\n  <svg\n    width=\"100%\"\n    height=\"100%\"\n    viewBox=\"0 0 18 18\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M13.5 11.25L9 6.75L4.5 11.25\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\nconst CloseIcon = () => (\n  <svg\n    width=\"100%\"\n    height=\"100%\"\n    viewBox=\"0 0 18 18\"\n    fill=\"none\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n  >\n    <path\n      d=\"M13.5 4.5L4.5 13.5\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n    <path\n      d=\"M4.5 4.5L13.5 13.5\"\n      stroke=\"currentColor\"\n      strokeWidth=\"1.5\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n    />\n  </svg>\n);\n\n// Map Autocomplete sizes to ContextMenu sizes\nconst mapToContextMenuSize = (\n  size: AutocompleteProps[\"size\"]\n): \"sm\" | \"md\" | \"lg\" | \"xl\" => {\n  switch (size) {\n    case \"xs\":\n    case \"sm\":\n      return \"sm\";\n    case \"md\":\n      return \"md\";\n    case \"lg\":\n      return \"lg\";\n    case \"xl\":\n      return \"xl\";\n    default:\n      return \"md\";\n  }\n};\n\nexport const Autocomplete: React.FC<AutocompleteProps> = ({\n  value: propValue,\n  placeholder = \"Search...\",\n  onValueChange,\n  onSelect,\n  options = [],\n  list,\n  isLoading = false,\n  size = \"md\",\n  state: externalState,\n  label,\n  errorLabel,\n  iconLeft = <SearchIcon />,\n  chevronRight = true,\n  filled = true,\n  maxHeight = 250,\n  dropdownWidth,\n  emptyMessage = \"No results found\",\n  testID,\n  themeMode,\n  themeProductContext,\n}) => {\n  const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n  const [internalValue, setInternalValue] = useState(propValue || \"\");\n  const [isFocused, setIsFocused] = useState(false);\n  const [activeIndex, setActiveIndex] = useState(-1);\n  const containerRef = useRef<any>(null);\n  const inputRef = useRef<any>(null);\n\n  const value = propValue !== undefined ? propValue : internalValue;\n  const state = externalState || (isFocused ? \"focus\" : \"default\");\n\n  const isDisable = state === \"disable\";\n  const isError = state === \"error\";\n  const isFocus = state === \"focus\";\n\n  const sizeStyles = theme.sizing.input(size);\n  const inputColors = theme.colors.control.input;\n  const contextMenuSize = mapToContextMenuSize(size);\n  const menuSizeStyles = theme.sizing.contextMenu(contextMenuSize);\n\n  // Determine which options to use (list takes priority over options)\n  const normalizedOptions: AutocompleteOption[] =\n    list ||\n    options.map((opt, index) => ({\n      id: String(index),\n      label: opt,\n    }));\n\n  const hasOptions = normalizedOptions.length > 0;\n  // Show dropdown when focused and either: has options, is loading, or has typed something (to show empty message)\n  const showDropdown = isFocus && (hasOptions || isLoading || value.length > 0);\n\n  // Reset active index when dropdown closes\n  useEffect(() => {\n    if (!showDropdown) {\n      setActiveIndex(-1);\n    }\n  }, [showDropdown]);\n\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (\n        containerRef.current &&\n        !containerRef.current.contains(event.target)\n      ) {\n        setIsFocused(false);\n      }\n    };\n\n    if (isFocused) {\n      document.addEventListener(\"mousedown\", handleClickOutside);\n    }\n    return () => {\n      document.removeEventListener(\"mousedown\", handleClickOutside);\n    };\n  }, [isFocused]);\n\n  // Escape key handling\n  useEffect(() => {\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === \"Escape\" && isFocused) {\n        setIsFocused(false);\n      }\n    };\n\n    if (isFocused) {\n      document.addEventListener(\"keydown\", handleEscape);\n    }\n    return () => {\n      document.removeEventListener(\"keydown\", handleEscape);\n    };\n  }, [isFocused]);\n\n  const handleInputChange = (text: string) => {\n    if (!isDisable) {\n      setInternalValue(text);\n      if (onValueChange) onValueChange(text);\n      // Don't call setIsFocused here - onFocus handler already handles it\n      // and calling it here causes extra re-renders that can interfere with typing\n      setActiveIndex(-1);\n    }\n  };\n\n  const handleSelect = useCallback(\n    (option: AutocompleteOption) => {\n      setInternalValue(option.label);\n      setIsFocused(false);\n\n      // Call onSelect with appropriate type\n      if (onSelect) {\n        // If using list prop, return the full option object\n        // If using options prop (strings), return just the label string\n        if (list) {\n          onSelect(option);\n        } else {\n          onSelect(option.label);\n        }\n      }\n      if (onValueChange) onValueChange(option.label);\n    },\n    [list, onSelect, onValueChange]\n  );\n\n  const handleClear = (e: any) => {\n    e.stopPropagation();\n    handleInputChange(\"\");\n  };\n\n  // Helper to find next enabled option index\n  const findNextEnabledIndex = (\n    currentIndex: number,\n    direction: 1 | -1\n  ): number => {\n    const length = normalizedOptions.length;\n    let nextIndex = currentIndex;\n    for (let i = 0; i < length; i++) {\n      nextIndex = (nextIndex + direction + length) % length;\n      if (!normalizedOptions[nextIndex].disabled) {\n        return nextIndex;\n      }\n    }\n    return -1; // All options are disabled\n  };\n\n  // Keyboard navigation in input\n  const handleInputKeyDown = (event: React.KeyboardEvent) => {\n    if (!showDropdown || normalizedOptions.length === 0) return;\n\n    switch (event.key) {\n      case \"ArrowDown\":\n        event.preventDefault();\n        setActiveIndex((prev) => findNextEnabledIndex(prev, 1));\n        break;\n      case \"ArrowUp\":\n        event.preventDefault();\n        setActiveIndex((prev) => findNextEnabledIndex(prev, -1));\n        break;\n      case \"Enter\":\n        event.preventDefault();\n        if (activeIndex >= 0 && activeIndex < normalizedOptions.length) {\n          const option = normalizedOptions[activeIndex];\n          if (!option.disabled) {\n            handleSelect(option);\n          }\n        }\n        break;\n      case \"Tab\":\n        setIsFocused(false);\n        break;\n    }\n  };\n\n  // Resolve colors\n  let backgroundColor = inputColors.bg;\n  let borderColor = inputColors.border;\n\n  if (isDisable) {\n    backgroundColor = inputColors.bgDisable;\n    borderColor = inputColors.borderDisable;\n  } else if (isError) {\n    borderColor = theme.colors.border.alert;\n  } else if (isFocus) {\n    backgroundColor = theme.colors.control.focus.bg;\n    borderColor = theme.colors.border.brand;\n  } else if (state === \"hover\") {\n    backgroundColor = inputColors.bgHover;\n    borderColor = inputColors.borderHover;\n  }\n\n  // Handle filled override if provided\n  if (filled === false && !isFocus && !isError && state !== \"hover\") {\n    backgroundColor = \"transparent\";\n  }\n\n  const textColor = isDisable ? inputColors.textDisable : inputColors.text;\n  const placeholderColor = inputColors.placeholder;\n  const iconColor = isDisable ? inputColors.textDisable : inputColors.text;\n\n  // Get colors for dropdown items\n  const getItemBackgroundColor = (index: number, disabled?: boolean) => {\n    if (activeIndex === index && !disabled) {\n      return theme.colors.control.input.bgHover;\n    }\n    return \"transparent\";\n  };\n\n  return (\n    <Box\n      testID={testID}\n      ref={containerRef}\n      flexDirection=\"column\"\n      gap={4}\n      width=\"100%\"\n      position=\"relative\"\n    >\n      {label && (\n        <Text\n          color={theme.colors.content.secondary}\n          fontSize={sizeStyles.fontSize - 2}\n          fontWeight=\"500\"\n          marginBottom={4}\n        >\n          {label}\n        </Text>\n      )}\n      <Box\n        backgroundColor={backgroundColor}\n        borderColor={borderColor}\n        borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n        borderRadius={sizeStyles.radius}\n        height={sizeStyles.height}\n        paddingHorizontal={sizeStyles.paddingHorizontal}\n        flexDirection=\"row\"\n        alignItems=\"center\"\n        gap={10}\n        position=\"relative\"\n        hoverStyle={\n          !isDisable && !isFocus && !isError\n            ? {\n                backgroundColor: inputColors.bgHover,\n                borderColor: inputColors.borderHover,\n              }\n            : undefined\n        }\n      >\n        {iconLeft && (\n          <Box alignItems=\"center\" justifyContent=\"center\">\n            <Icon size={sizeStyles.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            value={value}\n            placeholder={placeholder}\n            onChangeText={handleInputChange}\n            onFocus={() => !isDisable && setIsFocused(true)}\n            onKeyDown={handleInputKeyDown}\n            disabled={isDisable}\n            color={textColor}\n            fontSize={sizeStyles.fontSize}\n            placeholderTextColor={placeholderColor}\n            role=\"combobox\"\n            aria-expanded={showDropdown}\n            aria-haspopup=\"listbox\"\n            aria-controls=\"autocomplete-listbox\"\n            aria-activedescendant={\n              activeIndex >= 0\n                ? `autocomplete-option-${normalizedOptions[activeIndex]?.id}`\n                : undefined\n            }\n          />\n        </Box>\n\n        <Box flexDirection=\"row\" alignItems=\"center\" gap={4}>\n          {value.length > 0 && !isDisable && (\n            <Box onPress={handleClear} padding={2}>\n              <Icon size={sizeStyles.iconSize - 2} color={iconColor}>\n                <CloseIcon />\n              </Icon>\n            </Box>\n          )}\n\n          {chevronRight && (\n            <Box\n              alignItems=\"center\"\n              justifyContent=\"center\"\n              onPress={(e: any) => {\n                e.stopPropagation();\n                if (!isDisable) {\n                  const newFocusState = !isFocused;\n                  setIsFocused(newFocusState);\n                  // Focus input when opening dropdown\n                  if (newFocusState && inputRef.current) {\n                    inputRef.current.focus();\n                  }\n                }\n              }}\n              style={{ cursor: isDisable ? \"not-allowed\" : \"pointer\" }}\n            >\n              <Icon size={sizeStyles.iconSize} color={iconColor}>\n                {isFocus ? <ChevronUp /> : <ChevronDown />}\n              </Icon>\n            </Box>\n          )}\n        </Box>\n      </Box>\n\n      {/* Dropdown Menu */}\n      {showDropdown && (\n        <Box\n          position=\"absolute\"\n          top={sizeStyles.height + (label ? 28 : 0) + 4}\n          left={0}\n          right={0}\n          backgroundColor={theme.colors.background.secondary}\n          borderColor={theme.colors.border.secondary}\n          borderWidth={1}\n          borderRadius={theme.shape.contextMenu[contextMenuSize].borderRadius}\n          paddingVertical={menuSizeStyles.paddingVertical}\n          width={dropdownWidth}\n          style={{\n            zIndex: 1000,\n            boxShadow: \"0 4px 12px rgba(0,0,0,0.15)\",\n            maxHeight,\n            overflowY: \"auto\",\n          }}\n          id=\"autocomplete-listbox\"\n          role=\"listbox\"\n          aria-label=\"Autocomplete suggestions\"\n        >\n          {isLoading ? (\n            <Box\n              padding={16}\n              alignItems=\"center\"\n              justifyContent=\"center\"\n              minHeight={60}\n            >\n              <Spinner\n                size=\"md\"\n                color={theme.colors.control.brand.primary.bg}\n              />\n            </Box>\n          ) : hasOptions ? (\n            normalizedOptions.map((option, index) => (\n              <Box\n                key={option.id}\n                id={`autocomplete-option-${option.id}`}\n                role=\"option\"\n                aria-selected={activeIndex === index}\n                aria-disabled={option.disabled}\n                flexDirection=\"row\"\n                alignItems={option.description ? \"flex-start\" : \"center\"}\n                gap={menuSizeStyles.gap}\n                paddingHorizontal={menuSizeStyles.itemPaddingHorizontal}\n                paddingVertical={menuSizeStyles.itemPaddingVertical}\n                backgroundColor={getItemBackgroundColor(index, option.disabled)}\n                hoverStyle={\n                  !option.disabled\n                    ? { backgroundColor: theme.colors.control.input.bgHover }\n                    : undefined\n                }\n                pressStyle={\n                  !option.disabled\n                    ? { backgroundColor: theme.colors.control.input.bgDisable }\n                    : undefined\n                }\n                onPress={() => !option.disabled && handleSelect(option)}\n                style={{\n                  cursor: option.disabled ? \"not-allowed\" : \"pointer\",\n                  opacity: option.disabled ? 0.5 : 1,\n                }}\n              >\n                {/* Leading Icon */}\n                {option.icon && (\n                  <Box\n                    width={menuSizeStyles.iconSize}\n                    marginTop={option.description ? 2 : 0}\n                    alignItems=\"center\"\n                    justifyContent=\"center\"\n                  >\n                    <Icon\n                      size={menuSizeStyles.iconSize}\n                      color={\n                        option.disabled\n                          ? theme.colors.content.tertiary\n                          : theme.colors.content.secondary\n                      }\n                    >\n                      {option.icon}\n                    </Icon>\n                  </Box>\n                )}\n\n                {/* Content: Label and Description */}\n                <Box flex={1} flexDirection=\"column\" gap={2}>\n                  <Text\n                    color={\n                      option.disabled\n                        ? theme.colors.control.input.textDisable\n                        : theme.colors.content.primary\n                    }\n                    fontSize={menuSizeStyles.fontSize}\n                    fontWeight=\"400\"\n                    lineHeight={menuSizeStyles.fontSize + 2}\n                  >\n                    {option.label}\n                  </Text>\n                  {option.description && (\n                    <Text\n                      color={theme.colors.content.tertiary}\n                      fontSize={menuSizeStyles.descriptionFontSize}\n                      lineHeight={menuSizeStyles.descriptionFontSize + 2}\n                    >\n                      {option.description}\n                    </Text>\n                  )}\n                </Box>\n              </Box>\n            ))\n          ) : (\n            <Box padding={16} alignItems=\"center\">\n              <Text\n                color={theme.colors.content.tertiary}\n                fontSize={menuSizeStyles.fontSize}\n              >\n                {emptyMessage}\n              </Text>\n            </Box>\n          )}\n        </Box>\n      )}\n\n      {isError && errorLabel && (\n        <Text\n          color={theme.colors.content.alert.primary}\n          fontSize={sizeStyles.fontSize - 2}\n          marginTop={4}\n        >\n          {errorLabel}\n        </Text>\n      )}\n    </Box>\n  );\n};\n","import React from \"react\";\nimport {\n  View,\n  Pressable,\n  Image,\n  ViewStyle,\n  ImageStyle,\n  DimensionValue,\n  AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n  children,\n  onPress,\n  onLayout,\n  onMoveShouldSetResponder,\n  onResponderGrant,\n  onResponderMove,\n  onResponderRelease,\n  onResponderTerminate,\n  backgroundColor,\n  borderColor,\n  borderWidth,\n  borderBottomWidth,\n  borderBottomColor,\n  borderTopWidth,\n  borderTopColor,\n  borderLeftWidth,\n  borderLeftColor,\n  borderRightWidth,\n  borderRightColor,\n  borderRadius,\n  borderStyle,\n  height,\n  padding,\n  paddingHorizontal,\n  paddingVertical,\n  margin,\n  marginTop,\n  marginBottom,\n  marginLeft,\n  marginRight,\n  flexDirection,\n  alignItems,\n  justifyContent,\n  position,\n  top,\n  bottom,\n  left,\n  right,\n  width,\n  minWidth,\n  minHeight,\n  maxWidth,\n  maxHeight,\n  flex,\n  overflow,\n  zIndex,\n  hoverStyle,\n  pressStyle,\n  style,\n  \"data-testid\": dataTestId,\n  testID,\n  as,\n  src,\n  alt,\n  ...rest\n}) => {\n  const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n    backgroundColor:\n      pressed && pressStyle?.backgroundColor\n        ? pressStyle.backgroundColor\n        : backgroundColor,\n    borderColor,\n    borderWidth,\n    borderBottomWidth,\n    borderBottomColor,\n    borderTopWidth,\n    borderTopColor,\n    borderLeftWidth,\n    borderLeftColor,\n    borderRightWidth,\n    borderRightColor,\n    borderRadius: borderRadius as AnimatableNumericValue,\n    borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n    overflow,\n    zIndex,\n    height: height as DimensionValue,\n    width: width as DimensionValue,\n    minWidth: minWidth as DimensionValue,\n    minHeight: minHeight as DimensionValue,\n    maxWidth: maxWidth as DimensionValue,\n    maxHeight: maxHeight as DimensionValue,\n    padding: padding as DimensionValue,\n    paddingHorizontal: paddingHorizontal as DimensionValue,\n    paddingVertical: paddingVertical as DimensionValue,\n    margin: margin as DimensionValue,\n    marginTop: marginTop as DimensionValue,\n    marginBottom: marginBottom as DimensionValue,\n    marginLeft: marginLeft as DimensionValue,\n    marginRight: marginRight as DimensionValue,\n    flexDirection,\n    alignItems,\n    justifyContent,\n    position: position as ViewStyle[\"position\"],\n    top: top as DimensionValue,\n    bottom: bottom as DimensionValue,\n    left: left as DimensionValue,\n    right: right as DimensionValue,\n    flex,\n    ...(style as ViewStyle),\n  });\n\n  const finalTestID = dataTestId || testID;\n\n  // Destructure and drop web-only props from rest before passing to RN components\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  const {\n    role,\n    tabIndex,\n    onKeyDown,\n    onKeyUp,\n    \"aria-label\": _ariaLabel,\n    \"aria-labelledby\": _ariaLabelledBy,\n    \"aria-current\": _ariaCurrent,\n    \"aria-disabled\": _ariaDisabled,\n    \"aria-live\": _ariaLive,\n    className,\n    \"data-testid\": _dataTestId,\n    ...nativeRest\n  } = rest as Record<string, unknown>;\n\n  // Handle as=\"img\" for React Native\n  if (as === \"img\" && src) {\n    const imageStyle: ImageStyle = {\n      width: width as DimensionValue,\n      height: height as DimensionValue,\n      borderRadius: borderRadius as number,\n      position: position as ImageStyle[\"position\"],\n      top: top as DimensionValue,\n      bottom: bottom as DimensionValue,\n      left: left as DimensionValue,\n      right: right as DimensionValue,\n      ...(style as ImageStyle),\n    };\n\n    return (\n      <Image\n        source={{ uri: src }}\n        style={imageStyle}\n        testID={finalTestID}\n        resizeMode=\"cover\"\n        {...nativeRest}\n      />\n    );\n  }\n\n  if (onPress) {\n    return (\n      <Pressable\n        onPress={onPress}\n        onLayout={onLayout}\n        onMoveShouldSetResponder={onMoveShouldSetResponder}\n        onResponderGrant={onResponderGrant}\n        onResponderMove={onResponderMove}\n        onResponderRelease={onResponderRelease}\n        onResponderTerminate={onResponderTerminate}\n        style={({ pressed }) => getContainerStyle(pressed)}\n        testID={finalTestID}\n        {...nativeRest}\n      >\n        {children}\n      </Pressable>\n    );\n  }\n\n  return (\n    <View\n      style={getContainerStyle()}\n      testID={finalTestID}\n      onLayout={onLayout}\n      onMoveShouldSetResponder={onMoveShouldSetResponder}\n      onResponderGrant={onResponderGrant}\n      onResponderMove={onResponderMove}\n      onResponderRelease={onResponderRelease}\n      onResponderTerminate={onResponderTerminate}\n      {...nativeRest}\n    >\n      {children}\n    </View>\n  );\n};\n","import React from \"react\";\nimport {\n  Text as RNText,\n  TextStyle,\n  AccessibilityRole,\n  StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n  alert: \"alert\",\n  heading: \"header\",\n  button: \"button\",\n  link: \"link\",\n  text: \"text\",\n};\n\nconst parseNumericValue = (\n  value: string | number | undefined\n): number | undefined => {\n  if (value === undefined) return undefined;\n  if (typeof value === \"number\") return value;\n  const parsed = parseFloat(value);\n  return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n  children,\n  color,\n  fontSize,\n  fontWeight,\n  fontFamily,\n  textAlign,\n  lineHeight,\n  numberOfLines,\n  id,\n  role,\n  testID,\n  \"data-testid\": dataTestId,\n  style: styleProp,\n  ...props\n}) => {\n  let resolvedFontFamily = fontFamily\n    ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n    : undefined;\n\n  if (\n    resolvedFontFamily === \"Pilat Wide\" ||\n    resolvedFontFamily === \"Pilat Wide Bold\" ||\n    resolvedFontFamily === \"Aktiv Grotesk\"\n  ) {\n    resolvedFontFamily = undefined;\n  }\n\n  const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n  const baseStyle: TextStyle = {\n    color: color ?? incomingStyle?.color,\n    fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n    fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n    fontFamily: resolvedFontFamily,\n    textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n    textAlign: textAlign ?? incomingStyle?.textAlign,\n    lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n    marginTop: parseNumericValue(\n      incomingStyle?.marginTop as number | string | undefined\n    ),\n    marginBottom: parseNumericValue(\n      incomingStyle?.marginBottom as number | string | undefined\n    ),\n  };\n\n  const accessibilityRole = role ? roleMap[role] : undefined;\n\n  return (\n    <RNText\n      style={baseStyle}\n      numberOfLines={numberOfLines}\n      testID={dataTestId || testID || id}\n      accessibilityRole={accessibilityRole}\n    >\n      {children}\n    </RNText>\n  );\n};\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n  children,\n  color,\n  size,\n  testID,\n  \"data-testid\": dataTestId,\n}) => {\n  const style: ViewStyle = {\n    width: typeof size === \"number\" ? size : undefined,\n    height: typeof size === \"number\" ? size : undefined,\n    alignItems: \"center\",\n    justifyContent: \"center\",\n  };\n\n  // On native, we try to pass the color down to children (like Text primitives)\n  // to mimic the CSS inheritance behavior of the web version.\n  const childrenWithProps = React.Children.map(children, (child) => {\n    if (React.isValidElement(child)) {\n      return React.cloneElement(child, {\n        color: child.props.color || color,\n        // Also pass size if child seems to be an icon that needs it\n        size: child.props.size || size,\n      });\n    }\n    return child;\n  });\n\n  return (\n    <View style={style} testID={dataTestId || testID}>\n      {childrenWithProps}\n    </View>\n  );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n  text: \"default\",\n  number: \"numeric\",\n  email: \"email-address\",\n  tel: \"phone-pad\",\n  url: \"url\",\n  decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n  none: \"default\",\n  text: \"default\",\n  decimal: \"decimal-pad\",\n  numeric: \"number-pad\",\n  tel: \"phone-pad\",\n  search: \"default\",\n  email: \"email-address\",\n  url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n  \"one-time-code\": \"oneTimeCode\",\n  email: \"emailAddress\",\n  username: \"username\",\n  password: \"password\",\n  \"new-password\": \"newPassword\",\n  tel: \"telephoneNumber\",\n  \"postal-code\": \"postalCode\",\n  name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, 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      type,\n      inputMode,\n      autoComplete,\n      id,\n      \"aria-describedby\": ariaDescribedBy,\n      \"aria-label\": ariaLabel,\n      \"aria-disabled\": ariaDisabled,\n      \"data-testid\": dataTestId,\n      testID,\n    },\n    ref\n  ) => {\n    const handleChangeText = (text: string) => {\n      onChangeText?.(text);\n\n      // Create a synthetic event for onChange compatibility\n      // Include nativeEvent and no-op methods to prevent runtime errors\n      // when consumers expect DOM-like event behavior\n      if (onChange) {\n        const syntheticEvent = {\n          target: { value: text },\n          currentTarget: { value: text },\n          type: \"change\",\n          nativeEvent: { text },\n          preventDefault: () => {},\n          stopPropagation: () => {},\n          isTrusted: false,\n        } as unknown as React.ChangeEvent<HTMLInputElement>;\n        onChange(syntheticEvent);\n      }\n    };\n\n    // Determine keyboard type - inputMode takes precedence over type\n    const keyboardType = inputMode\n      ? inputModeToKeyboardType[inputMode] || \"default\"\n      : type\n        ? keyboardTypeMap[type] || \"default\"\n        : \"default\";\n\n    // Determine textContentType for iOS autofill\n    const textContentType = autoComplete\n      ? autoCompleteToTextContentType[autoComplete]\n      : undefined;\n\n    let resolvedFontFamily = fontFamily\n      ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n      : undefined;\n\n    if (\n      resolvedFontFamily === \"Pilat Wide\" ||\n      resolvedFontFamily === \"Pilat Wide Bold\" ||\n      resolvedFontFamily === \"Aktiv Grotesk\"\n    ) {\n      resolvedFontFamily = undefined;\n    }\n\n    return (\n      <RNTextInput\n        ref={ref}\n        value={value}\n        placeholder={placeholder}\n        onChangeText={handleChangeText}\n        onFocus={onFocus}\n        onBlur={onBlur}\n        onKeyPress={(e) => {\n          // Map onKeyPress to onKeyDown for cross-platform compatibility\n          // Include preventDefault to avoid runtime errors when consumers call it\n          if (onKeyDown) {\n            onKeyDown({\n              key: e.nativeEvent.key,\n              preventDefault: () => {},\n            } as any);\n          }\n        }}\n        editable={!disabled}\n        secureTextEntry={secureTextEntry || type === \"password\"}\n        keyboardType={keyboardType}\n        textContentType={textContentType}\n        style={[\n          {\n            color,\n            fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n            fontFamily: resolvedFontFamily,\n            flex: 1,\n            padding: 0,\n            textAlign: (style as any)?.textAlign || \"left\",\n          },\n          style as any,\n        ]}\n        placeholderTextColor={placeholderTextColor}\n        maxLength={maxLength}\n        // React Native accessibility props\n        testID={dataTestId || testID || id}\n        accessibilityLabel={ariaLabel}\n        accessibilityHint={ariaDescribedBy}\n        accessibilityState={{\n          disabled: disabled || ariaDisabled,\n        }}\n        accessible={true}\n      />\n    );\n  }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n"],"mappings":"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","names":["jsx","View","jsx","jsx","jsx"]}