@xsolla/xui-b2b-group-select 0.218.1 → 0.219.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/native/index.js CHANGED
@@ -73,6 +73,7 @@ var toGapValue = (gap) => {
73
73
  const asNumber = Number(gap);
74
74
  return Number.isFinite(asNumber) ? asNumber : void 0;
75
75
  };
76
+ var toNativeDisplay = (display) => display === "none" ? "none" : void 0;
76
77
  var Box = ({
77
78
  children,
78
79
  onPress,
@@ -104,6 +105,7 @@ var Box = ({
104
105
  marginBottom,
105
106
  marginLeft,
106
107
  marginRight,
108
+ display,
107
109
  flexDirection,
108
110
  flexWrap,
109
111
  alignItems,
@@ -167,6 +169,7 @@ var Box = ({
167
169
  marginBottom,
168
170
  marginLeft,
169
171
  marginRight,
172
+ display: toNativeDisplay(display),
170
173
  flexDirection,
171
174
  flexWrap,
172
175
  alignItems,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../src/GroupSelect.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","../../../../foundation/primitives-native/src/index.tsx"],"sourcesContent":["export { GroupSelect, GROUP_SELECT_MIN_PANEL_WIDTH } from \"./GroupSelect\";\nexport type {\n GroupSelectGroup,\n GroupSelectItem,\n GroupSelectProps,\n} from \"./types\";\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\n// @ts-expect-error resolved at build time to web/native primitives\nimport { Box, Icon, InputPrimitive, Text, isWeb } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Search as SearchIcon } from \"@xsolla/xui-icons-base\";\nimport { Checkbox } from \"@xsolla/xui-checkbox\";\nimport type { GroupSelectGroup, GroupSelectProps } from \"./types\";\n\n/** Default `minWidth` of the panel root; keep in sync with MultiSelect external-field default. */\nexport const GROUP_SELECT_MIN_PANEL_WIDTH = 540;\n\nconst LEFT_COL_WIDTH = 280;\nconst LIST_MAX_HEIGHT = 308;\n/** Right panel header (counter + select all); padding 14×2 + ~18px text */\nconst RIGHT_HEADER_SCROLL_OFFSET = 48;\n\nconst normalize = (s: string) => s.trim().toLowerCase();\n\nfunction filterGroups(\n groups: GroupSelectGroup[],\n query: string\n): GroupSelectGroup[] {\n const q = normalize(query);\n if (!q) return groups;\n\n return groups\n .map((g) => {\n const groupMatches = normalize(g.label).includes(q);\n const items = groupMatches\n ? g.items\n : g.items.filter((it) => normalize(it.label).includes(q));\n return { ...g, items };\n })\n .filter((g) => g.items.length > 0);\n}\n\nexport const GroupSelect: React.FC<GroupSelectProps> = ({\n ariaLabel = \"Grouped selection\",\n groups,\n value,\n onChange,\n activeGroupId: activeGroupIdProp,\n onActiveGroupChange,\n searchPlaceholder = \"Search\",\n emptyMessage = \"No results found\",\n leftColumnWidth = LEFT_COL_WIDTH,\n listMaxHeight = LIST_MAX_HEIGHT,\n selectAllLabel = \"Select all\",\n unselectAllLabel = \"Unselect all\",\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.input(\"sm\");\n const inputColors = theme.colors.control.input;\n\n const [search, setSearch] = useState(\"\");\n const [fallbackActive, setFallbackActive] = useState(\n () => groups[0]?.id ?? \"\"\n );\n\n const filteredGroups = useMemo(\n () => filterGroups(groups, search),\n [groups, search]\n );\n\n const isActiveControlled = activeGroupIdProp !== undefined;\n\n useEffect(() => {\n if (!groups.length) return;\n if (isActiveControlled) return;\n setFallbackActive((prev) => {\n const stillValid = filteredGroups.some((g) => g.id === prev);\n if (stillValid) return prev;\n return filteredGroups[0]?.id ?? \"\";\n });\n }, [filteredGroups, groups.length, isActiveControlled]);\n\n const requestedActiveGroupId = isActiveControlled\n ? (activeGroupIdProp ?? \"\")\n : fallbackActive;\n\n const resolvedActiveGroupId = filteredGroups.some(\n (g) => g.id === requestedActiveGroupId\n )\n ? requestedActiveGroupId\n : (filteredGroups[0]?.id ?? \"\");\n\n const activeGroup = filteredGroups.find(\n (g) => g.id === resolvedActiveGroupId\n );\n\n const visibleItems = useMemo(() => activeGroup?.items ?? [], [activeGroup]);\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n\n const handleActiveChange = useCallback(\n (groupId: string) => {\n if (!isActiveControlled) {\n setFallbackActive(groupId);\n }\n onActiveGroupChange?.(groupId);\n },\n [isActiveControlled, onActiveGroupChange]\n );\n\n const selectableVisibleItems = useMemo(\n () => visibleItems.filter((it) => !it.disabled),\n [visibleItems]\n );\n\n const selectedInVisible = useMemo(\n () => selectableVisibleItems.filter((it) => selectedSet.has(it.id)),\n [selectableVisibleItems, selectedSet]\n );\n\n const allVisibleSelected =\n selectableVisibleItems.length > 0 &&\n selectedInVisible.length === selectableVisibleItems.length;\n\n const toggleItem = useCallback(\n (itemId: string, checked: boolean) => {\n if (checked) {\n if (selectedSet.has(itemId)) return;\n onChange([...value, itemId]);\n return;\n }\n onChange(value.filter((id) => id !== itemId));\n },\n [onChange, selectedSet, value]\n );\n\n const handleSelectAllVisible = useCallback(() => {\n const next = new Set(value);\n for (const { id } of selectableVisibleItems) {\n next.add(id);\n }\n onChange([...next]);\n }, [onChange, selectableVisibleItems, value]);\n\n const handleUnselectAllVisible = useCallback(() => {\n const visibleIds = new Set(selectableVisibleItems.map((it) => it.id));\n onChange(value.filter((id) => !visibleIds.has(id)));\n }, [onChange, selectableVisibleItems, value]);\n\n const countSelectedInGroup = useCallback(\n (g: GroupSelectGroup) =>\n g.items.filter((it) => selectedSet.has(it.id)).length,\n [selectedSet]\n );\n\n const getSelectableIdsInGroup = useCallback((g: GroupSelectGroup) => {\n return g.items.filter((it) => !it.disabled).map((it) => it.id);\n }, []);\n\n const handleGroupCheckboxChange = useCallback(\n (g: GroupSelectGroup, nextChecked: boolean) => {\n const selectableIds = getSelectableIdsInGroup(g);\n if (selectableIds.length === 0) return;\n if (nextChecked) {\n const next = new Set(value);\n for (const id of selectableIds) {\n next.add(id);\n }\n onChange([...next]);\n return;\n }\n const remove = new Set(selectableIds);\n onChange(value.filter((id) => !remove.has(id)));\n },\n [getSelectableIdsInGroup, onChange, value]\n );\n\n const handleCategoryActivatorKeyDown = useCallback(\n (groupId: string, e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleActiveChange(groupId);\n }\n },\n [handleActiveChange]\n );\n\n const showEmpty = filteredGroups.length === 0;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={showEmpty ? 24 : 8}\n padding={8}\n backgroundColor={theme.colors.layer.float}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n role=\"region\"\n aria-label={ariaLabel}\n style={{\n width: \"100%\",\n minWidth: GROUP_SELECT_MIN_PANEL_WIDTH,\n boxSizing: \"border-box\",\n boxShadow: theme.shadow.popover,\n ...(isWeb\n ? {\n backdropFilter: \"blur(16px)\",\n }\n : {}),\n }}\n testID={testID || \"group-select\"}\n >\n {/* Search */}\n <Box\n flexDirection=\"column\"\n gap={6}\n paddingHorizontal={10}\n paddingVertical={7}\n role=\"search\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={8}>\n {isWeb ? (\n <Box aria-hidden>\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n </Box>\n ) : (\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n )}\n <Box flex={1} justifyContent=\"center\">\n <InputPrimitive\n value={search}\n placeholder={searchPlaceholder}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setSearch(e.target.value)\n }\n onChangeText={setSearch}\n color={\n search ? theme.colors.content.primary : inputColors.placeholder\n }\n fontSize={sizeStyles.fontSize}\n fontFamily={theme.fonts.body}\n placeholderTextColor={inputColors.placeholder}\n style={\n isWeb\n ? {\n lineHeight: \"16px\",\n }\n : undefined\n }\n aria-label={searchPlaceholder}\n data-testid=\"group-select__search\"\n />\n </Box>\n </Box>\n <Box\n height={1}\n backgroundColor={theme.colors.border.secondary}\n style={\n isWeb\n ? {\n opacity: 0.6,\n }\n : undefined\n }\n />\n </Box>\n\n {showEmpty ? (\n <Box\n paddingBottom={32}\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Text\n color={theme.colors.content.primary}\n fontSize={sizeStyles.fontSize}\n style={{\n lineHeight: \"18px\",\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {emptyMessage}\n </Text>\n </Box>\n ) : (\n <Box flexDirection=\"row\" gap={8} alignItems=\"flex-start\" width=\"100%\">\n {/* Left: groups */}\n <Box\n width={leftColumnWidth}\n flexShrink={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n overflow=\"hidden\"\n role=\"list\"\n aria-label=\"Categories\"\n >\n <Box\n style={{\n maxHeight: listMaxHeight,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {filteredGroups.map((g) => {\n const isActive = g.id === resolvedActiveGroupId;\n const selectedCount = countSelectedInGroup(g);\n const total = g.items.length;\n const summary = `${selectedCount}/${total}`;\n const selectableIds = getSelectableIdsInGroup(g);\n const selectedSelectable = selectableIds.filter((id) =>\n selectedSet.has(id)\n ).length;\n const groupAllSelected =\n selectableIds.length > 0 &&\n selectedSelectable === selectableIds.length;\n const groupIndeterminate =\n selectedSelectable > 0 && !groupAllSelected;\n const groupCheckboxDisabled = selectableIds.length === 0;\n const categoryShowLabel = `Show ${g.label} items`;\n\n return (\n <Box\n key={g.id}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={10}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n backgroundColor={\n isActive\n ? theme.colors.background.brand.secondary\n : \"transparent\"\n }\n hoverStyle={\n !isActive\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n role=\"listitem\"\n aria-current={isActive ? \"true\" : undefined}\n data-testid={`group-select__group-${g.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={groupAllSelected}\n indeterminate={groupIndeterminate}\n disabled={groupCheckboxDisabled}\n onChange={(e) =>\n handleGroupCheckboxChange(g, e.target.checked)\n }\n aria-label={`${g.label}, ${summary} selected`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n <Box\n flex={1}\n minWidth={0}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={8}\n onPress={() => handleActiveChange(g.id)}\n style={\n isWeb\n ? {\n cursor: \"pointer\" as const,\n }\n : undefined\n }\n {...(isWeb\n ? {\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": categoryShowLabel,\n onKeyDown: (e: React.KeyboardEvent) =>\n handleCategoryActivatorKeyDown(g.id, e),\n }\n : {\n accessibilityRole: \"button\",\n accessibilityLabel: categoryShowLabel,\n })}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {g.label}\n </Text>\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n textAlign: \"right\",\n }}\n >\n {summary}\n </Text>\n </Box>\n </Box>\n );\n })}\n </Box>\n </Box>\n\n {/* Right: items */}\n <Box\n flex={1}\n minWidth={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n backgroundColor={theme.colors.overlay.mono}\n overflow=\"hidden\"\n role=\"region\"\n aria-label={activeGroup ? `${activeGroup.label} items` : \"Items\"}\n >\n {/* Summary row */}\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={12}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n borderBottomWidth={1}\n borderBottomColor={theme.colors.border.secondary}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {`${selectedInVisible.length}/${visibleItems.length}`}\n </Text>\n <Box\n as={isWeb ? \"button\" : undefined}\n type={isWeb ? \"button\" : undefined}\n disabled={visibleItems.length === 0}\n onPress={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? handleUnselectAllVisible\n : handleSelectAllVisible\n }\n backgroundColor=\"transparent\"\n borderWidth={0}\n padding={0}\n aria-label={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n }\n {...(!isWeb && visibleItems.length > 0\n ? {\n accessibilityRole: \"button\" as const,\n accessibilityLabel: allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`,\n }\n : {})}\n style={\n isWeb\n ? {\n cursor:\n visibleItems.length === 0 ? \"default\" : \"pointer\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.content.brand.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {allVisibleSelected ? unselectAllLabel : selectAllLabel}\n </Text>\n </Box>\n </Box>\n\n <Box\n style={{\n maxHeight: listMaxHeight - RIGHT_HEADER_SCROLL_OFFSET,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {visibleItems.map((item) => (\n <Box\n key={item.id}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n flexDirection=\"row\"\n alignItems=\"center\"\n backgroundColor=\"transparent\"\n hoverStyle={\n !item.disabled\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n style={{\n ...(isWeb\n ? {\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }\n : {}),\n opacity: item.disabled ? 0.5 : 1,\n }}\n data-testid={`group-select__item-${item.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={selectedSet.has(item.id)}\n disabled={item.disabled}\n onChange={(e) => toggleItem(item.id, e.target.checked)}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n >\n {item.label}\n </Checkbox>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n );\n};\n\nGroupSelect.displayName = \"GroupSelect\";\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","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","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"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","React","import_react","import_react_native","import_jsx_runtime","RNTextInput","import_jsx_runtime","SearchIcon"]}
1
+ {"version":3,"sources":["../../src/index.tsx","../../src/GroupSelect.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","../../../../foundation/primitives-native/src/index.tsx"],"sourcesContent":["export { GroupSelect, GROUP_SELECT_MIN_PANEL_WIDTH } from \"./GroupSelect\";\nexport type {\n GroupSelectGroup,\n GroupSelectItem,\n GroupSelectProps,\n} from \"./types\";\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\n// @ts-expect-error resolved at build time to web/native primitives\nimport { Box, Icon, InputPrimitive, Text, isWeb } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Search as SearchIcon } from \"@xsolla/xui-icons-base\";\nimport { Checkbox } from \"@xsolla/xui-checkbox\";\nimport type { GroupSelectGroup, GroupSelectProps } from \"./types\";\n\n/** Default `minWidth` of the panel root; keep in sync with MultiSelect external-field default. */\nexport const GROUP_SELECT_MIN_PANEL_WIDTH = 540;\n\nconst LEFT_COL_WIDTH = 280;\nconst LIST_MAX_HEIGHT = 308;\n/** Right panel header (counter + select all); padding 14×2 + ~18px text */\nconst RIGHT_HEADER_SCROLL_OFFSET = 48;\n\nconst normalize = (s: string) => s.trim().toLowerCase();\n\nfunction filterGroups(\n groups: GroupSelectGroup[],\n query: string\n): GroupSelectGroup[] {\n const q = normalize(query);\n if (!q) return groups;\n\n return groups\n .map((g) => {\n const groupMatches = normalize(g.label).includes(q);\n const items = groupMatches\n ? g.items\n : g.items.filter((it) => normalize(it.label).includes(q));\n return { ...g, items };\n })\n .filter((g) => g.items.length > 0);\n}\n\nexport const GroupSelect: React.FC<GroupSelectProps> = ({\n ariaLabel = \"Grouped selection\",\n groups,\n value,\n onChange,\n activeGroupId: activeGroupIdProp,\n onActiveGroupChange,\n searchPlaceholder = \"Search\",\n emptyMessage = \"No results found\",\n leftColumnWidth = LEFT_COL_WIDTH,\n listMaxHeight = LIST_MAX_HEIGHT,\n selectAllLabel = \"Select all\",\n unselectAllLabel = \"Unselect all\",\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.input(\"sm\");\n const inputColors = theme.colors.control.input;\n\n const [search, setSearch] = useState(\"\");\n const [fallbackActive, setFallbackActive] = useState(\n () => groups[0]?.id ?? \"\"\n );\n\n const filteredGroups = useMemo(\n () => filterGroups(groups, search),\n [groups, search]\n );\n\n const isActiveControlled = activeGroupIdProp !== undefined;\n\n useEffect(() => {\n if (!groups.length) return;\n if (isActiveControlled) return;\n setFallbackActive((prev) => {\n const stillValid = filteredGroups.some((g) => g.id === prev);\n if (stillValid) return prev;\n return filteredGroups[0]?.id ?? \"\";\n });\n }, [filteredGroups, groups.length, isActiveControlled]);\n\n const requestedActiveGroupId = isActiveControlled\n ? (activeGroupIdProp ?? \"\")\n : fallbackActive;\n\n const resolvedActiveGroupId = filteredGroups.some(\n (g) => g.id === requestedActiveGroupId\n )\n ? requestedActiveGroupId\n : (filteredGroups[0]?.id ?? \"\");\n\n const activeGroup = filteredGroups.find(\n (g) => g.id === resolvedActiveGroupId\n );\n\n const visibleItems = useMemo(() => activeGroup?.items ?? [], [activeGroup]);\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n\n const handleActiveChange = useCallback(\n (groupId: string) => {\n if (!isActiveControlled) {\n setFallbackActive(groupId);\n }\n onActiveGroupChange?.(groupId);\n },\n [isActiveControlled, onActiveGroupChange]\n );\n\n const selectableVisibleItems = useMemo(\n () => visibleItems.filter((it) => !it.disabled),\n [visibleItems]\n );\n\n const selectedInVisible = useMemo(\n () => selectableVisibleItems.filter((it) => selectedSet.has(it.id)),\n [selectableVisibleItems, selectedSet]\n );\n\n const allVisibleSelected =\n selectableVisibleItems.length > 0 &&\n selectedInVisible.length === selectableVisibleItems.length;\n\n const toggleItem = useCallback(\n (itemId: string, checked: boolean) => {\n if (checked) {\n if (selectedSet.has(itemId)) return;\n onChange([...value, itemId]);\n return;\n }\n onChange(value.filter((id) => id !== itemId));\n },\n [onChange, selectedSet, value]\n );\n\n const handleSelectAllVisible = useCallback(() => {\n const next = new Set(value);\n for (const { id } of selectableVisibleItems) {\n next.add(id);\n }\n onChange([...next]);\n }, [onChange, selectableVisibleItems, value]);\n\n const handleUnselectAllVisible = useCallback(() => {\n const visibleIds = new Set(selectableVisibleItems.map((it) => it.id));\n onChange(value.filter((id) => !visibleIds.has(id)));\n }, [onChange, selectableVisibleItems, value]);\n\n const countSelectedInGroup = useCallback(\n (g: GroupSelectGroup) =>\n g.items.filter((it) => selectedSet.has(it.id)).length,\n [selectedSet]\n );\n\n const getSelectableIdsInGroup = useCallback((g: GroupSelectGroup) => {\n return g.items.filter((it) => !it.disabled).map((it) => it.id);\n }, []);\n\n const handleGroupCheckboxChange = useCallback(\n (g: GroupSelectGroup, nextChecked: boolean) => {\n const selectableIds = getSelectableIdsInGroup(g);\n if (selectableIds.length === 0) return;\n if (nextChecked) {\n const next = new Set(value);\n for (const id of selectableIds) {\n next.add(id);\n }\n onChange([...next]);\n return;\n }\n const remove = new Set(selectableIds);\n onChange(value.filter((id) => !remove.has(id)));\n },\n [getSelectableIdsInGroup, onChange, value]\n );\n\n const handleCategoryActivatorKeyDown = useCallback(\n (groupId: string, e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleActiveChange(groupId);\n }\n },\n [handleActiveChange]\n );\n\n const showEmpty = filteredGroups.length === 0;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={showEmpty ? 24 : 8}\n padding={8}\n backgroundColor={theme.colors.layer.float}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n role=\"region\"\n aria-label={ariaLabel}\n style={{\n width: \"100%\",\n minWidth: GROUP_SELECT_MIN_PANEL_WIDTH,\n boxSizing: \"border-box\",\n boxShadow: theme.shadow.popover,\n ...(isWeb\n ? {\n backdropFilter: \"blur(16px)\",\n }\n : {}),\n }}\n testID={testID || \"group-select\"}\n >\n {/* Search */}\n <Box\n flexDirection=\"column\"\n gap={6}\n paddingHorizontal={10}\n paddingVertical={7}\n role=\"search\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={8}>\n {isWeb ? (\n <Box aria-hidden>\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n </Box>\n ) : (\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n )}\n <Box flex={1} justifyContent=\"center\">\n <InputPrimitive\n value={search}\n placeholder={searchPlaceholder}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setSearch(e.target.value)\n }\n onChangeText={setSearch}\n color={\n search ? theme.colors.content.primary : inputColors.placeholder\n }\n fontSize={sizeStyles.fontSize}\n fontFamily={theme.fonts.body}\n placeholderTextColor={inputColors.placeholder}\n style={\n isWeb\n ? {\n lineHeight: \"16px\",\n }\n : undefined\n }\n aria-label={searchPlaceholder}\n data-testid=\"group-select__search\"\n />\n </Box>\n </Box>\n <Box\n height={1}\n backgroundColor={theme.colors.border.secondary}\n style={\n isWeb\n ? {\n opacity: 0.6,\n }\n : undefined\n }\n />\n </Box>\n\n {showEmpty ? (\n <Box\n paddingBottom={32}\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Text\n color={theme.colors.content.primary}\n fontSize={sizeStyles.fontSize}\n style={{\n lineHeight: \"18px\",\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {emptyMessage}\n </Text>\n </Box>\n ) : (\n <Box flexDirection=\"row\" gap={8} alignItems=\"flex-start\" width=\"100%\">\n {/* Left: groups */}\n <Box\n width={leftColumnWidth}\n flexShrink={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n overflow=\"hidden\"\n role=\"list\"\n aria-label=\"Categories\"\n >\n <Box\n style={{\n maxHeight: listMaxHeight,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {filteredGroups.map((g) => {\n const isActive = g.id === resolvedActiveGroupId;\n const selectedCount = countSelectedInGroup(g);\n const total = g.items.length;\n const summary = `${selectedCount}/${total}`;\n const selectableIds = getSelectableIdsInGroup(g);\n const selectedSelectable = selectableIds.filter((id) =>\n selectedSet.has(id)\n ).length;\n const groupAllSelected =\n selectableIds.length > 0 &&\n selectedSelectable === selectableIds.length;\n const groupIndeterminate =\n selectedSelectable > 0 && !groupAllSelected;\n const groupCheckboxDisabled = selectableIds.length === 0;\n const categoryShowLabel = `Show ${g.label} items`;\n\n return (\n <Box\n key={g.id}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={10}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n backgroundColor={\n isActive\n ? theme.colors.background.brand.secondary\n : \"transparent\"\n }\n hoverStyle={\n !isActive\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n role=\"listitem\"\n aria-current={isActive ? \"true\" : undefined}\n data-testid={`group-select__group-${g.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={groupAllSelected}\n indeterminate={groupIndeterminate}\n disabled={groupCheckboxDisabled}\n onChange={(e) =>\n handleGroupCheckboxChange(g, e.target.checked)\n }\n aria-label={`${g.label}, ${summary} selected`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n <Box\n flex={1}\n minWidth={0}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={8}\n onPress={() => handleActiveChange(g.id)}\n style={\n isWeb\n ? {\n cursor: \"pointer\" as const,\n }\n : undefined\n }\n {...(isWeb\n ? {\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": categoryShowLabel,\n onKeyDown: (e: React.KeyboardEvent) =>\n handleCategoryActivatorKeyDown(g.id, e),\n }\n : {\n accessibilityRole: \"button\",\n accessibilityLabel: categoryShowLabel,\n })}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {g.label}\n </Text>\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n textAlign: \"right\",\n }}\n >\n {summary}\n </Text>\n </Box>\n </Box>\n );\n })}\n </Box>\n </Box>\n\n {/* Right: items */}\n <Box\n flex={1}\n minWidth={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n backgroundColor={theme.colors.overlay.mono}\n overflow=\"hidden\"\n role=\"region\"\n aria-label={activeGroup ? `${activeGroup.label} items` : \"Items\"}\n >\n {/* Summary row */}\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={12}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n borderBottomWidth={1}\n borderBottomColor={theme.colors.border.secondary}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {`${selectedInVisible.length}/${visibleItems.length}`}\n </Text>\n <Box\n as={isWeb ? \"button\" : undefined}\n type={isWeb ? \"button\" : undefined}\n disabled={visibleItems.length === 0}\n onPress={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? handleUnselectAllVisible\n : handleSelectAllVisible\n }\n backgroundColor=\"transparent\"\n borderWidth={0}\n padding={0}\n aria-label={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n }\n {...(!isWeb && visibleItems.length > 0\n ? {\n accessibilityRole: \"button\" as const,\n accessibilityLabel: allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`,\n }\n : {})}\n style={\n isWeb\n ? {\n cursor:\n visibleItems.length === 0 ? \"default\" : \"pointer\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.content.brand.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {allVisibleSelected ? unselectAllLabel : selectAllLabel}\n </Text>\n </Box>\n </Box>\n\n <Box\n style={{\n maxHeight: listMaxHeight - RIGHT_HEADER_SCROLL_OFFSET,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {visibleItems.map((item) => (\n <Box\n key={item.id}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n flexDirection=\"row\"\n alignItems=\"center\"\n backgroundColor=\"transparent\"\n hoverStyle={\n !item.disabled\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n style={{\n ...(isWeb\n ? {\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }\n : {}),\n opacity: item.disabled ? 0.5 : 1,\n }}\n data-testid={`group-select__item-${item.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={selectedSet.has(item.id)}\n disabled={item.disabled}\n onChange={(e) => toggleItem(item.id, e.target.checked)}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n >\n {item.label}\n </Checkbox>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n );\n};\n\nGroupSelect.displayName = \"GroupSelect\";\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\n/**\n * Yoga has no inline formatting context, so RN's ViewStyle.display only\n * accepts \"flex\" | \"none\". Every inline-ish web value collapses to a plain\n * flex container — the box already fills only its content on native, which is\n * what those callers wanted on web anyway. Returning undefined (rather than\n * \"flex\") leaves RN's own default in place.\n */\nconst toNativeDisplay = (\n display: BoxProps[\"display\"]\n): ViewStyle[\"display\"] => (display === \"none\" ? \"none\" : undefined);\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 display,\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 display: toNativeDisplay(display),\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","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","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"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","React","import_react","import_react_native","import_jsx_runtime","RNTextInput","import_jsx_runtime","SearchIcon"]}
package/native/index.mjs CHANGED
@@ -40,6 +40,7 @@ var toGapValue = (gap) => {
40
40
  const asNumber = Number(gap);
41
41
  return Number.isFinite(asNumber) ? asNumber : void 0;
42
42
  };
43
+ var toNativeDisplay = (display) => display === "none" ? "none" : void 0;
43
44
  var Box = ({
44
45
  children,
45
46
  onPress,
@@ -71,6 +72,7 @@ var Box = ({
71
72
  marginBottom,
72
73
  marginLeft,
73
74
  marginRight,
75
+ display,
74
76
  flexDirection,
75
77
  flexWrap,
76
78
  alignItems,
@@ -134,6 +136,7 @@ var Box = ({
134
136
  marginBottom,
135
137
  marginLeft,
136
138
  marginRight,
139
+ display: toNativeDisplay(display),
137
140
  flexDirection,
138
141
  flexWrap,
139
142
  alignItems,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/GroupSelect.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","../../../../foundation/primitives-native/src/index.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\n// @ts-expect-error resolved at build time to web/native primitives\nimport { Box, Icon, InputPrimitive, Text, isWeb } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Search as SearchIcon } from \"@xsolla/xui-icons-base\";\nimport { Checkbox } from \"@xsolla/xui-checkbox\";\nimport type { GroupSelectGroup, GroupSelectProps } from \"./types\";\n\n/** Default `minWidth` of the panel root; keep in sync with MultiSelect external-field default. */\nexport const GROUP_SELECT_MIN_PANEL_WIDTH = 540;\n\nconst LEFT_COL_WIDTH = 280;\nconst LIST_MAX_HEIGHT = 308;\n/** Right panel header (counter + select all); padding 14×2 + ~18px text */\nconst RIGHT_HEADER_SCROLL_OFFSET = 48;\n\nconst normalize = (s: string) => s.trim().toLowerCase();\n\nfunction filterGroups(\n groups: GroupSelectGroup[],\n query: string\n): GroupSelectGroup[] {\n const q = normalize(query);\n if (!q) return groups;\n\n return groups\n .map((g) => {\n const groupMatches = normalize(g.label).includes(q);\n const items = groupMatches\n ? g.items\n : g.items.filter((it) => normalize(it.label).includes(q));\n return { ...g, items };\n })\n .filter((g) => g.items.length > 0);\n}\n\nexport const GroupSelect: React.FC<GroupSelectProps> = ({\n ariaLabel = \"Grouped selection\",\n groups,\n value,\n onChange,\n activeGroupId: activeGroupIdProp,\n onActiveGroupChange,\n searchPlaceholder = \"Search\",\n emptyMessage = \"No results found\",\n leftColumnWidth = LEFT_COL_WIDTH,\n listMaxHeight = LIST_MAX_HEIGHT,\n selectAllLabel = \"Select all\",\n unselectAllLabel = \"Unselect all\",\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.input(\"sm\");\n const inputColors = theme.colors.control.input;\n\n const [search, setSearch] = useState(\"\");\n const [fallbackActive, setFallbackActive] = useState(\n () => groups[0]?.id ?? \"\"\n );\n\n const filteredGroups = useMemo(\n () => filterGroups(groups, search),\n [groups, search]\n );\n\n const isActiveControlled = activeGroupIdProp !== undefined;\n\n useEffect(() => {\n if (!groups.length) return;\n if (isActiveControlled) return;\n setFallbackActive((prev) => {\n const stillValid = filteredGroups.some((g) => g.id === prev);\n if (stillValid) return prev;\n return filteredGroups[0]?.id ?? \"\";\n });\n }, [filteredGroups, groups.length, isActiveControlled]);\n\n const requestedActiveGroupId = isActiveControlled\n ? (activeGroupIdProp ?? \"\")\n : fallbackActive;\n\n const resolvedActiveGroupId = filteredGroups.some(\n (g) => g.id === requestedActiveGroupId\n )\n ? requestedActiveGroupId\n : (filteredGroups[0]?.id ?? \"\");\n\n const activeGroup = filteredGroups.find(\n (g) => g.id === resolvedActiveGroupId\n );\n\n const visibleItems = useMemo(() => activeGroup?.items ?? [], [activeGroup]);\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n\n const handleActiveChange = useCallback(\n (groupId: string) => {\n if (!isActiveControlled) {\n setFallbackActive(groupId);\n }\n onActiveGroupChange?.(groupId);\n },\n [isActiveControlled, onActiveGroupChange]\n );\n\n const selectableVisibleItems = useMemo(\n () => visibleItems.filter((it) => !it.disabled),\n [visibleItems]\n );\n\n const selectedInVisible = useMemo(\n () => selectableVisibleItems.filter((it) => selectedSet.has(it.id)),\n [selectableVisibleItems, selectedSet]\n );\n\n const allVisibleSelected =\n selectableVisibleItems.length > 0 &&\n selectedInVisible.length === selectableVisibleItems.length;\n\n const toggleItem = useCallback(\n (itemId: string, checked: boolean) => {\n if (checked) {\n if (selectedSet.has(itemId)) return;\n onChange([...value, itemId]);\n return;\n }\n onChange(value.filter((id) => id !== itemId));\n },\n [onChange, selectedSet, value]\n );\n\n const handleSelectAllVisible = useCallback(() => {\n const next = new Set(value);\n for (const { id } of selectableVisibleItems) {\n next.add(id);\n }\n onChange([...next]);\n }, [onChange, selectableVisibleItems, value]);\n\n const handleUnselectAllVisible = useCallback(() => {\n const visibleIds = new Set(selectableVisibleItems.map((it) => it.id));\n onChange(value.filter((id) => !visibleIds.has(id)));\n }, [onChange, selectableVisibleItems, value]);\n\n const countSelectedInGroup = useCallback(\n (g: GroupSelectGroup) =>\n g.items.filter((it) => selectedSet.has(it.id)).length,\n [selectedSet]\n );\n\n const getSelectableIdsInGroup = useCallback((g: GroupSelectGroup) => {\n return g.items.filter((it) => !it.disabled).map((it) => it.id);\n }, []);\n\n const handleGroupCheckboxChange = useCallback(\n (g: GroupSelectGroup, nextChecked: boolean) => {\n const selectableIds = getSelectableIdsInGroup(g);\n if (selectableIds.length === 0) return;\n if (nextChecked) {\n const next = new Set(value);\n for (const id of selectableIds) {\n next.add(id);\n }\n onChange([...next]);\n return;\n }\n const remove = new Set(selectableIds);\n onChange(value.filter((id) => !remove.has(id)));\n },\n [getSelectableIdsInGroup, onChange, value]\n );\n\n const handleCategoryActivatorKeyDown = useCallback(\n (groupId: string, e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleActiveChange(groupId);\n }\n },\n [handleActiveChange]\n );\n\n const showEmpty = filteredGroups.length === 0;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={showEmpty ? 24 : 8}\n padding={8}\n backgroundColor={theme.colors.layer.float}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n role=\"region\"\n aria-label={ariaLabel}\n style={{\n width: \"100%\",\n minWidth: GROUP_SELECT_MIN_PANEL_WIDTH,\n boxSizing: \"border-box\",\n boxShadow: theme.shadow.popover,\n ...(isWeb\n ? {\n backdropFilter: \"blur(16px)\",\n }\n : {}),\n }}\n testID={testID || \"group-select\"}\n >\n {/* Search */}\n <Box\n flexDirection=\"column\"\n gap={6}\n paddingHorizontal={10}\n paddingVertical={7}\n role=\"search\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={8}>\n {isWeb ? (\n <Box aria-hidden>\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n </Box>\n ) : (\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n )}\n <Box flex={1} justifyContent=\"center\">\n <InputPrimitive\n value={search}\n placeholder={searchPlaceholder}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setSearch(e.target.value)\n }\n onChangeText={setSearch}\n color={\n search ? theme.colors.content.primary : inputColors.placeholder\n }\n fontSize={sizeStyles.fontSize}\n fontFamily={theme.fonts.body}\n placeholderTextColor={inputColors.placeholder}\n style={\n isWeb\n ? {\n lineHeight: \"16px\",\n }\n : undefined\n }\n aria-label={searchPlaceholder}\n data-testid=\"group-select__search\"\n />\n </Box>\n </Box>\n <Box\n height={1}\n backgroundColor={theme.colors.border.secondary}\n style={\n isWeb\n ? {\n opacity: 0.6,\n }\n : undefined\n }\n />\n </Box>\n\n {showEmpty ? (\n <Box\n paddingBottom={32}\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Text\n color={theme.colors.content.primary}\n fontSize={sizeStyles.fontSize}\n style={{\n lineHeight: \"18px\",\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {emptyMessage}\n </Text>\n </Box>\n ) : (\n <Box flexDirection=\"row\" gap={8} alignItems=\"flex-start\" width=\"100%\">\n {/* Left: groups */}\n <Box\n width={leftColumnWidth}\n flexShrink={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n overflow=\"hidden\"\n role=\"list\"\n aria-label=\"Categories\"\n >\n <Box\n style={{\n maxHeight: listMaxHeight,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {filteredGroups.map((g) => {\n const isActive = g.id === resolvedActiveGroupId;\n const selectedCount = countSelectedInGroup(g);\n const total = g.items.length;\n const summary = `${selectedCount}/${total}`;\n const selectableIds = getSelectableIdsInGroup(g);\n const selectedSelectable = selectableIds.filter((id) =>\n selectedSet.has(id)\n ).length;\n const groupAllSelected =\n selectableIds.length > 0 &&\n selectedSelectable === selectableIds.length;\n const groupIndeterminate =\n selectedSelectable > 0 && !groupAllSelected;\n const groupCheckboxDisabled = selectableIds.length === 0;\n const categoryShowLabel = `Show ${g.label} items`;\n\n return (\n <Box\n key={g.id}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={10}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n backgroundColor={\n isActive\n ? theme.colors.background.brand.secondary\n : \"transparent\"\n }\n hoverStyle={\n !isActive\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n role=\"listitem\"\n aria-current={isActive ? \"true\" : undefined}\n data-testid={`group-select__group-${g.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={groupAllSelected}\n indeterminate={groupIndeterminate}\n disabled={groupCheckboxDisabled}\n onChange={(e) =>\n handleGroupCheckboxChange(g, e.target.checked)\n }\n aria-label={`${g.label}, ${summary} selected`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n <Box\n flex={1}\n minWidth={0}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={8}\n onPress={() => handleActiveChange(g.id)}\n style={\n isWeb\n ? {\n cursor: \"pointer\" as const,\n }\n : undefined\n }\n {...(isWeb\n ? {\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": categoryShowLabel,\n onKeyDown: (e: React.KeyboardEvent) =>\n handleCategoryActivatorKeyDown(g.id, e),\n }\n : {\n accessibilityRole: \"button\",\n accessibilityLabel: categoryShowLabel,\n })}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {g.label}\n </Text>\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n textAlign: \"right\",\n }}\n >\n {summary}\n </Text>\n </Box>\n </Box>\n );\n })}\n </Box>\n </Box>\n\n {/* Right: items */}\n <Box\n flex={1}\n minWidth={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n backgroundColor={theme.colors.overlay.mono}\n overflow=\"hidden\"\n role=\"region\"\n aria-label={activeGroup ? `${activeGroup.label} items` : \"Items\"}\n >\n {/* Summary row */}\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={12}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n borderBottomWidth={1}\n borderBottomColor={theme.colors.border.secondary}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {`${selectedInVisible.length}/${visibleItems.length}`}\n </Text>\n <Box\n as={isWeb ? \"button\" : undefined}\n type={isWeb ? \"button\" : undefined}\n disabled={visibleItems.length === 0}\n onPress={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? handleUnselectAllVisible\n : handleSelectAllVisible\n }\n backgroundColor=\"transparent\"\n borderWidth={0}\n padding={0}\n aria-label={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n }\n {...(!isWeb && visibleItems.length > 0\n ? {\n accessibilityRole: \"button\" as const,\n accessibilityLabel: allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`,\n }\n : {})}\n style={\n isWeb\n ? {\n cursor:\n visibleItems.length === 0 ? \"default\" : \"pointer\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.content.brand.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {allVisibleSelected ? unselectAllLabel : selectAllLabel}\n </Text>\n </Box>\n </Box>\n\n <Box\n style={{\n maxHeight: listMaxHeight - RIGHT_HEADER_SCROLL_OFFSET,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {visibleItems.map((item) => (\n <Box\n key={item.id}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n flexDirection=\"row\"\n alignItems=\"center\"\n backgroundColor=\"transparent\"\n hoverStyle={\n !item.disabled\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n style={{\n ...(isWeb\n ? {\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }\n : {}),\n opacity: item.disabled ? 0.5 : 1,\n }}\n data-testid={`group-select__item-${item.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={selectedSet.has(item.id)}\n disabled={item.disabled}\n onChange={(e) => toggleItem(item.id, e.target.checked)}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n >\n {item.label}\n </Checkbox>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n );\n};\n\nGroupSelect.displayName = \"GroupSelect\";\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","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","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"],"mappings":"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","names":["jsx","View","jsx","jsx","jsx"]}
1
+ {"version":3,"sources":["../../src/GroupSelect.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","../../../../foundation/primitives-native/src/index.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from \"react\";\n// @ts-expect-error resolved at build time to web/native primitives\nimport { Box, Icon, InputPrimitive, Text, isWeb } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Search as SearchIcon } from \"@xsolla/xui-icons-base\";\nimport { Checkbox } from \"@xsolla/xui-checkbox\";\nimport type { GroupSelectGroup, GroupSelectProps } from \"./types\";\n\n/** Default `minWidth` of the panel root; keep in sync with MultiSelect external-field default. */\nexport const GROUP_SELECT_MIN_PANEL_WIDTH = 540;\n\nconst LEFT_COL_WIDTH = 280;\nconst LIST_MAX_HEIGHT = 308;\n/** Right panel header (counter + select all); padding 14×2 + ~18px text */\nconst RIGHT_HEADER_SCROLL_OFFSET = 48;\n\nconst normalize = (s: string) => s.trim().toLowerCase();\n\nfunction filterGroups(\n groups: GroupSelectGroup[],\n query: string\n): GroupSelectGroup[] {\n const q = normalize(query);\n if (!q) return groups;\n\n return groups\n .map((g) => {\n const groupMatches = normalize(g.label).includes(q);\n const items = groupMatches\n ? g.items\n : g.items.filter((it) => normalize(it.label).includes(q));\n return { ...g, items };\n })\n .filter((g) => g.items.length > 0);\n}\n\nexport const GroupSelect: React.FC<GroupSelectProps> = ({\n ariaLabel = \"Grouped selection\",\n groups,\n value,\n onChange,\n activeGroupId: activeGroupIdProp,\n onActiveGroupChange,\n searchPlaceholder = \"Search\",\n emptyMessage = \"No results found\",\n leftColumnWidth = LEFT_COL_WIDTH,\n listMaxHeight = LIST_MAX_HEIGHT,\n selectAllLabel = \"Select all\",\n unselectAllLabel = \"Unselect all\",\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizeStyles = theme.sizing.input(\"sm\");\n const inputColors = theme.colors.control.input;\n\n const [search, setSearch] = useState(\"\");\n const [fallbackActive, setFallbackActive] = useState(\n () => groups[0]?.id ?? \"\"\n );\n\n const filteredGroups = useMemo(\n () => filterGroups(groups, search),\n [groups, search]\n );\n\n const isActiveControlled = activeGroupIdProp !== undefined;\n\n useEffect(() => {\n if (!groups.length) return;\n if (isActiveControlled) return;\n setFallbackActive((prev) => {\n const stillValid = filteredGroups.some((g) => g.id === prev);\n if (stillValid) return prev;\n return filteredGroups[0]?.id ?? \"\";\n });\n }, [filteredGroups, groups.length, isActiveControlled]);\n\n const requestedActiveGroupId = isActiveControlled\n ? (activeGroupIdProp ?? \"\")\n : fallbackActive;\n\n const resolvedActiveGroupId = filteredGroups.some(\n (g) => g.id === requestedActiveGroupId\n )\n ? requestedActiveGroupId\n : (filteredGroups[0]?.id ?? \"\");\n\n const activeGroup = filteredGroups.find(\n (g) => g.id === resolvedActiveGroupId\n );\n\n const visibleItems = useMemo(() => activeGroup?.items ?? [], [activeGroup]);\n\n const selectedSet = useMemo(() => new Set(value), [value]);\n\n const handleActiveChange = useCallback(\n (groupId: string) => {\n if (!isActiveControlled) {\n setFallbackActive(groupId);\n }\n onActiveGroupChange?.(groupId);\n },\n [isActiveControlled, onActiveGroupChange]\n );\n\n const selectableVisibleItems = useMemo(\n () => visibleItems.filter((it) => !it.disabled),\n [visibleItems]\n );\n\n const selectedInVisible = useMemo(\n () => selectableVisibleItems.filter((it) => selectedSet.has(it.id)),\n [selectableVisibleItems, selectedSet]\n );\n\n const allVisibleSelected =\n selectableVisibleItems.length > 0 &&\n selectedInVisible.length === selectableVisibleItems.length;\n\n const toggleItem = useCallback(\n (itemId: string, checked: boolean) => {\n if (checked) {\n if (selectedSet.has(itemId)) return;\n onChange([...value, itemId]);\n return;\n }\n onChange(value.filter((id) => id !== itemId));\n },\n [onChange, selectedSet, value]\n );\n\n const handleSelectAllVisible = useCallback(() => {\n const next = new Set(value);\n for (const { id } of selectableVisibleItems) {\n next.add(id);\n }\n onChange([...next]);\n }, [onChange, selectableVisibleItems, value]);\n\n const handleUnselectAllVisible = useCallback(() => {\n const visibleIds = new Set(selectableVisibleItems.map((it) => it.id));\n onChange(value.filter((id) => !visibleIds.has(id)));\n }, [onChange, selectableVisibleItems, value]);\n\n const countSelectedInGroup = useCallback(\n (g: GroupSelectGroup) =>\n g.items.filter((it) => selectedSet.has(it.id)).length,\n [selectedSet]\n );\n\n const getSelectableIdsInGroup = useCallback((g: GroupSelectGroup) => {\n return g.items.filter((it) => !it.disabled).map((it) => it.id);\n }, []);\n\n const handleGroupCheckboxChange = useCallback(\n (g: GroupSelectGroup, nextChecked: boolean) => {\n const selectableIds = getSelectableIdsInGroup(g);\n if (selectableIds.length === 0) return;\n if (nextChecked) {\n const next = new Set(value);\n for (const id of selectableIds) {\n next.add(id);\n }\n onChange([...next]);\n return;\n }\n const remove = new Set(selectableIds);\n onChange(value.filter((id) => !remove.has(id)));\n },\n [getSelectableIdsInGroup, onChange, value]\n );\n\n const handleCategoryActivatorKeyDown = useCallback(\n (groupId: string, e: React.KeyboardEvent) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleActiveChange(groupId);\n }\n },\n [handleActiveChange]\n );\n\n const showEmpty = filteredGroups.length === 0;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={showEmpty ? 24 : 8}\n padding={8}\n backgroundColor={theme.colors.layer.float}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n role=\"region\"\n aria-label={ariaLabel}\n style={{\n width: \"100%\",\n minWidth: GROUP_SELECT_MIN_PANEL_WIDTH,\n boxSizing: \"border-box\",\n boxShadow: theme.shadow.popover,\n ...(isWeb\n ? {\n backdropFilter: \"blur(16px)\",\n }\n : {}),\n }}\n testID={testID || \"group-select\"}\n >\n {/* Search */}\n <Box\n flexDirection=\"column\"\n gap={6}\n paddingHorizontal={10}\n paddingVertical={7}\n role=\"search\"\n >\n <Box flexDirection=\"row\" alignItems=\"center\" gap={8}>\n {isWeb ? (\n <Box aria-hidden>\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n </Box>\n ) : (\n <Icon size={18} color={inputColors.placeholder}>\n <SearchIcon />\n </Icon>\n )}\n <Box flex={1} justifyContent=\"center\">\n <InputPrimitive\n value={search}\n placeholder={searchPlaceholder}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n setSearch(e.target.value)\n }\n onChangeText={setSearch}\n color={\n search ? theme.colors.content.primary : inputColors.placeholder\n }\n fontSize={sizeStyles.fontSize}\n fontFamily={theme.fonts.body}\n placeholderTextColor={inputColors.placeholder}\n style={\n isWeb\n ? {\n lineHeight: \"16px\",\n }\n : undefined\n }\n aria-label={searchPlaceholder}\n data-testid=\"group-select__search\"\n />\n </Box>\n </Box>\n <Box\n height={1}\n backgroundColor={theme.colors.border.secondary}\n style={\n isWeb\n ? {\n opacity: 0.6,\n }\n : undefined\n }\n />\n </Box>\n\n {showEmpty ? (\n <Box\n paddingBottom={32}\n alignItems=\"center\"\n justifyContent=\"center\"\n width=\"100%\"\n role=\"status\"\n aria-live=\"polite\"\n >\n <Text\n color={theme.colors.content.primary}\n fontSize={sizeStyles.fontSize}\n style={{\n lineHeight: \"18px\",\n textAlign: \"center\",\n width: \"100%\",\n }}\n >\n {emptyMessage}\n </Text>\n </Box>\n ) : (\n <Box flexDirection=\"row\" gap={8} alignItems=\"flex-start\" width=\"100%\">\n {/* Left: groups */}\n <Box\n width={leftColumnWidth}\n flexShrink={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n overflow=\"hidden\"\n role=\"list\"\n aria-label=\"Categories\"\n >\n <Box\n style={{\n maxHeight: listMaxHeight,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {filteredGroups.map((g) => {\n const isActive = g.id === resolvedActiveGroupId;\n const selectedCount = countSelectedInGroup(g);\n const total = g.items.length;\n const summary = `${selectedCount}/${total}`;\n const selectableIds = getSelectableIdsInGroup(g);\n const selectedSelectable = selectableIds.filter((id) =>\n selectedSet.has(id)\n ).length;\n const groupAllSelected =\n selectableIds.length > 0 &&\n selectedSelectable === selectableIds.length;\n const groupIndeterminate =\n selectedSelectable > 0 && !groupAllSelected;\n const groupCheckboxDisabled = selectableIds.length === 0;\n const categoryShowLabel = `Show ${g.label} items`;\n\n return (\n <Box\n key={g.id}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={10}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n backgroundColor={\n isActive\n ? theme.colors.background.brand.secondary\n : \"transparent\"\n }\n hoverStyle={\n !isActive\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n role=\"listitem\"\n aria-current={isActive ? \"true\" : undefined}\n data-testid={`group-select__group-${g.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={groupAllSelected}\n indeterminate={groupIndeterminate}\n disabled={groupCheckboxDisabled}\n onChange={(e) =>\n handleGroupCheckboxChange(g, e.target.checked)\n }\n aria-label={`${g.label}, ${summary} selected`}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n />\n <Box\n flex={1}\n minWidth={0}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={8}\n onPress={() => handleActiveChange(g.id)}\n style={\n isWeb\n ? {\n cursor: \"pointer\" as const,\n }\n : undefined\n }\n {...(isWeb\n ? {\n role: \"button\",\n tabIndex: 0,\n \"aria-label\": categoryShowLabel,\n onKeyDown: (e: React.KeyboardEvent) =>\n handleCategoryActivatorKeyDown(g.id, e),\n }\n : {\n accessibilityRole: \"button\",\n accessibilityLabel: categoryShowLabel,\n })}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {g.label}\n </Text>\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n aria-hidden={isWeb ? true : undefined}\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n textAlign: \"right\",\n }}\n >\n {summary}\n </Text>\n </Box>\n </Box>\n );\n })}\n </Box>\n </Box>\n\n {/* Right: items */}\n <Box\n flex={1}\n minWidth={0}\n borderColor={theme.colors.border.secondary}\n borderWidth={1}\n borderRadius={theme.shape.contextMenu.sm.borderRadius}\n backgroundColor={theme.colors.overlay.mono}\n overflow=\"hidden\"\n role=\"region\"\n aria-label={activeGroup ? `${activeGroup.label} items` : \"Items\"}\n >\n {/* Summary row */}\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gap={12}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n borderBottomWidth={1}\n borderBottomColor={theme.colors.border.secondary}\n >\n <Text\n color={theme.colors.control.text.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {`${selectedInVisible.length}/${visibleItems.length}`}\n </Text>\n <Box\n as={isWeb ? \"button\" : undefined}\n type={isWeb ? \"button\" : undefined}\n disabled={visibleItems.length === 0}\n onPress={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? handleUnselectAllVisible\n : handleSelectAllVisible\n }\n backgroundColor=\"transparent\"\n borderWidth={0}\n padding={0}\n aria-label={\n visibleItems.length === 0\n ? undefined\n : allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n }\n {...(!isWeb && visibleItems.length > 0\n ? {\n accessibilityRole: \"button\" as const,\n accessibilityLabel: allVisibleSelected\n ? `${unselectAllLabel} for ${activeGroup?.label ?? \"category\"}`\n : `${selectAllLabel} for ${activeGroup?.label ?? \"category\"}`,\n }\n : {})}\n style={\n isWeb\n ? {\n cursor:\n visibleItems.length === 0 ? \"default\" : \"pointer\",\n }\n : undefined\n }\n >\n <Text\n color={theme.colors.content.brand.primary}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n style={{\n lineHeight: `${sizeStyles.lineHeight + 4}px`,\n }}\n >\n {allVisibleSelected ? unselectAllLabel : selectAllLabel}\n </Text>\n </Box>\n </Box>\n\n <Box\n style={{\n maxHeight: listMaxHeight - RIGHT_HEADER_SCROLL_OFFSET,\n ...(isWeb ? { overflowY: \"auto\" as const } : {}),\n }}\n >\n {visibleItems.map((item) => (\n <Box\n key={item.id}\n paddingHorizontal={14}\n paddingVertical={14}\n minHeight={40}\n flexDirection=\"row\"\n alignItems=\"center\"\n backgroundColor=\"transparent\"\n hoverStyle={\n !item.disabled\n ? {\n backgroundColor: theme.colors.control.input.bgHover,\n }\n : undefined\n }\n style={{\n ...(isWeb\n ? {\n cursor: item.disabled ? \"not-allowed\" : \"pointer\",\n }\n : {}),\n opacity: item.disabled ? 0.5 : 1,\n }}\n data-testid={`group-select__item-${item.id}`}\n >\n <Checkbox\n size=\"sm\"\n checked={selectedSet.has(item.id)}\n disabled={item.disabled}\n onChange={(e) => toggleItem(item.id, e.target.checked)}\n themeMode={themeMode}\n themeProductContext={themeProductContext}\n >\n {item.label}\n </Checkbox>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n );\n};\n\nGroupSelect.displayName = \"GroupSelect\";\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\n/**\n * Yoga has no inline formatting context, so RN's ViewStyle.display only\n * accepts \"flex\" | \"none\". Every inline-ish web value collapses to a plain\n * flex container — the box already fills only its content on native, which is\n * what those callers wanted on web anyway. Returning undefined (rather than\n * \"flex\") leaves RN's own default in place.\n */\nconst toNativeDisplay = (\n display: BoxProps[\"display\"]\n): ViewStyle[\"display\"] => (display === \"none\" ? \"none\" : undefined);\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 display,\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 display: toNativeDisplay(display),\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","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","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"],"mappings":"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","names":["jsx","View","jsx","jsx","jsx"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-b2b-group-select",
3
- "version": "0.218.1",
3
+ "version": "0.219.0",
4
4
  "main": "./web/index.js",
5
5
  "module": "./web/index.mjs",
6
6
  "types": "./web/index.d.ts",
@@ -13,10 +13,10 @@
13
13
  "test:coverage": "vitest run --coverage"
14
14
  },
15
15
  "dependencies": {
16
- "@xsolla/xui-checkbox": "0.218.1",
17
- "@xsolla/xui-core": "0.218.1",
18
- "@xsolla/xui-icons-base": "0.218.1",
19
- "@xsolla/xui-primitives-core": "0.218.1"
16
+ "@xsolla/xui-checkbox": "0.219.0",
17
+ "@xsolla/xui-core": "0.219.0",
18
+ "@xsolla/xui-icons-base": "0.219.0",
19
+ "@xsolla/xui-primitives-core": "0.219.0"
20
20
  },
21
21
  "peerDependencies": {
22
22
  "react": ">=16.8.0",