@xsolla/xui-input-time 0.141.0 → 0.147.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/native/index.js CHANGED
@@ -37,7 +37,7 @@ module.exports = __toCommonJS(index_exports);
37
37
  // src/InputTime.tsx
38
38
  var import_react3 = __toESM(require("react"));
39
39
 
40
- // ../primitives-native/src/Box.tsx
40
+ // ../../foundation/primitives-native/src/Box.tsx
41
41
  var import_react_native = require("react-native");
42
42
  var import_jsx_runtime = require("react/jsx-runtime");
43
43
  var Box = ({
@@ -211,7 +211,7 @@ var Box = ({
211
211
  );
212
212
  };
213
213
 
214
- // ../primitives-native/src/Text.tsx
214
+ // ../../foundation/primitives-native/src/Text.tsx
215
215
  var import_react_native2 = require("react-native");
216
216
  var import_jsx_runtime2 = require("react/jsx-runtime");
217
217
  var roleMap = {
@@ -274,7 +274,7 @@ var Text = ({
274
274
  );
275
275
  };
276
276
 
277
- // ../primitives-native/src/Input.tsx
277
+ // ../../foundation/primitives-native/src/Input.tsx
278
278
  var import_react = require("react");
279
279
  var import_react_native3 = require("react-native");
280
280
  var import_jsx_runtime3 = require("react/jsx-runtime");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../src/InputTime.tsx","../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/Input.tsx","../../src/TimeSegment.tsx","../../src/utils.ts","../../src/PeriodToggle.tsx"],"sourcesContent":["export { InputTime } from \"./InputTime\";\nexport type { InputTimeProps, TimeValue } from \"./types\";\n","import React, { useRef, useState, useEffect, useCallback } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, useId } from \"@xsolla/xui-core\";\nimport { Clock } from \"@xsolla/xui-icons-base\";\nimport { TimeSegment } from \"./TimeSegment\";\nimport { PeriodToggle } from \"./PeriodToggle\";\nimport { clampHours, clampMinutes, clampSeconds } from \"./utils\";\nimport type { InputTimeProps, TimeValue } from \"./types\";\n\nexport const InputTime: React.FC<InputTimeProps> = ({\n value,\n onChange,\n showSeconds = false,\n showPeriod = false,\n hourCycle = 24,\n icon = <Clock />,\n size = \"md\",\n disabled = false,\n error,\n \"aria-label\": ariaLabel,\n testID,\n}) => {\n const { theme } = useDesignSystem();\n const rawId = useId();\n const safeId = rawId.replace(/:/g, \"\");\n const inputId = `input-time-${safeId}`;\n const errorId = `${inputId}-error`;\n\n const [internalState, setInternalState] = useState<\"default\" | \"focus\">(\n \"default\"\n );\n\n const segmentRefs = useRef<Array<{ focus: () => void }>>([]);\n\n const is12h = hourCycle === 12;\n\n const [hours, setHours] = useState<number | null>(value?.hours ?? null);\n const [minutes, setMinutes] = useState<number | null>(value?.minutes ?? null);\n const [seconds, setSeconds] = useState<number | null>(value?.seconds ?? null);\n const [period, setPeriod] = useState<\"am\" | \"pm\">(value?.period ?? \"am\");\n\n useEffect(() => {\n if (value) {\n setHours(value.hours);\n setMinutes(value.minutes);\n setSeconds(value.seconds ?? null);\n setPeriod(value.period ?? \"am\");\n } else if (value === null) {\n setHours(null);\n setMinutes(null);\n setSeconds(null);\n setPeriod(\"am\");\n }\n }, [value]);\n\n const emitChange = useCallback(\n (h: number | null, m: number | null, s: number | null, p: \"am\" | \"pm\") => {\n if (h === null || m === null) {\n onChange?.(null);\n return;\n }\n const result: TimeValue = {\n hours: clampHours(h, is12h),\n minutes: clampMinutes(m),\n };\n if (showSeconds) {\n result.seconds = s !== null ? clampSeconds(s) : 0;\n }\n if (showPeriod) {\n result.period = p;\n }\n onChange?.(result);\n },\n [onChange, is12h, showSeconds, showPeriod]\n );\n\n const handleHoursChange = (v: number | null) => {\n const clamped = v !== null ? clampHours(v, is12h) : null;\n setHours(clamped);\n emitChange(clamped, minutes, seconds, period);\n };\n\n const handleMinutesChange = (v: number | null) => {\n const clamped = v !== null ? clampMinutes(v) : null;\n setMinutes(clamped);\n emitChange(hours, clamped, seconds, period);\n };\n\n const handleSecondsChange = (v: number | null) => {\n const clamped = v !== null ? clampSeconds(v) : null;\n setSeconds(clamped);\n emitChange(hours, minutes, clamped, period);\n };\n\n const handlePeriodChange = (v: \"am\" | \"pm\") => {\n setPeriod(v);\n emitChange(hours, minutes, seconds, v);\n };\n\n const focusSegment = (index: number) => {\n segmentRefs.current[index]?.focus?.();\n };\n\n const segmentCount = showSeconds ? 3 : 2;\n const advanceFrom = (i: number) => () => {\n if (i < segmentCount - 1) focusSegment(i + 1);\n };\n const retreatFrom = (i: number) => () => {\n if (i > 0) focusSegment(i - 1);\n };\n\n const sizeStyles = theme.sizing.input(size);\n const inputColors = theme.colors.control.input;\n\n const isError = !!error;\n const isFocus = internalState === \"focus\";\n\n let backgroundColor = inputColors.bg;\n let borderColor = inputColors.border;\n let outlineColor: string | undefined;\n\n if (disabled) {\n backgroundColor = inputColors.bgDisable;\n borderColor = inputColors.borderDisable;\n } else if (isError) {\n outlineColor = theme.colors.border.alert;\n if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n }\n } else if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n outlineColor = theme.colors.border.brand;\n }\n\n const textColor = disabled ? inputColors.textDisable : inputColors.text;\n const placeholderColor = inputColors.placeholder;\n const iconColor = inputColors.placeholder;\n\n const paddingConfig: Record<\n string,\n { vertical: number; horizontal: number }\n > = {\n xl: { vertical: 12, horizontal: 12 },\n lg: { vertical: 14, horizontal: 12 },\n md: { vertical: 11, horizontal: 12 },\n sm: { vertical: 7, horizontal: 10 },\n xs: { vertical: 7, horizontal: 10 },\n };\n\n const borderRadiusConfig: Record<string, number> = {\n xl: 8,\n lg: 8,\n md: 8,\n sm: 4,\n xs: 4,\n };\n\n const iconSizeConfig: Record<string, number> = {\n xl: 22,\n lg: 20,\n md: 18,\n sm: 16,\n xs: 14,\n };\n\n const focusOutlineConfig: Record<string, { width: number; offset: number }> =\n {\n xl: { width: 1, offset: -1 },\n lg: { width: 1, offset: -1 },\n md: { width: 1, offset: -1 },\n sm: { width: 1, offset: -1 },\n xs: { width: 1, offset: -1 },\n };\n\n const padding = paddingConfig[size];\n const borderRadius = borderRadiusConfig[size];\n const iconSize = iconSizeConfig[size];\n const focusOutline = focusOutlineConfig[size];\n\n const handleContainerFocus = () => {\n if (!disabled) setInternalState(\"focus\");\n };\n const handleContainerBlur = () => {\n if (!disabled) setInternalState(\"default\");\n };\n\n const colonColor = disabled ? placeholderColor : textColor;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={sizeStyles.fieldGap}\n width=\"100%\"\n testID={testID}\n >\n <Box\n backgroundColor={backgroundColor}\n borderColor={borderColor}\n borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n borderRadius={borderRadius}\n height={sizeStyles.height}\n paddingVertical={padding.vertical}\n paddingHorizontal={padding.horizontal}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={2}\n position=\"relative\"\n style={{\n ...(outlineColor\n ? {\n outline: `${focusOutline.width}px solid ${outlineColor}`,\n outlineOffset: `${focusOutline.offset}px`,\n }\n : {}),\n }}\n hoverStyle={\n !disabled && !isFocus && !isError\n ? {\n backgroundColor: inputColors.bgHover,\n borderColor: inputColors.borderHover,\n }\n : undefined\n }\n onFocus={handleContainerFocus}\n onBlur={handleContainerBlur}\n role=\"group\"\n aria-label={ariaLabel || \"Time input\"}\n aria-describedby={error ? errorId : undefined}\n >\n {icon && (\n <Box marginRight={6} alignItems=\"center\" justifyContent=\"center\">\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<any>, {\n size: iconSize,\n color: iconColor,\n })\n : icon}\n </Box>\n )}\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[0] = el;\n }}\n value={hours}\n onChange={handleHoursChange}\n onAdvance={advanceFrom(0)}\n onRetreat={retreatFrom(0)}\n min={is12h ? 1 : 0}\n max={is12h ? 12 : 23}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Hours\"\n testID={testID ? `${testID}-hours` : undefined}\n />\n\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[1] = el;\n }}\n value={minutes}\n onChange={handleMinutesChange}\n onAdvance={advanceFrom(1)}\n onRetreat={retreatFrom(1)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Minutes\"\n testID={testID ? `${testID}-minutes` : undefined}\n />\n\n {showSeconds && (\n <>\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[2] = el;\n }}\n value={seconds}\n onChange={handleSecondsChange}\n onAdvance={advanceFrom(2)}\n onRetreat={retreatFrom(2)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Seconds\"\n testID={testID ? `${testID}-seconds` : undefined}\n />\n </>\n )}\n\n {showPeriod && (\n <PeriodToggle\n value={period}\n onChange={handlePeriodChange}\n disabled={disabled}\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n testID={testID ? `${testID}-period` : undefined}\n />\n )}\n </Box>\n\n {error && (\n <Text\n id={errorId}\n role=\"alert\"\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.fontSize - 2}\n >\n {error}\n </Text>\n )}\n </Box>\n );\n};\n\nInputTime.displayName = \"InputTime\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","import React, {\n useRef,\n useState,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, InputPrimitive } from \"@xsolla/xui-primitives\";\nimport { formatSegment, parseSegmentInput } from \"./utils\";\n\ninterface TimeSegmentProps {\n value: number | null;\n onChange: (value: number | null) => void;\n onAdvance: () => void;\n onRetreat: () => void;\n min: number;\n max: number;\n disabled?: boolean;\n placeholder?: string;\n fontSize: number;\n textColor: string;\n placeholderColor: string;\n focusColor: string;\n \"aria-label\"?: string;\n testID?: string;\n}\n\nexport const TimeSegment = forwardRef<{ focus: () => void }, TimeSegmentProps>(\n (\n {\n value,\n onChange,\n onAdvance,\n onRetreat,\n min,\n max,\n disabled = false,\n placeholder = \"--\",\n fontSize,\n textColor,\n placeholderColor,\n focusColor,\n \"aria-label\": ariaLabel,\n testID,\n },\n ref\n ) => {\n const inputRef = useRef<any>(null);\n const [editBuffer, setEditBuffer] = useState<string>(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const committedRef = useRef(false);\n const freshFocusRef = useRef(false);\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus?.(),\n }));\n\n const displayValue = isFocused\n ? editBuffer\n : value !== null\n ? formatSegment(value)\n : \"\";\n\n const commitValue = useCallback(\n (text: string) => {\n const parsed = parseSegmentInput(text);\n if (parsed !== null) {\n const clamped = Math.min(max, Math.max(min, parsed));\n onChange(clamped);\n }\n },\n [onChange, min, max]\n );\n\n const handleFocus = () => {\n setIsFocused(true);\n setEditBuffer(value !== null ? formatSegment(value) : \"\");\n committedRef.current = false;\n freshFocusRef.current = true;\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n if (!committedRef.current && editBuffer) {\n commitValue(editBuffer);\n }\n committedRef.current = false;\n setEditBuffer(\"\");\n };\n\n const extractTypedDigit = (newText: string, oldText: string): string => {\n const newDigits = newText.replace(/\\D/g, \"\");\n const oldDigits = oldText.replace(/\\D/g, \"\");\n if (newDigits.length <= oldDigits.length) return \"\";\n let remaining = newDigits;\n for (const ch of oldDigits) {\n const idx = remaining.indexOf(ch);\n if (idx !== -1) {\n remaining = remaining.slice(0, idx) + remaining.slice(idx + 1);\n }\n }\n return remaining.charAt(0);\n };\n\n const handleChangeText = (text: string) => {\n let digitsOnly = text.replace(/\\D/g, \"\");\n if (freshFocusRef.current || committedRef.current) {\n const typed = extractTypedDigit(text, displayValue);\n freshFocusRef.current = false;\n committedRef.current = false;\n if (!typed) return;\n digitsOnly = typed;\n } else {\n digitsOnly = digitsOnly.slice(-2);\n }\n setEditBuffer(digitsOnly);\n if (digitsOnly.length === 2) {\n committedRef.current = true;\n commitValue(digitsOnly);\n onAdvance();\n }\n };\n\n const handleKeyDown = (e: any) => {\n const key = e.key || e.nativeEvent?.key;\n\n if (key === \"ArrowUp\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current >= max ? min : current + 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowDown\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current <= min ? max : current - 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowRight\") {\n onAdvance();\n } else if (key === \"ArrowLeft\") {\n onRetreat();\n } else if (key === \"Backspace\" && editBuffer.length === 0) {\n onChange(null);\n onRetreat();\n } else if (key === \"Tab\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n } else if (key === \"Enter\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n inputRef.current?.blur?.();\n }\n };\n\n return (\n <Box\n onPress={() => inputRef.current?.focus?.()}\n width={fontSize * 1.5}\n height={fontSize + 8}\n justifyContent=\"center\"\n alignItems=\"center\"\n backgroundColor={isFocused ? focusColor : \"transparent\"}\n borderRadius={4}\n >\n <InputPrimitive\n ref={inputRef}\n value={displayValue}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n inputMode=\"numeric\"\n color={textColor}\n fontSize={fontSize}\n placeholderTextColor={placeholderColor}\n aria-label={ariaLabel}\n data-testid={testID}\n style={{\n textAlign: \"center\",\n width: \"100%\",\n padding: 0,\n border: \"none\",\n outline: \"none\",\n boxShadow: \"none\",\n background: \"transparent\",\n caretColor: \"transparent\",\n }}\n />\n </Box>\n );\n }\n);\n\nTimeSegment.displayName = \"TimeSegment\";\n","export function clampValue(value: number, min: number, max: number): number {\n if (isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n}\n\nexport function clampHours(value: number, is12h: boolean): number {\n return is12h ? clampValue(value, 1, 12) : clampValue(value, 0, 23);\n}\n\nexport function clampMinutes(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function clampSeconds(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function formatSegment(value: number | undefined | null): string {\n if (value === undefined || value === null) return \"\";\n return value.toString().padStart(2, \"0\");\n}\n\nexport function parseSegmentInput(text: string): number | null {\n const num = parseInt(text, 10);\n return isNaN(num) ? null : num;\n}\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\n\ninterface PeriodToggleProps {\n value: \"am\" | \"pm\";\n onChange: (value: \"am\" | \"pm\") => void;\n disabled?: boolean;\n fontSize: number;\n textColor: string;\n testID?: string;\n}\n\nexport const PeriodToggle: React.FC<PeriodToggleProps> = ({\n value,\n onChange,\n disabled = false,\n fontSize,\n textColor,\n testID,\n}) => {\n const toggle = () => {\n if (!disabled) {\n onChange(value === \"am\" ? \"pm\" : \"am\");\n }\n };\n\n return (\n <Box\n onPress={toggle}\n cursor={disabled ? \"default\" : \"pointer\"}\n justifyContent=\"center\"\n alignItems=\"center\"\n paddingHorizontal={4}\n role=\"button\"\n aria-label={`Time period: ${value.toUpperCase()}. Click to toggle.`}\n data-testid={testID}\n >\n <Text color={textColor} fontSize={fontSize} fontWeight=\"500\">\n {value}\n </Text>\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","RNTextInput","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React"]}
1
+ {"version":3,"sources":["../../src/index.tsx","../../src/InputTime.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Input.tsx","../../src/TimeSegment.tsx","../../src/utils.ts","../../src/PeriodToggle.tsx"],"sourcesContent":["export { InputTime } from \"./InputTime\";\nexport type { InputTimeProps, TimeValue } from \"./types\";\n","import React, { useRef, useState, useEffect, useCallback } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, useId } from \"@xsolla/xui-core\";\nimport { Clock } from \"@xsolla/xui-icons-base\";\nimport { TimeSegment } from \"./TimeSegment\";\nimport { PeriodToggle } from \"./PeriodToggle\";\nimport { clampHours, clampMinutes, clampSeconds } from \"./utils\";\nimport type { InputTimeProps, TimeValue } from \"./types\";\n\nexport const InputTime: React.FC<InputTimeProps> = ({\n value,\n onChange,\n showSeconds = false,\n showPeriod = false,\n hourCycle = 24,\n icon = <Clock />,\n size = \"md\",\n disabled = false,\n error,\n \"aria-label\": ariaLabel,\n testID,\n}) => {\n const { theme } = useDesignSystem();\n const rawId = useId();\n const safeId = rawId.replace(/:/g, \"\");\n const inputId = `input-time-${safeId}`;\n const errorId = `${inputId}-error`;\n\n const [internalState, setInternalState] = useState<\"default\" | \"focus\">(\n \"default\"\n );\n\n const segmentRefs = useRef<Array<{ focus: () => void }>>([]);\n\n const is12h = hourCycle === 12;\n\n const [hours, setHours] = useState<number | null>(value?.hours ?? null);\n const [minutes, setMinutes] = useState<number | null>(value?.minutes ?? null);\n const [seconds, setSeconds] = useState<number | null>(value?.seconds ?? null);\n const [period, setPeriod] = useState<\"am\" | \"pm\">(value?.period ?? \"am\");\n\n useEffect(() => {\n if (value) {\n setHours(value.hours);\n setMinutes(value.minutes);\n setSeconds(value.seconds ?? null);\n setPeriod(value.period ?? \"am\");\n } else if (value === null) {\n setHours(null);\n setMinutes(null);\n setSeconds(null);\n setPeriod(\"am\");\n }\n }, [value]);\n\n const emitChange = useCallback(\n (h: number | null, m: number | null, s: number | null, p: \"am\" | \"pm\") => {\n if (h === null || m === null) {\n onChange?.(null);\n return;\n }\n const result: TimeValue = {\n hours: clampHours(h, is12h),\n minutes: clampMinutes(m),\n };\n if (showSeconds) {\n result.seconds = s !== null ? clampSeconds(s) : 0;\n }\n if (showPeriod) {\n result.period = p;\n }\n onChange?.(result);\n },\n [onChange, is12h, showSeconds, showPeriod]\n );\n\n const handleHoursChange = (v: number | null) => {\n const clamped = v !== null ? clampHours(v, is12h) : null;\n setHours(clamped);\n emitChange(clamped, minutes, seconds, period);\n };\n\n const handleMinutesChange = (v: number | null) => {\n const clamped = v !== null ? clampMinutes(v) : null;\n setMinutes(clamped);\n emitChange(hours, clamped, seconds, period);\n };\n\n const handleSecondsChange = (v: number | null) => {\n const clamped = v !== null ? clampSeconds(v) : null;\n setSeconds(clamped);\n emitChange(hours, minutes, clamped, period);\n };\n\n const handlePeriodChange = (v: \"am\" | \"pm\") => {\n setPeriod(v);\n emitChange(hours, minutes, seconds, v);\n };\n\n const focusSegment = (index: number) => {\n segmentRefs.current[index]?.focus?.();\n };\n\n const segmentCount = showSeconds ? 3 : 2;\n const advanceFrom = (i: number) => () => {\n if (i < segmentCount - 1) focusSegment(i + 1);\n };\n const retreatFrom = (i: number) => () => {\n if (i > 0) focusSegment(i - 1);\n };\n\n const sizeStyles = theme.sizing.input(size);\n const inputColors = theme.colors.control.input;\n\n const isError = !!error;\n const isFocus = internalState === \"focus\";\n\n let backgroundColor = inputColors.bg;\n let borderColor = inputColors.border;\n let outlineColor: string | undefined;\n\n if (disabled) {\n backgroundColor = inputColors.bgDisable;\n borderColor = inputColors.borderDisable;\n } else if (isError) {\n outlineColor = theme.colors.border.alert;\n if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n }\n } else if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n outlineColor = theme.colors.border.brand;\n }\n\n const textColor = disabled ? inputColors.textDisable : inputColors.text;\n const placeholderColor = inputColors.placeholder;\n const iconColor = inputColors.placeholder;\n\n const paddingConfig: Record<\n string,\n { vertical: number; horizontal: number }\n > = {\n xl: { vertical: 12, horizontal: 12 },\n lg: { vertical: 14, horizontal: 12 },\n md: { vertical: 11, horizontal: 12 },\n sm: { vertical: 7, horizontal: 10 },\n xs: { vertical: 7, horizontal: 10 },\n };\n\n const borderRadiusConfig: Record<string, number> = {\n xl: 8,\n lg: 8,\n md: 8,\n sm: 4,\n xs: 4,\n };\n\n const iconSizeConfig: Record<string, number> = {\n xl: 22,\n lg: 20,\n md: 18,\n sm: 16,\n xs: 14,\n };\n\n const focusOutlineConfig: Record<string, { width: number; offset: number }> =\n {\n xl: { width: 1, offset: -1 },\n lg: { width: 1, offset: -1 },\n md: { width: 1, offset: -1 },\n sm: { width: 1, offset: -1 },\n xs: { width: 1, offset: -1 },\n };\n\n const padding = paddingConfig[size];\n const borderRadius = borderRadiusConfig[size];\n const iconSize = iconSizeConfig[size];\n const focusOutline = focusOutlineConfig[size];\n\n const handleContainerFocus = () => {\n if (!disabled) setInternalState(\"focus\");\n };\n const handleContainerBlur = () => {\n if (!disabled) setInternalState(\"default\");\n };\n\n const colonColor = disabled ? placeholderColor : textColor;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={sizeStyles.fieldGap}\n width=\"100%\"\n testID={testID}\n >\n <Box\n backgroundColor={backgroundColor}\n borderColor={borderColor}\n borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n borderRadius={borderRadius}\n height={sizeStyles.height}\n paddingVertical={padding.vertical}\n paddingHorizontal={padding.horizontal}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={2}\n position=\"relative\"\n style={{\n ...(outlineColor\n ? {\n outline: `${focusOutline.width}px solid ${outlineColor}`,\n outlineOffset: `${focusOutline.offset}px`,\n }\n : {}),\n }}\n hoverStyle={\n !disabled && !isFocus && !isError\n ? {\n backgroundColor: inputColors.bgHover,\n borderColor: inputColors.borderHover,\n }\n : undefined\n }\n onFocus={handleContainerFocus}\n onBlur={handleContainerBlur}\n role=\"group\"\n aria-label={ariaLabel || \"Time input\"}\n aria-describedby={error ? errorId : undefined}\n >\n {icon && (\n <Box marginRight={6} alignItems=\"center\" justifyContent=\"center\">\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<any>, {\n size: iconSize,\n color: iconColor,\n })\n : icon}\n </Box>\n )}\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[0] = el;\n }}\n value={hours}\n onChange={handleHoursChange}\n onAdvance={advanceFrom(0)}\n onRetreat={retreatFrom(0)}\n min={is12h ? 1 : 0}\n max={is12h ? 12 : 23}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Hours\"\n testID={testID ? `${testID}-hours` : undefined}\n />\n\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[1] = el;\n }}\n value={minutes}\n onChange={handleMinutesChange}\n onAdvance={advanceFrom(1)}\n onRetreat={retreatFrom(1)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Minutes\"\n testID={testID ? `${testID}-minutes` : undefined}\n />\n\n {showSeconds && (\n <>\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[2] = el;\n }}\n value={seconds}\n onChange={handleSecondsChange}\n onAdvance={advanceFrom(2)}\n onRetreat={retreatFrom(2)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Seconds\"\n testID={testID ? `${testID}-seconds` : undefined}\n />\n </>\n )}\n\n {showPeriod && (\n <PeriodToggle\n value={period}\n onChange={handlePeriodChange}\n disabled={disabled}\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n testID={testID ? `${testID}-period` : undefined}\n />\n )}\n </Box>\n\n {error && (\n <Text\n id={errorId}\n role=\"alert\"\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.fontSize - 2}\n >\n {error}\n </Text>\n )}\n </Box>\n );\n};\n\nInputTime.displayName = \"InputTime\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","import React, {\n useRef,\n useState,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, InputPrimitive } from \"@xsolla/xui-primitives\";\nimport { formatSegment, parseSegmentInput } from \"./utils\";\n\ninterface TimeSegmentProps {\n value: number | null;\n onChange: (value: number | null) => void;\n onAdvance: () => void;\n onRetreat: () => void;\n min: number;\n max: number;\n disabled?: boolean;\n placeholder?: string;\n fontSize: number;\n textColor: string;\n placeholderColor: string;\n focusColor: string;\n \"aria-label\"?: string;\n testID?: string;\n}\n\nexport const TimeSegment = forwardRef<{ focus: () => void }, TimeSegmentProps>(\n (\n {\n value,\n onChange,\n onAdvance,\n onRetreat,\n min,\n max,\n disabled = false,\n placeholder = \"--\",\n fontSize,\n textColor,\n placeholderColor,\n focusColor,\n \"aria-label\": ariaLabel,\n testID,\n },\n ref\n ) => {\n const inputRef = useRef<any>(null);\n const [editBuffer, setEditBuffer] = useState<string>(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const committedRef = useRef(false);\n const freshFocusRef = useRef(false);\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus?.(),\n }));\n\n const displayValue = isFocused\n ? editBuffer\n : value !== null\n ? formatSegment(value)\n : \"\";\n\n const commitValue = useCallback(\n (text: string) => {\n const parsed = parseSegmentInput(text);\n if (parsed !== null) {\n const clamped = Math.min(max, Math.max(min, parsed));\n onChange(clamped);\n }\n },\n [onChange, min, max]\n );\n\n const handleFocus = () => {\n setIsFocused(true);\n setEditBuffer(value !== null ? formatSegment(value) : \"\");\n committedRef.current = false;\n freshFocusRef.current = true;\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n if (!committedRef.current && editBuffer) {\n commitValue(editBuffer);\n }\n committedRef.current = false;\n setEditBuffer(\"\");\n };\n\n const extractTypedDigit = (newText: string, oldText: string): string => {\n const newDigits = newText.replace(/\\D/g, \"\");\n const oldDigits = oldText.replace(/\\D/g, \"\");\n if (newDigits.length <= oldDigits.length) return \"\";\n let remaining = newDigits;\n for (const ch of oldDigits) {\n const idx = remaining.indexOf(ch);\n if (idx !== -1) {\n remaining = remaining.slice(0, idx) + remaining.slice(idx + 1);\n }\n }\n return remaining.charAt(0);\n };\n\n const handleChangeText = (text: string) => {\n let digitsOnly = text.replace(/\\D/g, \"\");\n if (freshFocusRef.current || committedRef.current) {\n const typed = extractTypedDigit(text, displayValue);\n freshFocusRef.current = false;\n committedRef.current = false;\n if (!typed) return;\n digitsOnly = typed;\n } else {\n digitsOnly = digitsOnly.slice(-2);\n }\n setEditBuffer(digitsOnly);\n if (digitsOnly.length === 2) {\n committedRef.current = true;\n commitValue(digitsOnly);\n onAdvance();\n }\n };\n\n const handleKeyDown = (e: any) => {\n const key = e.key || e.nativeEvent?.key;\n\n if (key === \"ArrowUp\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current >= max ? min : current + 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowDown\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current <= min ? max : current - 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowRight\") {\n onAdvance();\n } else if (key === \"ArrowLeft\") {\n onRetreat();\n } else if (key === \"Backspace\" && editBuffer.length === 0) {\n onChange(null);\n onRetreat();\n } else if (key === \"Tab\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n } else if (key === \"Enter\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n inputRef.current?.blur?.();\n }\n };\n\n return (\n <Box\n onPress={() => inputRef.current?.focus?.()}\n width={fontSize * 1.5}\n height={fontSize + 8}\n justifyContent=\"center\"\n alignItems=\"center\"\n backgroundColor={isFocused ? focusColor : \"transparent\"}\n borderRadius={4}\n >\n <InputPrimitive\n ref={inputRef}\n value={displayValue}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n inputMode=\"numeric\"\n color={textColor}\n fontSize={fontSize}\n placeholderTextColor={placeholderColor}\n aria-label={ariaLabel}\n data-testid={testID}\n style={{\n textAlign: \"center\",\n width: \"100%\",\n padding: 0,\n border: \"none\",\n outline: \"none\",\n boxShadow: \"none\",\n background: \"transparent\",\n caretColor: \"transparent\",\n }}\n />\n </Box>\n );\n }\n);\n\nTimeSegment.displayName = \"TimeSegment\";\n","export function clampValue(value: number, min: number, max: number): number {\n if (isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n}\n\nexport function clampHours(value: number, is12h: boolean): number {\n return is12h ? clampValue(value, 1, 12) : clampValue(value, 0, 23);\n}\n\nexport function clampMinutes(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function clampSeconds(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function formatSegment(value: number | undefined | null): string {\n if (value === undefined || value === null) return \"\";\n return value.toString().padStart(2, \"0\");\n}\n\nexport function parseSegmentInput(text: string): number | null {\n const num = parseInt(text, 10);\n return isNaN(num) ? null : num;\n}\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\n\ninterface PeriodToggleProps {\n value: \"am\" | \"pm\";\n onChange: (value: \"am\" | \"pm\") => void;\n disabled?: boolean;\n fontSize: number;\n textColor: string;\n testID?: string;\n}\n\nexport const PeriodToggle: React.FC<PeriodToggleProps> = ({\n value,\n onChange,\n disabled = false,\n fontSize,\n textColor,\n testID,\n}) => {\n const toggle = () => {\n if (!disabled) {\n onChange(value === \"am\" ? \"pm\" : \"am\");\n }\n };\n\n return (\n <Box\n onPress={toggle}\n cursor={disabled ? \"default\" : \"pointer\"}\n justifyContent=\"center\"\n alignItems=\"center\"\n paddingHorizontal={4}\n role=\"button\"\n aria-label={`Time period: ${value.toUpperCase()}. Click to toggle.`}\n data-testid={testID}\n >\n <Text color={textColor} fontSize={fontSize} fontWeight=\"500\">\n {value}\n </Text>\n </Box>\n );\n};\n"],"mappings":"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","names":["import_react","import_react_native","import_jsx_runtime","RNText","import_react_native","import_jsx_runtime","RNTextInput","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","React"]}
package/native/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  // src/InputTime.tsx
2
2
  import React3, { useRef as useRef2, useState as useState2, useEffect, useCallback as useCallback2 } from "react";
3
3
 
4
- // ../primitives-native/src/Box.tsx
4
+ // ../../foundation/primitives-native/src/Box.tsx
5
5
  import {
6
6
  View,
7
7
  Pressable,
@@ -179,7 +179,7 @@ var Box = ({
179
179
  );
180
180
  };
181
181
 
182
- // ../primitives-native/src/Text.tsx
182
+ // ../../foundation/primitives-native/src/Text.tsx
183
183
  import {
184
184
  Text as RNText,
185
185
  StyleSheet
@@ -245,7 +245,7 @@ var Text = ({
245
245
  );
246
246
  };
247
247
 
248
- // ../primitives-native/src/Input.tsx
248
+ // ../../foundation/primitives-native/src/Input.tsx
249
249
  import { forwardRef } from "react";
250
250
  import { TextInput as RNTextInput } from "react-native";
251
251
  import { jsx as jsx3 } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/InputTime.tsx","../../../primitives-native/src/Box.tsx","../../../primitives-native/src/Text.tsx","../../../primitives-native/src/Input.tsx","../../src/TimeSegment.tsx","../../src/utils.ts","../../src/PeriodToggle.tsx"],"sourcesContent":["import React, { useRef, useState, useEffect, useCallback } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, useId } from \"@xsolla/xui-core\";\nimport { Clock } from \"@xsolla/xui-icons-base\";\nimport { TimeSegment } from \"./TimeSegment\";\nimport { PeriodToggle } from \"./PeriodToggle\";\nimport { clampHours, clampMinutes, clampSeconds } from \"./utils\";\nimport type { InputTimeProps, TimeValue } from \"./types\";\n\nexport const InputTime: React.FC<InputTimeProps> = ({\n value,\n onChange,\n showSeconds = false,\n showPeriod = false,\n hourCycle = 24,\n icon = <Clock />,\n size = \"md\",\n disabled = false,\n error,\n \"aria-label\": ariaLabel,\n testID,\n}) => {\n const { theme } = useDesignSystem();\n const rawId = useId();\n const safeId = rawId.replace(/:/g, \"\");\n const inputId = `input-time-${safeId}`;\n const errorId = `${inputId}-error`;\n\n const [internalState, setInternalState] = useState<\"default\" | \"focus\">(\n \"default\"\n );\n\n const segmentRefs = useRef<Array<{ focus: () => void }>>([]);\n\n const is12h = hourCycle === 12;\n\n const [hours, setHours] = useState<number | null>(value?.hours ?? null);\n const [minutes, setMinutes] = useState<number | null>(value?.minutes ?? null);\n const [seconds, setSeconds] = useState<number | null>(value?.seconds ?? null);\n const [period, setPeriod] = useState<\"am\" | \"pm\">(value?.period ?? \"am\");\n\n useEffect(() => {\n if (value) {\n setHours(value.hours);\n setMinutes(value.minutes);\n setSeconds(value.seconds ?? null);\n setPeriod(value.period ?? \"am\");\n } else if (value === null) {\n setHours(null);\n setMinutes(null);\n setSeconds(null);\n setPeriod(\"am\");\n }\n }, [value]);\n\n const emitChange = useCallback(\n (h: number | null, m: number | null, s: number | null, p: \"am\" | \"pm\") => {\n if (h === null || m === null) {\n onChange?.(null);\n return;\n }\n const result: TimeValue = {\n hours: clampHours(h, is12h),\n minutes: clampMinutes(m),\n };\n if (showSeconds) {\n result.seconds = s !== null ? clampSeconds(s) : 0;\n }\n if (showPeriod) {\n result.period = p;\n }\n onChange?.(result);\n },\n [onChange, is12h, showSeconds, showPeriod]\n );\n\n const handleHoursChange = (v: number | null) => {\n const clamped = v !== null ? clampHours(v, is12h) : null;\n setHours(clamped);\n emitChange(clamped, minutes, seconds, period);\n };\n\n const handleMinutesChange = (v: number | null) => {\n const clamped = v !== null ? clampMinutes(v) : null;\n setMinutes(clamped);\n emitChange(hours, clamped, seconds, period);\n };\n\n const handleSecondsChange = (v: number | null) => {\n const clamped = v !== null ? clampSeconds(v) : null;\n setSeconds(clamped);\n emitChange(hours, minutes, clamped, period);\n };\n\n const handlePeriodChange = (v: \"am\" | \"pm\") => {\n setPeriod(v);\n emitChange(hours, minutes, seconds, v);\n };\n\n const focusSegment = (index: number) => {\n segmentRefs.current[index]?.focus?.();\n };\n\n const segmentCount = showSeconds ? 3 : 2;\n const advanceFrom = (i: number) => () => {\n if (i < segmentCount - 1) focusSegment(i + 1);\n };\n const retreatFrom = (i: number) => () => {\n if (i > 0) focusSegment(i - 1);\n };\n\n const sizeStyles = theme.sizing.input(size);\n const inputColors = theme.colors.control.input;\n\n const isError = !!error;\n const isFocus = internalState === \"focus\";\n\n let backgroundColor = inputColors.bg;\n let borderColor = inputColors.border;\n let outlineColor: string | undefined;\n\n if (disabled) {\n backgroundColor = inputColors.bgDisable;\n borderColor = inputColors.borderDisable;\n } else if (isError) {\n outlineColor = theme.colors.border.alert;\n if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n }\n } else if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n outlineColor = theme.colors.border.brand;\n }\n\n const textColor = disabled ? inputColors.textDisable : inputColors.text;\n const placeholderColor = inputColors.placeholder;\n const iconColor = inputColors.placeholder;\n\n const paddingConfig: Record<\n string,\n { vertical: number; horizontal: number }\n > = {\n xl: { vertical: 12, horizontal: 12 },\n lg: { vertical: 14, horizontal: 12 },\n md: { vertical: 11, horizontal: 12 },\n sm: { vertical: 7, horizontal: 10 },\n xs: { vertical: 7, horizontal: 10 },\n };\n\n const borderRadiusConfig: Record<string, number> = {\n xl: 8,\n lg: 8,\n md: 8,\n sm: 4,\n xs: 4,\n };\n\n const iconSizeConfig: Record<string, number> = {\n xl: 22,\n lg: 20,\n md: 18,\n sm: 16,\n xs: 14,\n };\n\n const focusOutlineConfig: Record<string, { width: number; offset: number }> =\n {\n xl: { width: 1, offset: -1 },\n lg: { width: 1, offset: -1 },\n md: { width: 1, offset: -1 },\n sm: { width: 1, offset: -1 },\n xs: { width: 1, offset: -1 },\n };\n\n const padding = paddingConfig[size];\n const borderRadius = borderRadiusConfig[size];\n const iconSize = iconSizeConfig[size];\n const focusOutline = focusOutlineConfig[size];\n\n const handleContainerFocus = () => {\n if (!disabled) setInternalState(\"focus\");\n };\n const handleContainerBlur = () => {\n if (!disabled) setInternalState(\"default\");\n };\n\n const colonColor = disabled ? placeholderColor : textColor;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={sizeStyles.fieldGap}\n width=\"100%\"\n testID={testID}\n >\n <Box\n backgroundColor={backgroundColor}\n borderColor={borderColor}\n borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n borderRadius={borderRadius}\n height={sizeStyles.height}\n paddingVertical={padding.vertical}\n paddingHorizontal={padding.horizontal}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={2}\n position=\"relative\"\n style={{\n ...(outlineColor\n ? {\n outline: `${focusOutline.width}px solid ${outlineColor}`,\n outlineOffset: `${focusOutline.offset}px`,\n }\n : {}),\n }}\n hoverStyle={\n !disabled && !isFocus && !isError\n ? {\n backgroundColor: inputColors.bgHover,\n borderColor: inputColors.borderHover,\n }\n : undefined\n }\n onFocus={handleContainerFocus}\n onBlur={handleContainerBlur}\n role=\"group\"\n aria-label={ariaLabel || \"Time input\"}\n aria-describedby={error ? errorId : undefined}\n >\n {icon && (\n <Box marginRight={6} alignItems=\"center\" justifyContent=\"center\">\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<any>, {\n size: iconSize,\n color: iconColor,\n })\n : icon}\n </Box>\n )}\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[0] = el;\n }}\n value={hours}\n onChange={handleHoursChange}\n onAdvance={advanceFrom(0)}\n onRetreat={retreatFrom(0)}\n min={is12h ? 1 : 0}\n max={is12h ? 12 : 23}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Hours\"\n testID={testID ? `${testID}-hours` : undefined}\n />\n\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[1] = el;\n }}\n value={minutes}\n onChange={handleMinutesChange}\n onAdvance={advanceFrom(1)}\n onRetreat={retreatFrom(1)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Minutes\"\n testID={testID ? `${testID}-minutes` : undefined}\n />\n\n {showSeconds && (\n <>\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[2] = el;\n }}\n value={seconds}\n onChange={handleSecondsChange}\n onAdvance={advanceFrom(2)}\n onRetreat={retreatFrom(2)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Seconds\"\n testID={testID ? `${testID}-seconds` : undefined}\n />\n </>\n )}\n\n {showPeriod && (\n <PeriodToggle\n value={period}\n onChange={handlePeriodChange}\n disabled={disabled}\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n testID={testID ? `${testID}-period` : undefined}\n />\n )}\n </Box>\n\n {error && (\n <Text\n id={errorId}\n role=\"alert\"\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.fontSize - 2}\n >\n {error}\n </Text>\n )}\n </Box>\n );\n};\n\nInputTime.displayName = \"InputTime\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","import React, {\n useRef,\n useState,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, InputPrimitive } from \"@xsolla/xui-primitives\";\nimport { formatSegment, parseSegmentInput } from \"./utils\";\n\ninterface TimeSegmentProps {\n value: number | null;\n onChange: (value: number | null) => void;\n onAdvance: () => void;\n onRetreat: () => void;\n min: number;\n max: number;\n disabled?: boolean;\n placeholder?: string;\n fontSize: number;\n textColor: string;\n placeholderColor: string;\n focusColor: string;\n \"aria-label\"?: string;\n testID?: string;\n}\n\nexport const TimeSegment = forwardRef<{ focus: () => void }, TimeSegmentProps>(\n (\n {\n value,\n onChange,\n onAdvance,\n onRetreat,\n min,\n max,\n disabled = false,\n placeholder = \"--\",\n fontSize,\n textColor,\n placeholderColor,\n focusColor,\n \"aria-label\": ariaLabel,\n testID,\n },\n ref\n ) => {\n const inputRef = useRef<any>(null);\n const [editBuffer, setEditBuffer] = useState<string>(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const committedRef = useRef(false);\n const freshFocusRef = useRef(false);\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus?.(),\n }));\n\n const displayValue = isFocused\n ? editBuffer\n : value !== null\n ? formatSegment(value)\n : \"\";\n\n const commitValue = useCallback(\n (text: string) => {\n const parsed = parseSegmentInput(text);\n if (parsed !== null) {\n const clamped = Math.min(max, Math.max(min, parsed));\n onChange(clamped);\n }\n },\n [onChange, min, max]\n );\n\n const handleFocus = () => {\n setIsFocused(true);\n setEditBuffer(value !== null ? formatSegment(value) : \"\");\n committedRef.current = false;\n freshFocusRef.current = true;\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n if (!committedRef.current && editBuffer) {\n commitValue(editBuffer);\n }\n committedRef.current = false;\n setEditBuffer(\"\");\n };\n\n const extractTypedDigit = (newText: string, oldText: string): string => {\n const newDigits = newText.replace(/\\D/g, \"\");\n const oldDigits = oldText.replace(/\\D/g, \"\");\n if (newDigits.length <= oldDigits.length) return \"\";\n let remaining = newDigits;\n for (const ch of oldDigits) {\n const idx = remaining.indexOf(ch);\n if (idx !== -1) {\n remaining = remaining.slice(0, idx) + remaining.slice(idx + 1);\n }\n }\n return remaining.charAt(0);\n };\n\n const handleChangeText = (text: string) => {\n let digitsOnly = text.replace(/\\D/g, \"\");\n if (freshFocusRef.current || committedRef.current) {\n const typed = extractTypedDigit(text, displayValue);\n freshFocusRef.current = false;\n committedRef.current = false;\n if (!typed) return;\n digitsOnly = typed;\n } else {\n digitsOnly = digitsOnly.slice(-2);\n }\n setEditBuffer(digitsOnly);\n if (digitsOnly.length === 2) {\n committedRef.current = true;\n commitValue(digitsOnly);\n onAdvance();\n }\n };\n\n const handleKeyDown = (e: any) => {\n const key = e.key || e.nativeEvent?.key;\n\n if (key === \"ArrowUp\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current >= max ? min : current + 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowDown\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current <= min ? max : current - 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowRight\") {\n onAdvance();\n } else if (key === \"ArrowLeft\") {\n onRetreat();\n } else if (key === \"Backspace\" && editBuffer.length === 0) {\n onChange(null);\n onRetreat();\n } else if (key === \"Tab\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n } else if (key === \"Enter\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n inputRef.current?.blur?.();\n }\n };\n\n return (\n <Box\n onPress={() => inputRef.current?.focus?.()}\n width={fontSize * 1.5}\n height={fontSize + 8}\n justifyContent=\"center\"\n alignItems=\"center\"\n backgroundColor={isFocused ? focusColor : \"transparent\"}\n borderRadius={4}\n >\n <InputPrimitive\n ref={inputRef}\n value={displayValue}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n inputMode=\"numeric\"\n color={textColor}\n fontSize={fontSize}\n placeholderTextColor={placeholderColor}\n aria-label={ariaLabel}\n data-testid={testID}\n style={{\n textAlign: \"center\",\n width: \"100%\",\n padding: 0,\n border: \"none\",\n outline: \"none\",\n boxShadow: \"none\",\n background: \"transparent\",\n caretColor: \"transparent\",\n }}\n />\n </Box>\n );\n }\n);\n\nTimeSegment.displayName = \"TimeSegment\";\n","export function clampValue(value: number, min: number, max: number): number {\n if (isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n}\n\nexport function clampHours(value: number, is12h: boolean): number {\n return is12h ? clampValue(value, 1, 12) : clampValue(value, 0, 23);\n}\n\nexport function clampMinutes(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function clampSeconds(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function formatSegment(value: number | undefined | null): string {\n if (value === undefined || value === null) return \"\";\n return value.toString().padStart(2, \"0\");\n}\n\nexport function parseSegmentInput(text: string): number | null {\n const num = parseInt(text, 10);\n return isNaN(num) ? null : num;\n}\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\n\ninterface PeriodToggleProps {\n value: \"am\" | \"pm\";\n onChange: (value: \"am\" | \"pm\") => void;\n disabled?: boolean;\n fontSize: number;\n textColor: string;\n testID?: string;\n}\n\nexport const PeriodToggle: React.FC<PeriodToggleProps> = ({\n value,\n onChange,\n disabled = false,\n fontSize,\n textColor,\n testID,\n}) => {\n const toggle = () => {\n if (!disabled) {\n onChange(value === \"am\" ? \"pm\" : \"am\");\n }\n };\n\n return (\n <Box\n onPress={toggle}\n cursor={disabled ? \"default\" : \"pointer\"}\n justifyContent=\"center\"\n alignItems=\"center\"\n paddingHorizontal={4}\n role=\"button\"\n aria-label={`Time period: ${value.toUpperCase()}. Click to toggle.`}\n data-testid={testID}\n >\n <Text color={textColor} fontSize={fontSize} fontWeight=\"500\">\n {value}\n </Text>\n </Box>\n );\n};\n"],"mappings":"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","names":["React","useRef","useState","useCallback","jsx","jsx","forwardRef","jsx","forwardRef","jsx","jsx","useState","useRef","useCallback","React"]}
1
+ {"version":3,"sources":["../../src/InputTime.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/Text.tsx","../../../../foundation/primitives-native/src/Input.tsx","../../src/TimeSegment.tsx","../../src/utils.ts","../../src/PeriodToggle.tsx"],"sourcesContent":["import React, { useRef, useState, useEffect, useCallback } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\nimport { useDesignSystem, useId } from \"@xsolla/xui-core\";\nimport { Clock } from \"@xsolla/xui-icons-base\";\nimport { TimeSegment } from \"./TimeSegment\";\nimport { PeriodToggle } from \"./PeriodToggle\";\nimport { clampHours, clampMinutes, clampSeconds } from \"./utils\";\nimport type { InputTimeProps, TimeValue } from \"./types\";\n\nexport const InputTime: React.FC<InputTimeProps> = ({\n value,\n onChange,\n showSeconds = false,\n showPeriod = false,\n hourCycle = 24,\n icon = <Clock />,\n size = \"md\",\n disabled = false,\n error,\n \"aria-label\": ariaLabel,\n testID,\n}) => {\n const { theme } = useDesignSystem();\n const rawId = useId();\n const safeId = rawId.replace(/:/g, \"\");\n const inputId = `input-time-${safeId}`;\n const errorId = `${inputId}-error`;\n\n const [internalState, setInternalState] = useState<\"default\" | \"focus\">(\n \"default\"\n );\n\n const segmentRefs = useRef<Array<{ focus: () => void }>>([]);\n\n const is12h = hourCycle === 12;\n\n const [hours, setHours] = useState<number | null>(value?.hours ?? null);\n const [minutes, setMinutes] = useState<number | null>(value?.minutes ?? null);\n const [seconds, setSeconds] = useState<number | null>(value?.seconds ?? null);\n const [period, setPeriod] = useState<\"am\" | \"pm\">(value?.period ?? \"am\");\n\n useEffect(() => {\n if (value) {\n setHours(value.hours);\n setMinutes(value.minutes);\n setSeconds(value.seconds ?? null);\n setPeriod(value.period ?? \"am\");\n } else if (value === null) {\n setHours(null);\n setMinutes(null);\n setSeconds(null);\n setPeriod(\"am\");\n }\n }, [value]);\n\n const emitChange = useCallback(\n (h: number | null, m: number | null, s: number | null, p: \"am\" | \"pm\") => {\n if (h === null || m === null) {\n onChange?.(null);\n return;\n }\n const result: TimeValue = {\n hours: clampHours(h, is12h),\n minutes: clampMinutes(m),\n };\n if (showSeconds) {\n result.seconds = s !== null ? clampSeconds(s) : 0;\n }\n if (showPeriod) {\n result.period = p;\n }\n onChange?.(result);\n },\n [onChange, is12h, showSeconds, showPeriod]\n );\n\n const handleHoursChange = (v: number | null) => {\n const clamped = v !== null ? clampHours(v, is12h) : null;\n setHours(clamped);\n emitChange(clamped, minutes, seconds, period);\n };\n\n const handleMinutesChange = (v: number | null) => {\n const clamped = v !== null ? clampMinutes(v) : null;\n setMinutes(clamped);\n emitChange(hours, clamped, seconds, period);\n };\n\n const handleSecondsChange = (v: number | null) => {\n const clamped = v !== null ? clampSeconds(v) : null;\n setSeconds(clamped);\n emitChange(hours, minutes, clamped, period);\n };\n\n const handlePeriodChange = (v: \"am\" | \"pm\") => {\n setPeriod(v);\n emitChange(hours, minutes, seconds, v);\n };\n\n const focusSegment = (index: number) => {\n segmentRefs.current[index]?.focus?.();\n };\n\n const segmentCount = showSeconds ? 3 : 2;\n const advanceFrom = (i: number) => () => {\n if (i < segmentCount - 1) focusSegment(i + 1);\n };\n const retreatFrom = (i: number) => () => {\n if (i > 0) focusSegment(i - 1);\n };\n\n const sizeStyles = theme.sizing.input(size);\n const inputColors = theme.colors.control.input;\n\n const isError = !!error;\n const isFocus = internalState === \"focus\";\n\n let backgroundColor = inputColors.bg;\n let borderColor = inputColors.border;\n let outlineColor: string | undefined;\n\n if (disabled) {\n backgroundColor = inputColors.bgDisable;\n borderColor = inputColors.borderDisable;\n } else if (isError) {\n outlineColor = theme.colors.border.alert;\n if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n }\n } else if (isFocus) {\n backgroundColor = theme.colors.control.focus.bg;\n outlineColor = theme.colors.border.brand;\n }\n\n const textColor = disabled ? inputColors.textDisable : inputColors.text;\n const placeholderColor = inputColors.placeholder;\n const iconColor = inputColors.placeholder;\n\n const paddingConfig: Record<\n string,\n { vertical: number; horizontal: number }\n > = {\n xl: { vertical: 12, horizontal: 12 },\n lg: { vertical: 14, horizontal: 12 },\n md: { vertical: 11, horizontal: 12 },\n sm: { vertical: 7, horizontal: 10 },\n xs: { vertical: 7, horizontal: 10 },\n };\n\n const borderRadiusConfig: Record<string, number> = {\n xl: 8,\n lg: 8,\n md: 8,\n sm: 4,\n xs: 4,\n };\n\n const iconSizeConfig: Record<string, number> = {\n xl: 22,\n lg: 20,\n md: 18,\n sm: 16,\n xs: 14,\n };\n\n const focusOutlineConfig: Record<string, { width: number; offset: number }> =\n {\n xl: { width: 1, offset: -1 },\n lg: { width: 1, offset: -1 },\n md: { width: 1, offset: -1 },\n sm: { width: 1, offset: -1 },\n xs: { width: 1, offset: -1 },\n };\n\n const padding = paddingConfig[size];\n const borderRadius = borderRadiusConfig[size];\n const iconSize = iconSizeConfig[size];\n const focusOutline = focusOutlineConfig[size];\n\n const handleContainerFocus = () => {\n if (!disabled) setInternalState(\"focus\");\n };\n const handleContainerBlur = () => {\n if (!disabled) setInternalState(\"default\");\n };\n\n const colonColor = disabled ? placeholderColor : textColor;\n\n return (\n <Box\n flexDirection=\"column\"\n gap={sizeStyles.fieldGap}\n width=\"100%\"\n testID={testID}\n >\n <Box\n backgroundColor={backgroundColor}\n borderColor={borderColor}\n borderWidth={borderColor !== \"transparent\" ? 1 : 0}\n borderRadius={borderRadius}\n height={sizeStyles.height}\n paddingVertical={padding.vertical}\n paddingHorizontal={padding.horizontal}\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={2}\n position=\"relative\"\n style={{\n ...(outlineColor\n ? {\n outline: `${focusOutline.width}px solid ${outlineColor}`,\n outlineOffset: `${focusOutline.offset}px`,\n }\n : {}),\n }}\n hoverStyle={\n !disabled && !isFocus && !isError\n ? {\n backgroundColor: inputColors.bgHover,\n borderColor: inputColors.borderHover,\n }\n : undefined\n }\n onFocus={handleContainerFocus}\n onBlur={handleContainerBlur}\n role=\"group\"\n aria-label={ariaLabel || \"Time input\"}\n aria-describedby={error ? errorId : undefined}\n >\n {icon && (\n <Box marginRight={6} alignItems=\"center\" justifyContent=\"center\">\n {React.isValidElement(icon)\n ? React.cloneElement(icon as React.ReactElement<any>, {\n size: iconSize,\n color: iconColor,\n })\n : icon}\n </Box>\n )}\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[0] = el;\n }}\n value={hours}\n onChange={handleHoursChange}\n onAdvance={advanceFrom(0)}\n onRetreat={retreatFrom(0)}\n min={is12h ? 1 : 0}\n max={is12h ? 12 : 23}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Hours\"\n testID={testID ? `${testID}-hours` : undefined}\n />\n\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[1] = el;\n }}\n value={minutes}\n onChange={handleMinutesChange}\n onAdvance={advanceFrom(1)}\n onRetreat={retreatFrom(1)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Minutes\"\n testID={testID ? `${testID}-minutes` : undefined}\n />\n\n {showSeconds && (\n <>\n <Text\n color={colonColor}\n fontSize={sizeStyles.fontSize}\n fontWeight=\"500\"\n >\n :\n </Text>\n <TimeSegment\n ref={(el: any) => {\n segmentRefs.current[2] = el;\n }}\n value={seconds}\n onChange={handleSecondsChange}\n onAdvance={advanceFrom(2)}\n onRetreat={retreatFrom(2)}\n min={0}\n max={59}\n disabled={disabled}\n placeholder=\"--\"\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n placeholderColor={placeholderColor}\n focusColor={theme.colors.background.brand.primary}\n aria-label=\"Seconds\"\n testID={testID ? `${testID}-seconds` : undefined}\n />\n </>\n )}\n\n {showPeriod && (\n <PeriodToggle\n value={period}\n onChange={handlePeriodChange}\n disabled={disabled}\n fontSize={sizeStyles.fontSize}\n textColor={textColor}\n testID={testID ? `${testID}-period` : undefined}\n />\n )}\n </Box>\n\n {error && (\n <Text\n id={errorId}\n role=\"alert\"\n color={theme.colors.content.alert.primary}\n fontSize={sizeStyles.fontSize - 2}\n >\n {error}\n </Text>\n )}\n </Box>\n );\n};\n\nInputTime.displayName = \"InputTime\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n alignItems,\n justifyContent,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": _ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": _ariaDisabled,\n \"aria-live\": _ariaLive,\n className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","import React from \"react\";\nimport {\n Text as RNText,\n TextStyle,\n AccessibilityRole,\n StyleSheet,\n} from \"react-native\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleMap: Record<string, AccessibilityRole> = {\n alert: \"alert\",\n heading: \"header\",\n button: \"button\",\n link: \"link\",\n text: \"text\",\n};\n\nconst parseNumericValue = (\n value: string | number | undefined\n): number | undefined => {\n if (value === undefined) return undefined;\n if (typeof value === \"number\") return value;\n const parsed = parseFloat(value);\n return isNaN(parsed) ? undefined : parsed;\n};\n\nexport const Text: React.FC<TextProps> = ({\n children,\n color,\n fontSize,\n fontWeight,\n fontFamily,\n textAlign,\n lineHeight,\n numberOfLines,\n id,\n role,\n style: styleProp,\n ...props\n}) => {\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n const incomingStyle = StyleSheet.flatten(styleProp) as TextStyle | undefined;\n\n const baseStyle: TextStyle = {\n color: color ?? incomingStyle?.color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontWeight: fontWeight as TextStyle[\"fontWeight\"],\n fontFamily: resolvedFontFamily,\n textDecorationLine: props.textDecoration as TextStyle[\"textDecorationLine\"],\n textAlign: textAlign ?? incomingStyle?.textAlign,\n lineHeight: parseNumericValue(lineHeight ?? incomingStyle?.lineHeight),\n marginTop: parseNumericValue(\n incomingStyle?.marginTop as number | string | undefined\n ),\n marginBottom: parseNumericValue(\n incomingStyle?.marginBottom as number | string | undefined\n ),\n };\n\n const accessibilityRole = role ? roleMap[role] : undefined;\n\n return (\n <RNText\n style={baseStyle}\n numberOfLines={numberOfLines}\n testID={id}\n accessibilityRole={accessibilityRole}\n >\n {children}\n </RNText>\n );\n};\n","import React, { forwardRef } from \"react\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { InputPrimitiveProps } from \"@xsolla/xui-primitives-core\";\n\n// Map web input types to React Native keyboard types\nconst keyboardTypeMap: Record<string, any> = {\n text: \"default\",\n number: \"numeric\",\n email: \"email-address\",\n tel: \"phone-pad\",\n url: \"url\",\n decimal: \"decimal-pad\",\n};\n\n// Map web inputMode to React Native keyboard types\nconst inputModeToKeyboardType: Record<string, any> = {\n none: \"default\",\n text: \"default\",\n decimal: \"decimal-pad\",\n numeric: \"number-pad\",\n tel: \"phone-pad\",\n search: \"default\",\n email: \"email-address\",\n url: \"url\",\n};\n\n// Map web autoComplete to React Native textContentType (iOS)\nconst autoCompleteToTextContentType: Record<string, any> = {\n \"one-time-code\": \"oneTimeCode\",\n email: \"emailAddress\",\n username: \"username\",\n password: \"password\",\n \"new-password\": \"newPassword\",\n tel: \"telephoneNumber\",\n \"postal-code\": \"postalCode\",\n name: \"name\",\n};\n\nexport const InputPrimitive = forwardRef<RNTextInput, InputPrimitiveProps>(\n (\n {\n value,\n placeholder,\n onChange,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n secureTextEntry,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n type,\n inputMode,\n autoComplete,\n id,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-label\": ariaLabel,\n \"aria-disabled\": ariaDisabled,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n const handleChangeText = (text: string) => {\n onChangeText?.(text);\n\n // Create a synthetic event for onChange compatibility\n // Include nativeEvent and no-op methods to prevent runtime errors\n // when consumers expect DOM-like event behavior\n if (onChange) {\n const syntheticEvent = {\n target: { value: text },\n currentTarget: { value: text },\n type: \"change\",\n nativeEvent: { text },\n preventDefault: () => {},\n stopPropagation: () => {},\n isTrusted: false,\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n };\n\n // Determine keyboard type - inputMode takes precedence over type\n const keyboardType = inputMode\n ? inputModeToKeyboardType[inputMode] || \"default\"\n : type\n ? keyboardTypeMap[type] || \"default\"\n : \"default\";\n\n // Determine textContentType for iOS autofill\n const textContentType = autoComplete\n ? autoCompleteToTextContentType[autoComplete]\n : undefined;\n\n let resolvedFontFamily = fontFamily\n ? fontFamily.split(\",\")[0].replace(/['\"]/g, \"\").trim()\n : undefined;\n\n if (\n resolvedFontFamily === \"Pilat Wide\" ||\n resolvedFontFamily === \"Pilat Wide Bold\" ||\n resolvedFontFamily === \"Aktiv Grotesk\"\n ) {\n resolvedFontFamily = undefined;\n }\n\n return (\n <RNTextInput\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={(e) => {\n // Map onKeyPress to onKeyDown for cross-platform compatibility\n // Include preventDefault to avoid runtime errors when consumers call it\n if (onKeyDown) {\n onKeyDown({\n key: e.nativeEvent.key,\n preventDefault: () => {},\n } as any);\n }\n }}\n editable={!disabled}\n secureTextEntry={secureTextEntry || type === \"password\"}\n keyboardType={keyboardType}\n textContentType={textContentType}\n style={[\n {\n color,\n fontSize: typeof fontSize === \"number\" ? fontSize : undefined,\n fontFamily: resolvedFontFamily,\n flex: 1,\n padding: 0,\n textAlign: (style as any)?.textAlign || \"left\",\n },\n style as any,\n ]}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n // React Native accessibility props\n testID={dataTestId || id}\n accessibilityLabel={ariaLabel}\n accessibilityHint={ariaDescribedBy}\n accessibilityState={{\n disabled: disabled || ariaDisabled,\n }}\n accessible={true}\n />\n );\n }\n);\n\nInputPrimitive.displayName = \"InputPrimitive\";\n","import React, {\n useRef,\n useState,\n useCallback,\n forwardRef,\n useImperativeHandle,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, InputPrimitive } from \"@xsolla/xui-primitives\";\nimport { formatSegment, parseSegmentInput } from \"./utils\";\n\ninterface TimeSegmentProps {\n value: number | null;\n onChange: (value: number | null) => void;\n onAdvance: () => void;\n onRetreat: () => void;\n min: number;\n max: number;\n disabled?: boolean;\n placeholder?: string;\n fontSize: number;\n textColor: string;\n placeholderColor: string;\n focusColor: string;\n \"aria-label\"?: string;\n testID?: string;\n}\n\nexport const TimeSegment = forwardRef<{ focus: () => void }, TimeSegmentProps>(\n (\n {\n value,\n onChange,\n onAdvance,\n onRetreat,\n min,\n max,\n disabled = false,\n placeholder = \"--\",\n fontSize,\n textColor,\n placeholderColor,\n focusColor,\n \"aria-label\": ariaLabel,\n testID,\n },\n ref\n ) => {\n const inputRef = useRef<any>(null);\n const [editBuffer, setEditBuffer] = useState<string>(\"\");\n const [isFocused, setIsFocused] = useState(false);\n const committedRef = useRef(false);\n const freshFocusRef = useRef(false);\n\n useImperativeHandle(ref, () => ({\n focus: () => inputRef.current?.focus?.(),\n }));\n\n const displayValue = isFocused\n ? editBuffer\n : value !== null\n ? formatSegment(value)\n : \"\";\n\n const commitValue = useCallback(\n (text: string) => {\n const parsed = parseSegmentInput(text);\n if (parsed !== null) {\n const clamped = Math.min(max, Math.max(min, parsed));\n onChange(clamped);\n }\n },\n [onChange, min, max]\n );\n\n const handleFocus = () => {\n setIsFocused(true);\n setEditBuffer(value !== null ? formatSegment(value) : \"\");\n committedRef.current = false;\n freshFocusRef.current = true;\n };\n\n const handleBlur = () => {\n setIsFocused(false);\n if (!committedRef.current && editBuffer) {\n commitValue(editBuffer);\n }\n committedRef.current = false;\n setEditBuffer(\"\");\n };\n\n const extractTypedDigit = (newText: string, oldText: string): string => {\n const newDigits = newText.replace(/\\D/g, \"\");\n const oldDigits = oldText.replace(/\\D/g, \"\");\n if (newDigits.length <= oldDigits.length) return \"\";\n let remaining = newDigits;\n for (const ch of oldDigits) {\n const idx = remaining.indexOf(ch);\n if (idx !== -1) {\n remaining = remaining.slice(0, idx) + remaining.slice(idx + 1);\n }\n }\n return remaining.charAt(0);\n };\n\n const handleChangeText = (text: string) => {\n let digitsOnly = text.replace(/\\D/g, \"\");\n if (freshFocusRef.current || committedRef.current) {\n const typed = extractTypedDigit(text, displayValue);\n freshFocusRef.current = false;\n committedRef.current = false;\n if (!typed) return;\n digitsOnly = typed;\n } else {\n digitsOnly = digitsOnly.slice(-2);\n }\n setEditBuffer(digitsOnly);\n if (digitsOnly.length === 2) {\n committedRef.current = true;\n commitValue(digitsOnly);\n onAdvance();\n }\n };\n\n const handleKeyDown = (e: any) => {\n const key = e.key || e.nativeEvent?.key;\n\n if (key === \"ArrowUp\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current >= max ? min : current + 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowDown\") {\n e.preventDefault();\n const current = value ?? min;\n const next = current <= min ? max : current - 1;\n onChange(next);\n setEditBuffer(formatSegment(next));\n committedRef.current = true;\n } else if (key === \"ArrowRight\") {\n onAdvance();\n } else if (key === \"ArrowLeft\") {\n onRetreat();\n } else if (key === \"Backspace\" && editBuffer.length === 0) {\n onChange(null);\n onRetreat();\n } else if (key === \"Tab\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n } else if (key === \"Enter\") {\n if (editBuffer) {\n commitValue(editBuffer);\n }\n inputRef.current?.blur?.();\n }\n };\n\n return (\n <Box\n onPress={() => inputRef.current?.focus?.()}\n width={fontSize * 1.5}\n height={fontSize + 8}\n justifyContent=\"center\"\n alignItems=\"center\"\n backgroundColor={isFocused ? focusColor : \"transparent\"}\n borderRadius={4}\n >\n <InputPrimitive\n ref={inputRef}\n value={displayValue}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n inputMode=\"numeric\"\n color={textColor}\n fontSize={fontSize}\n placeholderTextColor={placeholderColor}\n aria-label={ariaLabel}\n data-testid={testID}\n style={{\n textAlign: \"center\",\n width: \"100%\",\n padding: 0,\n border: \"none\",\n outline: \"none\",\n boxShadow: \"none\",\n background: \"transparent\",\n caretColor: \"transparent\",\n }}\n />\n </Box>\n );\n }\n);\n\nTimeSegment.displayName = \"TimeSegment\";\n","export function clampValue(value: number, min: number, max: number): number {\n if (isNaN(value)) return min;\n return Math.min(max, Math.max(min, value));\n}\n\nexport function clampHours(value: number, is12h: boolean): number {\n return is12h ? clampValue(value, 1, 12) : clampValue(value, 0, 23);\n}\n\nexport function clampMinutes(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function clampSeconds(value: number): number {\n return clampValue(value, 0, 59);\n}\n\nexport function formatSegment(value: number | undefined | null): string {\n if (value === undefined || value === null) return \"\";\n return value.toString().padStart(2, \"0\");\n}\n\nexport function parseSegmentInput(text: string): number | null {\n const num = parseInt(text, 10);\n return isNaN(num) ? null : num;\n}\n","import React from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text } from \"@xsolla/xui-primitives\";\n\ninterface PeriodToggleProps {\n value: \"am\" | \"pm\";\n onChange: (value: \"am\" | \"pm\") => void;\n disabled?: boolean;\n fontSize: number;\n textColor: string;\n testID?: string;\n}\n\nexport const PeriodToggle: React.FC<PeriodToggleProps> = ({\n value,\n onChange,\n disabled = false,\n fontSize,\n textColor,\n testID,\n}) => {\n const toggle = () => {\n if (!disabled) {\n onChange(value === \"am\" ? \"pm\" : \"am\");\n }\n };\n\n return (\n <Box\n onPress={toggle}\n cursor={disabled ? \"default\" : \"pointer\"}\n justifyContent=\"center\"\n alignItems=\"center\"\n paddingHorizontal={4}\n role=\"button\"\n aria-label={`Time period: ${value.toUpperCase()}. Click to toggle.`}\n data-testid={testID}\n >\n <Text color={textColor} fontSize={fontSize} fontWeight=\"500\">\n {value}\n </Text>\n </Box>\n );\n};\n"],"mappings":";AAAA,OAAOA,UAAS,UAAAC,SAAQ,YAAAC,WAAU,WAAW,eAAAC,oBAAmB;;;ACChE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAKK;AA2ID;AAxIC,IAAM,MAA0B,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,oBAAoB,CAAC,aAAkC;AAAA,IAC3D,iBACE,WAAW,YAAY,kBACnB,WAAW,kBACX;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI;AAAA,EACN;AAEA,QAAM,cAAc,cAAc;AAIlC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EACL,IAAI;AAGJ,MAAI,OAAO,SAAS,KAAK;AACvB,UAAM,aAAyB;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI;AAAA,IACN;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,EAAE,KAAK,IAAI;AAAA,QACnB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAW;AAAA,QACV,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AAEA,MAAI,SAAS;AACX,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,CAAC,EAAE,QAAQ,MAAM,kBAAkB,OAAO;AAAA,QACjD,QAAQ;AAAA,QACP,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,kBAAkB;AAAA,MACzB,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;;;AC/LA;AAAA,EACE,QAAQ;AAAA,EAGR;AAAA,OACK;AAmEH,gBAAAC,YAAA;AAhEJ,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,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,WAAW,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,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,MACP;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;;;AClFA,SAAgB,kBAAkB;AAClC,SAAS,aAAa,mBAAmB;AA+GnC,gBAAAC,YAAA;AA3GN,IAAM,kBAAuC;AAAA,EAC3C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AAAA,EACL,SAAS;AACX;AAGA,IAAM,0BAA+C;AAAA,EACnD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,KAAK;AACP;AAGA,IAAM,gCAAqD;AAAA,EACzD,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,KAAK;AAAA,EACL,eAAe;AAAA,EACf,MAAM;AACR;AAEO,IAAM,iBAAiB;AAAA,EAC5B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,eAAe;AAAA,EACjB,GACA,QACG;AACH,UAAM,mBAAmB,CAAC,SAAiB;AACzC,qBAAe,IAAI;AAKnB,UAAI,UAAU;AACZ,cAAM,iBAAiB;AAAA,UACrB,QAAQ,EAAE,OAAO,KAAK;AAAA,UACtB,eAAe,EAAE,OAAO,KAAK;AAAA,UAC7B,MAAM;AAAA,UACN,aAAa,EAAE,KAAK;AAAA,UACpB,gBAAgB,MAAM;AAAA,UAAC;AAAA,UACvB,iBAAiB,MAAM;AAAA,UAAC;AAAA,UACxB,WAAW;AAAA,QACb;AACA,iBAAS,cAAc;AAAA,MACzB;AAAA,IACF;AAGA,UAAM,eAAe,YACjB,wBAAwB,SAAS,KAAK,YACtC,OACE,gBAAgB,IAAI,KAAK,YACzB;AAGN,UAAM,kBAAkB,eACpB,8BAA8B,YAAY,IAC1C;AAEJ,QAAI,qBAAqB,aACrB,WAAW,MAAM,GAAG,EAAE,CAAC,EAAE,QAAQ,SAAS,EAAE,EAAE,KAAK,IACnD;AAEJ,QACE,uBAAuB,gBACvB,uBAAuB,qBACvB,uBAAuB,iBACvB;AACA,2BAAqB;AAAA,IACvB;AAEA,WACE,gBAAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA,YAAY,CAAC,MAAM;AAGjB,cAAI,WAAW;AACb,sBAAU;AAAA,cACR,KAAK,EAAE,YAAY;AAAA,cACnB,gBAAgB,MAAM;AAAA,cAAC;AAAA,YACzB,CAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA,UAAU,CAAC;AAAA,QACX,iBAAiB,mBAAmB,SAAS;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL;AAAA,YACE;AAAA,YACA,UAAU,OAAO,aAAa,WAAW,WAAW;AAAA,YACpD,YAAY;AAAA,YACZ,MAAM;AAAA,YACN,SAAS;AAAA,YACT,WAAY,OAAe,aAAa;AAAA,UAC1C;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,QAEA,QAAQ,cAAc;AAAA,QACtB,oBAAoB;AAAA,QACpB,mBAAmB;AAAA,QACnB,oBAAoB;AAAA,UAClB,UAAU,YAAY;AAAA,QACxB;AAAA,QACA,YAAY;AAAA;AAAA,IACd;AAAA,EAEJ;AACF;AAEA,eAAe,cAAc;;;AH5J7B,SAAS,iBAAiB,aAAa;AACvC,SAAS,aAAa;;;AIJtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,OACK;;;ACNA,SAAS,WAAW,OAAe,KAAa,KAAqB;AAC1E,MAAI,MAAM,KAAK,EAAG,QAAO;AACzB,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAEO,SAAS,WAAW,OAAe,OAAwB;AAChE,SAAO,QAAQ,WAAW,OAAO,GAAG,EAAE,IAAI,WAAW,OAAO,GAAG,EAAE;AACnE;AAEO,SAAS,aAAa,OAAuB;AAClD,SAAO,WAAW,OAAO,GAAG,EAAE;AAChC;AAEO,SAAS,aAAa,OAAuB;AAClD,SAAO,WAAW,OAAO,GAAG,EAAE;AAChC;AAEO,SAAS,cAAc,OAA0C;AACtE,MAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,SAAO,MAAM,SAAS,EAAE,SAAS,GAAG,GAAG;AACzC;AAEO,SAAS,kBAAkB,MAA6B;AAC7D,QAAM,MAAM,SAAS,MAAM,EAAE;AAC7B,SAAO,MAAM,GAAG,IAAI,OAAO;AAC7B;;;ADiJQ,gBAAAC,YAAA;AA9ID,IAAM,cAAcC;AAAA,EACzB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX,cAAc;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd;AAAA,EACF,GACA,QACG;AACH,UAAM,WAAW,OAAY,IAAI;AACjC,UAAM,CAAC,YAAY,aAAa,IAAI,SAAiB,EAAE;AACvD,UAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,UAAM,eAAe,OAAO,KAAK;AACjC,UAAM,gBAAgB,OAAO,KAAK;AAElC,wBAAoB,KAAK,OAAO;AAAA,MAC9B,OAAO,MAAM,SAAS,SAAS,QAAQ;AAAA,IACzC,EAAE;AAEF,UAAM,eAAe,YACjB,aACA,UAAU,OACR,cAAc,KAAK,IACnB;AAEN,UAAM,cAAc;AAAA,MAClB,CAAC,SAAiB;AAChB,cAAM,SAAS,kBAAkB,IAAI;AACrC,YAAI,WAAW,MAAM;AACnB,gBAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,CAAC;AACnD,mBAAS,OAAO;AAAA,QAClB;AAAA,MACF;AAAA,MACA,CAAC,UAAU,KAAK,GAAG;AAAA,IACrB;AAEA,UAAM,cAAc,MAAM;AACxB,mBAAa,IAAI;AACjB,oBAAc,UAAU,OAAO,cAAc,KAAK,IAAI,EAAE;AACxD,mBAAa,UAAU;AACvB,oBAAc,UAAU;AAAA,IAC1B;AAEA,UAAM,aAAa,MAAM;AACvB,mBAAa,KAAK;AAClB,UAAI,CAAC,aAAa,WAAW,YAAY;AACvC,oBAAY,UAAU;AAAA,MACxB;AACA,mBAAa,UAAU;AACvB,oBAAc,EAAE;AAAA,IAClB;AAEA,UAAM,oBAAoB,CAAC,SAAiB,YAA4B;AACtE,YAAM,YAAY,QAAQ,QAAQ,OAAO,EAAE;AAC3C,YAAM,YAAY,QAAQ,QAAQ,OAAO,EAAE;AAC3C,UAAI,UAAU,UAAU,UAAU,OAAQ,QAAO;AACjD,UAAI,YAAY;AAChB,iBAAW,MAAM,WAAW;AAC1B,cAAM,MAAM,UAAU,QAAQ,EAAE;AAChC,YAAI,QAAQ,IAAI;AACd,sBAAY,UAAU,MAAM,GAAG,GAAG,IAAI,UAAU,MAAM,MAAM,CAAC;AAAA,QAC/D;AAAA,MACF;AACA,aAAO,UAAU,OAAO,CAAC;AAAA,IAC3B;AAEA,UAAM,mBAAmB,CAAC,SAAiB;AACzC,UAAI,aAAa,KAAK,QAAQ,OAAO,EAAE;AACvC,UAAI,cAAc,WAAW,aAAa,SAAS;AACjD,cAAM,QAAQ,kBAAkB,MAAM,YAAY;AAClD,sBAAc,UAAU;AACxB,qBAAa,UAAU;AACvB,YAAI,CAAC,MAAO;AACZ,qBAAa;AAAA,MACf,OAAO;AACL,qBAAa,WAAW,MAAM,EAAE;AAAA,MAClC;AACA,oBAAc,UAAU;AACxB,UAAI,WAAW,WAAW,GAAG;AAC3B,qBAAa,UAAU;AACvB,oBAAY,UAAU;AACtB,kBAAU;AAAA,MACZ;AAAA,IACF;AAEA,UAAM,gBAAgB,CAAC,MAAW;AAChC,YAAM,MAAM,EAAE,OAAO,EAAE,aAAa;AAEpC,UAAI,QAAQ,WAAW;AACrB,UAAE,eAAe;AACjB,cAAM,UAAU,SAAS;AACzB,cAAM,OAAO,WAAW,MAAM,MAAM,UAAU;AAC9C,iBAAS,IAAI;AACb,sBAAc,cAAc,IAAI,CAAC;AACjC,qBAAa,UAAU;AAAA,MACzB,WAAW,QAAQ,aAAa;AAC9B,UAAE,eAAe;AACjB,cAAM,UAAU,SAAS;AACzB,cAAM,OAAO,WAAW,MAAM,MAAM,UAAU;AAC9C,iBAAS,IAAI;AACb,sBAAc,cAAc,IAAI,CAAC;AACjC,qBAAa,UAAU;AAAA,MACzB,WAAW,QAAQ,cAAc;AAC/B,kBAAU;AAAA,MACZ,WAAW,QAAQ,aAAa;AAC9B,kBAAU;AAAA,MACZ,WAAW,QAAQ,eAAe,WAAW,WAAW,GAAG;AACzD,iBAAS,IAAI;AACb,kBAAU;AAAA,MACZ,WAAW,QAAQ,OAAO;AACxB,YAAI,YAAY;AACd,sBAAY,UAAU;AAAA,QACxB;AAAA,MACF,WAAW,QAAQ,SAAS;AAC1B,YAAI,YAAY;AACd,sBAAY,UAAU;AAAA,QACxB;AACA,iBAAS,SAAS,OAAO;AAAA,MAC3B;AAAA,IACF;AAEA,WACE,gBAAAD;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM,SAAS,SAAS,QAAQ;AAAA,QACzC,OAAO,WAAW;AAAA,QAClB,QAAQ,WAAW;AAAA,QACnB,gBAAe;AAAA,QACf,YAAW;AAAA,QACX,iBAAiB,YAAY,aAAa;AAAA,QAC1C,cAAc;AAAA,QAEd,0BAAAA;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,OAAO;AAAA,YACP;AAAA,YACA,cAAc;AAAA,YACd,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,WAAW;AAAA,YACX;AAAA,YACA,WAAU;AAAA,YACV,OAAO;AAAA,YACP;AAAA,YACA,sBAAsB;AAAA,YACtB,cAAY;AAAA,YACZ,eAAa;AAAA,YACb,OAAO;AAAA,cACL,WAAW;AAAA,cACX,OAAO;AAAA,cACP,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,SAAS;AAAA,cACT,WAAW;AAAA,cACX,YAAY;AAAA,cACZ,YAAY;AAAA,YACd;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;;;AEnKpB,gBAAAE,YAAA;AAzBC,IAAM,eAA4C,CAAC;AAAA,EACxD;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,SAAS,MAAM;AACnB,QAAI,CAAC,UAAU;AACb,eAAS,UAAU,OAAO,OAAO,IAAI;AAAA,IACvC;AAAA,EACF;AAEA,SACE,gBAAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS;AAAA,MACT,QAAQ,WAAW,YAAY;AAAA,MAC/B,gBAAe;AAAA,MACf,YAAW;AAAA,MACX,mBAAmB;AAAA,MACnB,MAAK;AAAA,MACL,cAAY,gBAAgB,MAAM,YAAY,CAAC;AAAA,MAC/C,eAAa;AAAA,MAEb,0BAAAA,KAAC,QAAK,OAAO,WAAW,UAAoB,YAAW,OACpD,iBACH;AAAA;AAAA,EACF;AAEJ;;;AN3BS,SAkRC,UAlRD,OAAAC,MAkRC,YAlRD;AANF,IAAM,YAAsC,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,OAAO,gBAAAA,KAAC,SAAM;AAAA,EACd,OAAO;AAAA,EACP,WAAW;AAAA,EACX;AAAA,EACA,cAAc;AAAA,EACd;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,IAAI,gBAAgB;AAClC,QAAM,QAAQ,MAAM;AACpB,QAAM,SAAS,MAAM,QAAQ,MAAM,EAAE;AACrC,QAAM,UAAU,cAAc,MAAM;AACpC,QAAM,UAAU,GAAG,OAAO;AAE1B,QAAM,CAAC,eAAe,gBAAgB,IAAIC;AAAA,IACxC;AAAA,EACF;AAEA,QAAM,cAAcC,QAAqC,CAAC,CAAC;AAE3D,QAAM,QAAQ,cAAc;AAE5B,QAAM,CAAC,OAAO,QAAQ,IAAID,UAAwB,OAAO,SAAS,IAAI;AACtE,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAwB,OAAO,WAAW,IAAI;AAC5E,QAAM,CAAC,SAAS,UAAU,IAAIA,UAAwB,OAAO,WAAW,IAAI;AAC5E,QAAM,CAAC,QAAQ,SAAS,IAAIA,UAAsB,OAAO,UAAU,IAAI;AAEvE,YAAU,MAAM;AACd,QAAI,OAAO;AACT,eAAS,MAAM,KAAK;AACpB,iBAAW,MAAM,OAAO;AACxB,iBAAW,MAAM,WAAW,IAAI;AAChC,gBAAU,MAAM,UAAU,IAAI;AAAA,IAChC,WAAW,UAAU,MAAM;AACzB,eAAS,IAAI;AACb,iBAAW,IAAI;AACf,iBAAW,IAAI;AACf,gBAAU,IAAI;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,aAAaE;AAAA,IACjB,CAAC,GAAkB,GAAkB,GAAkB,MAAmB;AACxE,UAAI,MAAM,QAAQ,MAAM,MAAM;AAC5B,mBAAW,IAAI;AACf;AAAA,MACF;AACA,YAAM,SAAoB;AAAA,QACxB,OAAO,WAAW,GAAG,KAAK;AAAA,QAC1B,SAAS,aAAa,CAAC;AAAA,MACzB;AACA,UAAI,aAAa;AACf,eAAO,UAAU,MAAM,OAAO,aAAa,CAAC,IAAI;AAAA,MAClD;AACA,UAAI,YAAY;AACd,eAAO,SAAS;AAAA,MAClB;AACA,iBAAW,MAAM;AAAA,IACnB;AAAA,IACA,CAAC,UAAU,OAAO,aAAa,UAAU;AAAA,EAC3C;AAEA,QAAM,oBAAoB,CAAC,MAAqB;AAC9C,UAAM,UAAU,MAAM,OAAO,WAAW,GAAG,KAAK,IAAI;AACpD,aAAS,OAAO;AAChB,eAAW,SAAS,SAAS,SAAS,MAAM;AAAA,EAC9C;AAEA,QAAM,sBAAsB,CAAC,MAAqB;AAChD,UAAM,UAAU,MAAM,OAAO,aAAa,CAAC,IAAI;AAC/C,eAAW,OAAO;AAClB,eAAW,OAAO,SAAS,SAAS,MAAM;AAAA,EAC5C;AAEA,QAAM,sBAAsB,CAAC,MAAqB;AAChD,UAAM,UAAU,MAAM,OAAO,aAAa,CAAC,IAAI;AAC/C,eAAW,OAAO;AAClB,eAAW,OAAO,SAAS,SAAS,MAAM;AAAA,EAC5C;AAEA,QAAM,qBAAqB,CAAC,MAAmB;AAC7C,cAAU,CAAC;AACX,eAAW,OAAO,SAAS,SAAS,CAAC;AAAA,EACvC;AAEA,QAAM,eAAe,CAAC,UAAkB;AACtC,gBAAY,QAAQ,KAAK,GAAG,QAAQ;AAAA,EACtC;AAEA,QAAM,eAAe,cAAc,IAAI;AACvC,QAAM,cAAc,CAAC,MAAc,MAAM;AACvC,QAAI,IAAI,eAAe,EAAG,cAAa,IAAI,CAAC;AAAA,EAC9C;AACA,QAAM,cAAc,CAAC,MAAc,MAAM;AACvC,QAAI,IAAI,EAAG,cAAa,IAAI,CAAC;AAAA,EAC/B;AAEA,QAAM,aAAa,MAAM,OAAO,MAAM,IAAI;AAC1C,QAAM,cAAc,MAAM,OAAO,QAAQ;AAEzC,QAAM,UAAU,CAAC,CAAC;AAClB,QAAM,UAAU,kBAAkB;AAElC,MAAI,kBAAkB,YAAY;AAClC,MAAI,cAAc,YAAY;AAC9B,MAAI;AAEJ,MAAI,UAAU;AACZ,sBAAkB,YAAY;AAC9B,kBAAc,YAAY;AAAA,EAC5B,WAAW,SAAS;AAClB,mBAAe,MAAM,OAAO,OAAO;AACnC,QAAI,SAAS;AACX,wBAAkB,MAAM,OAAO,QAAQ,MAAM;AAAA,IAC/C;AAAA,EACF,WAAW,SAAS;AAClB,sBAAkB,MAAM,OAAO,QAAQ,MAAM;AAC7C,mBAAe,MAAM,OAAO,OAAO;AAAA,EACrC;AAEA,QAAM,YAAY,WAAW,YAAY,cAAc,YAAY;AACnE,QAAM,mBAAmB,YAAY;AACrC,QAAM,YAAY,YAAY;AAE9B,QAAM,gBAGF;AAAA,IACF,IAAI,EAAE,UAAU,IAAI,YAAY,GAAG;AAAA,IACnC,IAAI,EAAE,UAAU,IAAI,YAAY,GAAG;AAAA,IACnC,IAAI,EAAE,UAAU,IAAI,YAAY,GAAG;AAAA,IACnC,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG;AAAA,IAClC,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG;AAAA,EACpC;AAEA,QAAM,qBAA6C;AAAA,IACjD,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,QAAM,iBAAyC;AAAA,IAC7C,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN;AAEA,QAAM,qBACJ;AAAA,IACE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,IAC3B,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG;AAAA,EAC7B;AAEF,QAAM,UAAU,cAAc,IAAI;AAClC,QAAM,eAAe,mBAAmB,IAAI;AAC5C,QAAM,WAAW,eAAe,IAAI;AACpC,QAAM,eAAe,mBAAmB,IAAI;AAE5C,QAAM,uBAAuB,MAAM;AACjC,QAAI,CAAC,SAAU,kBAAiB,OAAO;AAAA,EACzC;AACA,QAAM,sBAAsB,MAAM;AAChC,QAAI,CAAC,SAAU,kBAAiB,SAAS;AAAA,EAC3C;AAEA,QAAM,aAAa,WAAW,mBAAmB;AAEjD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,KAAK,WAAW;AAAA,MAChB,OAAM;AAAA,MACN;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,aAAa,gBAAgB,gBAAgB,IAAI;AAAA,YACjD;AAAA,YACA,QAAQ,WAAW;AAAA,YACnB,iBAAiB,QAAQ;AAAA,YACzB,mBAAmB,QAAQ;AAAA,YAC3B,eAAc;AAAA,YACd,YAAW;AAAA,YACX,KAAK;AAAA,YACL,UAAS;AAAA,YACT,OAAO;AAAA,cACL,GAAI,eACA;AAAA,gBACE,SAAS,GAAG,aAAa,KAAK,YAAY,YAAY;AAAA,gBACtD,eAAe,GAAG,aAAa,MAAM;AAAA,cACvC,IACA,CAAC;AAAA,YACP;AAAA,YACA,YACE,CAAC,YAAY,CAAC,WAAW,CAAC,UACtB;AAAA,cACE,iBAAiB,YAAY;AAAA,cAC7B,aAAa,YAAY;AAAA,YAC3B,IACA;AAAA,YAEN,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,MAAK;AAAA,YACL,cAAY,aAAa;AAAA,YACzB,oBAAkB,QAAQ,UAAU;AAAA,YAEnC;AAAA,sBACC,gBAAAH,KAAC,OAAI,aAAa,GAAG,YAAW,UAAS,gBAAe,UACrD,UAAAI,OAAM,eAAe,IAAI,IACtBA,OAAM,aAAa,MAAiC;AAAA,gBAClD,MAAM;AAAA,gBACN,OAAO;AAAA,cACT,CAAC,IACD,MACN;AAAA,cAGF,gBAAAJ;AAAA,gBAAC;AAAA;AAAA,kBACC,KAAK,CAAC,OAAY;AAChB,gCAAY,QAAQ,CAAC,IAAI;AAAA,kBAC3B;AAAA,kBACA,OAAO;AAAA,kBACP,UAAU;AAAA,kBACV,WAAW,YAAY,CAAC;AAAA,kBACxB,WAAW,YAAY,CAAC;AAAA,kBACxB,KAAK,QAAQ,IAAI;AAAA,kBACjB,KAAK,QAAQ,KAAK;AAAA,kBAClB;AAAA,kBACA,aAAY;AAAA,kBACZ,UAAU,WAAW;AAAA,kBACrB;AAAA,kBACA;AAAA,kBACA,YAAY,MAAM,OAAO,WAAW,MAAM;AAAA,kBAC1C,cAAW;AAAA,kBACX,QAAQ,SAAS,GAAG,MAAM,WAAW;AAAA;AAAA,cACvC;AAAA,cAEA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,kBACP,UAAU,WAAW;AAAA,kBACrB,YAAW;AAAA,kBACZ;AAAA;AAAA,cAED;AAAA,cAEA,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,KAAK,CAAC,OAAY;AAChB,gCAAY,QAAQ,CAAC,IAAI;AAAA,kBAC3B;AAAA,kBACA,OAAO;AAAA,kBACP,UAAU;AAAA,kBACV,WAAW,YAAY,CAAC;AAAA,kBACxB,WAAW,YAAY,CAAC;AAAA,kBACxB,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL;AAAA,kBACA,aAAY;AAAA,kBACZ,UAAU,WAAW;AAAA,kBACrB;AAAA,kBACA;AAAA,kBACA,YAAY,MAAM,OAAO,WAAW,MAAM;AAAA,kBAC1C,cAAW;AAAA,kBACX,QAAQ,SAAS,GAAG,MAAM,aAAa;AAAA;AAAA,cACzC;AAAA,cAEC,eACC,iCACE;AAAA,gCAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO;AAAA,oBACP,UAAU,WAAW;AAAA,oBACrB,YAAW;AAAA,oBACZ;AAAA;AAAA,gBAED;AAAA,gBACA,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,KAAK,CAAC,OAAY;AAChB,kCAAY,QAAQ,CAAC,IAAI;AAAA,oBAC3B;AAAA,oBACA,OAAO;AAAA,oBACP,UAAU;AAAA,oBACV,WAAW,YAAY,CAAC;AAAA,oBACxB,WAAW,YAAY,CAAC;AAAA,oBACxB,KAAK;AAAA,oBACL,KAAK;AAAA,oBACL;AAAA,oBACA,aAAY;AAAA,oBACZ,UAAU,WAAW;AAAA,oBACrB;AAAA,oBACA;AAAA,oBACA,YAAY,MAAM,OAAO,WAAW,MAAM;AAAA,oBAC1C,cAAW;AAAA,oBACX,QAAQ,SAAS,GAAG,MAAM,aAAa;AAAA;AAAA,gBACzC;AAAA,iBACF;AAAA,cAGD,cACC,gBAAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,OAAO;AAAA,kBACP,UAAU;AAAA,kBACV;AAAA,kBACA,UAAU,WAAW;AAAA,kBACrB;AAAA,kBACA,QAAQ,SAAS,GAAG,MAAM,YAAY;AAAA;AAAA,cACxC;AAAA;AAAA;AAAA,QAEJ;AAAA,QAEC,SACC,gBAAAA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,MAAK;AAAA,YACL,OAAO,MAAM,OAAO,QAAQ,MAAM;AAAA,YAClC,UAAU,WAAW,WAAW;AAAA,YAE/B;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;AAEA,UAAU,cAAc;","names":["React","useRef","useState","useCallback","jsx","jsx","forwardRef","jsx","forwardRef","jsx","jsx","useState","useRef","useCallback","React"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xsolla/xui-input-time",
3
- "version": "0.141.0",
3
+ "version": "0.147.1",
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.141.0",
17
- "@xsolla/xui-icons-base": "0.141.0",
18
- "@xsolla/xui-primitives-core": "0.141.0"
16
+ "@xsolla/xui-core": "0.147.1",
17
+ "@xsolla/xui-icons-base": "0.147.1",
18
+ "@xsolla/xui-primitives-core": "0.147.1"
19
19
  },
20
20
  "peerDependencies": {
21
21
  "react": ">=16.8.0",
package/web/index.js CHANGED
@@ -37,14 +37,14 @@ module.exports = __toCommonJS(index_exports);
37
37
  // src/InputTime.tsx
38
38
  var import_react5 = __toESM(require("react"));
39
39
 
40
- // ../primitives-web/src/Box.tsx
40
+ // ../../foundation/primitives-web/src/Box.tsx
41
41
  var import_react2 = __toESM(require("react"));
42
42
  var import_styled_components = __toESM(require("styled-components"));
43
43
 
44
- // ../primitives-web/src/filterDOMProps.ts
44
+ // ../../foundation/primitives-web/src/filterDOMProps.ts
45
45
  var import_react = __toESM(require("react"));
46
46
 
47
- // ../../node_modules/@emotion/memoize/dist/memoize.esm.js
47
+ // ../../../node_modules/@emotion/memoize/dist/memoize.esm.js
48
48
  function memoize(fn) {
49
49
  var cache = {};
50
50
  return function(arg) {
@@ -54,7 +54,7 @@ function memoize(fn) {
54
54
  }
55
55
  var memoize_esm_default = memoize;
56
56
 
57
- // ../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js
57
+ // ../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js
58
58
  var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/;
59
59
  var index = memoize_esm_default(
60
60
  function(prop) {
@@ -64,7 +64,7 @@ var index = memoize_esm_default(
64
64
  );
65
65
  var is_prop_valid_esm_default = index;
66
66
 
67
- // ../primitives-web/src/filterDOMProps.ts
67
+ // ../../foundation/primitives-web/src/filterDOMProps.ts
68
68
  var ADDITIONAL_BLOCKED_PROPS = /* @__PURE__ */ new Set([
69
69
  // RN-only event handlers (pass isPropValid's on* pattern)
70
70
  "onPress",
@@ -110,7 +110,7 @@ function createFilteredElement(defaultTag) {
110
110
  return Component;
111
111
  }
112
112
 
113
- // ../primitives-web/src/Box.tsx
113
+ // ../../foundation/primitives-web/src/Box.tsx
114
114
  var import_jsx_runtime = require("react/jsx-runtime");
115
115
  var FilteredDiv = createFilteredElement("div");
116
116
  var StyledBox = (0, import_styled_components.default)(FilteredDiv)`
@@ -283,7 +283,7 @@ var Box = import_react2.default.forwardRef(
283
283
  );
284
284
  Box.displayName = "Box";
285
285
 
286
- // ../primitives-web/src/Text.tsx
286
+ // ../../foundation/primitives-web/src/Text.tsx
287
287
  var import_styled_components2 = __toESM(require("styled-components"));
288
288
  var import_jsx_runtime2 = require("react/jsx-runtime");
289
289
  var FilteredSpan = createFilteredElement("span");
@@ -317,7 +317,7 @@ var Text = ({
317
317
  );
318
318
  };
319
319
 
320
- // ../primitives-web/src/Input.tsx
320
+ // ../../foundation/primitives-web/src/Input.tsx
321
321
  var import_react3 = require("react");
322
322
  var import_styled_components3 = __toESM(require("styled-components"));
323
323
  var import_jsx_runtime3 = require("react/jsx-runtime");