{"version":3,"sources":["../../src/MultiSelect.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Icon.tsx","../../../../foundation/primitives-native/src/index.tsx","../../src/MultiSelectControl.tsx","../../src/useMultiSelectControl.tsx","../../src/useMultiSelect.ts","../../src/Portal.native.tsx"],"sourcesContent":["import {\n  forwardRef,\n  useRef,\n  useEffect,\n  useState,\n  type ChangeEvent,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon, isWeb } from \"@xsolla/xui-primitives\";\nimport {\n  useModalId,\n  useResolvedTheme,\n  useOverlayLayer,\n  LAYER_OFFSET,\n} from \"@xsolla/xui-core\";\nimport { Search as SearchIcon } from \"@xsolla/xui-icons-base\";\nimport { MultiSelectControl } from \"./MultiSelectControl\";\nimport { useMultiSelect } from \"./useMultiSelect\";\nimport type { MultiSelectOption, MultiSelectProps } from \"./types\";\nimport { Portal } from \"./Portal\";\n\n/** Default `menuMinWidth` when `dropdownMenu={false}`; matches `GROUP_SELECT_MIN_PANEL_WIDTH` in GroupSelect. */\nconst EXTERNAL_MENU_MIN_WIDTH_DEFAULT = 540;\n\ninterface MenuPosition {\n  left: number;\n  top: number;\n  width: number;\n}\n\nexport const MultiSelect = forwardRef<HTMLDivElement, MultiSelectProps>(\n  (\n    {\n      options,\n      errorMessage,\n      value = [],\n      size = \"md\",\n      state: externalState,\n      label,\n      extraClear = false,\n      disabled = false,\n      onChange,\n      variant = \"tag\",\n      flexible = true,\n      placeholder = \"Select\",\n      removeTagsButtons = true,\n      iconLeft,\n      iconRight,\n      maxHeight = 300,\n      optionOverflow = \"truncate\",\n      dropdownMenu = true,\n      onTriggerPress,\n      menuOpen = false,\n      menuMinWidth,\n      searchable = false,\n      searchPlaceholder = \"Search\",\n      noOptionsMessage = \"No results\",\n      testID,\n      themeMode,\n      themeProductContext,\n    },\n    ref\n  ) => {\n    const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n    const modalId = useModalId();\n    const overlayLayer = useOverlayLayer();\n    const controlRef = useRef<HTMLDivElement>(null);\n    const menuRef = useRef<HTMLDivElement>(null);\n    const containerRef = useRef<HTMLDivElement>(null);\n    const searchInputRef = useRef<HTMLInputElement>(null);\n    const [menuPosition, setMenuPosition] = useState<MenuPosition | null>(null);\n    const [searchValue, setSearchValue] = useState(\"\");\n    const sizeStyles = theme.sizing.input(size);\n    const inputColors = theme.colors.control.input;\n\n    const state = externalState || (disabled ? \"disable\" : \"default\");\n    const isDisable = state === \"disable\" || disabled;\n    const isError = state === \"error\" || !!errorMessage;\n    const isFocus = state === \"focus\";\n\n    const {\n      values,\n      stateList,\n      selectedItems,\n      isOpen,\n      onChoose,\n      onRemove,\n      onRemoveAll,\n      onClose,\n      onSelectClick,\n    } = useMultiSelect({\n      options,\n      value,\n      onChange,\n    });\n\n    // Close menu when disabled or built-in menu is off\n    useEffect(() => {\n      if (isDisable || !dropdownMenu) {\n        onClose();\n      }\n    }, [isDisable, dropdownMenu, onClose]);\n\n    // Focus the search input when the dropdown opens (web only)\n    useEffect(() => {\n      if (isOpen && searchable && isWeb) {\n        searchInputRef.current?.focus();\n      }\n    }, [isOpen, searchable]);\n\n    // Clear the search query whenever the dropdown closes\n    useEffect(() => {\n      if (!isOpen) setSearchValue(\"\");\n    }, [isOpen]);\n\n    // Resolve the option's searchable text (labels may be non-string ReactNodes)\n    const getOptionText = (opt: MultiSelectOption): string =>\n      typeof opt.label === \"string\" ? opt.label : String(opt.value);\n\n    // Filter options in memory when searching\n    const filteredOptions =\n      searchable && searchValue\n        ? options.filter((opt) =>\n            getOptionText(opt).toLowerCase().includes(searchValue.toLowerCase())\n          )\n        : options;\n\n    const menuItems = filteredOptions.map((opt) => {\n      const id = String(opt.value);\n      const checked = values.map(String).includes(id);\n      return {\n        id,\n        children: opt.label,\n        checked,\n        disabled: opt.disabled,\n      };\n    });\n\n    const handleItemToggle = (id: string, checked: boolean) => {\n      const value = options.find((opt) => String(opt.value) === id)?.value;\n      if (value === undefined) return;\n\n      const newValues = checked\n        ? [...values, value]\n        : values.filter((v) => v !== value);\n\n      onChoose(newValues.map(String));\n    };\n\n    const controlMenuOpen = dropdownMenu ? isOpen : Boolean(menuOpen);\n    const controlOnClick = dropdownMenu ? onSelectClick : onTriggerPress;\n\n    // Resolve how option labels handle horizontal overflow. \"scroll\" mirrors\n    // the legacy behavior (single line + horizontal scroll); it is web only,\n    // since a native Text row cannot scroll horizontally and instead wraps.\n    const isScrollOverflow = optionOverflow === \"scroll\";\n    const isWrapOverflow = optionOverflow === \"wrap\";\n    const optionListOverflowX = isScrollOverflow ? \"auto\" : \"hidden\";\n    // Let the flex row shrink so the label can truncate/wrap within it; for\n    // \"scroll\" the row must size to its content so the list can overflow.\n    const optionRowMinWidth = isScrollOverflow ? undefined : 0;\n    const optionLabelNumberOfLines =\n      optionOverflow === \"truncate\" ? 1 : undefined;\n    const optionLabelStyle = isScrollOverflow\n      ? { whiteSpace: \"nowrap\" }\n      : isWrapOverflow\n        ? {\n            minWidth: 0,\n            whiteSpace: \"normal\",\n            overflowWrap: \"break-word\",\n            wordBreak: \"break-word\",\n          }\n        : {\n            minWidth: 0,\n            whiteSpace: \"nowrap\",\n            overflow: \"hidden\",\n            textOverflow: \"ellipsis\",\n          };\n\n    useEffect(() => {\n      if (!isWeb || !controlMenuOpen || isDisable || !dropdownMenu) return;\n\n      let rafId: number | null = null;\n\n      const repositionMenu = () => {\n        rafId = null;\n        if (!controlRef.current) return;\n\n        const rect = controlRef.current.getBoundingClientRect();\n        setMenuPosition({\n          left: rect.left,\n          top: rect.bottom + 4,\n          width: rect.width,\n        });\n      };\n\n      const scheduleUpdate = () => {\n        if (rafId != null) return;\n        rafId = requestAnimationFrame(repositionMenu);\n      };\n\n      scheduleUpdate();\n      window.addEventListener(\"resize\", scheduleUpdate);\n      window.addEventListener(\"scroll\", scheduleUpdate, true);\n\n      return () => {\n        if (rafId != null) cancelAnimationFrame(rafId);\n        window.removeEventListener(\"resize\", scheduleUpdate);\n        window.removeEventListener(\"scroll\", scheduleUpdate, true);\n      };\n    }, [controlMenuOpen, dropdownMenu, isDisable]);\n\n    // Close the menu on a pointer-down outside the control or menu (web only).\n    // A document-level listener is z-index agnostic, so the dropdown still\n    // closes when MultiSelect is rendered inside a Modal. The menu is rendered\n    // outside containerRef, so it is checked separately via composedPath\n    // (falling back to node containment). Mirrors Select's click-outside close.\n    useEffect(() => {\n      if (!isWeb || !dropdownMenu || !isOpen || isDisable) return;\n\n      const handleOutsideMouseDown = (event: MouseEvent) => {\n        const path =\n          typeof event.composedPath === \"function\" ? event.composedPath() : [];\n        const targetNode = event.target as Node | null;\n        const isInside = (el: HTMLElement | null) =>\n          !!el &&\n          (path.length\n            ? path.includes(el)\n            : !!targetNode && el.contains(targetNode));\n\n        if (isInside(containerRef.current) || isInside(menuRef.current)) return;\n        onClose();\n      };\n\n      document.addEventListener(\"mousedown\", handleOutsideMouseDown);\n      return () =>\n        document.removeEventListener(\"mousedown\", handleOutsideMouseDown);\n    }, [dropdownMenu, isOpen, isDisable, onClose]);\n\n    const externalFieldLayout = !dropdownMenu\n      ? {\n          width: \"100%\" as const,\n          minWidth: menuMinWidth ?? EXTERNAL_MENU_MIN_WIDTH_DEFAULT,\n          boxSizing: \"border-box\" as const,\n        }\n      : undefined;\n\n    const dropdown = dropdownMenu &&\n      isOpen &&\n      !isDisable &&\n      (!isWeb || menuPosition) && (\n        <>\n          {/* Backdrop overlay for closing (native only). On web, an outside\n              mousedown listener handles closing in a z-index-agnostic way so the\n              menu still closes when MultiSelect is inside a Modal. */}\n          {!isWeb && (\n            <Box\n              data-modal-id={modalId}\n              style={{\n                position: \"fixed\",\n                top: 0,\n                left: 0,\n                right: 0,\n                bottom: 0,\n                zIndex: overlayLayer + LAYER_OFFSET.menu,\n                cursor: \"default\",\n              }}\n              onPress={onClose}\n            />\n          )}\n\n          {/* Menu */}\n          <Box\n            ref={menuRef}\n            role=\"listbox\"\n            aria-multiselectable\n            aria-label={label ?? placeholder}\n            data-modal-id={modalId}\n            backgroundColor={theme.colors.background.secondary}\n            borderColor={theme.colors.border.secondary}\n            borderWidth={1}\n            borderRadius={sizeStyles.radius}\n            style={{\n              position: isWeb ? \"fixed\" : \"absolute\",\n              top: isWeb ? menuPosition?.top : \"100%\",\n              left: isWeb ? menuPosition?.left : 0,\n              right: isWeb ? undefined : 0,\n              width: isWeb ? menuPosition?.width : undefined,\n              marginTop: isWeb ? undefined : 4,\n              zIndex: overlayLayer + LAYER_OFFSET.popover,\n              boxShadow: theme.shadow.popover,\n            }}\n          >\n            {/* Search input - outside the scrollable area (web only) */}\n            {searchable && isWeb && (\n              <Box\n                paddingHorizontal={sizeStyles.paddingHorizontal}\n                paddingVertical={sizeStyles.paddingVertical}\n                borderBottomWidth={1}\n                borderColor={theme.colors.border.secondary}\n              >\n                <Box\n                  flexDirection=\"row\"\n                  alignItems=\"center\"\n                  gap={sizeStyles.paddingHorizontal / 2}\n                  paddingHorizontal={4}\n                >\n                  <Icon\n                    size={sizeStyles.iconSize - 2}\n                    color={inputColors.placeholder}\n                  >\n                    <SearchIcon />\n                  </Icon>\n                  <Box\n                    as=\"input\"\n                    ref={searchInputRef}\n                    testID={testID ? `${testID}-search-input` : undefined}\n                    flex={1}\n                    type=\"text\"\n                    aria-label={searchPlaceholder}\n                    value={searchValue}\n                    onChange={(e: ChangeEvent<HTMLInputElement>) =>\n                      setSearchValue(e.target.value)\n                    }\n                    placeholder={searchPlaceholder}\n                    style={{\n                      border: \"none\",\n                      outline: \"none\",\n                      background: \"transparent\",\n                      color: inputColors.text,\n                      fontSize: sizeStyles.fontSize,\n                      width: \"100%\",\n                    }}\n                  />\n                </Box>\n              </Box>\n            )}\n\n            {/* Options list - scrollable */}\n            <Box\n              paddingVertical={4}\n              style={{\n                maxHeight: searchable ? maxHeight - 60 : maxHeight,\n                overflowY: \"auto\",\n                overflowX: optionListOverflowX,\n                scrollbarWidth: \"none\",\n              }}\n            >\n              {menuItems.length === 0 ? (\n                <Box\n                  paddingVertical={sizeStyles.paddingVertical * 2}\n                  paddingHorizontal={sizeStyles.paddingHorizontal}\n                  alignItems=\"center\"\n                >\n                  <Text\n                    color={theme.colors.content.tertiary}\n                    fontSize={sizeStyles.fontSize}\n                  >\n                    {noOptionsMessage}\n                  </Text>\n                </Box>\n              ) : (\n                menuItems.map((item, _index) => {\n                  const brandColors = theme.colors.control.brand.primary;\n                  const contentColors = theme.colors.content;\n\n                  return (\n                    <Box\n                      testID={testID}\n                      key={item.id}\n                      paddingHorizontal={sizeStyles.paddingHorizontal}\n                      paddingVertical={8}\n                      onPress={() => {\n                        if (!item.disabled) {\n                          handleItemToggle(item.id, !item.checked);\n                        }\n                      }}\n                      flexDirection=\"row\"\n                      alignItems=\"center\"\n                      justifyContent=\"space-between\"\n                      backgroundColor={\n                        item.checked ? brandColors.bg : \"transparent\"\n                      }\n                      hoverStyle={\n                        !item.disabled && !item.checked\n                          ? {\n                              backgroundColor:\n                                theme.colors.control.input.bgHover,\n                            }\n                          : undefined\n                      }\n                      style={{\n                        cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n                        opacity: item.disabled ? 0.5 : 1,\n                        minWidth: optionRowMinWidth,\n                      }}\n                    >\n                      <Text\n                        color={\n                          item.checked\n                            ? contentColors.on.brand\n                            : theme.colors.content.secondary\n                        }\n                        fontSize={sizeStyles.fontSize}\n                        fontWeight=\"400\"\n                        numberOfLines={optionLabelNumberOfLines}\n                        style={optionLabelStyle}\n                      >\n                        {item.children}\n                      </Text>\n                    </Box>\n                  );\n                })\n              )}\n            </Box>\n          </Box>\n        </>\n      );\n\n    return (\n      <Box\n        ref={containerRef}\n        testID={testID}\n        flexDirection=\"column\"\n        gap={sizeStyles.fieldGap}\n        style={externalFieldLayout}\n      >\n        {/* Label */}\n        {label && (\n          <Text\n            color={theme.colors.content.secondary}\n            fontSize={sizeStyles.fontSize - 2}\n            fontWeight=\"500\"\n          >\n            {label}\n          </Text>\n        )}\n\n        {/* Control container */}\n        <Box\n          ref={ref}\n          style={{\n            position: \"relative\",\n            ...(externalFieldLayout ? { width: \"100%\" } : {}),\n          }}\n        >\n          <MultiSelectControl\n            ref={controlRef}\n            isOpen={controlMenuOpen}\n            isFocus={isFocus}\n            isError={isError}\n            size={size}\n            state={state}\n            disabled={isDisable}\n            onClick={controlOnClick}\n            width={dropdownMenu ? undefined : \"100%\"}\n            removeValue={onRemove}\n            removeAllValues={onRemoveAll}\n            stateList={stateList}\n            selectedItems={selectedItems}\n            variant={variant}\n            flexible={flexible}\n            placeholder={placeholder}\n            removeTagsButtons={removeTagsButtons}\n            iconLeft={iconLeft}\n            iconRight={iconRight}\n            extraClear={extraClear}\n          />\n\n          {/* Dropdown menu */}\n          {isWeb ? <Portal>{dropdown}</Portal> : dropdown}\n        </Box>\n\n        {/* Error message */}\n        {errorMessage && (\n          <Text\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\nMultiSelect.displayName = \"MultiSelect\";\n","import React from \"react\";\nimport {\n  View,\n  Pressable,\n  Image,\n  ViewStyle,\n  ImageStyle,\n  DimensionValue,\n  AnimatableNumericValue,\n  AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n  button: \"button\",\n  link: \"link\",\n  img: \"image\",\n  image: \"image\",\n  summary: \"summary\",\n  switch: \"switch\",\n  checkbox: \"checkbox\",\n  radio: \"radio\",\n  heading: \"header\",\n  text: \"text\",\n  search: \"search\",\n  alert: \"alert\",\n  none: \"none\",\n  presentation: \"none\",\n  progressbar: \"progressbar\",\n  scrollbar: \"scrollbar\",\n  adjustable: \"adjustable\",\n  tab: \"tab\",\n  menu: \"menu\",\n  menuitem: \"menuitem\",\n  list: \"list\",\n  timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n  if (gap === undefined) return undefined;\n  if (typeof gap === \"number\") return gap;\n  const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n  if (pxMatch) return Number(pxMatch[1]);\n  const asNumber = Number(gap);\n  return Number.isFinite(asNumber) ? asNumber : undefined;\n};\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  flexWrap,\n  alignItems,\n  justifyContent,\n  alignSelf,\n  position,\n  top,\n  bottom,\n  left,\n  right,\n  width,\n  minWidth,\n  minHeight,\n  maxWidth,\n  maxHeight,\n  flex,\n  flexShrink,\n  gap,\n  overflow,\n  opacity,\n  zIndex,\n  hoverStyle,\n  pressStyle,\n  style,\n  disabled,\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    opacity: opacity ?? (disabled ? 0.5 : undefined),\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    flexWrap,\n    alignItems,\n    justifyContent,\n    alignSelf,\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    flexShrink,\n    gap: toGapValue(gap),\n    ...(style as ViewStyle),\n  });\n\n  const finalTestID = dataTestId || testID;\n\n  // Map web a11y props; drop the rest of the web-only attributes before\n  // spreading onto RN hosts (unknown props warn at runtime).\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    \"aria-busy\": ariaBusy,\n    className,\n    \"data-testid\": _dataTestId,\n    cursor: _cursor,\n    type: _type,\n    ...nativeRest\n  } = rest as Record<string, unknown>;\n\n  const accessibilityRole =\n    (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n    (as === \"button\" ? \"button\" : undefined);\n  const isDisabled = Boolean(disabled || ariaDisabled);\n  const accessibilityState = {\n    disabled: isDisabled || undefined,\n    busy: Boolean(ariaBusy) || undefined,\n  };\n  const accessibilityLiveRegion =\n    ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\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        accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n        resizeMode=\"cover\"\n        {...nativeRest}\n      />\n    );\n  }\n\n  // Prefer Pressable whenever the node is interactive or explicitly a button,\n  // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n  if (onPress || as === \"button\") {\n    return (\n      <Pressable\n        onPress={!isDisabled && onPress ? onPress : undefined}\n        disabled={isDisabled}\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        accessibilityRole={accessibilityRole}\n        accessibilityLabel={\n          typeof ariaLabel === \"string\" ? ariaLabel : undefined\n        }\n        accessibilityState={accessibilityState}\n        accessibilityLiveRegion={accessibilityLiveRegion}\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      accessibilityRole={accessibilityRole}\n      accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n      accessibilityState={accessibilityState}\n      accessibilityLiveRegion={accessibilityLiveRegion}\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","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 = false;\nexport const isNative = true;\n","import React, { forwardRef, useRef } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Icon } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport {\n  ChevronDown,\n  ChevronUp,\n  Remove,\n  ExclamationMarkCr,\n} from \"@xsolla/xui-icons-base\";\nimport { useMultiSelectControl } from \"./useMultiSelectControl\";\nimport type { MultiSelectControlProps } from \"./types\";\n\nexport const MultiSelectControl = forwardRef<\n  HTMLDivElement,\n  MultiSelectControlProps\n>(\n  (\n    {\n      variant = \"tag\",\n      flexible = true,\n      onClick,\n      removeValue,\n      removeAllValues,\n      size = \"md\",\n      state: externalState,\n      isError = false,\n      isOpen = false,\n      isFocus = false,\n      stateList,\n      selectedItems,\n      removeTagsButtons = true,\n      placeholder = \"Select\",\n      iconLeft,\n      iconRight,\n      disabled = false,\n      extraClear = false,\n      width,\n      themeMode,\n      themeProductContext,\n    },\n    ref\n  ) => {\n    const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n    const sizeStyles = theme.sizing.input(size);\n    const inputColors = theme.colors.control.input;\n\n    const state = externalState || (disabled ? \"disable\" : \"default\");\n    const isDisable = state === \"disable\" || disabled;\n\n    const containerRef = useRef<HTMLDivElement>(null);\n\n    const { itemsRef, selectedContent, isCalculating } = useMultiSelectControl({\n      variant,\n      flexible,\n      size,\n      stateList,\n      selectedItems,\n      removeValue,\n      placeholder,\n      removeTagsButtons,\n      disabled: isDisable,\n      isCanBeCleared: Boolean(extraClear && selectedItems.length),\n      containerRef,\n    });\n\n    const tagItemsGap = { xs: 4, sm: 4, md: 6, lg: 8, xl: 10 }[size];\n\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 || isOpen) {\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    const iconColor = isDisable ? inputColors.textDisable : inputColors.placeholder;\n\n    return (\n      <Box\n        ref={ref}\n        width={width}\n        backgroundColor={backgroundColor}\n        borderColor={borderColor}\n        borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n        borderRadius={sizeStyles.radius}\n        paddingVertical={sizeStyles.paddingVertical}\n        paddingHorizontal={sizeStyles.paddingHorizontal}\n        minHeight={sizeStyles.height}\n        flexDirection=\"row\"\n        alignItems=\"center\"\n        gap={8}\n        style={{\n          cursor: isDisable ? \"not-allowed\" : onClick ? \"pointer\" : \"default\",\n          boxSizing: \"border-box\",\n          height: flexible ? \"auto\" : sizeStyles.height,\n          position: \"relative\",\n          zIndex: isOpen ? 1000 : undefined,\n        }}\n        onPress={isDisable ? undefined : onClick}\n        hoverStyle={\n          !isDisable && onClick && !isFocus && !isOpen && !isError\n            ? {\n                backgroundColor: inputColors.bgHover,\n                borderColor: inputColors.borderHover,\n              }\n            : undefined\n        }\n      >\n        <Box\n          ref={containerRef}\n          flex={1}\n          flexDirection=\"row\"\n          alignItems=\"center\"\n          gap={8}\n          style={{ minWidth: 0 }}\n        >\n          {iconLeft && (\n            <Icon size={sizeStyles.iconSize} color={iconColor} variant=\"line\">\n              {iconLeft}\n            </Icon>\n          )}\n          <Box\n            ref={itemsRef}\n            flex={1}\n            flexDirection=\"row\"\n            flexWrap={flexible ? \"wrap\" : \"nowrap\"}\n            alignItems=\"center\"\n            gap={variant === \"tag\" ? tagItemsGap : 4}\n            style={{ overflow: \"hidden\", opacity: isCalculating ? 0 : 1 }}\n          >\n            {selectedContent}\n          </Box>\n        </Box>\n\n        <Box flexDirection=\"row\" alignItems=\"center\" gap={4}>\n          {extraClear && selectedItems.length > 0 && !isDisable && (\n            <Box\n              onPress={(e: React.MouseEvent) => {\n                e.stopPropagation();\n                removeAllValues();\n              }}\n              style={{ cursor: \"pointer\" }}\n            >\n              <Remove size={18} color={iconColor} variant=\"line\" />\n            </Box>\n          )}\n          {isError && (\n            <ExclamationMarkCr size={18} color={theme.colors.content.alert.primary} />\n          )}\n          {iconRight ? (\n            iconRight\n          ) : isOpen ? (\n            <ChevronUp size={18} color={iconColor} variant=\"line\" />\n          ) : (\n            <ChevronDown size={18} color={iconColor} variant=\"line\" />\n          )}\n        </Box>\n      </Box>\n    );\n  }\n);\n\nMultiSelectControl.displayName = \"MultiSelectControl\";\n","import React, {\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n  type ReactNode,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { Tag } from \"@xsolla/xui-tag\";\nimport { useResolvedTheme, type ThemeOverrideProps } from \"@xsolla/xui-core\";\nimport type {\n  MultiSelectOption,\n  MultiSelectSize,\n  MultiSelectVariant,\n} from \"./types\";\n\nexport enum DisplayState {\n  Placeholder,\n  PreRender,\n  Calculation,\n  Render,\n}\n\ninterface SavedWidths {\n  tagsWidths: Record<string | number, number>;\n  countItemWidth: number;\n  columnGap: number;\n  dependencies: {\n    stateList: Array<string | number>;\n    variant: MultiSelectVariant;\n    size: MultiSelectSize;\n    removeTagsButtons: boolean;\n  };\n}\n\nconst COUNT_ITEM_VALUE = \"count-item\" as const;\n\ninterface UseMultiSelectControlProps extends ThemeOverrideProps {\n  variant: MultiSelectVariant;\n  flexible: boolean;\n  size: MultiSelectSize;\n  stateList: MultiSelectOption[];\n  selectedItems: MultiSelectOption[];\n  removeValue: (value: string | number, event?: React.MouseEvent) => void;\n  placeholder?: string;\n  removeTagsButtons: boolean;\n  disabled?: boolean;\n  isCanBeCleared?: boolean;\n  containerRef: React.RefObject<HTMLDivElement>;\n}\n\nexport const useMultiSelectControl = ({\n  variant,\n  flexible,\n  size,\n  stateList,\n  selectedItems,\n  removeValue,\n  placeholder,\n  removeTagsButtons,\n  disabled,\n  containerRef,\n  themeMode,\n  themeProductContext,\n}: UseMultiSelectControlProps) => {\n  const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n  const displayStateRef = useRef<DisplayState>(DisplayState.Placeholder);\n  const savedWidthsRef = useRef<SavedWidths | null>(null);\n\n  const itemsRef = useRef<HTMLDivElement>(null);\n  const [itemsWidth, setItemsWidth] = useState(0);\n  const [selectedContent, setSelectedContent] = useState<ReactNode | null>(\n    null\n  );\n\n  const isPlaceholder = !selectedItems || selectedItems.length === 0;\n\n  // Observe container width (parent of items, respects width constraints)\n  useEffect(() => {\n    if (!containerRef.current) return;\n\n    let rafId: number | null = null;\n\n    const syncItemsWidth = () => {\n      rafId = null;\n      if (!containerRef.current) return;\n\n      const width = containerRef.current.getBoundingClientRect().width;\n      setItemsWidth((prev) => (prev === width ? prev : width));\n    };\n\n    const scheduleWidthSync = () => {\n      if (rafId != null) return;\n      rafId = requestAnimationFrame(syncItemsWidth);\n    };\n\n    const resizeObserver = new ResizeObserver(scheduleWidthSync);\n    resizeObserver.observe(containerRef.current);\n\n    return () => {\n      if (rafId != null) cancelAnimationFrame(rafId);\n      resizeObserver.disconnect();\n    };\n  }, [containerRef]);\n\n  const widthsDependencies = useMemo(\n    () => ({\n      stateList: stateList.map((item) => item.value),\n      variant,\n      size,\n      removeTagsButtons,\n    }),\n    [stateList, variant, size, removeTagsButtons]\n  );\n\n  const isWidthsDependenciesChanged = () => {\n    const prev = savedWidthsRef.current?.dependencies;\n    if (!prev) return true;\n    if (prev.variant !== widthsDependencies.variant) return true;\n    if (prev.size !== widthsDependencies.size) return true;\n    if (prev.removeTagsButtons !== widthsDependencies.removeTagsButtons)\n      return true;\n    if (prev.stateList.length !== widthsDependencies.stateList.length)\n      return true;\n\n    let i = 0;\n    for (const v of prev.stateList) {\n      if (v !== widthsDependencies.stateList[i]) return true;\n      i++;\n    }\n\n    return false;\n  };\n\n  const setPlaceholder = () => {\n    setSelectedContent(\n      <Text\n        color={theme.colors.control.input.placeholder}\n        fontSize={theme.sizing.input(size).fontSize}\n      >\n        {placeholder}\n      </Text>\n    );\n  };\n\n  const countPossibleItemsCount = (widths: SavedWidths | null) => {\n    if (!widths || !selectedItems?.length) return 0;\n\n    const itemsAvailableSpace = itemsRef.current?.clientWidth || 0;\n    if (!itemsAvailableSpace) return 0;\n\n    const { tagsWidths, countItemWidth, columnGap } = widths;\n\n    const countPossibleItems = (availableSpace: number) => {\n      let remaining = availableSpace;\n      let count = 0;\n      let isFirst = true;\n\n      for (const item of selectedItems) {\n        if (!isFirst) remaining -= columnGap;\n        isFirst = false;\n\n        const width = tagsWidths[item.value] ?? 0;\n        remaining -= width;\n\n        if (remaining < 0) break;\n        count++;\n      }\n\n      return count;\n    };\n\n    // First try without \"+N\"\n    let possibleCount = countPossibleItems(itemsAvailableSpace);\n\n    // If not all items fit, reserve space for \"+N\" tag and retry\n    if (possibleCount !== selectedItems.length) {\n      possibleCount = countPossibleItems(\n        itemsAvailableSpace - countItemWidth - columnGap\n      );\n    }\n\n    return possibleCount;\n  };\n\n  const setItemsRender = () => {\n    const itemsList =\n      displayStateRef.current === DisplayState.PreRender\n        ? stateList\n        : selectedItems;\n\n    const showAll =\n      displayStateRef.current === DisplayState.PreRender || flexible;\n\n    const displayedItemsCount = showAll\n      ? itemsList.length\n      : countPossibleItemsCount(savedWidthsRef.current);\n\n    // always show at least 1 item\n    const displayedItems = itemsList.slice(0, displayedItemsCount || 1);\n\n    const hasHidden =\n      displayStateRef.current === DisplayState.PreRender ||\n      itemsList.length - displayedItems.length > 0;\n\n    if (hasHidden) {\n      const countText =\n        displayStateRef.current === DisplayState.PreRender\n          ? `+${itemsList.length}`\n          : `+${itemsList.length - displayedItems.length}`;\n\n      displayedItems.push({ value: COUNT_ITEM_VALUE, label: countText });\n    }\n\n    const content: ReactNode[] = displayedItems.map((item, index) => {\n      const isCount = item.value === COUNT_ITEM_VALUE;\n\n      const isReducable =\n        (index === 0 &&\n          displayStateRef.current === DisplayState.Render &&\n          displayedItemsCount === 0) ||\n        flexible;\n\n      if (variant === \"tag\") {\n        return (\n          <Box\n            key={item.value}\n            onPress={\n              !isCount\n                ? (e: React.MouseEvent) => {\n                    e.stopPropagation();\n                    if (!disabled) removeValue(item.value, e);\n                  }\n                : undefined\n            }\n            style={{\n              minWidth: isReducable ? 0 : \"fit-content\",\n              opacity: disabled ? 0.5 : 1,\n              cursor: disabled || isCount ? \"not-allowed\" : \"pointer\",\n            }}\n          >\n            <Tag\n              size={size}\n              tone=\"primary\"\n              onRemove={\n                removeTagsButtons && !isCount\n                  ? (e?: React.MouseEvent) => {\n                      e?.stopPropagation();\n                      if (!disabled) removeValue(item.value, e);\n                    }\n                  : undefined\n              }\n            >\n              {item.label}\n            </Tag>\n          </Box>\n        );\n      }\n\n      // Text variant\n      const isCountItem = hasHidden;\n      const needsComma =\n        index < displayedItems.length - 2 ||\n        (index < displayedItems.length - 1 && !isCountItem);\n\n      return (\n        <Text\n          key={item.value}\n          color={theme.colors.content.primary}\n          fontSize={theme.sizing.input(size).fontSize}\n          numberOfLines={1}\n          style={{\n            display: \"inline\",\n            whiteSpace: \"nowrap\",\n            overflow: isReducable ? \"hidden\" : undefined,\n            textOverflow: isReducable ? \"ellipsis\" : undefined,\n            opacity: disabled ? 0.5 : 1,\n            cursor: disabled || isCount ? \"not-allowed\" : \"default\",\n          }}\n        >\n          {item.label}\n          {needsComma ? \",\\u00A0\" : \"\\u00A0\"}\n        </Text>\n      );\n    });\n\n    setSelectedContent(content);\n\n    if (displayStateRef.current === DisplayState.PreRender) {\n      displayStateRef.current = DisplayState.Calculation;\n    }\n  };\n\n  const getWidths = () => {\n    if (!itemsRef.current || !containerRef.current) return;\n\n    const allItems = Array.from(itemsRef.current.children) as HTMLElement[];\n    if (allItems.length === 0) return;\n\n    const countEl = allItems[allItems.length - 1];\n    const countItemWidth = countEl.getBoundingClientRect().width;\n\n    const columnGap =\n      parseInt(getComputedStyle(itemsRef.current).columnGap || \"0\", 10) || 0;\n\n    const tagsWidths: Record<string | number, number> = {};\n    let index = 0;\n\n    for (const el of allItems) {\n      const key =\n        index < allItems.length - 1 ? stateList[index].value : COUNT_ITEM_VALUE;\n\n      tagsWidths[key] = el.getBoundingClientRect().width;\n      index++;\n    }\n\n    savedWidthsRef.current = {\n      tagsWidths,\n      countItemWidth,\n      columnGap,\n      dependencies: widthsDependencies,\n    };\n\n    displayStateRef.current = DisplayState.Render;\n    setItemsRender();\n  };\n\n  // Main flow\n  useEffect(() => {\n    if (isPlaceholder) {\n      displayStateRef.current = DisplayState.Placeholder;\n      setPlaceholder();\n      return;\n    }\n\n    if (flexible) {\n      // Flexible mode never needs cached widths\n      savedWidthsRef.current = null;\n      displayStateRef.current = DisplayState.Render;\n      setItemsRender();\n      return;\n    }\n\n    // Fixed mode: measure if missing or deps changed\n    const needsMeasurement =\n      !savedWidthsRef.current || isWidthsDependenciesChanged();\n\n    if (needsMeasurement) {\n      // Wait for ResizeObserver to set width\n      if (itemsWidth === 0) return;\n\n      displayStateRef.current = DisplayState.PreRender;\n      setItemsRender(); // render all for measurement\n      return;\n    }\n\n    displayStateRef.current = DisplayState.Render;\n    setItemsRender();\n  }, [\n    isPlaceholder,\n    placeholder,\n    flexible,\n    disabled,\n    selectedItems,\n    variant,\n    size,\n    removeTagsButtons,\n    itemsWidth,\n    widthsDependencies,\n    stateList,\n  ]);\n\n  // Measure after PreRender render paints\n  useEffect(() => {\n    if (displayStateRef.current !== DisplayState.Calculation) return;\n\n    const rafId = requestAnimationFrame(() => {\n      if (displayStateRef.current === DisplayState.Calculation) {\n        getWidths();\n      }\n    });\n\n    return () => cancelAnimationFrame(rafId);\n  }, [selectedContent]);\n\n  return {\n    itemsRef,\n    displayStateRef,\n    selectedContent,\n    isCalculating:\n      displayStateRef.current === DisplayState.PreRender ||\n      displayStateRef.current === DisplayState.Calculation,\n  };\n};\n","import { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { MultiSelectOption, MultiSelectValue } from \"./types\";\n\ninterface UseMultiSelectProps {\n  options: MultiSelectOption[];\n  value?: MultiSelectValue;\n  onChange?: (values: MultiSelectValue) => void;\n}\n\ninterface MultiSelectState {\n  values: MultiSelectValue;\n  selectedItems: MultiSelectOption[];\n  isOpen: boolean;\n}\n\nconst initialState: MultiSelectState = {\n  values: [],\n  selectedItems: [],\n  isOpen: false,\n};\n\nexport const useMultiSelect = ({\n  options,\n  value = [],\n  onChange,\n}: UseMultiSelectProps) => {\n  const [state, setState] = useState<MultiSelectState>(initialState);\n  const optionsRef = useRef(options);\n\n  useEffect(() => {\n    optionsRef.current = options;\n  }, [options]);\n\n  // Sync value prop with internal state\n  useEffect(() => {\n    const selectedItems = options.filter((opt) => value.includes(opt.value));\n\n    setState((prevState) => ({\n      ...prevState,\n      values: value,\n      selectedItems,\n    }));\n  }, [options, value]);\n\n  const onChoose = useCallback(\n    (selectedIds: string[]) => {\n      // Extract values that correspond to the selected IDs\n      const newValues = optionsRef.current\n        .filter((opt) => selectedIds.includes(String(opt.value)))\n        .map((opt) => opt.value);\n\n      const newSelectedItems = optionsRef.current.filter((opt) =>\n        newValues.includes(opt.value)\n      );\n\n      setState((prevState) => ({\n        ...prevState,\n        values: newValues,\n        selectedItems: newSelectedItems,\n      }));\n\n      onChange?.(newValues);\n    },\n    [onChange]\n  );\n\n  const onRemove = useCallback(\n    (value: string | number, event?: React.MouseEvent) => {\n      event?.stopPropagation();\n\n      setState((prev) => {\n        const newValues = prev.values.filter((v) => v !== value);\n        const newSelectedItems = optionsRef.current.filter((opt) =>\n          newValues.includes(opt.value)\n        );\n        onChange?.(newValues);\n        return {\n          ...prev,\n          values: newValues,\n          selectedItems: newSelectedItems,\n        };\n      });\n    },\n    [onChange]\n  );\n\n  const onRemoveAll = useCallback(() => {\n    setState((prevState) => ({\n      ...prevState,\n      values: [],\n      selectedItems: [],\n    }));\n\n    onChange?.([]);\n  }, [onChange]);\n\n  const onSelectClick = useCallback(() => {\n    setState((prevState) => ({\n      ...prevState,\n      isOpen: !prevState.isOpen,\n    }));\n  }, []);\n\n  const onClose = useCallback(() => {\n    setState((prevState) => ({\n      ...prevState,\n      isOpen: false,\n    }));\n  }, []);\n\n  return {\n    values: state.values,\n    stateList: options,\n    selectedItems: state.selectedItems,\n    isOpen: state.isOpen,\n    onChoose,\n    onSelectClick,\n    onRemove,\n    onRemoveAll,\n    onClose,\n  };\n};\n","import { ReactNode } from \"react\";\n\ninterface PortalProps {\n  children: ReactNode;\n}\n\nexport const Portal = ({ children }: PortalProps) => <>{children}</>;\n"],"mappings":"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","names":["forwardRef","useRef","useEffect","useState","jsx","View","jsx","useResolvedTheme","useRef","useResolvedTheme","jsx","jsx","jsx","jsxs","useResolvedTheme","useRef","useEffect","useRef","useState","value","jsx","Fragment","jsx","jsxs","forwardRef","useResolvedTheme","useRef","useState","useEffect","value"]}