@xsolla/xui-b2b-stepper 0.201.5 → 0.202.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/native/index.js +2 -0
- package/native/index.js.map +1 -1
- package/native/index.mjs +2 -0
- package/native/index.mjs.map +1 -1
- package/package.json +4 -4
- package/web/index.js +8 -3
- package/web/index.js.map +1 -1
- package/web/index.mjs +8 -3
- package/web/index.mjs.map +1 -1
package/native/index.js
CHANGED
|
@@ -112,6 +112,7 @@ var Box = ({
|
|
|
112
112
|
flexShrink,
|
|
113
113
|
gap,
|
|
114
114
|
overflow,
|
|
115
|
+
opacity,
|
|
115
116
|
zIndex,
|
|
116
117
|
hoverStyle,
|
|
117
118
|
pressStyle,
|
|
@@ -139,6 +140,7 @@ var Box = ({
|
|
|
139
140
|
borderRadius,
|
|
140
141
|
borderStyle,
|
|
141
142
|
overflow,
|
|
143
|
+
opacity: opacity ?? (disabled ? 0.5 : void 0),
|
|
142
144
|
zIndex,
|
|
143
145
|
height,
|
|
144
146
|
width,
|
package/native/index.js.map
CHANGED
|
@@ -1 +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 testID,\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 testID={testID}\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 AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import 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"]}
|
|
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 testID,\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 testID={testID}\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 AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n opacity,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n opacity: opacity ?? (disabled ? 0.5 : undefined),\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import 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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA2B;;;ACC3B,0BASO;AAwMD;AArMN,IAAM,0BAA6D;AAAA,EACjE,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,MAAM;AAAA,EACN,cAAc;AAAA,EACd,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AACT;AAGA,IAAM,aAAa,CAAC,QAAyD;AAC3E,MAAI,QAAQ,OAAW,QAAO;AAC9B,MAAI,OAAO,QAAQ,SAAU,QAAO;AACpC,QAAM,UAAU,sBAAsB,KAAK,GAAG;AAC9C,MAAI,QAAS,QAAO,OAAO,QAAQ,CAAC,CAAC;AACrC,QAAM,WAAW,OAAO,GAAG;AAC3B,SAAO,OAAO,SAAS,QAAQ,IAAI,WAAW;AAChD;AAEO,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;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,SAAS,YAAY,WAAW,MAAM;AAAA,IACtC;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,KAAK,WAAW,GAAG;AAAA,IACnB,GAAI;AAAA,EACN;AAEA,QAAM,cAAc,cAAc;AAKlC,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;AAAA,IACb;AAAA,IACA,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,GAAG;AAAA,EACL,IAAI;AAEJ,QAAM,oBACH,OAAO,SAAS,YAAY,wBAAwB,IAAI,MACxD,OAAO,WAAW,WAAW;AAChC,QAAM,aAAa,QAAQ,YAAY,YAAY;AACnD,QAAM,qBAAqB;AAAA,IACzB,UAAU,cAAc;AAAA,IACxB,MAAM,QAAQ,QAAQ,KAAK;AAAA,EAC7B;AACA,QAAM,0BACJ,aAAa,YAAY,aAAa,cAAc,WAAW;AAGjE,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,oBAAoB,OAAO,cAAc,WAAW,YAAY;AAAA,QAChE,YAAW;AAAA,QACV,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAIA,MAAI,WAAW,OAAO,UAAU;AAC9B,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,CAAC,cAAc,UAAU,UAAU;AAAA,QAC5C,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,QACjD,QAAQ;AAAA,QACR;AAAA,QACA,oBACE,OAAO,cAAc,WAAW,YAAY;AAAA,QAE9C;AAAA,QACA;AAAA,QACC,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,MACA;AAAA,MACA,oBAAoB,OAAO,cAAc,WAAW,YAAY;AAAA,MAChE;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;AC3QA,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;;;ACnFA,IAAAC,uBAAwC;AAyBlC,IAAAC,sBAAA;AAtBC,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,aAAa;AAAA,EACb;AACF,MAAM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,YAAY;AAAA,MACZ,mBAAmB,SAAS,WAAW,SAAS;AAAA,MAChD,oBAAoB;AAAA,MACpB,yBACE,aAAa,WACT,WACA,aAAa,cACX,cACA;AAAA,MAER;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,MAAM,OAAO,SAAS,WAAW,OAAO;AAAA;AAAA,MAC1C;AAAA;AAAA,EACF;AAEJ;AAEA,QAAQ,cAAc;;;AH/BtB,sBAAiC;;;AIHjC,IAAAC,gBAA4C;;;ACA5C,mBAAqB;AAGrB,4BAAsC;AA0E1B,IAAAC,sBAAA;AA9BZ,IAAM,oBAAoB,CACxB,OACA,UACW;AACX,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,MAAM,OAAO,WAAW,MAAM;AAAA,IACvC,KAAK;AACH,aAAO,MAAM,OAAO,QAAQ;AAAA,IAC9B,KAAK;AACH,aAAO,MAAM,OAAO,WAAW,QAAQ;AAAA,IACzC,KAAK;AACH,aAAO,MAAM,OAAO,WAAW,QAAQ;AAAA,IACzC,KAAK;AACH,aAAO,MAAM,OAAO,WAAW,MAAM;AAAA,IACvC,KAAK;AAAA,IACL;AACE,aAAO,MAAM,OAAO,QAAQ;AAAA,EAChC;AACF;AAEO,IAAM,eAAW;AAAA,EACtB,CAAC,EAAE,OAAO,YAAY,QAAQ,MAAM,MAAqB;AACvD,UAAM,cAAc,MAAM,OAAO,QAAQ;AACzC,UAAM,KAAK,kBAAkB,OAAO,KAAK;AAEzC,UAAM,gBAAgB,MAAM;AAC1B,cAAQ,OAAO;AAAA,QACb,KAAK;AACH,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,OAAO;AAAA,cACb,OAAO,MAAM,OAAO,QAAQ,MAAM;AAAA,cAClC,aAAa;AAAA;AAAA,UACf;AAAA,QAEJ,KAAK;AACH,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,OAAO;AAAA,cACb,OAAO,MAAM,OAAO,QAAQ,QAAQ;AAAA;AAAA,UACtC;AAAA,QAEJ,KAAK;AACH,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,OAAO;AAAA,cACb,OAAO,MAAM,OAAO,QAAQ,QAAQ;AAAA;AAAA,UACtC;AAAA,QAEJ,KAAK;AACH,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,OAAO;AAAA,cACb,OAAO,MAAM,OAAO,QAAQ,MAAM;AAAA;AAAA,UACpC;AAAA,QAEJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL;AACE,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP,UAAU,OAAO;AAAA,cACjB,YAAY,OAAO;AAAA,cACnB,YAAW;AAAA,cACX,WAAU;AAAA,cAET;AAAA;AAAA,UACH;AAAA,MAEN;AAAA,IACF;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,OAAO;AAAA,QACd,QAAQ,OAAO;AAAA,QACf,cAAc,OAAO;AAAA,QACrB,iBAAiB;AAAA,QACjB,YAAW;AAAA,QACX,gBAAe;AAAA,QACf,YAAY;AAAA,QACZ,OAAO;AAAA,UACL,YAAY,OAAO;AAAA,UACnB,eAAe,OAAO;AAAA,UACtB,aAAa,OAAO;AAAA,UACpB,cAAc,OAAO;AAAA,QACvB;AAAA,QAEC,wBAAc;AAAA;AAAA,IACjB;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc;;;AC/IvB,IAAAC,gBAAqB;AAeb,IAAAC,sBAAA;AAJD,IAAM,oBAAgB;AAAA,EAC3B,CAAC,EAAE,WAAW,OAAO,OAAO,MAA0B;AACpD,QAAI,cAAc,YAAY;AAC5B,aACE;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ,UAAU;AAAA,YAClB,iBAAiB;AAAA,YACjB,YAAY;AAAA,UACd;AAAA;AAAA,MACF;AAAA,IAEJ;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,UAAU,UAAU;AAAA,UACpB,iBAAiB;AAAA,UACjB,WAAW;AAAA,QACb;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,cAAc,cAAc;;;AFmIxB,IAAAC,sBAAA;AA3FJ,IAAM,qBAAmD;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,OAAqC,CAAC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU;AAAA,EACZ,IAAI;AAEJ,QAAM,eAAe,cAAc;AACnC,QAAM,WAAW,mBAAmB,SAAS,KAAK;AAClD,QAAM,YAAY,UAAU;AAC5B,QAAM,gBAAgB,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;AAEjD,QAAM,kBAAc,2BAAY,MAAM;AACpC,QAAI,eAAe;AACjB,cAAS,EAAE,QAAQ,YAAY,KAAK,CAAC;AAAA,IACvC;AAAA,EACF,GAAG,CAAC,eAAe,SAAS,YAAY,IAAI,CAAC;AAE7C,QAAM,oBAAgB;AAAA,IACpB,CAAC,UAA+B;AAC9B,UAAI,CAAC,cAAe;AACpB,UAAI,MAAM,QAAQ,SAAS;AACzB,cAAM,eAAe;AACrB,oBAAY;AAAA,MACd,WAAW,MAAM,QAAQ,KAAK;AAC5B,cAAM,eAAe;AAAA,MACvB;AAAA,IACF;AAAA,IACA,CAAC,eAAe,WAAW;AAAA,EAC7B;AAEA,QAAM,kBAAc;AAAA,IAClB,CAAC,UAA+B;AAC9B,UAAI,CAAC,cAAe;AACpB,UAAI,MAAM,QAAQ,KAAK;AACrB,cAAM,eAAe;AACrB,oBAAY;AAAA,MACd;AAAA,IACF;AAAA,IACA,CAAC,eAAe,WAAW;AAAA,EAC7B;AAEA,QAAM,gBAAY,uBAAQ,MAAM;AAC9B,UAAM,YAAY,OAAO,UAAU,WAAW,QAAQ,QAAQ,UAAU;AACxE,UAAM,WAAW,OAAO,gBAAgB,WAAW,KAAK,WAAW,KAAK;AACxE,WAAO,QAAQ,UAAU,KAAK,SAAS,GAAG,QAAQ,KAAK,KAAK;AAAA,EAC9D,GAAG,CAAC,YAAY,OAAO,aAAa,KAAK,CAAC;AAE1C,QAAM,mBAAmB,gBACrB;AAAA,IACE,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO,EAAE,QAAQ,UAAmB;AAAA,EACtC,IACA;AAAA,IACE,iBAAiB,YAAY,UAAU,OAAO;AAAA,EAChD;AAKJ,QAAM,kBAAuC,eACzC,EAAE,MAAM,GAAG,UAAU,EAAE,IACvB,EAAE,OAAO,OAAO,cAAc,YAAY,EAAE;AAEhD,QAAM,YACJ;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,OAAO;AAAA,QACL,KAAK,OAAO;AAAA,QACZ,WAAW,OAAO;AAAA,QAClB,GAAG;AAAA,MACL;AAAA,MAEC;AAAA,oBAAY,SACV,OAAO,YAAY,YAAY,OAAO,YAAY,WACjD;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,MAAM,OAAO,QAAQ;AAAA,YAC5B,UAAU,OAAO;AAAA,YACjB,YAAY,OAAO;AAAA,YACnB,YAAW;AAAA,YAEV;AAAA;AAAA,QACH,IAEA;AAAA,QAEH,OAAO,UAAU,YAAY,OAAO,UAAU,WAC7C;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,MAAM,OAAO,QAAQ;AAAA,YAC5B,UAAU,OAAO;AAAA,YACjB,YAAY,OAAO;AAAA,YACnB,YAAW;AAAA,YAEV;AAAA;AAAA,QACH,IAEA;AAAA,QAED,gBAAgB,SACd,OAAO,gBAAgB,YAAY,OAAO,gBAAgB,WACzD;AAAA,UAAC;AAAA;AAAA,YACC,OAAO,MAAM,OAAO,QAAQ;AAAA,YAC5B,UAAU,OAAO;AAAA,YACjB,YAAY,OAAO;AAAA,YACnB,YAAW;AAAA,YAEV;AAAA;AAAA,QACH,IAEA;AAAA;AAAA;AAAA,EAEN;AAIF,MAAI,QAAQ;AACV,QAAI,cAAc;AAChB,aACE;AAAA,QAAC;AAAA;AAAA,UACC,eAAc;AAAA,UACd,YAAW;AAAA,UACX,MAAM,SAAS,SAAY;AAAA,UAC3B,eAAY;AAAA,UACZ,mBAAiB;AAAA,UACjB,gBAAc,YAAY,SAAS;AAAA,UACnC,cAAY;AAAA,UACX,GAAG;AAAA,UAEJ;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAc;AAAA,gBACd,YAAW;AAAA,gBACX,gBAAe;AAAA,gBACf,iBACE,WAAW,MAAM,OAAO,WAAW,UAAU;AAAA,gBAE/C,cAAc,WAAW,OAAO,mBAAmB;AAAA,gBACnD,OAAO;AAAA,kBACL,SAAS,OAAO;AAAA,kBAChB,KAAK,OAAO;AAAA,kBACZ,YAAY;AAAA,gBACd;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA;AAAA,gBACF;AAAA;AAAA,YACF;AAAA,YACC,CAAC,UACA;AAAA,cAAC;AAAA;AAAA,gBACC,eAAc;AAAA,gBACd,YAAW;AAAA,gBACX,OAAO,EAAE,MAAM,GAAG,UAAU,OAAO,0BAA0B;AAAA,gBAE7D;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,sBACL,MAAM;AAAA,sBACN,QAAQ;AAAA,sBACR,iBAAiB,MAAM,OAAO,OAAO;AAAA,oBACvC;AAAA;AAAA,gBACF;AAAA;AAAA,YACF;AAAA;AAAA;AAAA,MAEJ;AAAA,IAEJ;AAGA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAc;AAAA,QACd,YAAW;AAAA,QACX,eAAY;AAAA,QACZ,mBAAiB;AAAA,QACjB,gBAAc,YAAY,SAAS;AAAA,QACnC,cAAY;AAAA,QACX,GAAG;AAAA,QACJ,OAAO;AAAA,UACL,GAAI,gBAAgB,EAAE,QAAQ,UAAU,IAAI,CAAC;AAAA,UAC7C,KAAK,OAAO;AAAA,QACd;AAAA,QAEA;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAc;AAAA,cACd,YAAW;AAAA,cACX,gBAAe;AAAA,cACf,iBACE,WAAW,MAAM,OAAO,WAAW,UAAU;AAAA,cAE/C,cAAc,WAAW,OAAO,mBAAmB;AAAA,cACnD,OAAO;AAAA,gBACL,SAAS,OAAO;AAAA,gBAChB,KAAK,OAAO;AAAA,cACd;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACC;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA;AAAA,cACF;AAAA;AAAA,UACF;AAAA,UACC,CAAC,UACA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,gBACL,YAAY,OAAO,oBAAoB,OAAO,WAAW,IAAI;AAAA,cAC/D;AAAA,cAEA;AAAA,gBAAC;AAAA;AAAA,kBACC,WAAU;AAAA,kBACV,OAAO,MAAM,OAAO,OAAO;AAAA,kBAC3B,QAAQ,OAAO;AAAA;AAAA,cACjB;AAAA;AAAA,UACF;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAEA,MAAI,cAAc;AAChB,UAAM,iBAAiB,WACnB,MAAM,OAAO,WAAW,UACxB;AACJ,UAAM,YAAY,UACd,OAAO,2BACP,OAAO;AAEX,WACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAc;AAAA,QACd,YAAW;AAAA,QACX,MAAM;AAAA,QACN,eAAY;AAAA,QACZ,mBAAiB;AAAA,QACjB,gBAAc,YAAY,SAAS;AAAA,QACnC,cAAY;AAAA,QACX,GAAG;AAAA,QAEJ;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,eAAc;AAAA,cACd,YAAW;AAAA,cACX,iBAAiB;AAAA,cACjB,cACE,WAAW,OAAO,6BAA6B;AAAA,cAEjD,OAAO;AAAA,gBACL,KAAK,OAAO;AAAA,gBACZ,OAAO;AAAA,gBACP,YAAY;AAAA,gBACZ,YAAY,OAAO;AAAA,gBACnB,eAAe,OAAO;AAAA,gBACtB,aAAa,OAAO;AAAA,gBACpB,cAAc;AAAA,cAChB;AAAA,cAEA;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,eAAc;AAAA,oBACd,YAAW;AAAA,oBACX,OAAO;AAAA,sBACL,KAAK,OAAO;AAAA,sBACZ,MAAM;AAAA,sBACN,UAAU;AAAA,oBACZ;AAAA,oBAEA;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC;AAAA,0BACA;AAAA,0BACA;AAAA,0BACA;AAAA;AAAA,sBACF;AAAA,sBACC;AAAA;AAAA;AAAA,gBACH;AAAA,gBACC,CAAC,UACA;AAAA,kBAAC;AAAA;AAAA,oBACC,eAAc;AAAA,oBACd,YAAW;AAAA,oBACX,OAAO,EAAE,YAAY,EAAE;AAAA,oBAEvB;AAAA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,OAAO;AAAA,4BACd,QAAQ;AAAA,4BACR,iBAAiB,MAAM,OAAO,OAAO;AAAA,0BACvC;AAAA;AAAA,sBACF;AAAA,sBACA;AAAA,wBAAC;AAAA;AAAA,0BACC,OAAO;AAAA,4BACL,OAAO,OAAO;AAAA,4BACd,QAAQ;AAAA,4BACR,iBAAiB,MAAM,OAAO,OAAO;AAAA,0BACvC;AAAA;AAAA,sBACF;AAAA;AAAA;AAAA,gBACF;AAAA;AAAA;AAAA,UAEJ;AAAA,UACC,CAAC,UACA;AAAA,YAAC;AAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,MAAM,OAAO,OAAO;AAAA;AAAA,UAC7B;AAAA;AAAA;AAAA,IAEJ;AAAA,EAEJ;AAGA,QAAM,uBACJ,OAAO,qBAAqB,OAAO,WAAW,IAAI;AAIpD,QAAM,yBAA8C;AAAA,IAClD,GAAI,iBAAiB;AAAA,IACrB,cAAc,gBAAgB,CAAC,gBAAgB;AAAA,IAC/C,UAAU,WAAW,SAAY,aAAa;AAAA,IAC9C;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,YAAW;AAAA,MACX,eAAY;AAAA,MACZ,mBAAiB;AAAA,MACjB,gBAAc,YAAY,SAAS;AAAA,MACnC,cAAY;AAAA,MACX,GAAG;AAAA,MACJ,OAAO;AAAA,MAKP;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,eAAc;AAAA,YACd,YAAW;AAAA,YACX,KAAK,OAAO;AAAA,YACZ,OAAO;AAAA,cACL,YAAY,OAAO;AAAA,cACnB,aAAa,OAAO;AAAA,cACpB,cAAc,OAAO;AAAA,cACrB,eAAe;AAAA,cACf,iBAAiB,WACb,MAAM,OAAO,WAAW,UACxB;AAAA,cACJ,cAAc,WAAW,OAAO,2BAA2B;AAAA,YAC7D;AAAA,YAGA;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAc;AAAA,kBACd,YAAW;AAAA,kBACX,KAAK;AAAA,kBACL,OAAO,EAAE,YAAY,EAAE;AAAA,kBAEvB;AAAA;AAAA,sBAAC;AAAA;AAAA,wBACC;AAAA,wBACA;AAAA,wBACA;AAAA,wBACA;AAAA;AAAA,oBACF;AAAA,oBAIA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO,EAAE,YAAY,SAAS,WAAW,UAAU;AAAA,wBACnD,eAAa,SAAS,SAAS;AAAA,wBAE/B;AAAA,0BAAC;AAAA;AAAA,4BACC,WAAU;AAAA,4BACV,OAAO,MAAM,OAAO,OAAO;AAAA,4BAC3B,QAAQ,OAAO;AAAA;AAAA,wBACjB;AAAA;AAAA,oBACF;AAAA;AAAA;AAAA,cACF;AAAA,cACC;AAAA;AAAA;AAAA,QACH;AAAA,QAGC,CAAC,UACA;AAAA,UAAC;AAAA;AAAA,YACC,YAAW;AAAA,YACX,gBAAe;AAAA,YACf,OAAO;AAAA,cACL,QAAQ,OAAO;AAAA,cACf,OAAO,OAAO;AAAA,cACd,aAAa;AAAA,cACb,YAAY;AAAA,YACd;AAAA,YAEA;AAAA,cAAC;AAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,MAAM,OAAO,OAAO;AAAA,gBAC3B,QAAQ,OAAO;AAAA;AAAA,YACjB;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,KAAK,cAAc;;;AJvbT,IAAAC,sBAAA;AA9DH,IAAM,cAAU;AAAA,EACrB,CACE;AAAA,IACE;AAAA,IACA,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,UAAM,EAAE,MAAM,QAAI,kCAAiB,EAAE,WAAW,oBAAoB,CAAC;AACrE,UAAM,SAAS,MAAM,OAAO,WAAW;AACvC,UAAM,eAAe,cAAc;AACnC,UAAM,YAAY;AAElB,UAAM,mBAAmB,gBAAgB,MAAM,MAAM,QACnD,MAAM,WAAW,IAAI,KAAK,GAC5B;AAKA,UAAM,oBAAoB,YACtB,yBAAyB,MAAM,OAAO,QAAQ,IAAI,QAAQ,MAAM,OAAO,QAAQ,IAAI,WAAW,MAAM,OAAO,WAAW,SAAS,KAC/H;AAKJ,UAAM,aAAa,CAAC,gBAAgB,CAAC;AAErC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,MAAK;AAAA,QACL,cAAY,aAAa;AAAA,QACzB;AAAA,QACA,eAAe,eAAe,QAAQ;AAAA,QACtC,YAAY,eAAe,eAAe;AAAA,QAC1C,cAAc,YAAY,OAAO,gBAAgB;AAAA,QACjD,OAAO;AAAA,UACL,YAAY;AAAA,UACZ,SAAS,YACL,eACE,OAAO,2BACP,OAAO,yBACT;AAAA,UACJ,KAAK,eAAe,OAAO,oBAAoB;AAAA,UAC/C,OAAO,eAAe,SAAS;AAAA,UAC/B,WAAW,aAAa,YAAY;AAAA,QACtC;AAAA,QACC,GAAG;AAAA,QAEH,gBAAM,IAAI,CAAC,MAAM,MAChB;AAAA,UAAC;AAAA;AAAA,YAEC;AAAA,YACA,YAAY,IAAI;AAAA,YAChB,SAAS,MAAM;AAAA,YACf,QAAQ,MAAM,MAAM,SAAS;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,QAAQ,aAAa,MAAM,SAAS,IAAI;AAAA,YACxC,eAAe,cAAc,IAAI,MAAM,SAAS,IAAI,KAAK;AAAA;AAAA,UAXpD,KAAK,OAAO,WAAW,CAAC;AAAA,QAY/B,CACD;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,QAAQ,cAAc;","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"]}
|
package/native/index.mjs
CHANGED
|
@@ -90,6 +90,7 @@ var Box = ({
|
|
|
90
90
|
flexShrink,
|
|
91
91
|
gap,
|
|
92
92
|
overflow,
|
|
93
|
+
opacity,
|
|
93
94
|
zIndex,
|
|
94
95
|
hoverStyle,
|
|
95
96
|
pressStyle,
|
|
@@ -117,6 +118,7 @@ var Box = ({
|
|
|
117
118
|
borderRadius,
|
|
118
119
|
borderStyle,
|
|
119
120
|
overflow,
|
|
121
|
+
opacity: opacity ?? (disabled ? 0.5 : void 0),
|
|
120
122
|
zIndex,
|
|
121
123
|
height,
|
|
122
124
|
width,
|
package/native/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../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":["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 testID,\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 testID={testID}\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 AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import 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":["jsx","View","jsx","jsx","memo","jsx","memo","jsx","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../../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":["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 testID,\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 testID={testID}\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 AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n opacity,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n opacity: opacity ?? (disabled ? 0.5 : undefined),\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={dataTestId || testID || id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import 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":["jsx","View","jsx","jsx","memo","jsx","memo","jsx","jsx"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsolla/xui-b2b-stepper",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.202.0",
|
|
4
4
|
"main": "./web/index.js",
|
|
5
5
|
"module": "./web/index.mjs",
|
|
6
6
|
"types": "./web/index.d.ts",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"test:coverage": "vitest run --coverage"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@xsolla/xui-core": "0.
|
|
17
|
-
"@xsolla/xui-icons-base": "0.
|
|
18
|
-
"@xsolla/xui-primitives-core": "0.
|
|
16
|
+
"@xsolla/xui-core": "0.202.0",
|
|
17
|
+
"@xsolla/xui-icons-base": "0.202.0",
|
|
18
|
+
"@xsolla/xui-primitives-core": "0.202.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"react": ">=16.8.0",
|
package/web/index.js
CHANGED
|
@@ -79,6 +79,7 @@ var ADDITIONAL_BLOCKED_PROPS = /* @__PURE__ */ new Set([
|
|
|
79
79
|
"strokeWidth",
|
|
80
80
|
// CSS properties that pass isPropValid but are used as component props
|
|
81
81
|
"overflow",
|
|
82
|
+
"opacity",
|
|
82
83
|
"cursor",
|
|
83
84
|
"fontSize",
|
|
84
85
|
"fontWeight",
|
|
@@ -188,11 +189,14 @@ var StyledBox = (0, import_styled_components.default)(FilteredDiv)`
|
|
|
188
189
|
flex-shrink: ${(props) => props.flexShrink ?? 1};
|
|
189
190
|
gap: ${(props) => typeof props.gap === "number" ? `${props.gap}px` : props.gap || 0};
|
|
190
191
|
align-self: ${(props) => props.alignSelf || "auto"};
|
|
192
|
+
/* Only emit overflow-x/y when explicitly set. Defaulting them to
|
|
193
|
+
visible after overflow would override the shorthand and break
|
|
194
|
+
clipping (e.g. OtherCard bottom-right promo image). */
|
|
191
195
|
overflow: ${(props) => props.overflow || "visible"};
|
|
192
|
-
|
|
193
|
-
|
|
196
|
+
${(props) => props.overflowX != null ? `overflow-x: ${props.overflowX};` : ""}
|
|
197
|
+
${(props) => props.overflowY != null ? `overflow-y: ${props.overflowY};` : ""}
|
|
194
198
|
z-index: ${(props) => props.zIndex};
|
|
195
|
-
opacity: ${(props) => props.disabled ? 0.5 : 1};
|
|
199
|
+
opacity: ${(props) => props.opacity != null ? props.opacity : props.disabled ? 0.5 : 1};
|
|
196
200
|
pointer-events: ${(props) => props.disabled ? "none" : "auto"};
|
|
197
201
|
|
|
198
202
|
&:hover {
|
|
@@ -243,6 +247,7 @@ var Box = import_react2.default.forwardRef(
|
|
|
243
247
|
alt: alt || "",
|
|
244
248
|
onError,
|
|
245
249
|
onLoad,
|
|
250
|
+
"data-testid": dataTestId || testID,
|
|
246
251
|
style: {
|
|
247
252
|
display: "block",
|
|
248
253
|
objectFit: "cover",
|