@xsolla/xui-b2b-group-select 0.160.2 → 0.161.1
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 +3 -3
- package/native/index.js.map +1 -1
- package/native/index.mjs +3 -3
- package/native/index.mjs.map +1 -1
- package/package.json +5 -5
- package/web/index.js +3 -3
- package/web/index.js.map +1 -1
- package/web/index.mjs +3 -3
- package/web/index.mjs.map +1 -1
package/native/index.js
CHANGED
|
@@ -587,7 +587,7 @@ var GroupSelect = ({
|
|
|
587
587
|
gap: showEmpty ? 24 : 8,
|
|
588
588
|
padding: 8,
|
|
589
589
|
backgroundColor: theme.colors.layer.float,
|
|
590
|
-
borderRadius: theme.
|
|
590
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
591
591
|
role: "region",
|
|
592
592
|
"aria-label": ariaLabel,
|
|
593
593
|
style: {
|
|
@@ -675,7 +675,7 @@ var GroupSelect = ({
|
|
|
675
675
|
flexShrink: 0,
|
|
676
676
|
borderColor: theme.colors.border.secondary,
|
|
677
677
|
borderWidth: 1,
|
|
678
|
-
borderRadius: theme.
|
|
678
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
679
679
|
overflow: "hidden",
|
|
680
680
|
role: "list",
|
|
681
681
|
"aria-label": "Categories",
|
|
@@ -798,7 +798,7 @@ var GroupSelect = ({
|
|
|
798
798
|
minWidth: 0,
|
|
799
799
|
borderColor: theme.colors.border.secondary,
|
|
800
800
|
borderWidth: 1,
|
|
801
|
-
borderRadius: theme.
|
|
801
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
802
802
|
backgroundColor: theme.colors.overlay.mono,
|
|
803
803
|
overflow: "hidden",
|
|
804
804
|
role: "region",
|
package/native/index.js.map
CHANGED
|
@@ -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.radius.button}\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.radius.button}\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.radius.button}\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} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n testID,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || testID || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","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} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n testID,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || testID || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAAiE;;;ACCjE,0BAQO;AA2ID;AAxIC,IAAM,MAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,oBAAoB,CAAC,aAAkC;AAAA,IAC3D,iBACE,WAAW,YAAY,kBACnB,WAAW,kBACX;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI;AAAA,EACN;AAEA,QAAM,cAAc,cAAc;AAIlC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EACL,IAAI;AAGJ,MAAI,OAAO,SAAS,KAAK;AACvB,UAAM,aAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI;AAAA,IACN;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,KAAK,IAAI;AAAA,QACnB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAW;AAAA,QACV,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,MAAI,SAAS;AACX,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,QACjD,QAAQ;AAAA,QACP,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,kBAAkB;AAAA,MACzB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;AC/LA,IAAAC,uBAKO;AAqEH,IAAAC,sBAAA;AAlEJ,IAAM,UAA6C;AAAA,EACjD,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AACR;AAEA,IAAM,oBAAoB,CACxB,UACuB;AACvB,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,SAAS,WAAW,KAAK;AAC/B,SAAO,MAAM,MAAM,IAAI,SAAY;AACrC;AAEO,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,OAAO;AAAA,EACP,GAAG;AACL,MAAM;AACJ,MAAI,qBAAqB,aACrB,WAAW,MAAM,GAAG,EAAE,CAAC,EAAE,QAAQ,SAAS,EAAE,EAAE,KAAK,IACnD;AAEJ,MACE,uBAAuB,gBACvB,uBAAuB,qBACvB,uBAAuB,iBACvB;AACA,yBAAqB;AAAA,EACvB;AAEA,QAAM,gBAAgB,gCAAW,QAAQ,SAAS;AAElD,QAAM,YAAuB;AAAA,IAC3B,OAAO,SAAS,eAAe;AAAA,IAC/B,UAAU,OAAO,aAAa,WAAW,WAAW;AAAA,IACpD;AAAA,IACA,YAAY;AAAA,IACZ,oBAAoB,MAAM;AAAA,IAC1B,WAAW,aAAa,eAAe;AAAA,IACvC,YAAY,kBAAkB,cAAc,eAAe,UAAU;AAAA,IACrE,WAAW;AAAA,MACT,eAAe;AAAA,IACjB;AAAA,IACA,cAAc;AAAA,MACZ,eAAe;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,oBAAoB,OAAO,QAAQ,IAAI,IAAI;AAEjD,SACE;AAAA,IAAC,qBAAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA,QAAQ,cAAc,UAAU;AAAA,MAChC;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;ACpFA,mBAAkB;AAClB,IAAAC,uBAAgC;AA+B5B,IAAAC,sBAAA;AA5BG,IAAM,OAA4B,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AACjB,MAAM;AACJ,QAAM,QAAmB;AAAA,IACvB,OAAO,OAAO,SAAS,WAAW,OAAO;AAAA,IACzC,QAAQ,OAAO,SAAS,WAAW,OAAO;AAAA,IAC1C,YAAY;AAAA,IACZ,gBAAgB;AAAA,EAClB;AAIA,QAAM,oBAAoB,aAAAC,QAAM,SAAS,IAAI,UAAU,CAAC,UAAU;AAChE,QAAI,aAAAA,QAAM,eAAe,KAAK,GAAG;AAC/B,aAAO,aAAAA,QAAM,aAAa,OAAO;AAAA,QAC/B,OAAO,MAAM,MAAM,SAAS;AAAA;AAAA,QAE5B,MAAM,MAAM,MAAM,QAAQ;AAAA,MAC5B,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT,CAAC;AAED,SACE,6CAAC,6BAAK,OAAc,QAAQ,cAAc,QACvC,6BACH;AAEJ;;;ACpCA,IAAAC,gBAAkC;AAClC,IAAAC,uBAAyC;AAgHnC,IAAAC,sBAAA;AA5GN,IAAM,kBAAuC;AAAA,EAC3C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AACX;AAGA,IAAM,0BAA+C;AAAA,EACnD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AACP;AAGA,IAAM,gCAAqD;AAAA,EACzD,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,KAAK;AAAA,EACL,eAAe;AAAA,EACf,MAAM;AACR;AAEO,IAAM,qBAAiB;AAAA,EAC5B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,eAAe;AAAA,IACf;AAAA,EACF,GACA,QACG;AACH,UAAM,mBAAmB,CAAC,SAAiB;AACzC,qBAAe,IAAI;AAKnB,UAAI,UAAU;AACZ,cAAM,iBAAiB;AAAA,UACrB,QAAQ,EAAE,OAAO,KAAK;AAAA,UACtB,eAAe,EAAE,OAAO,KAAK;AAAA,UAC7B,MAAM;AAAA,UACN,aAAa,EAAE,KAAK;AAAA,UACpB,gBAAgB,MAAM;AAAA,UAAC;AAAA,UACvB,iBAAiB,MAAM;AAAA,UAAC;AAAA,UACxB,WAAW;AAAA,QACb;AACA,iBAAS,cAAc;AAAA,MACzB;AAAA,IACF;AAGA,UAAM,eAAe,YACjB,wBAAwB,SAAS,KAAK,YACtC,OACE,gBAAgB,IAAI,KAAK,YACzB;AAGN,UAAM,kBAAkB,eACpB,8BAA8B,YAAY,IAC1C;AAEJ,QAAI,qBAAqB,aACrB,WAAW,MAAM,GAAG,EAAE,CAAC,EAAE,QAAQ,SAAS,EAAE,EAAE,KAAK,IACnD;AAEJ,QACE,uBAAuB,gBACvB,uBAAuB,qBACvB,uBAAuB,iBACvB;AACA,2BAAqB;AAAA,IACvB;AAEA,WACE;AAAA,MAAC,qBAAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA,YAAY,CAAC,MAAM;AAGjB,cAAI,WAAW;AACb,sBAAU;AAAA,cACR,KAAK,EAAE,YAAY;AAAA,cACnB,gBAAgB,MAAM;AAAA,cAAC;AAAA,YACzB,CAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA,UAAU,CAAC;AAAA,QACX,iBAAiB,mBAAmB,SAAS;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,UAAU,OAAO,aAAa,WAAW,WAAW;AAAA,YACpD,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,WAAY,OAAe,aAAa;AAAA,UAC1C;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QAEA,QAAQ,cAAc,UAAU;AAAA,QAChC,oBAAoB;AAAA,QACpB,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,UAClB,UAAU,YAAY;AAAA,QACxB;AAAA,QACA,YAAY;AAAA;AAAA,IACd;AAAA,EAEJ;AACF;AAEA,eAAe,cAAc;;;ACvJtB,IAAM,QAAQ;;;ALNrB,sBAAiC;AACjC,4BAAqC;AACrC,0BAAyB;AAmNjB,IAAAC,sBAAA;AA/MD,IAAM,+BAA+B;AAE5C,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AAExB,IAAM,6BAA6B;AAEnC,IAAM,YAAY,CAAC,MAAc,EAAE,KAAK,EAAE,YAAY;AAEtD,SAAS,aACP,QACA,OACoB;AACpB,QAAM,IAAI,UAAU,KAAK;AACzB,MAAI,CAAC,EAAG,QAAO;AAEf,SAAO,OACJ,IAAI,CAAC,MAAM;AACV,UAAM,eAAe,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC;AAClD,UAAM,QAAQ,eACV,EAAE,QACF,EAAE,MAAM,OAAO,CAAC,OAAO,UAAU,GAAG,KAAK,EAAE,SAAS,CAAC,CAAC;AAC1D,WAAO,EAAE,GAAG,GAAG,MAAM;AAAA,EACvB,CAAC,EACA,OAAO,CAAC,MAAM,EAAE,MAAM,SAAS,CAAC;AACrC;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,QAAI,kCAAiB,EAAE,WAAW,oBAAoB,CAAC;AACrE,QAAM,aAAa,MAAM,OAAO,MAAM,IAAI;AAC1C,QAAM,cAAc,MAAM,OAAO,QAAQ;AAEzC,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,EAAE;AACvC,QAAM,CAAC,gBAAgB,iBAAiB,QAAI;AAAA,IAC1C,MAAM,OAAO,CAAC,GAAG,MAAM;AAAA,EACzB;AAEA,QAAM,qBAAiB;AAAA,IACrB,MAAM,aAAa,QAAQ,MAAM;AAAA,IACjC,CAAC,QAAQ,MAAM;AAAA,EACjB;AAEA,QAAM,qBAAqB,sBAAsB;AAEjD,+BAAU,MAAM;AACd,QAAI,CAAC,OAAO,OAAQ;AACpB,QAAI,mBAAoB;AACxB,sBAAkB,CAAC,SAAS;AAC1B,YAAM,aAAa,eAAe,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI;AAC3D,UAAI,WAAY,QAAO;AACvB,aAAO,eAAe,CAAC,GAAG,MAAM;AAAA,IAClC,CAAC;AAAA,EACH,GAAG,CAAC,gBAAgB,OAAO,QAAQ,kBAAkB,CAAC;AAEtD,QAAM,yBAAyB,qBAC1B,qBAAqB,KACtB;AAEJ,QAAM,wBAAwB,eAAe;AAAA,IAC3C,CAAC,MAAM,EAAE,OAAO;AAAA,EAClB,IACI,yBACC,eAAe,CAAC,GAAG,MAAM;AAE9B,QAAM,cAAc,eAAe;AAAA,IACjC,CAAC,MAAM,EAAE,OAAO;AAAA,EAClB;AAEA,QAAM,mBAAe,uBAAQ,MAAM,aAAa,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AAE1E,QAAM,kBAAc,uBAAQ,MAAM,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC;AAEzD,QAAM,yBAAqB;AAAA,IACzB,CAAC,YAAoB;AACnB,UAAI,CAAC,oBAAoB;AACvB,0BAAkB,OAAO;AAAA,MAC3B;AACA,4BAAsB,OAAO;AAAA,IAC/B;AAAA,IACA,CAAC,oBAAoB,mBAAmB;AAAA,EAC1C;AAEA,QAAM,6BAAyB;AAAA,IAC7B,MAAM,aAAa,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ;AAAA,IAC9C,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,wBAAoB;AAAA,IACxB,MAAM,uBAAuB,OAAO,CAAC,OAAO,YAAY,IAAI,GAAG,EAAE,CAAC;AAAA,IAClE,CAAC,wBAAwB,WAAW;AAAA,EACtC;AAEA,QAAM,qBACJ,uBAAuB,SAAS,KAChC,kBAAkB,WAAW,uBAAuB;AAEtD,QAAM,iBAAa;AAAA,IACjB,CAAC,QAAgB,YAAqB;AACpC,UAAI,SAAS;AACX,YAAI,YAAY,IAAI,MAAM,EAAG;AAC7B,iBAAS,CAAC,GAAG,OAAO,MAAM,CAAC;AAC3B;AAAA,MACF;AACA,eAAS,MAAM,OAAO,CAAC,OAAO,OAAO,MAAM,CAAC;AAAA,IAC9C;AAAA,IACA,CAAC,UAAU,aAAa,KAAK;AAAA,EAC/B;AAEA,QAAM,6BAAyB,2BAAY,MAAM;AAC/C,UAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,eAAW,EAAE,GAAG,KAAK,wBAAwB;AAC3C,WAAK,IAAI,EAAE;AAAA,IACb;AACA,aAAS,CAAC,GAAG,IAAI,CAAC;AAAA,EACpB,GAAG,CAAC,UAAU,wBAAwB,KAAK,CAAC;AAE5C,QAAM,+BAA2B,2BAAY,MAAM;AACjD,UAAM,aAAa,IAAI,IAAI,uBAAuB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;AACpE,aAAS,MAAM,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AAAA,EACpD,GAAG,CAAC,UAAU,wBAAwB,KAAK,CAAC;AAE5C,QAAM,2BAAuB;AAAA,IAC3B,CAAC,MACC,EAAE,MAAM,OAAO,CAAC,OAAO,YAAY,IAAI,GAAG,EAAE,CAAC,EAAE;AAAA,IACjD,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,8BAA0B,2BAAY,CAAC,MAAwB;AACnE,WAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,OAAO,GAAG,EAAE;AAAA,EAC/D,GAAG,CAAC,CAAC;AAEL,QAAM,gCAA4B;AAAA,IAChC,CAAC,GAAqB,gBAAyB;AAC7C,YAAM,gBAAgB,wBAAwB,CAAC;AAC/C,UAAI,cAAc,WAAW,EAAG;AAChC,UAAI,aAAa;AACf,cAAM,OAAO,IAAI,IAAI,KAAK;AAC1B,mBAAW,MAAM,eAAe;AAC9B,eAAK,IAAI,EAAE;AAAA,QACb;AACA,iBAAS,CAAC,GAAG,IAAI,CAAC;AAClB;AAAA,MACF;AACA,YAAM,SAAS,IAAI,IAAI,aAAa;AACpC,eAAS,MAAM,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AAAA,IAChD;AAAA,IACA,CAAC,yBAAyB,UAAU,KAAK;AAAA,EAC3C;AAEA,QAAM,qCAAiC;AAAA,IACrC,CAAC,SAAiB,MAA2B;AAC3C,UAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,KAAK;AACtC,UAAE,eAAe;AACjB,2BAAmB,OAAO;AAAA,MAC5B;AAAA,IACF;AAAA,IACA,CAAC,kBAAkB;AAAA,EACrB;AAEA,QAAM,YAAY,eAAe,WAAW;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,KAAK,YAAY,KAAK;AAAA,MACtB,SAAS;AAAA,MACT,iBAAiB,MAAM,OAAO,MAAM;AAAA,MACpC,cAAc,MAAM,MAAM,YAAY,GAAG;AAAA,MACzC,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,OAAO;AAAA,QACL,OAAO;AAAA,QACP,UAAU;AAAA,QACV,WAAW;AAAA,QACX,WAAW,MAAM,OAAO;AAAA,QACxB,GAAI,QACA;AAAA,UACE,gBAAgB;AAAA,QAClB,IACA,CAAC;AAAA,MACP;AAAA,MACA,QAAQ,UAAU;AAAA,MAGlB;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAc;AAAA,YACd,KAAK;AAAA,YACL,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,YACjB,MAAK;AAAA,YAEL;AAAA,4DAAC,OAAI,eAAc,OAAM,YAAW,UAAS,KAAK,GAC/C;AAAA,wBACC,6CAAC,OAAI,eAAW,MACd,uDAAC,QAAK,MAAM,IAAI,OAAO,YAAY,aACjC,uDAAC,sBAAAC,QAAA,EAAW,GACd,GACF,IAEA,6CAAC,QAAK,MAAM,IAAI,OAAO,YAAY,aACjC,uDAAC,sBAAAA,QAAA,EAAW,GACd;AAAA,gBAEF,6CAAC,OAAI,MAAM,GAAG,gBAAe,UAC3B;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,oBACP,aAAa;AAAA,oBACb,UAAU,CAAC,MACT,UAAU,EAAE,OAAO,KAAK;AAAA,oBAE1B,cAAc;AAAA,oBACd,OACE,SAAS,MAAM,OAAO,QAAQ,UAAU,YAAY;AAAA,oBAEtD,UAAU,WAAW;AAAA,oBACrB,YAAY,MAAM,MAAM;AAAA,oBACxB,sBAAsB,YAAY;AAAA,oBAClC,OACE,QACI;AAAA,sBACE,YAAY;AAAA,oBACd,IACA;AAAA,oBAEN,cAAY;AAAA,oBACZ,eAAY;AAAA;AAAA,gBACd,GACF;AAAA,iBACF;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,QAAQ;AAAA,kBACR,iBAAiB,MAAM,OAAO,OAAO;AAAA,kBACrC,OACE,QACI;AAAA,oBACE,SAAS;AAAA,kBACX,IACA;AAAA;AAAA,cAER;AAAA;AAAA;AAAA,QACF;AAAA,QAEC,YACC;AAAA,UAAC;AAAA;AAAA,YACC,eAAe;AAAA,YACf,YAAW;AAAA,YACX,gBAAe;AAAA,YACf,OAAM;AAAA,YACN,MAAK;AAAA,YACL,aAAU;AAAA,YAEV;AAAA,cAAC;AAAA;AAAA,gBACC,OAAO,MAAM,OAAO,QAAQ;AAAA,gBAC5B,UAAU,WAAW;AAAA,gBACrB,OAAO;AAAA,kBACL,YAAY;AAAA,kBACZ,WAAW;AAAA,kBACX,OAAO;AAAA,gBACT;AAAA,gBAEC;AAAA;AAAA,YACH;AAAA;AAAA,QACF,IAEA,8CAAC,OAAI,eAAc,OAAM,KAAK,GAAG,YAAW,cAAa,OAAM,QAE7D;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP,YAAY;AAAA,cACZ,aAAa,MAAM,OAAO,OAAO;AAAA,cACjC,aAAa;AAAA,cACb,cAAc,MAAM,MAAM,YAAY,GAAG;AAAA,cACzC,UAAS;AAAA,cACT,MAAK;AAAA,cACL,cAAW;AAAA,cAEX;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,oBACL,WAAW;AAAA,oBACX,GAAI,QAAQ,EAAE,WAAW,OAAgB,IAAI,CAAC;AAAA,kBAChD;AAAA,kBAEC,yBAAe,IAAI,CAAC,MAAM;AACzB,0BAAM,WAAW,EAAE,OAAO;AAC1B,0BAAM,gBAAgB,qBAAqB,CAAC;AAC5C,0BAAM,QAAQ,EAAE,MAAM;AACtB,0BAAM,UAAU,GAAG,aAAa,IAAI,KAAK;AACzC,0BAAM,gBAAgB,wBAAwB,CAAC;AAC/C,0BAAM,qBAAqB,cAAc;AAAA,sBAAO,CAAC,OAC/C,YAAY,IAAI,EAAE;AAAA,oBACpB,EAAE;AACF,0BAAM,mBACJ,cAAc,SAAS,KACvB,uBAAuB,cAAc;AACvC,0BAAM,qBACJ,qBAAqB,KAAK,CAAC;AAC7B,0BAAM,wBAAwB,cAAc,WAAW;AACvD,0BAAM,oBAAoB,QAAQ,EAAE,KAAK;AAEzC,2BACE;AAAA,sBAAC;AAAA;AAAA,wBAEC,eAAc;AAAA,wBACd,YAAW;AAAA,wBACX,KAAK;AAAA,wBACL,mBAAmB;AAAA,wBACnB,iBAAiB;AAAA,wBACjB,WAAW;AAAA,wBACX,iBACE,WACI,MAAM,OAAO,WAAW,MAAM,YAC9B;AAAA,wBAEN,YACE,CAAC,WACG;AAAA,0BACE,iBAAiB,MAAM,OAAO,QAAQ,MAAM;AAAA,wBAC9C,IACA;AAAA,wBAEN,MAAK;AAAA,wBACL,gBAAc,WAAW,SAAS;AAAA,wBAClC,eAAa,uBAAuB,EAAE,EAAE;AAAA,wBAExC;AAAA;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAK;AAAA,8BACL,SAAS;AAAA,8BACT,eAAe;AAAA,8BACf,UAAU;AAAA,8BACV,UAAU,CAAC,MACT,0BAA0B,GAAG,EAAE,OAAO,OAAO;AAAA,8BAE/C,cAAY,GAAG,EAAE,KAAK,KAAK,OAAO;AAAA,8BAClC;AAAA,8BACA;AAAA;AAAA,0BACF;AAAA,0BACA;AAAA,4BAAC;AAAA;AAAA,8BACC,MAAM;AAAA,8BACN,UAAU;AAAA,8BACV,eAAc;AAAA,8BACd,YAAW;AAAA,8BACX,gBAAe;AAAA,8BACf,KAAK;AAAA,8BACL,SAAS,MAAM,mBAAmB,EAAE,EAAE;AAAA,8BACtC,OACE,QACI;AAAA,gCACE,QAAQ;AAAA,8BACV,IACA;AAAA,8BAEL,GAAI,QACD;AAAA,gCACE,MAAM;AAAA,gCACN,UAAU;AAAA,gCACV,cAAc;AAAA,gCACd,WAAW,CAAC,MACV,+BAA+B,EAAE,IAAI,CAAC;AAAA,8BAC1C,IACA;AAAA,gCACE,mBAAmB;AAAA,gCACnB,oBAAoB;AAAA,8BACtB;AAAA,8BAEJ;AAAA;AAAA,kCAAC;AAAA;AAAA,oCACC,OAAO,MAAM,OAAO,QAAQ,KAAK;AAAA,oCACjC,UAAU,WAAW;AAAA,oCACrB,YAAW;AAAA,oCACX,eAAa,QAAQ,OAAO;AAAA,oCAC5B,OAAO;AAAA,sCACL,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,oCAC1C;AAAA,oCAEC,YAAE;AAAA;AAAA,gCACL;AAAA,gCACA;AAAA,kCAAC;AAAA;AAAA,oCACC,OAAO,MAAM,OAAO,QAAQ;AAAA,oCAC5B,UAAU,WAAW;AAAA,oCACrB,YAAW;AAAA,oCACX,eAAa,QAAQ,OAAO;AAAA,oCAC5B,OAAO;AAAA,sCACL,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,sCACxC,WAAW;AAAA,oCACb;AAAA,oCAEC;AAAA;AAAA,gCACH;AAAA;AAAA;AAAA,0BACF;AAAA;AAAA;AAAA,sBAtFK,EAAE;AAAA,oBAuFT;AAAA,kBAEJ,CAAC;AAAA;AAAA,cACH;AAAA;AAAA,UACF;AAAA,UAGA;AAAA,YAAC;AAAA;AAAA,cACC,MAAM;AAAA,cACN,UAAU;AAAA,cACV,aAAa,MAAM,OAAO,OAAO;AAAA,cACjC,aAAa;AAAA,cACb,cAAc,MAAM,MAAM,YAAY,GAAG;AAAA,cACzC,iBAAiB,MAAM,OAAO,QAAQ;AAAA,cACtC,UAAS;AAAA,cACT,MAAK;AAAA,cACL,cAAY,cAAc,GAAG,YAAY,KAAK,WAAW;AAAA,cAGzD;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,eAAc;AAAA,oBACd,YAAW;AAAA,oBACX,gBAAe;AAAA,oBACf,KAAK;AAAA,oBACL,mBAAmB;AAAA,oBACnB,iBAAiB;AAAA,oBACjB,WAAW;AAAA,oBACX,mBAAmB;AAAA,oBACnB,mBAAmB,MAAM,OAAO,OAAO;AAAA,oBAEvC;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO,MAAM,OAAO,QAAQ,KAAK;AAAA,0BACjC,UAAU,WAAW;AAAA,0BACrB,YAAW;AAAA,0BACX,OAAO;AAAA,4BACL,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,0BAC1C;AAAA,0BAEC,aAAG,kBAAkB,MAAM,IAAI,aAAa,MAAM;AAAA;AAAA,sBACrD;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,IAAI,QAAQ,WAAW;AAAA,0BACvB,MAAM,QAAQ,WAAW;AAAA,0BACzB,UAAU,aAAa,WAAW;AAAA,0BAClC,SACE,aAAa,WAAW,IACpB,SACA,qBACE,2BACA;AAAA,0BAER,iBAAgB;AAAA,0BAChB,aAAa;AAAA,0BACb,SAAS;AAAA,0BACT,cACE,aAAa,WAAW,IACpB,SACA,qBACE,GAAG,gBAAgB,QAAQ,aAAa,SAAS,UAAU,KAC3D,GAAG,cAAc,QAAQ,aAAa,SAAS,UAAU;AAAA,0BAEhE,GAAI,CAAC,SAAS,aAAa,SAAS,IACjC;AAAA,4BACE,mBAAmB;AAAA,4BACnB,oBAAoB,qBAChB,GAAG,gBAAgB,QAAQ,aAAa,SAAS,UAAU,KAC3D,GAAG,cAAc,QAAQ,aAAa,SAAS,UAAU;AAAA,0BAC/D,IACA,CAAC;AAAA,0BACL,OACE,QACI;AAAA,4BACE,QACE,aAAa,WAAW,IAAI,YAAY;AAAA,0BAC5C,IACA;AAAA,0BAGN;AAAA,4BAAC;AAAA;AAAA,8BACC,OAAO,MAAM,OAAO,QAAQ,MAAM;AAAA,8BAClC,UAAU,WAAW;AAAA,8BACrB,YAAW;AAAA,8BACX,OAAO;AAAA,gCACL,YAAY,GAAG,WAAW,aAAa,CAAC;AAAA,8BAC1C;AAAA,8BAEC,+BAAqB,mBAAmB;AAAA;AAAA,0BAC3C;AAAA;AAAA,sBACF;AAAA;AAAA;AAAA,gBACF;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,WAAW,gBAAgB;AAAA,sBAC3B,GAAI,QAAQ,EAAE,WAAW,OAAgB,IAAI,CAAC;AAAA,oBAChD;AAAA,oBAEC,uBAAa,IAAI,CAAC,SACjB;AAAA,sBAAC;AAAA;AAAA,wBAEC,mBAAmB;AAAA,wBACnB,iBAAiB;AAAA,wBACjB,WAAW;AAAA,wBACX,eAAc;AAAA,wBACd,YAAW;AAAA,wBACX,iBAAgB;AAAA,wBAChB,YACE,CAAC,KAAK,WACF;AAAA,0BACE,iBAAiB,MAAM,OAAO,QAAQ,MAAM;AAAA,wBAC9C,IACA;AAAA,wBAEN,OAAO;AAAA,0BACL,GAAI,QACA;AAAA,4BACE,QAAQ,KAAK,WAAW,gBAAgB;AAAA,0BAC1C,IACA,CAAC;AAAA,0BACL,SAAS,KAAK,WAAW,MAAM;AAAA,wBACjC;AAAA,wBACA,eAAa,sBAAsB,KAAK,EAAE;AAAA,wBAE1C;AAAA,0BAAC;AAAA;AAAA,4BACC,MAAK;AAAA,4BACL,SAAS,YAAY,IAAI,KAAK,EAAE;AAAA,4BAChC,UAAU,KAAK;AAAA,4BACf,UAAU,CAAC,MAAM,WAAW,KAAK,IAAI,EAAE,OAAO,OAAO;AAAA,4BACrD;AAAA,4BACA;AAAA,4BAEC,eAAK;AAAA;AAAA,wBACR;AAAA;AAAA,sBAjCK,KAAK;AAAA,oBAkCZ,CACD;AAAA;AAAA,gBACH;AAAA;AAAA;AAAA,UACF;AAAA,WACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,YAAY,cAAc;","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
|
@@ -557,7 +557,7 @@ var GroupSelect = ({
|
|
|
557
557
|
gap: showEmpty ? 24 : 8,
|
|
558
558
|
padding: 8,
|
|
559
559
|
backgroundColor: theme.colors.layer.float,
|
|
560
|
-
borderRadius: theme.
|
|
560
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
561
561
|
role: "region",
|
|
562
562
|
"aria-label": ariaLabel,
|
|
563
563
|
style: {
|
|
@@ -645,7 +645,7 @@ var GroupSelect = ({
|
|
|
645
645
|
flexShrink: 0,
|
|
646
646
|
borderColor: theme.colors.border.secondary,
|
|
647
647
|
borderWidth: 1,
|
|
648
|
-
borderRadius: theme.
|
|
648
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
649
649
|
overflow: "hidden",
|
|
650
650
|
role: "list",
|
|
651
651
|
"aria-label": "Categories",
|
|
@@ -768,7 +768,7 @@ var GroupSelect = ({
|
|
|
768
768
|
minWidth: 0,
|
|
769
769
|
borderColor: theme.colors.border.secondary,
|
|
770
770
|
borderWidth: 1,
|
|
771
|
-
borderRadius: theme.
|
|
771
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
772
772
|
backgroundColor: theme.colors.overlay.mono,
|
|
773
773
|
overflow: "hidden",
|
|
774
774
|
role: "region",
|
package/native/index.mjs.map
CHANGED
|
@@ -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.radius.button}\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.radius.button}\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.radius.button}\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} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n testID,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || testID || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","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} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React from \"react\";\nimport { View, ViewStyle } from \"react-native\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n color,\n size,\n testID,\n \"data-testid\": dataTestId,\n}) => {\n const style: ViewStyle = {\n width: typeof size === \"number\" ? size : undefined,\n height: typeof size === \"number\" ? size : undefined,\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n // On native, we try to pass the color down to children (like Text primitives)\n // to mimic the CSS inheritance behavior of the web version.\n const childrenWithProps = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n return React.cloneElement(child, {\n color: child.props.color || color,\n // Also pass size if child seems to be an icon that needs it\n size: child.props.size || size,\n });\n }\n return child;\n });\n\n return (\n <View style={style} testID={dataTestId || testID}>\n {childrenWithProps}\n </View>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n testID,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || testID || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","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.
|
|
3
|
+
"version": "0.161.1",
|
|
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.
|
|
17
|
-
"@xsolla/xui-core": "0.
|
|
18
|
-
"@xsolla/xui-icons-base": "0.
|
|
19
|
-
"@xsolla/xui-primitives-core": "0.
|
|
16
|
+
"@xsolla/xui-checkbox": "0.161.1",
|
|
17
|
+
"@xsolla/xui-core": "0.161.1",
|
|
18
|
+
"@xsolla/xui-icons-base": "0.161.1",
|
|
19
|
+
"@xsolla/xui-primitives-core": "0.161.1"
|
|
20
20
|
},
|
|
21
21
|
"peerDependencies": {
|
|
22
22
|
"react": ">=16.8.0",
|
package/web/index.js
CHANGED
|
@@ -615,7 +615,7 @@ var GroupSelect = ({
|
|
|
615
615
|
gap: showEmpty ? 24 : 8,
|
|
616
616
|
padding: 8,
|
|
617
617
|
backgroundColor: theme.colors.layer.float,
|
|
618
|
-
borderRadius: theme.
|
|
618
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
619
619
|
role: "region",
|
|
620
620
|
"aria-label": ariaLabel,
|
|
621
621
|
style: {
|
|
@@ -703,7 +703,7 @@ var GroupSelect = ({
|
|
|
703
703
|
flexShrink: 0,
|
|
704
704
|
borderColor: theme.colors.border.secondary,
|
|
705
705
|
borderWidth: 1,
|
|
706
|
-
borderRadius: theme.
|
|
706
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
707
707
|
overflow: "hidden",
|
|
708
708
|
role: "list",
|
|
709
709
|
"aria-label": "Categories",
|
|
@@ -826,7 +826,7 @@ var GroupSelect = ({
|
|
|
826
826
|
minWidth: 0,
|
|
827
827
|
borderColor: theme.colors.border.secondary,
|
|
828
828
|
borderWidth: 1,
|
|
829
|
-
borderRadius: theme.
|
|
829
|
+
borderRadius: theme.shape.contextMenu.sm.borderRadius,
|
|
830
830
|
backgroundColor: theme.colors.overlay.mono,
|
|
831
831
|
overflow: "hidden",
|
|
832
832
|
role: "region",
|