@xsolla/xui-input-time 0.140.0-pr246.1776914902 → 0.141.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,164 @@
1
+ # Input Time
2
+
3
+ A structured time input component for entering hours, minutes, and optionally seconds. Supports 12h and 24h formats with an optional AM/PM toggle. Cross-platform (web and React Native).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @xsolla/xui-input-time
9
+ # or
10
+ yarn add @xsolla/xui-input-time
11
+ ```
12
+
13
+ ## Demo
14
+
15
+ ### Basic Usage
16
+
17
+ ```tsx
18
+ import * as React from 'react';
19
+ import { InputTime } from '@xsolla/xui-input-time';
20
+ import type { TimeValue } from '@xsolla/xui-input-time';
21
+
22
+ export default function BasicTime() {
23
+ const [value, setValue] = React.useState<TimeValue | null>(null);
24
+
25
+ return <InputTime value={value} onChange={setValue} />;
26
+ }
27
+ ```
28
+
29
+ ### With Seconds
30
+
31
+ ```tsx
32
+ import * as React from 'react';
33
+ import { InputTime } from '@xsolla/xui-input-time';
34
+ import type { TimeValue } from '@xsolla/xui-input-time';
35
+
36
+ export default function WithSeconds() {
37
+ const [value, setValue] = React.useState<TimeValue | null>(null);
38
+
39
+ return <InputTime value={value} onChange={setValue} showSeconds />;
40
+ }
41
+ ```
42
+
43
+ ### 12-Hour Format with AM/PM
44
+
45
+ ```tsx
46
+ import * as React from 'react';
47
+ import { InputTime } from '@xsolla/xui-input-time';
48
+ import type { TimeValue } from '@xsolla/xui-input-time';
49
+
50
+ export default function TwelveHour() {
51
+ const [value, setValue] = React.useState<TimeValue | null>({
52
+ hours: 3,
53
+ minutes: 30,
54
+ period: 'pm',
55
+ });
56
+
57
+ return (
58
+ <InputTime
59
+ value={value}
60
+ onChange={setValue}
61
+ hourCycle={12}
62
+ showPeriod
63
+ />
64
+ );
65
+ }
66
+ ```
67
+
68
+ ### Custom Icon
69
+
70
+ A Clock icon is displayed by default. Pass a custom icon via the `icon` prop, or set `icon={null}` to hide it.
71
+
72
+ ```tsx
73
+ import * as React from 'react';
74
+ import { InputTime } from '@xsolla/xui-input-time';
75
+ import { Clock } from '@xsolla/xui-icons-base';
76
+ import type { TimeValue } from '@xsolla/xui-input-time';
77
+
78
+ export default function CustomIcon() {
79
+ const [value, setValue] = React.useState<TimeValue | null>(null);
80
+
81
+ return (
82
+ <InputTime
83
+ value={value}
84
+ onChange={setValue}
85
+ icon={<Clock variant="solid" />}
86
+ />
87
+ );
88
+ }
89
+ ```
90
+
91
+ ### Different Sizes
92
+
93
+ ```tsx
94
+ import * as React from 'react';
95
+ import { InputTime } from '@xsolla/xui-input-time';
96
+
97
+ export default function Sizes() {
98
+ return (
99
+ <div style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>
100
+ <InputTime size="xl" />
101
+ <InputTime size="lg" />
102
+ <InputTime size="md" />
103
+ <InputTime size="sm" />
104
+ <InputTime size="xs" />
105
+ </div>
106
+ );
107
+ }
108
+ ```
109
+
110
+ ## API Reference
111
+
112
+ ### InputTime
113
+
114
+ **InputTimeProps:**
115
+
116
+ | Prop | Type | Default | Description |
117
+ | :--- | :--- | :------ | :---------- |
118
+ | value | `TimeValue \| null` | - | Current time value. |
119
+ | onChange | `(value: TimeValue \| null) => void` | - | Time change callback. |
120
+ | showSeconds | `boolean` | `false` | Show seconds segment (HH:MM:SS). |
121
+ | showPeriod | `boolean` | `false` | Show AM/PM toggle. |
122
+ | hourCycle | `12 \| 24` | `24` | Hour format (12h or 24h). |
123
+ | icon | `ReactNode` | `<Clock />` | Icon displayed on the left. Set to `null` to hide. |
124
+ | size | `"xl" \| "lg" \| "md" \| "sm" \| "xs"` | `"md"` | Input size variant. |
125
+ | disabled | `boolean` | `false` | Disable the input. |
126
+ | error | `string` | - | Error message (shows error state). |
127
+ | aria-label | `string` | `"Time input"` | Accessible label. |
128
+ | testID | `string` | - | Test identifier. |
129
+
130
+ ### TimeValue
131
+
132
+ | Property | Type | Description |
133
+ | :--- | :--- | :---------- |
134
+ | hours | `number` | Hours (0-23 for 24h, 1-12 for 12h). |
135
+ | minutes | `number` | Minutes (0-59). |
136
+ | seconds | `number` (optional) | Seconds (0-59). Present when `showSeconds` is true. |
137
+ | period | `"am" \| "pm"` (optional) | Time period. Present when `showPeriod` is true. |
138
+
139
+ ## Keyboard Navigation
140
+
141
+ | Key | Action |
142
+ | :--- | :--- |
143
+ | 0-9 | Type digit. Auto-advances to next segment after 2 digits. |
144
+ | Tab | Move to next segment. |
145
+ | Shift+Tab | Move to previous segment. |
146
+ | ArrowUp | Increment focused segment by 1. |
147
+ | ArrowDown | Decrement focused segment by 1. |
148
+ | ArrowRight | Move to next segment. |
149
+ | ArrowLeft | Move to previous segment. |
150
+ | Backspace | Clear segment and move back. |
151
+
152
+ ## Validation
153
+
154
+ Values are clamped to valid ranges automatically:
155
+ - Hours: 0-23 (24h) or 1-12 (12h)
156
+ - Minutes: 0-59
157
+ - Seconds: 0-59
158
+
159
+ ## Accessibility
160
+
161
+ - Each segment has an `aria-label` ("Hours", "Minutes", "Seconds")
162
+ - Error messages use `role="alert"`
163
+ - AM/PM toggle is a button with descriptive `aria-label`
164
+ - Segments are grouped with `role="group"`
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
- // ../../foundation/primitives-native/src/Box.tsx
40
+ // ../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
- // ../../foundation/primitives-native/src/Text.tsx
214
+ // ../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
- // ../../foundation/primitives-native/src/Input.tsx
277
+ // ../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");
@@ -320,6 +320,7 @@ var InputPrimitive = (0, import_react.forwardRef)(
320
320
  style,
321
321
  color,
322
322
  fontSize,
323
+ fontFamily,
323
324
  placeholderTextColor,
324
325
  maxLength,
325
326
  type,
@@ -350,6 +351,10 @@ var InputPrimitive = (0, import_react.forwardRef)(
350
351
  };
351
352
  const keyboardType = inputMode ? inputModeToKeyboardType[inputMode] || "default" : type ? keyboardTypeMap[type] || "default" : "default";
352
353
  const textContentType = autoComplete ? autoCompleteToTextContentType[autoComplete] : void 0;
354
+ let resolvedFontFamily = fontFamily ? fontFamily.split(",")[0].replace(/['"]/g, "").trim() : void 0;
355
+ if (resolvedFontFamily === "Pilat Wide" || resolvedFontFamily === "Pilat Wide Bold" || resolvedFontFamily === "Aktiv Grotesk") {
356
+ resolvedFontFamily = void 0;
357
+ }
353
358
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
354
359
  import_react_native3.TextInput,
355
360
  {
@@ -376,6 +381,7 @@ var InputPrimitive = (0, import_react.forwardRef)(
376
381
  {
377
382
  color,
378
383
  fontSize: typeof fontSize === "number" ? fontSize : void 0,
384
+ fontFamily: resolvedFontFamily,
379
385
  flex: 1,
380
386
  padding: 0,
381
387
  textAlign: style?.textAlign || "left"
@@ -1 +1 @@
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 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 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 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","../../../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"]}
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
- // ../../foundation/primitives-native/src/Box.tsx
4
+ // ../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
- // ../../foundation/primitives-native/src/Text.tsx
182
+ // ../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
- // ../../foundation/primitives-native/src/Input.tsx
248
+ // ../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";
@@ -291,6 +291,7 @@ var InputPrimitive = forwardRef(
291
291
  style,
292
292
  color,
293
293
  fontSize,
294
+ fontFamily,
294
295
  placeholderTextColor,
295
296
  maxLength,
296
297
  type,
@@ -321,6 +322,10 @@ var InputPrimitive = forwardRef(
321
322
  };
322
323
  const keyboardType = inputMode ? inputModeToKeyboardType[inputMode] || "default" : type ? keyboardTypeMap[type] || "default" : "default";
323
324
  const textContentType = autoComplete ? autoCompleteToTextContentType[autoComplete] : void 0;
325
+ let resolvedFontFamily = fontFamily ? fontFamily.split(",")[0].replace(/['"]/g, "").trim() : void 0;
326
+ if (resolvedFontFamily === "Pilat Wide" || resolvedFontFamily === "Pilat Wide Bold" || resolvedFontFamily === "Aktiv Grotesk") {
327
+ resolvedFontFamily = void 0;
328
+ }
324
329
  return /* @__PURE__ */ jsx3(
325
330
  RNTextInput,
326
331
  {
@@ -347,6 +352,7 @@ var InputPrimitive = forwardRef(
347
352
  {
348
353
  color,
349
354
  fontSize: typeof fontSize === "number" ? fontSize : void 0,
355
+ fontFamily: resolvedFontFamily,
350
356
  flex: 1,
351
357
  padding: 0,
352
358
  textAlign: style?.textAlign || "left"