@xsolla/xui-b2b-stepper 0.147.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.tsx","../../src/Stepper.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Spinner.tsx","../../src/Step.tsx","../../src/StepChip.tsx","../../src/StepConnector.tsx"],"sourcesContent":["export { Stepper } from \"./Stepper\";\nexport type {\n StepClickType,\n StepStateType,\n StepType,\n StepperDirection,\n StepperProps,\n} from \"./types\";\n","import { forwardRef } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { Step } from \"./Step\";\nimport type { StepperProps } from \"./types\";\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n (\n {\n steps,\n direction = \"vertical\",\n surface = false,\n simple = false,\n onClick,\n className,\n \"aria-label\": ariaLabel,\n themeMode,\n themeProductContext,\n ...rest\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const sizing = theme.sizing.stepperB2b();\n const isHorizontal = direction === \"horizontal\";\n const isSurface = surface;\n\n const defaultAriaLabel = `Stepper with ${steps.length} step${\n steps.length === 1 ? \"\" : \"s\"\n }`;\n\n // Matches Figma: surface = background-secondary + overlay-mono on top,\n // via a flat linear-gradient so the overlay tints the base color\n // without needing a wrapper element.\n const surfaceBackground = isSurface\n ? `linear-gradient(0deg, ${theme.colors.overlay.mono} 0%, ${theme.colors.overlay.mono} 100%), ${theme.colors.background.secondary}`\n : undefined;\n\n // Vertical (non-simple) overlaps each step by 16px so the connector\n // line below the chip reaches close to the next step's chip — matches\n // Figma's negative-margin + z-index pattern (node 10999:18361).\n const useOverlap = !isHorizontal && !simple;\n\n return (\n <Box\n ref={ref}\n role=\"navigation\"\n aria-label={ariaLabel ?? defaultAriaLabel}\n className={className}\n flexDirection={isHorizontal ? \"row\" : \"column\"}\n alignItems={isHorizontal ? \"flex-start\" : \"stretch\"}\n borderRadius={isSurface ? sizing.surfaceRadius : undefined}\n style={{\n background: surfaceBackground,\n padding: isSurface\n ? isHorizontal\n ? sizing.surfacePaddingHorizontal\n : sizing.surfacePaddingVertical\n : 0,\n gap: isHorizontal ? sizing.horizontalItemGap : 0,\n width: isHorizontal ? \"100%\" : undefined,\n isolation: useOverlap ? \"isolate\" : undefined,\n }}\n {...rest}\n >\n {steps.map((step, i) => (\n <Step\n key={step.key ?? `stepper-${i}`}\n step={step}\n stepNumber={i + 1}\n isFirst={i === 0}\n isLast={i === steps.length - 1}\n direction={direction}\n simple={simple}\n onClick={onClick}\n sizing={sizing}\n theme={theme}\n zIndex={useOverlap ? steps.length - i : undefined}\n overlapBottom={useOverlap && i < steps.length - 1 ? 16 : 0}\n />\n ))}\n </Box>\n );\n }\n);\n\nStepper.displayName = \"Stepper\";\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 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={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import type React from \"react\";\nimport { ActivityIndicator, View } from \"react-native\";\nimport type { SpinnerProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Spinner: React.FC<SpinnerProps> = ({\n color,\n size,\n role,\n \"aria-label\": ariaLabel,\n \"aria-live\": ariaLive,\n testID,\n}) => {\n return (\n <View\n accessible={true}\n accessibilityRole={role === \"status\" ? \"none\" : undefined}\n accessibilityLabel={ariaLabel}\n accessibilityLiveRegion={\n ariaLive === \"polite\"\n ? \"polite\"\n : ariaLive === \"assertive\"\n ? \"assertive\"\n : \"none\"\n }\n testID={testID}\n >\n <ActivityIndicator\n color={color}\n size={typeof size === \"number\" ? size : \"small\"}\n />\n </View>\n );\n};\n\nSpinner.displayName = \"Spinner\";\n","import React, { useCallback, useMemo } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { StepChip, type StepperTheme } from \"./StepChip\";\nimport { StepConnector } from \"./StepConnector\";\nimport type {\n StepClickType,\n StepperDirection,\n StepStateType,\n StepType,\n} from \"./types\";\n\ntype StepSizing = {\n chipSize: number;\n chipRadius: number;\n chipPaddingTop: number;\n chipPaddingBottom: number;\n chipPaddingX: number;\n chipIconSize: number;\n numberFontSize: number;\n numberLineHeight: number;\n titleFontSize: number;\n titleLineHeight: number;\n descriptionFontSize: number;\n descriptionLineHeight: number;\n captionFontSize: number;\n captionLineHeight: number;\n itemGap: number;\n contentGap: number;\n contentMinHeight: number;\n contentWidth: number;\n activeCardRadiusVertical: number;\n activeCardRadiusHorizontal: number;\n activeCardPaddingTop: number;\n activeCardPaddingX: number;\n activeCardPaddingYHorizontal: number;\n activeCardPaddingLeftHorizontal: number;\n activeCardGapHorizontal: number;\n innerConnectorLength: number;\n connectorCellHeight: number;\n connectorCellWidth: number;\n horizontalFirstItemWidth: number;\n horizontalItemWidth: number;\n horizontalConnectorSegment: number;\n horizontalConnectorGap: number;\n simpleCardPadding: number;\n simpleCardRadius: number;\n simpleCardGap: number;\n simpleItemGap: number;\n simpleHorizontalCellWidth: number;\n simpleHorizontalStubLength: number;\n};\n\nexport interface StepComponentProps {\n step: StepType;\n stepNumber: number;\n isLast: boolean;\n isFirst: boolean;\n direction: StepperDirection;\n simple?: boolean;\n onClick?: StepClickType;\n sizing: StepSizing;\n /** When set, the step overlaps the next sibling by this many pixels (negative margin-bottom). */\n overlapBottom?: number;\n /** Z-index for stacking when steps overlap (earlier step → higher z). */\n zIndex?: number;\n theme: StepperTheme & {\n colors: {\n background: { primary: string };\n content: {\n primary: string;\n tertiary: string;\n brand: { primary: string };\n };\n border: { secondary: string };\n };\n };\n}\n\nconst ACTIVE_CARD_STATES: ReadonlyArray<StepStateType> = [\n \"current\",\n \"loading\",\n \"warning\",\n \"alert\",\n];\n\nexport const Step: React.FC<StepComponentProps> = ({\n step,\n stepNumber,\n isLast,\n isFirst,\n direction,\n simple = false,\n overlapBottom = 0,\n zIndex,\n onClick,\n sizing,\n theme,\n}) => {\n const {\n title,\n description,\n caption,\n state = \"incomplete\",\n disabled = false,\n noClick = false,\n } = step;\n\n const isHorizontal = direction === \"horizontal\";\n const isActive = ACTIVE_CARD_STATES.includes(state);\n const isCurrent = state === \"current\";\n const isInteractive = !!onClick && !disabled && !noClick;\n\n const handleClick = useCallback(() => {\n if (isInteractive) {\n onClick!({ number: stepNumber, step });\n }\n }, [isInteractive, onClick, stepNumber, step]);\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (!isInteractive) return;\n if (event.key === \"Enter\") {\n event.preventDefault();\n handleClick();\n } else if (event.key === \" \") {\n event.preventDefault();\n }\n },\n [isInteractive, handleClick]\n );\n\n const handleKeyUp = useCallback(\n (event: React.KeyboardEvent) => {\n if (!isInteractive) return;\n if (event.key === \" \") {\n event.preventDefault();\n handleClick();\n }\n },\n [isInteractive, handleClick]\n );\n\n const ariaLabel = useMemo(() => {\n const titleText = typeof title === \"string\" ? title : `Step ${stepNumber}`;\n const descText = typeof description === \"string\" ? `, ${description}` : \"\";\n return `Step ${stepNumber}: ${titleText}${descText}, ${state}`;\n }, [stepNumber, title, description, state]);\n\n const interactiveProps = isInteractive\n ? {\n role: \"button\",\n tabIndex: 0,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onKeyUp: handleKeyUp,\n style: { cursor: \"pointer\" as const },\n }\n : {\n \"aria-disabled\": disabled || noClick ? true : undefined,\n };\n\n // In horizontal mode the text block flexes inside the fixed-width card\n // (Figma: 112px active / 128px default, derived from card width 220/236).\n // In vertical mode the block is a fixed 128px.\n const textBlockSizing: React.CSSProperties = isHorizontal\n ? { flex: 1, minWidth: 0 }\n : { width: sizing.contentWidth, flexShrink: 0 };\n\n const textBlock = (\n <Box\n flexDirection=\"column\"\n alignItems=\"flex-start\"\n justifyContent=\"center\"\n style={{\n gap: sizing.contentGap,\n minHeight: sizing.contentMinHeight,\n ...textBlockSizing,\n }}\n >\n {caption !== null &&\n (typeof caption === \"string\" || typeof caption === \"number\" ? (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizing.captionFontSize}\n lineHeight={sizing.captionLineHeight}\n fontWeight=\"400\"\n >\n {caption}\n </Text>\n ) : (\n caption\n ))}\n {typeof title === \"string\" || typeof title === \"number\" ? (\n <Text\n color={theme.colors.content.primary}\n fontSize={sizing.titleFontSize}\n lineHeight={sizing.titleLineHeight}\n fontWeight=\"500\"\n >\n {title}\n </Text>\n ) : (\n title\n )}\n {description !== null &&\n (typeof description === \"string\" || typeof description === \"number\" ? (\n <Text\n color={theme.colors.content.tertiary}\n fontSize={sizing.descriptionFontSize}\n lineHeight={sizing.descriptionLineHeight}\n fontWeight=\"400\"\n >\n {description}\n </Text>\n ) : (\n description\n ))}\n </Box>\n );\n\n // Simple mode: chip-only (no title / description / caption)\n if (simple) {\n if (isHorizontal) {\n return (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n flex={isLast ? undefined : 1}\n data-testid=\"step\"\n data-step-state={state}\n aria-current={isCurrent ? \"step\" : undefined}\n aria-label={ariaLabel}\n {...interactiveProps}\n >\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={\n isActive ? theme.colors.background.primary : undefined\n }\n borderRadius={isActive ? sizing.simpleCardRadius : undefined}\n style={{\n padding: sizing.simpleCardPadding,\n gap: sizing.simpleCardGap,\n flexShrink: 0,\n }}\n >\n <StepChip\n state={state}\n stepNumber={stepNumber}\n sizing={sizing}\n theme={theme}\n />\n </Box>\n {!isLast && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n style={{ flex: 1, minWidth: sizing.simpleHorizontalCellWidth }}\n >\n <Box\n style={{\n flex: 1,\n height: 1,\n backgroundColor: theme.colors.border.secondary,\n }}\n />\n </Box>\n )}\n </Box>\n );\n }\n\n // Simple vertical\n return (\n <Box\n flexDirection=\"column\"\n alignItems=\"flex-start\"\n data-testid=\"step\"\n data-step-state={state}\n aria-current={isCurrent ? \"step\" : undefined}\n aria-label={ariaLabel}\n {...interactiveProps}\n style={{\n ...(isInteractive ? { cursor: \"pointer\" } : {}),\n gap: sizing.simpleItemGap,\n }}\n >\n <Box\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={\n isActive ? theme.colors.background.primary : undefined\n }\n borderRadius={isActive ? sizing.simpleCardRadius : undefined}\n style={{\n padding: sizing.simpleCardPadding,\n gap: sizing.simpleCardGap,\n }}\n >\n <StepChip\n state={state}\n stepNumber={stepNumber}\n sizing={sizing}\n theme={theme}\n />\n </Box>\n {!isLast && (\n <Box\n style={{\n marginLeft: sizing.simpleCardPadding + sizing.chipSize / 2 - 0.5,\n }}\n >\n <StepConnector\n direction=\"vertical\"\n color={theme.colors.border.secondary}\n length={sizing.connectorCellHeight}\n />\n </Box>\n )}\n </Box>\n );\n }\n\n if (isHorizontal) {\n const cardBackground = isActive\n ? theme.colors.background.primary\n : undefined;\n const cardWidth = isFirst\n ? sizing.horizontalFirstItemWidth\n : sizing.horizontalItemWidth;\n\n return (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n flex={1}\n data-testid=\"step\"\n data-step-state={state}\n aria-current={isCurrent ? \"step\" : undefined}\n aria-label={ariaLabel}\n {...interactiveProps}\n >\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n backgroundColor={cardBackground}\n borderRadius={\n isActive ? sizing.activeCardRadiusHorizontal : undefined\n }\n style={{\n gap: sizing.activeCardGapHorizontal,\n width: cardWidth,\n flexShrink: 0,\n paddingTop: sizing.activeCardPaddingYHorizontal,\n paddingBottom: sizing.activeCardPaddingYHorizontal,\n paddingLeft: sizing.activeCardPaddingLeftHorizontal,\n paddingRight: 0,\n }}\n >\n <Box\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n style={{\n gap: sizing.itemGap,\n flex: 1,\n minWidth: 0,\n }}\n >\n <StepChip\n state={state}\n stepNumber={stepNumber}\n sizing={sizing}\n theme={theme}\n />\n {textBlock}\n </Box>\n {!isLast && (\n <Box\n flexDirection=\"row\"\n alignItems=\"center\"\n style={{ flexShrink: 0 }}\n >\n <Box\n style={{\n width: sizing.horizontalConnectorSegment,\n height: 1,\n backgroundColor: theme.colors.border.secondary,\n }}\n />\n <Box\n style={{\n width: sizing.horizontalConnectorGap,\n height: 1,\n backgroundColor: theme.colors.border.secondary,\n }}\n />\n </Box>\n )}\n </Box>\n {!isLast && (\n <StepConnector\n direction=\"horizontal\"\n color={theme.colors.border.secondary}\n />\n )}\n </Box>\n );\n }\n\n // Vertical\n const innerConnectorOffset =\n sizing.activeCardPaddingX + sizing.chipSize / 2 - 0.5;\n\n // Merge interactiveProps.style with overlap/z-index so steps overlap by\n // overlapBottom px and earlier steps stack above later ones.\n const verticalContainerStyle: React.CSSProperties = {\n ...(interactiveProps.style as React.CSSProperties | undefined),\n marginBottom: overlapBottom ? -overlapBottom : undefined,\n position: zIndex !== undefined ? \"relative\" : undefined,\n zIndex,\n };\n\n return (\n <Box\n flexDirection=\"column\"\n alignItems=\"flex-start\"\n data-testid=\"step\"\n data-step-state={state}\n aria-current={isCurrent ? \"step\" : undefined}\n aria-label={ariaLabel}\n {...interactiveProps}\n style={verticalContainerStyle}\n >\n {/* Card: pt:24 px:24 pb:0 — the inner connector below the chip\n extends the card downward so the line passes through the white\n area without being cut at the card edge (matches Figma). */}\n <Box\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n gap={sizing.itemGap}\n style={{\n paddingTop: sizing.activeCardPaddingTop,\n paddingLeft: sizing.activeCardPaddingX,\n paddingRight: sizing.activeCardPaddingX,\n paddingBottom: 0,\n backgroundColor: isActive\n ? theme.colors.background.primary\n : undefined,\n borderRadius: isActive ? sizing.activeCardRadiusVertical : undefined,\n }}\n >\n {/* Icon column: chip + line below chip (line lives inside the card). */}\n <Box\n flexDirection=\"column\"\n alignItems=\"center\"\n gap={8}\n style={{ flexShrink: 0 }}\n >\n <StepChip\n state={state}\n stepNumber={stepNumber}\n sizing={sizing}\n theme={theme}\n />\n {/* Render the inner connector for every step, but hide it on\n the last step. Keeps each card the same height so the last\n step doesn't visually shrink. */}\n <Box\n style={{ visibility: isLast ? \"hidden\" : \"visible\" }}\n aria-hidden={isLast ? \"true\" : undefined}\n >\n <StepConnector\n direction=\"vertical\"\n color={theme.colors.border.secondary}\n length={sizing.innerConnectorLength}\n />\n </Box>\n </Box>\n {textBlock}\n </Box>\n {/* Outer connector cell (below the card) — touches the inner line\n so the two visually form one continuous vertical stroke. */}\n {!isLast && (\n <Box\n alignItems=\"flex-start\"\n justifyContent=\"flex-start\"\n style={{\n height: sizing.connectorCellHeight,\n width: sizing.connectorCellWidth,\n paddingLeft: innerConnectorOffset,\n flexShrink: 0,\n }}\n >\n <StepConnector\n direction=\"vertical\"\n color={theme.colors.border.secondary}\n length={sizing.connectorCellHeight}\n />\n </Box>\n )}\n </Box>\n );\n};\n\nStep.displayName = \"Step\";\n","import { memo } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Spinner } from \"@xsolla/xui-primitives\";\nimport { Check, InfoCr, Remove } from \"@xsolla/xui-icons-base\";\nimport type { StepStateType } from \"./types\";\n\ntype StepSizing = {\n chipSize: number;\n chipRadius: number;\n chipPaddingTop: number;\n chipPaddingBottom: number;\n chipPaddingX: number;\n chipIconSize: number;\n numberFontSize: number;\n numberLineHeight: number;\n};\n\n// Relaxed theme shape — matches pentagram-light/dark token JSONs.\ntype StepperTheme = {\n colors: {\n background: {\n brand: { primary: string; secondary: string };\n success: { primary: string; secondary: string };\n warning: { primary: string; secondary: string };\n alert: { primary: string; secondary: string };\n };\n overlay: {\n mono: string;\n brand: string;\n };\n content: {\n primary: string;\n brand: { primary: string };\n success: { primary: string };\n warning: { primary: string };\n alert: { primary: string };\n };\n };\n};\n\nexport interface StepChipProps {\n state: StepStateType;\n stepNumber: number;\n sizing: StepSizing;\n theme: StepperTheme;\n}\n\nconst getChipBackground = (\n state: StepStateType,\n theme: StepperTheme\n): string => {\n switch (state) {\n case \"current\":\n return theme.colors.background.brand.secondary;\n case \"loading\":\n return theme.colors.overlay.brand;\n case \"complete\":\n return theme.colors.background.success.secondary;\n case \"warning\":\n return theme.colors.background.warning.secondary;\n case \"alert\":\n return theme.colors.background.alert.secondary;\n case \"incomplete\":\n default:\n return theme.colors.overlay.mono;\n }\n};\n\nexport const StepChip = memo(\n ({ state, stepNumber, sizing, theme }: StepChipProps) => {\n const numberColor = theme.colors.content.primary;\n const bg = getChipBackground(state, theme);\n\n const renderContent = () => {\n switch (state) {\n case \"loading\":\n return (\n <Spinner\n size={sizing.chipIconSize}\n color={theme.colors.content.brand.primary}\n strokeWidth={2}\n />\n );\n case \"complete\":\n return (\n <Check\n size={sizing.chipIconSize}\n color={theme.colors.content.success.primary}\n />\n );\n case \"warning\":\n return (\n <InfoCr\n size={sizing.chipIconSize}\n color={theme.colors.content.warning.primary}\n />\n );\n case \"alert\":\n return (\n <Remove\n size={sizing.chipIconSize}\n color={theme.colors.content.alert.primary}\n />\n );\n case \"current\":\n case \"incomplete\":\n default:\n return (\n <Text\n color={numberColor}\n fontSize={sizing.numberFontSize}\n lineHeight={sizing.numberLineHeight}\n fontWeight=\"500\"\n textAlign=\"center\"\n >\n {stepNumber}\n </Text>\n );\n }\n };\n\n return (\n <Box\n width={sizing.chipSize}\n height={sizing.chipSize}\n borderRadius={sizing.chipRadius}\n backgroundColor={bg}\n alignItems=\"center\"\n justifyContent=\"center\"\n flexShrink={0}\n style={{\n paddingTop: sizing.chipPaddingTop,\n paddingBottom: sizing.chipPaddingBottom,\n paddingLeft: sizing.chipPaddingX,\n paddingRight: sizing.chipPaddingX,\n }}\n >\n {renderContent()}\n </Box>\n );\n }\n);\n\nStepChip.displayName = \"StepChip\";\n\nexport type { StepperTheme };\n","import { memo } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport type { StepperDirection } from \"./types\";\n\nexport interface StepConnectorProps {\n direction: StepperDirection;\n color: string;\n length?: number;\n}\n\nexport const StepConnector = memo(\n ({ direction, color, length }: StepConnectorProps) => {\n if (direction === \"vertical\") {\n return (\n <Box\n style={{\n width: 1,\n height: length ?? 48,\n backgroundColor: color,\n flexShrink: 0,\n }}\n />\n );\n }\n return (\n <Box\n style={{\n height: 1,\n flex: 1,\n minWidth: length ?? 24,\n backgroundColor: color,\n alignSelf: \"center\",\n }}\n />\n );\n }\n);\n\nStepConnector.displayName = \"StepConnector\";\n"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}