@scripso-homepad/ui 0.4.25 → 0.4.27
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/dist/{chunk-N73KHOZ4.js → chunk-AOBKWDGW.js} +17 -3
- package/dist/chunk-AOBKWDGW.js.map +1 -0
- package/dist/index.cjs +15 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +16 -1
- package/dist/index.d.ts +16 -1
- package/dist/index.js +2 -2
- package/dist/web/index.cjs +127 -53
- package/dist/web/index.cjs.map +1 -1
- package/dist/web/index.js +128 -54
- package/dist/web/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/theme/tokens.ts +16 -0
- package/src/web/layout/Sidebar.tsx +20 -21
- package/src/web/layout/SidebarNavItem.tsx +2 -2
- package/src/web/layout/SidebarUserCard.tsx +99 -20
- package/dist/chunk-N73KHOZ4.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/icons/arrowUpRightPath.ts","../src/icons/ArrowUpRightIcon.tsx","../src/theme/tokens.ts","../src/utils/useApplyWebClassName.ts","../src/components/Button.tsx","../src/icons/eyeIconPaths.ts","../src/icons/EyeIcon.tsx","../src/icons/EyeOffIcon.tsx","../src/theme/input.ts","../src/components/Label.tsx","../src/components/Input.tsx","../src/icons/chevronDownPath.ts","../src/icons/ChevronDownIcon.tsx","../src/theme/select.ts","../src/utils/countryDropdownScrollStyles.ts","../src/utils/formatMultiSelectDisplay.ts","../src/components/Select.tsx","../src/data/countries.ts","../src/utils/countryFlag.ts","../src/components/CountryFlag.tsx","../src/components/CountryCodeSelector.tsx","../src/components/PhoneInput.tsx","../src/icons/chevronNavPaths.ts","../src/icons/ChevronNavIcons.tsx","../src/theme/calendar.ts","../src/utils/calendarDays.ts","../src/utils/calendarLocalization.ts","../src/utils/calendarLocaleContext.tsx","../src/components/Calendar.tsx","../src/icons/calendarIconPaths.ts","../src/icons/CalendarIcon.tsx","../src/components/DatePicker.tsx","../src/icons/lockIconPaths.ts","../src/icons/LockIcon.tsx"],"names":["jsx","Svg","Path","useLayoutEffect","Platform","useRef","jsxs","TouchableOpacity","Text","View","StyleSheet","styles","isValidElement","cloneElement","useState","Pressable","TextInput","INPUT_OUTLINE_WIDTH","createOutlineStyle","defaultOutline","Dimensions","useEffect","Animated","useMemo","Easing","Modal","ScrollView","Image","createContext","useContext","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["export const ARROW_UP_RIGHT_PATH =\n \"M14.1667 14.1668V5.8335H5.83333M14.1667 5.8335L5.83333 14.1668\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { ARROW_UP_RIGHT_PATH } from \"./arrowUpRightPath\";\n\nexport { ARROW_UP_RIGHT_PATH } from \"./arrowUpRightPath\";\n\ninterface ArrowUpRightIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — react-native-svg (peer dependency). */\nexport function ArrowUpRightIcon({\n size = 20,\n color = \"#082640\",\n strokeWidth = 2,\n}: ArrowUpRightIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={ARROW_UP_RIGHT_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","/**\n * HomePad design tokens — aligned with the Figma design system\n * (navy / storm gray / slate-blue palette from HomePad brand).\n */\n\n/** Storm Gray scale — Figma steps 0 → 8.5 */\nexport const stormGray = {\n \"0\": \"#fbfcfc\",\n \"0.5\": \"#eceef0\",\n \"1\": \"#dadde0\",\n \"1.5\": \"#c7cdd1\",\n \"2\": \"#b5bcc1\",\n \"3\": \"#8f9aa3\",\n \"4\": \"#6a7984\",\n \"5\": \"#455765\",\n \"6\": \"#374651\",\n \"7\": \"#29343d\",\n \"8\": \"#1c2328\",\n \"8.5\": \"#151a1e\",\n} as const;\n\nexport type StormGrayStep = keyof typeof stormGray;\n\n/** Navy scale — Figma steps 0 → 8.5 */\nexport const navy = {\n \"0\": \"#f6fafe\",\n \"0.5\": \"#dee5eb\",\n \"1\": \"#c6d0d8\",\n \"1.5\": \"#afbac5\",\n \"2\": \"#97a5b2\",\n \"3\": \"#677b8c\",\n \"4\": \"#385066\",\n \"5\": \"#082640\",\n \"6\": \"#061e33\",\n \"7\": \"#051726\",\n \"8\": \"#030f1a\",\n \"8.5\": \"#020b13\",\n} as const;\n\nexport type NavyStep = keyof typeof navy;\n\n/** Ruby Red scale — Figma steps 0 → 8.5 */\nexport const rubyRed = {\n \"0\": \"#fff5f6\",\n \"0.5\": \"#f7dddf\",\n \"1\": \"#efc4c8\",\n \"1.5\": \"#e7acb1\",\n \"2\": \"#df939a\",\n \"3\": \"#ce626d\",\n \"4\": \"#be313f\",\n \"5\": \"#ae0011\",\n \"6\": \"#8b000e\",\n \"7\": \"#68000a\",\n \"8\": \"#460007\",\n \"8.5\": \"#340005\",\n} as const;\n\nexport type RubyRedStep = keyof typeof rubyRed;\n\n/** Emerald Green scale — Figma steps 0 → 8.5 */\nexport const emeraldGreen = {\n \"0\": \"#f0fbf5\",\n \"0.5\": \"#dcf2e5\",\n \"1\": \"#c8e8d5\",\n \"1.5\": \"#b4dfc5\",\n \"2\": \"#a0d5b5\",\n \"3\": \"#77c394\",\n \"4\": \"#4fb074\",\n \"5\": \"#279d54\",\n \"6\": \"#1f7e43\",\n \"7\": \"#175e32\",\n \"8\": \"#103f22\",\n \"8.5\": \"#0c2f19\",\n} as const;\n\nexport type EmeraldGreenStep = keyof typeof emeraldGreen;\n\n/** Figma brand palette — primary swatch per color family */\nexport const brand = {\n slateBlue: \"#182e3c\",\n stormGray: stormGray[\"5\"],\n navy: navy[\"5\"],\n rubyRed: rubyRed[\"5\"],\n emeraldGreen: emeraldGreen[\"5\"],\n} as const;\n\nexport const colors = {\n // Brand colors\n slateBlue: brand.slateBlue,\n\n // Emerald Green — Figma scale + brand swatch\n emeraldGreen0: emeraldGreen[\"0\"],\n emeraldGreen50: emeraldGreen[\"0.5\"],\n emeraldGreen100: emeraldGreen[\"1\"],\n emeraldGreen150: emeraldGreen[\"1.5\"],\n emeraldGreen200: emeraldGreen[\"2\"],\n emeraldGreen300: emeraldGreen[\"3\"],\n emeraldGreen400: emeraldGreen[\"4\"],\n emeraldGreen500: emeraldGreen[\"5\"],\n emeraldGreen600: emeraldGreen[\"6\"],\n emeraldGreen700: emeraldGreen[\"7\"],\n emeraldGreen800: emeraldGreen[\"8\"],\n emeraldGreen850: emeraldGreen[\"8.5\"],\n\n /** Primary brand emerald green — Figma Emerald Green 5 */\n emeraldGreen: brand.emeraldGreen,\n\n // Ruby Red — Figma scale + brand swatch\n rubyRed0: rubyRed[\"0\"],\n rubyRed50: rubyRed[\"0.5\"],\n rubyRed100: rubyRed[\"1\"],\n rubyRed150: rubyRed[\"1.5\"],\n rubyRed200: rubyRed[\"2\"],\n rubyRed300: rubyRed[\"3\"],\n rubyRed400: rubyRed[\"4\"],\n rubyRed500: rubyRed[\"5\"],\n rubyRed600: rubyRed[\"6\"],\n rubyRed700: rubyRed[\"7\"],\n rubyRed800: rubyRed[\"8\"],\n rubyRed850: rubyRed[\"8.5\"],\n\n /** Primary brand ruby red — Figma Ruby Red 5 */\n rubyRed: brand.rubyRed,\n\n // Navy — Figma scale + brand swatch\n navy0: navy[\"0\"],\n navy50: navy[\"0.5\"],\n navy100: navy[\"1\"],\n navy150: navy[\"1.5\"],\n navy200: navy[\"2\"],\n navy300: navy[\"3\"],\n navy400: navy[\"4\"],\n navy500: navy[\"5\"],\n navy600: navy[\"6\"],\n navy700: navy[\"7\"],\n navy800: navy[\"8\"],\n navy850: navy[\"8.5\"],\n\n /** Primary brand navy — Figma Navy 5 */\n navy: brand.navy,\n\n // Storm Gray — Figma scale + brand swatch\n stormGray0: stormGray[\"0\"],\n stormGray50: stormGray[\"0.5\"],\n stormGray100: stormGray[\"1\"],\n stormGray150: stormGray[\"1.5\"],\n stormGray200: stormGray[\"2\"],\n stormGray300: stormGray[\"3\"],\n stormGray400: stormGray[\"4\"],\n stormGray500: stormGray[\"5\"],\n /** Figma brand swatch \"Storm Gray\" — same as `stormGray500` */\n stormGrayBrand: brand.stormGray,\n stormGray600: stormGray[\"6\"],\n stormGray700: stormGray[\"7\"],\n stormGray800: stormGray[\"8\"],\n stormGray850: stormGray[\"8.5\"],\n\n /** @deprecated Use `stormGray0` */\n storm0: stormGray[\"0\"],\n /** @deprecated Use `stormGray50` */\n storm50: stormGray[\"0.5\"],\n /** @deprecated Use `stormGray200` */\n storm200: stormGray[\"2\"],\n /** @deprecated Use `stormGray300` */\n storm300: stormGray[\"3\"],\n /** @deprecated Use `stormGray500` */\n storm500: stormGray[\"5\"],\n /** @deprecated Use `stormGray700` */\n storm700: stormGray[\"7\"],\n /** @deprecated Use `stormGray850` */\n storm900: stormGray[\"8.5\"],\n\n countrySelectorSelectedBg: `${stormGray[\"0.5\"]}99`,\n\n white: \"#ffffff\",\n error: \"#dc2626\",\n errorDark: \"#b3261e\",\n errorLight: \"#fee2e2\",\n /** @deprecated Use `rubyRed` */\n inputError: brand.rubyRed,\n inputOutlineFocus: navy[\"0.5\"],\n inputOutlineError: rubyRed[\"0.5\"],\n warning: \"#92400e\",\n warningBg: \"#fef3c7\",\n success: \"#28a745\",\n successMuted: \"#9fd4a8\",\n /** @deprecated Use `emeraldGreen` */\n green: brand.emeraldGreen,\n transparent: \"transparent\",\n} as const;\n\nexport const radii = {\n sm: 8,\n md: 12,\n lg: 16,\n xl: 20,\n full: 9999,\n} as const;\n\nexport const spacing = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n xxl: 32,\n} as const;\n\nexport const fontSize = {\n xs: 11,\n sm: 12,\n md: 14,\n base: 16,\n lg: 18,\n xl: 24,\n xxl: 32,\n} as const;\n\n/**\n * Canonical Homepad type scale (matches `.typography-*` in `src/web/styles/typography.css`).\n * font-size / line-height pairs:\n * 12/16 · 14/19 · 18/24 · 20/27 · 24/25 · 32/34\n */\nexport const typographyScale = {\n 12: { fontSize: 12, lineHeight: 16 },\n 14: { fontSize: 14, lineHeight: 19 },\n 18: { fontSize: 18, lineHeight: 24 },\n 20: { fontSize: 20, lineHeight: 27 },\n 24: { fontSize: 24, lineHeight: 25 },\n 32: { fontSize: 32, lineHeight: 34 },\n} as const;\n\nexport const fontWeight = {\n regular: \"400\" as const,\n medium: \"500\" as const,\n semibold: \"600\" as const,\n bold: \"700\" as const,\n};\n\nexport const fonts = {\n sans: \"Noto Sans Armenian\",\n} as const;\n\n/** Input label typography — Medium, typography-12 scale. */\nexport const labelTypography = {\n fontFamily: fonts.sans,\n fontSize: typographyScale[12].fontSize,\n fontWeight: fontWeight.medium,\n lineHeight: typographyScale[12].lineHeight,\n letterSpacing: 0,\n} as const;\n\n/** Button label typography — SemiBold. */\nexport const buttonTypography = {\n lg: {\n fontFamily: fonts.sans,\n fontSize: typographyScale[14].fontSize,\n fontWeight: fontWeight.semibold,\n lineHeight: typographyScale[14].lineHeight,\n letterSpacing: 0,\n },\n sm: {\n fontFamily: fonts.sans,\n fontSize: typographyScale[12].fontSize,\n fontWeight: fontWeight.semibold,\n lineHeight: typographyScale[12].lineHeight,\n letterSpacing: 0,\n },\n} as const;\n\nexport const shadows = {\n card: {\n shadowColor: colors.navy,\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 0.06,\n shadowRadius: 4,\n elevation: 1,\n },\n cardLg: {\n shadowColor: colors.navy,\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.08,\n shadowRadius: 6,\n elevation: 2,\n },\n} as const;\n","import { useLayoutEffect } from \"react\";\nimport { Platform } from \"react-native\";\n\ninterface ClassListElement {\n classList: {\n add: (...classes: string[]) => void;\n remove: (...classes: string[]) => void;\n };\n}\n\nfunction hasClassList(node: unknown): node is ClassListElement {\n return (\n typeof node === \"object\" &&\n node !== null &&\n \"classList\" in node &&\n typeof (node as ClassListElement).classList?.add === \"function\"\n );\n}\n\nfunction resolveWebElement(ref: React.RefObject<unknown>): ClassListElement | null {\n const node = ref.current;\n if (!node) return null;\n\n if (hasClassList(node)) return node;\n\n const host = node as {\n _touchableNode?: unknown;\n getScrollableNode?: () => unknown;\n };\n\n if (hasClassList(host._touchableNode)) return host._touchableNode;\n\n if (typeof host.getScrollableNode === \"function\") {\n const scrollNode = host.getScrollableNode();\n if (hasClassList(scrollNode)) return scrollNode;\n }\n\n return null;\n}\n\n/**\n * Applies CSS class names to the underlying DOM node on web.\n * Keeps TouchableOpacity/Text as the render path so default RN styles stay intact.\n *\n * Retries via rAF when the host node is not ready yet — otherwise classes like\n * `h-13` / `w-full` would only land after a later re-render (e.g. typing in a form),\n * which visibly changes button size.\n */\nexport function useApplyWebClassName(\n ref: React.RefObject<unknown>,\n className?: string,\n enabled = true,\n): void {\n useLayoutEffect(() => {\n if (!enabled || Platform.OS !== \"web\" || !className?.trim()) return;\n\n let cancelled = false;\n let rafId = 0;\n let appliedElement: ClassListElement | null = null;\n const classes = className.trim().split(/\\s+/);\n\n const apply = () => {\n if (cancelled) return;\n\n const element = resolveWebElement(ref);\n if (!element) {\n rafId = requestAnimationFrame(apply);\n return;\n }\n\n appliedElement = element;\n element.classList.add(...classes);\n };\n\n apply();\n\n return () => {\n cancelled = true;\n if (rafId) cancelAnimationFrame(rafId);\n appliedElement?.classList.remove(...classes);\n };\n }, [ref, className, enabled]);\n}\n","import { useRef, type ComponentRef, type ReactNode } from \"react\";\nimport {\n Platform,\n StyleSheet,\n Text,\n TouchableOpacity,\n View,\n type GestureResponderEvent,\n type StyleProp,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { ArrowUpRightIcon } from \"../icons/ArrowUpRightIcon\";\nimport { colors, buttonTypography } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nexport type ButtonVariant = \"white\" | \"primary\" | \"green\" | \"gray\";\nexport type ButtonSize = \"lg\" | \"sm\";\n\nexport interface ButtonProps {\n title?: string;\n children?: ReactNode;\n onPress: (event: GestureResponderEvent) => void;\n disabled?: boolean;\n variant?: ButtonVariant;\n size?: ButtonSize;\n showIcon?: boolean;\n /** Custom icon inside the badge. Defaults to `ArrowUpRightIcon` when `showIcon` is true. */\n icon?: ReactNode;\n style?: StyleProp<ViewStyle>;\n textStyle?: StyleProp<TextStyle>;\n className?: string;\n textClassName?: string;\n}\n\ntype VariantStyleSet = {\n backgroundColor: string;\n textColor: string;\n iconBadgeBackgroundColor: string;\n iconColor: string;\n};\n\nconst variantConfig: Record<ButtonVariant, VariantStyleSet> = {\n white: {\n backgroundColor: colors.white,\n textColor: colors.slateBlue,\n iconBadgeBackgroundColor: colors.stormGray150,\n iconColor: colors.navy,\n },\n primary: {\n backgroundColor: colors.navy,\n textColor: colors.stormGray0,\n iconBadgeBackgroundColor: colors.white,\n iconColor: colors.navy,\n },\n green: {\n backgroundColor: colors.green,\n textColor: colors.stormGray0,\n iconBadgeBackgroundColor: colors.white,\n iconColor: colors.green,\n },\n gray: {\n backgroundColor: colors.stormGray50,\n textColor: colors.slateBlue,\n iconBadgeBackgroundColor: colors.stormGray150,\n iconColor: colors.navy,\n },\n};\n\nconst sizeConfig = {\n lg: {\n /** Matches Tailwind `h-13` so size stays stable before web classNames attach. */\n minHeight: 52,\n borderRadius: 16,\n paddingTop: 8,\n paddingRight: 8,\n paddingBottom: 8,\n paddingLeft: 24,\n paddingHorizontalCentered: 24,\n text: buttonTypography.lg,\n iconContainerSize: 36,\n iconContainerRadius: 12,\n iconContainerPadding: 8,\n iconSize: 20,\n },\n sm: {\n minHeight: 40,\n borderRadius: 12,\n paddingTop: 8,\n paddingRight: 8,\n paddingBottom: 8,\n paddingLeft: 16,\n paddingHorizontalCentered: 16,\n text: buttonTypography.sm,\n iconContainerSize: 32,\n iconContainerRadius: 8,\n iconContainerPadding: 8,\n iconSize: 16,\n },\n} as const;\n\nexport function Button({\n title,\n children,\n onPress,\n disabled = false,\n variant = \"primary\",\n size = \"lg\",\n showIcon = false,\n icon,\n style,\n textStyle,\n className,\n textClassName,\n}: ButtonProps) {\n const containerRef = useRef<ComponentRef<typeof TouchableOpacity>>(null);\n const textRef = useRef<ComponentRef<typeof Text>>(null);\n const preset = variantConfig[variant];\n const metrics = sizeConfig[size];\n\n const label = typeof children !== \"undefined\" ? children : title;\n const hasCustomChildren = typeof children !== \"undefined\";\n const customIcon =\n icon != null && typeof icon !== \"boolean\" ? icon : undefined;\n const hasIcon = showIcon || icon === true || customIcon != null;\n const resolvedContainerClassName = [\n Platform.OS === \"web\" ? \"max-md:px-4!\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n useApplyWebClassName(containerRef, resolvedContainerClassName || undefined);\n useApplyWebClassName(textRef, textClassName);\n\n const iconNode =\n customIcon ?? (\n <ArrowUpRightIcon size={metrics.iconSize} color={preset.iconColor} />\n );\n\n const containerStyle = [\n styles.base,\n {\n minHeight: metrics.minHeight,\n borderRadius: metrics.borderRadius,\n backgroundColor: preset.backgroundColor,\n paddingTop: metrics.paddingTop,\n paddingBottom: metrics.paddingBottom,\n paddingLeft: hasIcon ? metrics.paddingLeft : metrics.paddingHorizontalCentered,\n paddingRight: hasIcon ? metrics.paddingRight : metrics.paddingHorizontalCentered,\n },\n hasIcon ? styles.withIcon : styles.centered,\n disabled && styles.disabled,\n style,\n ];\n\n const labelStyle = [\n styles.label,\n metrics.text,\n { color: preset.textColor },\n Platform.OS === \"android\" ? styles.labelAndroid : null,\n !hasIcon && styles.labelCentered,\n hasIcon && styles.labelWithIcon,\n textStyle,\n ];\n\n return (\n <TouchableOpacity\n ref={containerRef}\n style={containerStyle}\n onPress={onPress}\n disabled={disabled}\n activeOpacity={0.7}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled }}\n >\n {hasCustomChildren ? (\n children\n ) : (\n <Text ref={textRef} style={labelStyle}>\n {label}\n </Text>\n )}\n\n {hasIcon ? (\n <View\n style={[\n styles.iconContainer,\n {\n width: metrics.iconContainerSize,\n height: metrics.iconContainerSize,\n borderRadius: metrics.iconContainerRadius,\n padding: metrics.iconContainerPadding,\n backgroundColor: preset.iconBadgeBackgroundColor,\n },\n ]}\n >\n {iconNode}\n </View>\n ) : null}\n </TouchableOpacity>\n );\n}\n\nconst styles = StyleSheet.create({\n base: {\n flexDirection: \"row\",\n alignItems: \"center\",\n borderWidth: 0,\n },\n centered: {\n justifyContent: \"center\",\n },\n withIcon: {\n justifyContent: \"space-between\",\n gap: 24,\n },\n disabled: {\n opacity: 0.6,\n },\n label: {},\n labelAndroid: {\n includeFontPadding: false,\n },\n labelCentered: {\n textAlign: \"center\",\n },\n labelWithIcon: {\n flex: 1,\n flexShrink: 1,\n },\n iconContainer: {\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n});\n","export const EYE_OPEN_OUTLINE_PATH =\n \"M1.71835 10.2898C1.6489 10.1027 1.6489 9.89691 1.71835 9.70981C2.39476 8.06969 3.54294 6.66735 5.01732 5.68056C6.4917 4.69378 8.22588 4.16699 10 4.16699C11.7741 4.16699 13.5083 4.69378 14.9827 5.68056C16.4571 6.66735 17.6053 8.06969 18.2817 9.70981C18.3511 9.89691 18.3511 10.1027 18.2817 10.2898C17.6053 11.9299 16.4571 13.3323 14.9827 14.3191C13.5083 15.3058 11.7741 15.8326 10 15.8326C8.22588 15.8326 6.4917 15.3058 5.01732 14.3191C3.54294 13.3323 2.39476 11.9299 1.71835 10.2898Z\";\n\nexport const EYE_OPEN_PUPIL_PATH =\n \"M10 12.4998C11.3807 12.4998 12.5 11.3805 12.5 9.99981C12.5 8.6191 11.3807 7.49981 10 7.49981C8.6193 7.49981 7.50001 8.6191 7.50001 9.99981C7.50001 11.3805 8.6193 12.4998 10 12.4998Z\";\n\nexport const EYE_OFF_PATH =\n \"M10.733 5.076C13.0624 4.7984 15.4186 5.29082 17.4419 6.47805C19.4651 7.66528 21.0442 9.48208 21.938 11.651C22.0213 11.8755 22.0213 12.1225 21.938 12.347C21.5705 13.238 21.0848 14.0755 20.494 14.837M14.084 14.158C13.5182 14.7045 12.7604 15.0069 11.9738 15C11.1872 14.9932 10.4348 14.6777 9.87854 14.1215C9.32232 13.5652 9.00681 12.8128 8.99998 12.0262C8.99314 11.2396 9.29553 10.4818 9.842 9.916M17.479 17.499C16.1525 18.2848 14.6725 18.776 13.1394 18.9394C11.6063 19.1028 10.056 18.9345 8.59363 18.4459C7.13131 17.9573 5.79119 17.1599 4.66421 16.1077C3.53723 15.0556 2.64975 13.7734 2.062 12.348C1.97866 12.1235 1.97866 11.8765 2.062 11.652C2.94863 9.50186 4.50867 7.69725 6.508 6.509M2 2L22 22\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { EYE_OPEN_OUTLINE_PATH, EYE_OPEN_PUPIL_PATH } from \"./eyeIconPaths\";\n\nexport { EYE_OPEN_OUTLINE_PATH, EYE_OPEN_PUPIL_PATH } from \"./eyeIconPaths\";\n\ninterface EyeIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — open eye (password hidden). */\nexport function EyeIcon({\n size = 20,\n color = \"#c7cdd1\",\n strokeWidth = 2,\n}: EyeIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={EYE_OPEN_OUTLINE_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <Path\n d={EYE_OPEN_PUPIL_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import Svg, { Path } from \"react-native-svg\";\nimport { EYE_OFF_PATH } from \"./eyeIconPaths\";\n\nexport { EYE_OFF_PATH } from \"./eyeIconPaths\";\n\ninterface EyeOffIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — slashed eye (password visible). */\nexport function EyeOffIcon({\n size = 20,\n color = \"#c7cdd1\",\n strokeWidth = 2,\n}: EyeOffIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d={EYE_OFF_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { Platform, StyleSheet, type TextStyle, type ViewStyle } from \"react-native\";\nimport { colors, fonts, fontSize, fontWeight, radii } from \"./tokens\";\n\nexport const INPUT_HEIGHT = 56;\nexport const INPUT_ICON_SIZE = 20;\nexport const INPUT_ICON_GAP = 10;\nexport const INPUT_OUTLINE_WIDTH = 2;\n/** Natural text metrics; avoid a tighter lineHeight that clips Armenian glyphs. */\nexport const INPUT_TEXT_LINE_HEIGHT = 20;\nexport const INPUT_WEB_VERTICAL_PADDING = 14;\nexport const INPUT_VERTICAL_PADDING = 14;\nexport const INPUT_HORIZONTAL_PADDING = 16;\n/** Default outer height for multiline fields (padding included). */\nexport const INPUT_MULTILINE_MIN_HEIGHT = 120;\nexport const INPUT_MULTILINE_INNER_MIN_HEIGHT =\n INPUT_MULTILINE_MIN_HEIGHT - INPUT_VERTICAL_PADDING * 2;\n\nexport type InputVisualState =\n | \"default\"\n | \"focused\"\n | \"error\"\n | \"disabled\";\n\nexport interface InputStateFlags {\n focused?: boolean;\n error?: boolean;\n disabled?: boolean;\n}\n\nexport function resolveInputVisualState({\n focused = false,\n error = false,\n disabled = false,\n}: InputStateFlags): InputVisualState {\n if (disabled) return \"disabled\";\n if (error) return \"error\";\n if (focused) return \"focused\";\n return \"default\";\n}\n\ninterface FieldStyleSet {\n container: ViewStyle;\n outline: ViewStyle;\n text: TextStyle;\n placeholder: string;\n icon: string;\n}\n\nfunction createOutlineStyle(ringColor: string): ViewStyle {\n return {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: ringColor,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n };\n}\n\nconst defaultOutline: ViewStyle = {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: colors.transparent,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n};\n\nexport function getInputFieldStyles(state: InputVisualState): FieldStyleSet {\n const containerBase: ViewStyle = {\n borderRadius: radii.lg,\n };\n\n switch (state) {\n case \"disabled\":\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.stormGray50,\n },\n text: { color: colors.stormGray300 },\n placeholder: colors.stormGray300,\n icon: colors.stormGray150,\n };\n case \"error\":\n return {\n outline: createOutlineStyle(colors.inputOutlineError),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.inputError,\n backgroundColor: colors.white,\n },\n text: { color: colors.inputError },\n placeholder: colors.stormGray200,\n icon: colors.inputError,\n };\n case \"focused\":\n return {\n outline: createOutlineStyle(colors.inputOutlineFocus),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.navy,\n backgroundColor: colors.white,\n },\n text: { color: colors.slateBlue },\n placeholder: colors.stormGray200,\n icon: colors.navy,\n };\n default:\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n },\n text: { color: colors.slateBlue },\n placeholder: colors.stormGray200,\n icon: colors.stormGray150,\n };\n }\n}\n\nexport const inputFieldMetrics = StyleSheet.create({\n containerBase: {\n flexDirection: \"row\",\n borderRadius: radii.lg,\n paddingHorizontal: INPUT_HORIZONTAL_PADDING,\n paddingVertical: INPUT_VERTICAL_PADDING,\n gap: INPUT_ICON_GAP,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n paddingVertical: INPUT_WEB_VERTICAL_PADDING,\n paddingHorizontal: INPUT_HORIZONTAL_PADDING,\n } as ViewStyle)\n : null),\n },\n container: {\n alignItems: \"center\",\n height: INPUT_HEIGHT,\n // Do not clip glyph ascenders on single-line fields (Armenian / tall fonts).\n overflow: \"visible\",\n },\n /**\n * Column layout + explicit minHeight so the TextInput hit target matches the\n * visible box on Android release builds (row + flexGrow:0 collapsed taps).\n */\n containerMultiline: {\n flexDirection: \"column\",\n alignItems: \"stretch\",\n justifyContent: \"flex-start\",\n minHeight: INPUT_MULTILINE_MIN_HEIGHT,\n overflow: \"hidden\",\n },\n input: {\n flex: 1,\n minWidth: 0,\n width: \"100%\",\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.medium,\n paddingVertical: 0,\n paddingHorizontal: 0,\n margin: 0,\n borderWidth: 0,\n backgroundColor: colors.transparent,\n // Leave lineHeight unset so platform font metrics keep placeholder tops visible.\n ...(Platform.OS === \"web\"\n ? ({\n alignSelf: \"center\",\n outlineStyle: \"none\",\n lineHeight: INPUT_TEXT_LINE_HEIGHT,\n } as TextStyle)\n : {\n alignSelf: \"stretch\",\n }),\n },\n /** Single-line: avoid Android lineHeight jump between placeholder and typed text. */\n inputSingleLine: {\n ...(Platform.OS === \"android\"\n ? ({ textAlignVertical: \"center\", includeFontPadding: false } as TextStyle)\n : null),\n },\n /**\n * Fill the column container so the whole field is tappable in release APKs.\n * `textAlignVertical: \"top\"` keeps typed text (and Android placeholder) at the top.\n */\n inputMultiline: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"auto\",\n width: \"100%\",\n minHeight: INPUT_MULTILINE_INNER_MIN_HEIGHT,\n alignSelf: \"stretch\",\n textAlignVertical: \"top\",\n ...(Platform.OS === \"android\"\n ? ({ includeFontPadding: false } as TextStyle)\n : null),\n },\n});\n","import { useRef, type ComponentRef, type ReactNode } from \"react\";\nimport {\n StyleSheet,\n Text,\n type StyleProp,\n type TextProps,\n type TextStyle,\n} from \"react-native\";\nimport { colors, labelTypography } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nexport interface LabelProps extends TextProps {\n children: ReactNode;\n /** Render as a required field indicator. */\n required?: boolean;\n disabled?: boolean;\n style?: StyleProp<TextStyle>;\n className?: string;\n}\n\nexport function Label({\n children,\n required = false,\n disabled = false,\n style,\n className,\n ...props\n}: LabelProps) {\n const ref = useRef<ComponentRef<typeof Text>>(null);\n useApplyWebClassName(ref, className);\n\n return (\n <Text\n ref={ref}\n style={[styles.label, disabled && styles.labelDisabled, style]}\n accessibilityRole=\"text\"\n {...props}\n >\n {children}\n {required ? <Text style={styles.required}> *</Text> : null}\n </Text>\n );\n}\n\nconst styles = StyleSheet.create({\n label: {\n ...labelTypography,\n color: colors.slateBlue,\n },\n labelDisabled: {\n color: colors.stormGray400,\n },\n required: {\n color: colors.inputError,\n },\n});\n","import {\n cloneElement,\n isValidElement,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n Pressable,\n StyleSheet,\n Text,\n TextInput,\n View,\n type NativeSyntheticEvent,\n type StyleProp,\n type TextInputFocusEventData,\n type TextInputProps,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { EyeIcon } from \"../icons/EyeIcon\";\nimport { EyeOffIcon } from \"../icons/EyeOffIcon\";\nimport {\n getInputFieldStyles,\n inputFieldMetrics,\n INPUT_ICON_SIZE,\n resolveInputVisualState,\n} from \"../theme/input\";\nimport { colors, spacing } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport { Label } from \"./Label\";\n\ntype InputIconProps = {\n size?: number;\n color?: string;\n};\n\nfunction renderInputIcon(icon: ReactNode, color: string) {\n if (!icon) return null;\n\n if (isValidElement<InputIconProps>(icon)) {\n return cloneElement(icon, {\n size: icon.props.size ?? INPUT_ICON_SIZE,\n color: icon.props.color ?? color,\n });\n }\n\n return icon;\n}\n\nexport interface InputProps extends TextInputProps {\n /** Optional field label rendered above the input. */\n label?: string;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** Validation or helper error message. Shown instead of `hint` when set. */\n error?: string;\n /** Applies error field styling without showing a message (use with a form-level error). */\n invalid?: boolean;\n /** Helper text shown below the input when there is no error. */\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<TextStyle>;\n className?: string;\n /** CSS classes for the bordered field container (web). */\n fieldClassName?: string;\n /** Styles merged into the bordered field container. */\n fieldStyle?: StyleProp<ViewStyle>;\n labelClassName?: string;\n /** Styles merged into the field label. */\n labelStyles?: StyleProp<TextStyle>;\n inputClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n /** When `secureTextEntry` is set, show a toggleable eye icon. Pass `false` to disable. */\n showPasswordToggle?: boolean;\n}\n\nconst INTEGER_KEYBOARD_TYPES = new Set([\n \"numeric\",\n \"number-pad\",\n \"phone-pad\",\n]);\n\n/** Strip non-digits for integer pads; keep one decimal separator for decimal-pad. */\nfunction sanitizeNumericInput(\n value: string,\n keyboardType: TextInputProps[\"keyboardType\"],\n): string {\n if (keyboardType === \"decimal-pad\") {\n const normalized = value.replace(/,/g, \".\").replace(/[^\\d.]/g, \"\");\n const separatorIndex = normalized.indexOf(\".\");\n\n if (separatorIndex === -1) {\n return normalized;\n }\n\n return (\n normalized.slice(0, separatorIndex + 1) +\n normalized.slice(separatorIndex + 1).replace(/\\./g, \"\")\n );\n }\n\n if (keyboardType && INTEGER_KEYBOARD_TYPES.has(keyboardType)) {\n return value.replace(/\\D/g, \"\");\n }\n\n return value;\n}\n\nexport function Input({\n label,\n leftIcon,\n rightIcon,\n error,\n invalid,\n hint,\n containerStyle,\n style,\n className,\n fieldClassName,\n fieldStyle,\n labelClassName,\n labelStyles,\n inputClassName,\n errorClassName,\n hintClassName,\n editable = true,\n secureTextEntry,\n showPasswordToggle,\n onFocus,\n onBlur,\n onChangeText,\n keyboardType,\n multiline,\n textAlign = \"left\",\n textAlignVertical,\n ...props\n}: InputProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const fieldRef = useRef<ComponentRef<typeof View>>(null);\n const inputRef = useRef<ComponentRef<typeof TextInput>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const [focused, setFocused] = useState(false);\n const [passwordVisible, setPasswordVisible] = useState(false);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(fieldRef, fieldClassName);\n useApplyWebClassName(inputRef, inputClassName);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n const isDisabled = editable === false;\n const hasError = Boolean(error) || Boolean(invalid);\n const passwordToggleEnabled =\n secureTextEntry === true && showPasswordToggle !== false && rightIcon == null;\n const effectiveSecureTextEntry = passwordToggleEnabled\n ? !passwordVisible\n : secureTextEntry;\n // Keep placeholder and typed text on the same vertical line (esp. Android).\n const resolvedTextAlignVertical =\n textAlignVertical ?? (multiline ? \"top\" : \"center\");\n const visualState = resolveInputVisualState({\n focused,\n error: hasError,\n disabled: isDisabled,\n });\n const fieldStyles = getInputFieldStyles(visualState);\n const iconColor = fieldStyles.icon;\n\n function handleFocus(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(true);\n onFocus?.(event);\n }\n\n function handleBlur(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handleChangeText(value: string) {\n onChangeText?.(sanitizeNumericInput(value, keyboardType));\n }\n\n const helperMessage = error ?? hint;\n\n function togglePasswordVisibility() {\n if (!isDisabled) {\n setPasswordVisible((visible) => !visible);\n }\n }\n\n const trailingIcon = passwordToggleEnabled ? (\n <Pressable\n onPress={togglePasswordVisibility}\n disabled={isDisabled}\n accessibilityRole=\"button\"\n accessibilityLabel={passwordVisible ? \"Hide password\" : \"Show password\"}\n hitSlop={8}\n style={styles.iconPressable}\n >\n {renderInputIcon(\n passwordVisible ? <EyeOffIcon /> : <EyeIcon />,\n iconColor,\n )}\n </Pressable>\n ) : rightIcon ? (\n renderInputIcon(rightIcon, iconColor)\n ) : null;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label\n disabled={isDisabled}\n className={labelClassName}\n style={labelStyles}\n >\n {label}\n </Label>\n ) : null}\n <View style={fieldStyles.outline}>\n <View\n ref={fieldRef}\n style={[\n inputFieldMetrics.containerBase,\n multiline\n ? inputFieldMetrics.containerMultiline\n : inputFieldMetrics.container,\n fieldStyles.container,\n fieldStyle,\n ]}\n >\n {leftIcon ? (\n <View style={styles.iconSlot}>{renderInputIcon(leftIcon, iconColor)}</View>\n ) : null}\n <TextInput\n ref={inputRef}\n style={[\n inputFieldMetrics.input,\n multiline\n ? inputFieldMetrics.inputMultiline\n : inputFieldMetrics.inputSingleLine,\n fieldStyles.text,\n style,\n ]}\n placeholderTextColor={fieldStyles.placeholder}\n editable={editable}\n keyboardType={keyboardType}\n multiline={multiline}\n scrollEnabled={multiline ? true : undefined}\n secureTextEntry={effectiveSecureTextEntry}\n textAlign={textAlign}\n textAlignVertical={resolvedTextAlignVertical}\n underlineColorAndroid=\"transparent\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n onChangeText={handleChangeText}\n />\n {trailingIcon ? (\n <View style={styles.iconSlot}>{trailingIcon}</View>\n ) : null}\n </View>\n </View>\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: \"100%\",\n minWidth: 0,\n gap: spacing.sm,\n },\n iconSlot: {\n minWidth: INPUT_ICON_SIZE,\n minHeight: INPUT_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n iconPressable: {\n width: INPUT_ICON_SIZE,\n height: INPUT_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export const CHEVRON_DOWN_PATH = \"M4 6L8 10L12 6\";\nexport const CHEVRON_DOWN_PATH_20 = \"M5 7.5L10 12.5L15 7.5\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { CHEVRON_DOWN_PATH, CHEVRON_DOWN_PATH_20 } from \"./chevronDownPath\";\n\nexport { CHEVRON_DOWN_PATH, CHEVRON_DOWN_PATH_20 } from \"./chevronDownPath\";\n\ninterface ChevronDownIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — react-native-svg (peer dependency). */\nexport function ChevronDownIcon({\n size = 16,\n color = \"#dadde0\",\n strokeWidth = 2,\n}: ChevronDownIconProps) {\n const useLarge = size >= 20;\n\n return (\n <Svg\n width={size}\n height={size}\n viewBox={useLarge ? \"0 0 20 20\" : \"0 0 16 16\"}\n fill=\"none\"\n >\n <Path\n d={useLarge ? CHEVRON_DOWN_PATH_20 : CHEVRON_DOWN_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { Dimensions, Platform, StyleSheet, type TextStyle, type ViewStyle } from \"react-native\";\nimport {\n resolveInputVisualState,\n type InputStateFlags,\n type InputVisualState,\n} from \"./input\";\nimport { colors, fonts, fontSize, fontWeight, radii, spacing } from \"./tokens\";\n\nexport const SELECT_HEIGHT = 52;\nexport const SELECT_PADDING = 16;\nexport const SELECT_INNER_GAP = 10;\nexport const SELECT_ICON_SIZE = 20;\nexport const SELECT_LABEL_GAP = spacing.sm;\nexport const SELECT_DROPDOWN_GAP = spacing.sm;\nexport const SELECT_DROPDOWN_PADDING = spacing.sm;\nexport const SELECT_DROPDOWN_MAX_HEIGHT = 317;\nexport const SELECT_OPTION_HEIGHT = 43;\nexport const SELECT_OPTION_HEIGHT_COMPACT = 36;\nexport const SELECT_OPTION_GAP = spacing.sm;\nexport const SELECT_CHEVRON_SIZE = 20;\nexport const SELECT_CHEVRON_COLOR = colors.stormGray150;\nexport const SELECT_CHEVRON_ROTATION_MS = 200;\nexport const SELECT_TEXT_LINE_HEIGHT = 19;\n\nexport { resolveInputVisualState };\nexport type { InputStateFlags, InputVisualState };\n\nexport const selectLabelTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.sm,\n fontWeight: fontWeight.medium,\n lineHeight: 16,\n letterSpacing: 0,\n color: colors.slateBlue,\n} as const;\n\nexport const selectValueTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: SELECT_TEXT_LINE_HEIGHT,\n letterSpacing: 0,\n textAlign: \"left\",\n} as const;\n\ninterface SelectFieldStyleSet {\n container: ViewStyle;\n outline: ViewStyle;\n value: TextStyle;\n placeholder: string;\n icon: string;\n}\n\nconst INPUT_OUTLINE_WIDTH = 2;\n\nfunction createOutlineStyle(ringColor: string): ViewStyle {\n return {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: ringColor,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n ...(Platform.OS !== \"web\" ? { overflow: \"hidden\" as const } : null),\n };\n}\n\nconst defaultOutline: ViewStyle = {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: colors.transparent,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n ...(Platform.OS !== \"web\" ? { overflow: \"hidden\" as const } : null),\n};\n\nexport function getSelectFieldStyles(state: InputVisualState): SelectFieldStyleSet {\n const containerBase: ViewStyle = {\n borderRadius: radii.lg,\n ...(Platform.OS !== \"web\" ? { overflow: \"hidden\" as const } : null),\n };\n\n const valueBase: TextStyle = {\n ...selectValueTypography,\n color: colors.slateBlue,\n };\n\n switch (state) {\n case \"disabled\":\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.stormGray50,\n },\n value: { ...valueBase, color: colors.stormGray300 },\n placeholder: colors.stormGray300,\n icon: colors.stormGray150,\n };\n case \"error\":\n return {\n outline: createOutlineStyle(colors.inputOutlineError),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.inputError,\n backgroundColor: colors.white,\n },\n value: { ...valueBase, color: colors.inputError },\n placeholder: colors.stormGray200,\n icon: colors.inputError,\n };\n case \"focused\":\n return {\n outline: createOutlineStyle(colors.inputOutlineFocus),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.navy,\n backgroundColor: colors.white,\n },\n value: valueBase,\n placeholder: colors.stormGray200,\n icon: colors.navy,\n };\n default:\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n },\n value: valueBase,\n placeholder: colors.stormGray200,\n icon: colors.stormGray150,\n };\n }\n}\n\nexport const selectFieldMetrics = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n height: SELECT_HEIGHT,\n borderRadius: radii.lg,\n padding: SELECT_PADDING,\n gap: SELECT_INNER_GAP,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n value: {\n flex: 1,\n minWidth: 0,\n ...selectValueTypography,\n paddingVertical: 0,\n paddingHorizontal: 0,\n margin: 0,\n ...(Platform.OS === \"android\" ? { includeFontPadding: false } : null),\n ...(Platform.OS === \"web\"\n ? ({\n outlineStyle: \"none\",\n } as TextStyle)\n : null),\n },\n});\n\nexport const selectDropdownMetrics = StyleSheet.create({\n menu: {\n borderRadius: radii.lg,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n padding: SELECT_DROPDOWN_PADDING,\n overflow: \"hidden\",\n },\n option: {\n width: \"100%\",\n height: SELECT_OPTION_HEIGHT,\n minHeight: SELECT_OPTION_HEIGHT,\n maxHeight: SELECT_OPTION_HEIGHT,\n paddingTop: 12,\n paddingRight: spacing.sm,\n paddingBottom: 12,\n paddingLeft: spacing.sm,\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n },\n optionLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: SELECT_TEXT_LINE_HEIGHT,\n letterSpacing: 0,\n textAlign: \"left\",\n color: colors.slateBlue,\n width: \"100%\",\n },\n optionLabelSelected: {\n fontWeight: fontWeight.medium,\n color: colors.slateBlue,\n },\n optionSelected: {\n opacity: 1,\n borderRadius: radii.sm,\n paddingTop: 12,\n paddingRight: spacing.sm,\n paddingBottom: 12,\n paddingLeft: spacing.sm,\n backgroundColor: colors.countrySelectorSelectedBg,\n },\n optionHighlighted: {\n backgroundColor: colors.stormGray0,\n },\n});\n\nexport function resolveSelectDropdownHeight(\n optionCount: number,\n optionHeight: number = SELECT_OPTION_HEIGHT,\n): number {\n const contentHeight =\n optionCount * optionHeight +\n Math.max(0, optionCount - 1) * SELECT_OPTION_GAP +\n SELECT_DROPDOWN_PADDING * 2;\n\n return Math.min(contentHeight, SELECT_DROPDOWN_MAX_HEIGHT);\n}\n\nexport function resolveSelectDropdownContentHeight(\n optionCount: number,\n optionHeight: number = SELECT_OPTION_HEIGHT,\n): number {\n return (\n optionCount * optionHeight + Math.max(0, optionCount - 1) * SELECT_OPTION_GAP\n );\n}\n\nexport function resolveSelectDropdownTop(\n anchor: { y: number; height: number },\n dropdownHeight: number,\n): number {\n const windowHeight = Dimensions.get(\"window\").height;\n const spaceBelow = windowHeight - (anchor.y + anchor.height + SELECT_DROPDOWN_GAP);\n const spaceAbove = anchor.y - SELECT_DROPDOWN_GAP;\n const topBelow = anchor.y + anchor.height + SELECT_DROPDOWN_GAP;\n const topAbove = anchor.y - SELECT_DROPDOWN_GAP - dropdownHeight;\n\n if (spaceBelow >= dropdownHeight) {\n return topBelow;\n }\n\n if (spaceAbove >= dropdownHeight) {\n return topAbove;\n }\n\n if (spaceAbove > spaceBelow) {\n return Math.max(0, topAbove);\n }\n\n return Math.max(0, Math.min(topBelow, windowHeight - dropdownHeight));\n}\n","import { Platform } from \"react-native\";\nimport { colors } from \"../theme/tokens\";\n\nexport const COUNTRY_DROPDOWN_SCROLL_CLASS = \"hp-country-dropdown-scroll\";\nexport const SELECT_DROPDOWN_SCROLL_CLASS = \"hp-select-dropdown-scroll\";\n\nconst STYLE_ID = \"hp-dropdown-scroll-styles\";\n\nfunction createDropdownScrollCss(className: string): string {\n return `\n .${className} {\n scrollbar-width: thin;\n scrollbar-color: ${colors.stormGray300} transparent;\n overflow-y: auto;\n }\n\n .${className}::-webkit-scrollbar {\n width: 4px;\n -webkit-appearance: none;\n appearance: none;\n }\n\n .${className}::-webkit-scrollbar-corner {\n background: transparent;\n }\n\n .${className}::-webkit-scrollbar-button,\n .${className}::-webkit-scrollbar-button:single-button,\n .${className}::-webkit-scrollbar-button:double-button,\n .${className}::-webkit-scrollbar-button:horizontal:decrement,\n .${className}::-webkit-scrollbar-button:horizontal:increment,\n .${className}::-webkit-scrollbar-button:horizontal:start:decrement,\n .${className}::-webkit-scrollbar-button:horizontal:end:increment,\n .${className}::-webkit-scrollbar-button:vertical:decrement,\n .${className}::-webkit-scrollbar-button:vertical:increment,\n .${className}::-webkit-scrollbar-button:vertical:start:decrement,\n .${className}::-webkit-scrollbar-button:vertical:end:increment,\n .${className}::-webkit-scrollbar-button:start:decrement,\n .${className}::-webkit-scrollbar-button:end:increment,\n .${className}::-webkit-scrollbar-button:decrement,\n .${className}::-webkit-scrollbar-button:increment {\n display: none;\n width: 0;\n height: 0;\n max-width: 0;\n max-height: 0;\n min-width: 0;\n min-height: 0;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n }\n\n .${className}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .${className}::-webkit-scrollbar-thumb {\n background-color: ${colors.stormGray300};\n border-radius: 9999px;\n }\n`;\n}\n\nexport const dropdownScrollCss = [\n createDropdownScrollCss(COUNTRY_DROPDOWN_SCROLL_CLASS),\n createDropdownScrollCss(SELECT_DROPDOWN_SCROLL_CLASS),\n].join(\"\\n\");\n\n/** @deprecated Use `dropdownScrollCss` */\nexport const countryDropdownScrollCss = dropdownScrollCss;\n\nexport function ensureDropdownScrollStyles(): void {\n if (Platform.OS !== \"web\" || typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = dropdownScrollCss;\n document.head.appendChild(style);\n}\n\nexport function ensureCountryDropdownScrollStyles(): void {\n ensureDropdownScrollStyles();\n}\n\nexport function ensureSelectDropdownScrollStyles(): void {\n ensureDropdownScrollStyles();\n}\n","import { fontSize } from \"../theme/tokens\";\n\nconst MULTI_SELECT_SUFFIX = \" ... + \";\nconst MULTI_SELECT_SUFFIX_UNIT = \" items\";\n\n/** Rough width estimate for Noto Sans Armenian at 14px (single-select value text). */\nfunction estimateTextWidth(text: string, size = fontSize.md): number {\n return text.length * size * 0.58;\n}\n\nexport function formatMultiSelectDisplay(\n labels: string[],\n maxWidth: number,\n textSize = fontSize.md,\n): string {\n if (labels.length === 0) {\n return \"\";\n }\n\n if (labels.length === 1) {\n return labels[0];\n }\n\n const fits = (text: string) => estimateTextWidth(text, textSize) <= maxWidth;\n const fullText = labels.join(\", \");\n\n if (fits(fullText)) {\n return fullText;\n }\n\n for (let visibleCount = labels.length - 1; visibleCount >= 1; visibleCount -= 1) {\n const hiddenCount = labels.length - visibleCount;\n const truncatedText = `${labels.slice(0, visibleCount).join(\", \")}${MULTI_SELECT_SUFFIX}${hiddenCount}${MULTI_SELECT_SUFFIX_UNIT}`;\n\n if (fits(truncatedText)) {\n return truncatedText;\n }\n }\n\n return `... + ${labels.length}${MULTI_SELECT_SUFFIX_UNIT}`;\n}\n\nexport function resolveSelectedLabels(\n options: { value: string; label: string }[],\n selectedValues: string[],\n): string[] {\n if (selectedValues.length === 0) {\n return [];\n }\n\n const labelByValue = new Map(options.map((option) => [option.value, option.label]));\n\n return selectedValues\n .map((value) => labelByValue.get(value))\n .filter((label): label is string => Boolean(label));\n}\n","import {\n cloneElement,\n isValidElement,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n Animated,\n Easing,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { ChevronDownIcon } from \"../icons/ChevronDownIcon\";\nimport {\n getSelectFieldStyles,\n SELECT_CHEVRON_COLOR,\n SELECT_CHEVRON_ROTATION_MS,\n SELECT_CHEVRON_SIZE,\n SELECT_ICON_SIZE,\n SELECT_LABEL_GAP,\n SELECT_DROPDOWN_MAX_HEIGHT,\n SELECT_DROPDOWN_PADDING,\n SELECT_OPTION_GAP,\n SELECT_OPTION_HEIGHT,\n SELECT_OPTION_HEIGHT_COMPACT,\n resolveInputVisualState,\n resolveSelectDropdownContentHeight,\n resolveSelectDropdownHeight,\n resolveSelectDropdownTop,\n selectDropdownMetrics,\n selectFieldMetrics,\n selectLabelTypography,\n} from \"../theme/select\";\nimport { colors } from \"../theme/tokens\";\nimport {\n ensureSelectDropdownScrollStyles,\n SELECT_DROPDOWN_SCROLL_CLASS,\n} from \"../utils/countryDropdownScrollStyles\";\nimport {\n formatMultiSelectDisplay,\n resolveSelectedLabels,\n} from \"../utils/formatMultiSelectDisplay\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport { Label } from \"./Label\";\n\ntype SelectIconProps = {\n size?: number;\n color?: string;\n};\n\nfunction renderSelectIcon(icon: ReactNode, color: string) {\n if (!icon) return null;\n\n if (isValidElement<SelectIconProps>(icon)) {\n return cloneElement(icon, {\n size: icon.props.size ?? SELECT_ICON_SIZE,\n color: icon.props.color ?? color,\n });\n }\n\n return icon;\n}\n\nfunction resolveWebTextNode(\n ref: React.RefObject<ComponentRef<typeof Text> | null>,\n): HTMLElement | null {\n if (Platform.OS !== \"web\") {\n return null;\n }\n\n const node = ref.current as unknown;\n return node instanceof HTMLElement ? node : null;\n}\n\nfunction syncTruncatedNativeTitle(\n ref: React.RefObject<ComponentRef<typeof Text> | null>,\n label: string,\n): void {\n const element = resolveWebTextNode(ref);\n if (!element) {\n return;\n }\n\n if (element.scrollWidth > element.clientWidth) {\n element.setAttribute(\"title\", label);\n return;\n }\n\n element.removeAttribute(\"title\");\n}\n\nfunction clearNativeTitle(ref: React.RefObject<ComponentRef<typeof Text> | null>): void {\n resolveWebTextNode(ref)?.removeAttribute(\"title\");\n}\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n compact: boolean;\n optionHeight: number;\n isSelected: boolean;\n isHighlighted: boolean;\n isLast: boolean;\n selectableIndex: number;\n onHighlight: (selectableIndex: number) => void;\n onSelect: (value: string) => void;\n}\n\nfunction SelectOptionItem({\n option,\n compact,\n optionHeight,\n isSelected,\n isHighlighted,\n isLast,\n selectableIndex,\n onHighlight,\n onSelect,\n}: SelectOptionItemProps) {\n const labelRef = useRef<ComponentRef<typeof Text>>(null);\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: option.disabled, selected: isSelected }}\n disabled={option.disabled}\n onPress={() => {\n if (!option.disabled) {\n onSelect(option.value);\n }\n }}\n onHoverIn={() => {\n if (!option.disabled && selectableIndex >= 0) {\n onHighlight(selectableIndex);\n }\n\n syncTruncatedNativeTitle(labelRef, option.label);\n }}\n onHoverOut={() => {\n clearNativeTitle(labelRef);\n }}\n style={[\n selectDropdownMetrics.option,\n compact && styles.optionCompact,\n { height: optionHeight, minHeight: optionHeight, maxHeight: optionHeight },\n isSelected && selectDropdownMetrics.optionSelected,\n compact && isSelected && styles.optionSelectedCompact,\n isHighlighted && !isSelected && !option.disabled\n ? selectDropdownMetrics.optionHighlighted\n : null,\n !isLast && styles.optionSpacing,\n option.disabled && styles.optionDisabled,\n ]}\n >\n <Text\n ref={labelRef}\n style={[\n selectDropdownMetrics.optionLabel,\n styles.optionLabel,\n isSelected && selectDropdownMetrics.optionLabelSelected,\n option.disabled && styles.optionLabelDisabled,\n ]}\n numberOfLines={1}\n >\n {option.label}\n </Text>\n </Pressable>\n );\n}\n\nexport type SelectOption = {\n value: string;\n label: string;\n disabled?: boolean;\n};\n\ntype AnchorLayout = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\ninterface SelectBaseProps {\n label?: string;\n placeholder?: string;\n options: SelectOption[];\n leftIcon?: ReactNode;\n disabled?: boolean;\n error?: string;\n invalid?: boolean;\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n fieldStyle?: StyleProp<ViewStyle>;\n className?: string;\n fieldClassName?: string;\n menuClassName?: string;\n labelClassName?: string;\n /** Styles merged into the field label. */\n labelStyles?: StyleProp<TextStyle>;\n errorClassName?: string;\n hintClassName?: string;\n /** Shorter option rows for compact filter-style dropdowns. */\n compact?: boolean;\n /**\n * When true (default), clicking the already-selected option clears the selection\n * in single-select mode. Set to false for required fields that must keep a value.\n */\n allowDeselect?: boolean;\n}\n\nexport interface SingleSelectProps extends SelectBaseProps {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport interface MultipleSelectProps extends SelectBaseProps {\n multiple: true;\n value?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultipleSelectProps;\n\nfunction normalizeSelectedValues(\n multiple: boolean,\n value: string | string[] | undefined,\n): string[] {\n if (multiple) {\n if (Array.isArray(value)) {\n return value;\n }\n\n return value ? [value] : [];\n }\n\n return typeof value === \"string\" && value.length > 0 ? [value] : [];\n}\n\nexport function Select({\n label,\n placeholder = \"placeholder\",\n value,\n onValueChange,\n options,\n leftIcon,\n multiple = false,\n disabled = false,\n error,\n invalid,\n hint,\n containerStyle,\n fieldStyle,\n className,\n fieldClassName,\n menuClassName,\n labelClassName,\n labelStyles,\n errorClassName,\n hintClassName,\n compact = false,\n allowDeselect = true,\n}: SelectProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const triggerRef = useRef<ComponentRef<typeof Pressable>>(null);\n const menuRef = useRef<ComponentRef<typeof View>>(null);\n const scrollRef = useRef<ComponentRef<typeof ScrollView>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const chevronRotation = useRef(new Animated.Value(0)).current;\n const [open, setOpen] = useState(false);\n const [anchor, setAnchor] = useState<AnchorLayout | null>(null);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [valueContainerWidth, setValueContainerWidth] = useState(0);\n const optionHeight = compact ? SELECT_OPTION_HEIGHT_COMPACT : SELECT_OPTION_HEIGHT;\n const needsScroll = useMemo(\n () =>\n resolveSelectDropdownContentHeight(options.length, optionHeight) >\n SELECT_DROPDOWN_MAX_HEIGHT - SELECT_DROPDOWN_PADDING * 2,\n [optionHeight, options.length],\n );\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(triggerRef, fieldClassName);\n useApplyWebClassName(menuRef, menuClassName);\n useApplyWebClassName(scrollRef, SELECT_DROPDOWN_SCROLL_CLASS, open && Boolean(anchor) && needsScroll);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n useIsomorphicLayoutEffect(() => {\n ensureSelectDropdownScrollStyles();\n }, []);\n\n useEffect(() => {\n Animated.timing(chevronRotation, {\n toValue: open ? 1 : 0,\n duration: SELECT_CHEVRON_ROTATION_MS,\n easing: Easing.out(Easing.ease),\n useNativeDriver: Platform.OS !== \"web\",\n }).start();\n }, [chevronRotation, open]);\n\n const chevronRotate = chevronRotation.interpolate({\n inputRange: [0, 1],\n outputRange: [\"0deg\", \"180deg\"],\n });\n\n const selectedValues = useMemo(\n () => normalizeSelectedValues(multiple, value),\n [multiple, value],\n );\n const selectedValueSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n const selectedLabels = useMemo(\n () => resolveSelectedLabels(options, selectedValues),\n [options, selectedValues],\n );\n const selectableOptions = useMemo(\n () => options.filter((option) => !option.disabled),\n [options],\n );\n // Empty option lists cannot open — treat as disabled so the field does not look interactive.\n const isEffectivelyDisabled = disabled || selectableOptions.length === 0;\n const hasError = Boolean(error) || Boolean(invalid);\n const visualState = resolveInputVisualState({\n focused: open,\n error: hasError,\n disabled: isEffectivelyDisabled,\n });\n const fieldStyles = getSelectFieldStyles(visualState);\n const selectableIndexByValue = useMemo(\n () =>\n new Map(\n selectableOptions.map((option, index) => [option.value, index] as const),\n ),\n [selectableOptions],\n );\n const displayLabel = useMemo(() => {\n if (selectedLabels.length === 0) {\n return placeholder;\n }\n\n if (!multiple) {\n return selectedLabels[0];\n }\n\n if (valueContainerWidth <= 0) {\n return selectedLabels.join(\", \");\n }\n\n return formatMultiSelectDisplay(selectedLabels, valueContainerWidth);\n }, [multiple, placeholder, selectedLabels, valueContainerWidth]);\n\n const isPlaceholder = selectedLabels.length === 0;\n const dropdownHeight = resolveSelectDropdownHeight(options.length, optionHeight);\n const helperMessage = error ?? hint;\n\n function closeMenu() {\n setOpen(false);\n setAnchor(null);\n setHighlightedIndex(-1);\n }\n\n function openMenu() {\n if (isEffectivelyDisabled) {\n return;\n }\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n const selectedIndex = selectableOptions.findIndex((option) =>\n selectedValueSet.has(option.value),\n );\n setHighlightedIndex(selectedIndex >= 0 ? selectedIndex : 0);\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n }\n\n function handleSelect(nextValue: string) {\n if (multiple) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((item) => item !== nextValue)\n : [...selectedValues, nextValue];\n\n (onValueChange as MultipleSelectProps[\"onValueChange\"] | undefined)?.(nextValues);\n return;\n }\n\n if (selectedValues.includes(nextValue)) {\n if (allowDeselect) {\n (onValueChange as SingleSelectProps[\"onValueChange\"] | undefined)?.(\"\");\n }\n closeMenu();\n return;\n }\n\n (onValueChange as SingleSelectProps[\"onValueChange\"] | undefined)?.(nextValue);\n closeMenu();\n }\n\n const optionList = options.map((option, index) => {\n const selectableIndex = selectableIndexByValue.get(option.value) ?? -1;\n const isSelected = selectedValueSet.has(option.value);\n const isHighlighted = selectableIndex === highlightedIndex;\n const isLast = index === options.length - 1;\n\n return (\n <SelectOptionItem\n key={option.value}\n option={option}\n compact={compact}\n optionHeight={optionHeight}\n isSelected={isSelected}\n isHighlighted={isHighlighted}\n isLast={isLast}\n selectableIndex={selectableIndex}\n onHighlight={setHighlightedIndex}\n onSelect={handleSelect}\n />\n );\n });\n\n const dropdownTop = anchor ? resolveSelectDropdownTop(anchor, dropdownHeight) : 0;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label\n disabled={isEffectivelyDisabled}\n style={[styles.label, labelStyles]}\n className={labelClassName}\n >\n {label}\n </Label>\n ) : null}\n\n <View style={fieldStyles.outline}>\n <Pressable\n ref={triggerRef}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: isEffectivelyDisabled, expanded: open }}\n disabled={isEffectivelyDisabled}\n onPress={open ? closeMenu : openMenu}\n style={[selectFieldMetrics.container, fieldStyles.container, fieldStyle]}\n >\n {leftIcon ? (\n <View style={styles.iconSlot}>\n {renderSelectIcon(leftIcon, fieldStyles.icon)}\n </View>\n ) : null}\n <View\n style={styles.valueContainer}\n onLayout={(event) => {\n setValueContainerWidth(event.nativeEvent.layout.width);\n }}\n >\n <Text\n style={[\n selectFieldMetrics.value,\n fieldStyles.value,\n isPlaceholder && { color: fieldStyles.placeholder },\n ]}\n numberOfLines={1}\n >\n {displayLabel}\n </Text>\n </View>\n <Animated.View\n style={[styles.iconSlot, { transform: [{ rotate: chevronRotate }] }]}\n >\n <ChevronDownIcon\n size={SELECT_CHEVRON_SIZE}\n color={isEffectivelyDisabled ? colors.stormGray200 : SELECT_CHEVRON_COLOR}\n />\n </Animated.View>\n </Pressable>\n </View>\n\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n\n <Modal visible={open} transparent animationType=\"fade\" onRequestClose={closeMenu}>\n <View style={styles.overlay}>\n <Pressable\n style={styles.backdrop}\n onPress={closeMenu}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close\"\n />\n {anchor ? (\n <View\n ref={menuRef}\n style={[\n selectDropdownMetrics.menu,\n styles.dropdown,\n {\n top: dropdownTop,\n left: anchor.x,\n width: anchor.width,\n height: dropdownHeight,\n },\n ]}\n >\n {needsScroll ? (\n <ScrollView\n ref={scrollRef}\n style={styles.dropdownScroll}\n contentContainerStyle={styles.dropdownContent}\n keyboardShouldPersistTaps=\"handled\"\n showsVerticalScrollIndicator\n bounces={false}\n nestedScrollEnabled\n >\n {optionList}\n </ScrollView>\n ) : (\n <View style={styles.dropdownContent}>{optionList}</View>\n )}\n </View>\n ) : null}\n </View>\n </Modal>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: \"100%\",\n gap: SELECT_LABEL_GAP,\n },\n label: {\n ...selectLabelTypography,\n },\n iconSlot: {\n width: SELECT_ICON_SIZE,\n height: SELECT_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n valueContainer: {\n flex: 1,\n minWidth: 0,\n justifyContent: \"center\",\n },\n overlay: {\n flex: 1,\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: colors.transparent,\n },\n dropdown: {\n position: \"absolute\",\n zIndex: 1,\n },\n dropdownScroll: {\n flex: 1,\n },\n dropdownContent: {\n flexGrow: 1,\n },\n optionSpacing: {\n marginBottom: SELECT_OPTION_GAP,\n },\n optionCompact: {\n paddingTop: 8,\n paddingBottom: 8,\n },\n optionSelectedCompact: {\n paddingTop: 8,\n paddingBottom: 8,\n },\n optionDisabled: {\n opacity: 0.5,\n },\n optionLabel: {\n minWidth: 0,\n ...(Platform.OS === \"web\"\n ? ({\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n } as const)\n : null),\n },\n optionLabelDisabled: {\n color: colors.stormGray300,\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export type Country = {\n code: string;\n name: string;\n dialCode: string;\n};\n\nexport const defaultCountry: Country = {\n code: \"AM\",\n name: \"Armenia\",\n dialCode: \"+374\",\n};\n\nexport const countries: Country[] = [\n defaultCountry,\n { code: \"AF\", name: \"Afghanistan\", dialCode: \"+93\" },\n { code: \"AL\", name: \"Albania\", dialCode: \"+355\" },\n { code: \"DZ\", name: \"Algeria\", dialCode: \"+213\" },\n { code: \"AR\", name: \"Argentina\", dialCode: \"+54\" },\n { code: \"AU\", name: \"Australia\", dialCode: \"+61\" },\n { code: \"AT\", name: \"Austria\", dialCode: \"+43\" },\n { code: \"AZ\", name: \"Azerbaijan\", dialCode: \"+994\" },\n { code: \"BH\", name: \"Bahrain\", dialCode: \"+973\" },\n { code: \"BY\", name: \"Belarus\", dialCode: \"+375\" },\n { code: \"BE\", name: \"Belgium\", dialCode: \"+32\" },\n { code: \"BR\", name: \"Brazil\", dialCode: \"+55\" },\n { code: \"BG\", name: \"Bulgaria\", dialCode: \"+359\" },\n { code: \"CA\", name: \"Canada\", dialCode: \"+1\" },\n { code: \"CL\", name: \"Chile\", dialCode: \"+56\" },\n { code: \"CN\", name: \"China\", dialCode: \"+86\" },\n { code: \"CO\", name: \"Colombia\", dialCode: \"+57\" },\n { code: \"HR\", name: \"Croatia\", dialCode: \"+385\" },\n { code: \"CY\", name: \"Cyprus\", dialCode: \"+357\" },\n { code: \"CZ\", name: \"Czech Republic\", dialCode: \"+420\" },\n { code: \"DK\", name: \"Denmark\", dialCode: \"+45\" },\n { code: \"EG\", name: \"Egypt\", dialCode: \"+20\" },\n { code: \"EE\", name: \"Estonia\", dialCode: \"+372\" },\n { code: \"FI\", name: \"Finland\", dialCode: \"+358\" },\n { code: \"FR\", name: \"France\", dialCode: \"+33\" },\n { code: \"GE\", name: \"Georgia\", dialCode: \"+995\" },\n { code: \"DE\", name: \"Germany\", dialCode: \"+49\" },\n { code: \"GR\", name: \"Greece\", dialCode: \"+30\" },\n { code: \"HK\", name: \"Hong Kong\", dialCode: \"+852\" },\n { code: \"HU\", name: \"Hungary\", dialCode: \"+36\" },\n { code: \"IN\", name: \"India\", dialCode: \"+91\" },\n { code: \"ID\", name: \"Indonesia\", dialCode: \"+62\" },\n { code: \"IR\", name: \"Iran\", dialCode: \"+98\" },\n { code: \"IQ\", name: \"Iraq\", dialCode: \"+964\" },\n { code: \"IE\", name: \"Ireland\", dialCode: \"+353\" },\n { code: \"IL\", name: \"Israel\", dialCode: \"+972\" },\n { code: \"IT\", name: \"Italy\", dialCode: \"+39\" },\n { code: \"JP\", name: \"Japan\", dialCode: \"+81\" },\n { code: \"JO\", name: \"Jordan\", dialCode: \"+962\" },\n { code: \"KZ\", name: \"Kazakhstan\", dialCode: \"+7\" },\n { code: \"KW\", name: \"Kuwait\", dialCode: \"+965\" },\n { code: \"LV\", name: \"Latvia\", dialCode: \"+371\" },\n { code: \"LB\", name: \"Lebanon\", dialCode: \"+961\" },\n { code: \"LT\", name: \"Lithuania\", dialCode: \"+370\" },\n { code: \"LU\", name: \"Luxembourg\", dialCode: \"+352\" },\n { code: \"MY\", name: \"Malaysia\", dialCode: \"+60\" },\n { code: \"MX\", name: \"Mexico\", dialCode: \"+52\" },\n { code: \"MD\", name: \"Moldova\", dialCode: \"+373\" },\n { code: \"NL\", name: \"Netherlands\", dialCode: \"+31\" },\n { code: \"NZ\", name: \"New Zealand\", dialCode: \"+64\" },\n { code: \"NG\", name: \"Nigeria\", dialCode: \"+234\" },\n { code: \"NO\", name: \"Norway\", dialCode: \"+47\" },\n { code: \"PK\", name: \"Pakistan\", dialCode: \"+92\" },\n { code: \"PS\", name: \"Palestine\", dialCode: \"+970\" },\n { code: \"PH\", name: \"Philippines\", dialCode: \"+63\" },\n { code: \"PL\", name: \"Poland\", dialCode: \"+48\" },\n { code: \"PT\", name: \"Portugal\", dialCode: \"+351\" },\n { code: \"QA\", name: \"Qatar\", dialCode: \"+974\" },\n { code: \"RO\", name: \"Romania\", dialCode: \"+40\" },\n { code: \"RU\", name: \"Russia\", dialCode: \"+7\" },\n { code: \"SA\", name: \"Saudi Arabia\", dialCode: \"+966\" },\n { code: \"RS\", name: \"Serbia\", dialCode: \"+381\" },\n { code: \"SG\", name: \"Singapore\", dialCode: \"+65\" },\n { code: \"SK\", name: \"Slovakia\", dialCode: \"+421\" },\n { code: \"SI\", name: \"Slovenia\", dialCode: \"+386\" },\n { code: \"ZA\", name: \"South Africa\", dialCode: \"+27\" },\n { code: \"KR\", name: \"South Korea\", dialCode: \"+82\" },\n { code: \"ES\", name: \"Spain\", dialCode: \"+34\" },\n { code: \"SE\", name: \"Sweden\", dialCode: \"+46\" },\n { code: \"CH\", name: \"Switzerland\", dialCode: \"+41\" },\n { code: \"SY\", name: \"Syria\", dialCode: \"+963\" },\n { code: \"TW\", name: \"Taiwan\", dialCode: \"+886\" },\n { code: \"TH\", name: \"Thailand\", dialCode: \"+66\" },\n { code: \"TR\", name: \"Turkey\", dialCode: \"+90\" },\n { code: \"UA\", name: \"Ukraine\", dialCode: \"+380\" },\n { code: \"AE\", name: \"United Arab Emirates\", dialCode: \"+971\" },\n { code: \"GB\", name: \"United Kingdom\", dialCode: \"+44\" },\n { code: \"US\", name: \"United States\", dialCode: \"+1\" },\n { code: \"UZ\", name: \"Uzbekistan\", dialCode: \"+998\" },\n { code: \"VN\", name: \"Vietnam\", dialCode: \"+84\" },\n];\n\nexport function findCountry(code: string): Country {\n return countries.find((country) => country.code === code) ?? defaultCountry;\n}\n","/** ISO 3166-1 alpha-2 country code → flag emoji. Prefer CountryFlag images on Windows. */\nexport function countryCodeToFlagEmoji(code: string): string {\n const upper = code.trim().toUpperCase();\n if (upper.length !== 2) return \"\";\n\n return String.fromCodePoint(\n ...upper.split(\"\").map((char) => 0x1f1e6 - 65 + char.charCodeAt(0)),\n );\n}\n\n/**\n * PNG flag URL (flagcdn). Windows does not render regional-indicator flag emoji,\n * so UI should use images instead of countryCodeToFlagEmoji.\n */\nexport function getCountryFlagImageUri(code: string): string | null {\n const lower = code.trim().toLowerCase();\n if (!/^[a-z]{2}$/.test(lower)) return null;\n\n return `https://flagcdn.com/w40/${lower}.png`;\n}\n","import { Image, StyleSheet, type StyleProp, type ImageStyle } from \"react-native\";\n\nimport { getCountryFlagImageUri } from \"../utils/countryFlag\";\n\nconst FLAG_HEIGHT = 18;\nconst FLAG_WIDTH = 24;\n\nexport type CountryFlagProps = {\n code: string;\n style?: StyleProp<ImageStyle>;\n};\n\n/** Renders a country flag image (works on Windows; emoji flags do not). */\nexport function CountryFlag({ code, style }: CountryFlagProps) {\n const uri = getCountryFlagImageUri(code);\n\n if (uri === null) {\n return null;\n }\n\n return (\n <Image\n source={{ uri }}\n style={[styles.flag, style]}\n accessibilityIgnoresInvertColors\n accessibilityLabel={`${code.trim().toUpperCase()} flag`}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n flag: {\n width: FLAG_WIDTH,\n height: FLAG_HEIGHT,\n borderRadius: 2,\n },\n});\n","import { useRef, useState, useLayoutEffect, type ComponentRef } from \"react\";\nimport {\n Dimensions,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport {\n countries,\n defaultCountry,\n findCountry,\n type Country,\n} from \"../data/countries\";\nimport { ChevronDownIcon } from \"../icons/ChevronDownIcon\";\nimport { INPUT_HEIGHT } from \"../theme/input\";\nimport { colors, fontSize, fontWeight, radii, spacing, fonts } from \"../theme/tokens\";\nimport {\n COUNTRY_DROPDOWN_SCROLL_CLASS,\n ensureCountryDropdownScrollStyles,\n} from \"../utils/countryDropdownScrollStyles\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport { CountryFlag } from \"./CountryFlag\";\n\nconst DROPDOWN_GAP = 10;\nconst DROPDOWN_HEIGHT = 186;\nconst DROPDOWN_PADDING = 8;\nconst OPTION_GAP = 10;\nconst OPTION_HEIGHT = 35;\n/** Match shared text-field height (`INPUT_HEIGHT`) so PhoneInput columns align. */\nconst TRIGGER_HEIGHT = INPUT_HEIGHT;\nconst CHEVRON_SIZE = 16;\n\nexport interface CountryCodeSelectorProps {\n value?: string;\n onValueChange?: (countryCode: string) => void;\n /** Country list (defaults to built-in list). */\n options?: Country[];\n disabled?: boolean;\n style?: StyleProp<ViewStyle>;\n className?: string;\n}\n\ntype AnchorLayout = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nfunction resolveDropdownTop(anchor: AnchorLayout): number {\n const windowHeight = Dimensions.get(\"window\").height;\n const topBelow = anchor.y + anchor.height + DROPDOWN_GAP;\n const topAbove = anchor.y - DROPDOWN_GAP - DROPDOWN_HEIGHT;\n const fitsBelow = topBelow + DROPDOWN_HEIGHT <= windowHeight;\n\n if (fitsBelow) return topBelow;\n if (topAbove >= 0) return topAbove;\n\n return Math.max(0, Math.min(topBelow, windowHeight - DROPDOWN_HEIGHT));\n}\n\nexport function CountryCodeSelector({\n value = defaultCountry.code,\n onValueChange,\n options = countries,\n disabled = false,\n style,\n className,\n}: CountryCodeSelectorProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const triggerRef = useRef<ComponentRef<typeof Pressable>>(null);\n const scrollRef = useRef<ComponentRef<typeof ScrollView>>(null);\n const [open, setOpen] = useState(false);\n const [anchor, setAnchor] = useState<AnchorLayout | null>(null);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(\n scrollRef,\n COUNTRY_DROPDOWN_SCROLL_CLASS,\n open && Boolean(anchor),\n );\n\n useLayoutEffect(() => {\n ensureCountryDropdownScrollStyles();\n }, []);\n\n const selected = findCountry(value);\n const textColor = disabled ? colors.stormGray200 : colors.slateBlue;\n\n function closeDropdown() {\n setOpen(false);\n setAnchor(null);\n }\n\n function handleOpen() {\n if (disabled) return;\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n }\n\n function handleSelect(code: string) {\n onValueChange?.(code);\n closeDropdown();\n }\n\n const dropdownTop = anchor ? resolveDropdownTop(anchor) : 0;\n\n const optionList = options.map((item, index) => {\n const isSelected = item.code === selected.code;\n const isLast = index === options.length - 1;\n return (\n <Pressable\n key={item.code}\n accessibilityRole=\"button\"\n onPress={() => handleSelect(item.code)}\n style={[\n styles.option,\n isSelected && styles.optionSelected,\n !isLast && styles.optionSpacing,\n ]}\n >\n <CountryFlag code={item.code} />\n <Text style={styles.optionDialCode}>{item.dialCode}</Text>\n </Pressable>\n );\n });\n\n const dropdownList = (\n <ScrollView\n ref={scrollRef}\n style={styles.dropdownScroll}\n contentContainerStyle={styles.dropdownContent}\n keyboardShouldPersistTaps=\"handled\"\n showsVerticalScrollIndicator\n bounces={false}\n nestedScrollEnabled\n >\n {optionList}\n </ScrollView>\n );\n\n return (\n <View ref={wrapperRef} style={[styles.root, style]}>\n <Pressable\n ref={triggerRef}\n accessibilityRole=\"button\"\n disabled={disabled}\n onPress={handleOpen}\n style={[\n styles.trigger,\n disabled ? styles.triggerDisabled : styles.triggerEnabled,\n Platform.OS === \"web\" ? styles.triggerWeb : null,\n ]}\n >\n <CountryFlag code={selected.code} />\n <Text style={[styles.dialCode, { color: textColor }]}>{selected.dialCode}</Text>\n <ChevronDownIcon size={CHEVRON_SIZE} color={colors.stormGray100} />\n </Pressable>\n\n <Modal\n visible={open}\n transparent\n animationType=\"fade\"\n onRequestClose={closeDropdown}\n >\n <Pressable style={styles.overlay} onPress={closeDropdown}>\n {anchor ? (\n <View\n style={[\n styles.dropdown,\n {\n top: dropdownTop,\n left: anchor.x,\n width: anchor.width,\n },\n ]}\n >\n {dropdownList}\n </View>\n ) : null}\n </Pressable>\n </Modal>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: {\n alignSelf: \"flex-start\",\n flexShrink: 0,\n },\n trigger: {\n flexDirection: \"row\",\n alignItems: \"center\",\n alignSelf: \"flex-start\",\n flexGrow: 0,\n flexShrink: 0,\n height: TRIGGER_HEIGHT,\n borderRadius: radii.lg,\n borderWidth: 1,\n padding: spacing.lg,\n gap: spacing.sm,\n },\n triggerEnabled: {\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n },\n triggerDisabled: {\n borderColor: colors.stormGray50,\n backgroundColor: colors.stormGray50,\n },\n triggerWeb: {\n width: \"max-content\" as ViewStyle[\"width\"],\n },\n dialCode: {\n fontSize: fontSize.md,\n fontWeight: fontWeight.medium,\n lineHeight: 19,\n },\n overlay: {\n flex: 1,\n backgroundColor: \"transparent\",\n },\n dropdown: {\n position: \"absolute\",\n height: DROPDOWN_HEIGHT,\n borderRadius: radii.lg,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n padding: DROPDOWN_PADDING,\n overflow: \"hidden\",\n },\n dropdownScroll: {\n flex: 1,\n },\n dropdownContent: {\n flexGrow: 1,\n },\n option: {\n flexDirection: \"row\",\n alignItems: \"center\",\n height: OPTION_HEIGHT,\n borderRadius: radii.sm,\n padding: spacing.sm,\n gap: spacing.sm,\n },\n optionSpacing: {\n marginBottom: OPTION_GAP,\n },\n optionSelected: {\n backgroundColor: colors.countrySelectorSelectedBg,\n },\n optionDialCode: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: fontSize.md,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.slateBlue,\n },\n});\n","import { useRef, useState, type ComponentRef } from \"react\";\nimport {\n StyleSheet,\n Text,\n TextInput,\n View,\n type NativeSyntheticEvent,\n type StyleProp,\n type TextInputFocusEventData,\n type TextInputProps,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { CountryCodeSelector } from \"./CountryCodeSelector\";\nimport { Label } from \"./Label\";\nimport {\n getInputFieldStyles,\n inputFieldMetrics,\n INPUT_ICON_GAP,\n INPUT_OUTLINE_WIDTH,\n resolveInputVisualState,\n} from \"../theme/input\";\nimport { colors, radii, spacing } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\n/** Keep country trigger outer box equal to the phone field (transparent focus ring). */\nconst countryOutlineSlot = {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: colors.transparent,\n padding: 0,\n backgroundColor: colors.transparent,\n} as const;\n\nexport interface PhoneInputProps extends Omit<TextInputProps, \"style\"> {\n label?: string;\n countryCode?: string;\n onCountryCodeChange?: (countryCode: string) => void;\n error?: string;\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<TextStyle>;\n className?: string;\n labelClassName?: string;\n /** Styles merged into the field label. */\n labelStyles?: StyleProp<TextStyle>;\n inputClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n}\n\n/** National phone field: digits only (blocks pasted letters/symbols). */\nfunction sanitizePhoneDigits(value: string): string {\n return value.replace(/\\D/g, \"\");\n}\n\nexport function PhoneInput({\n label,\n countryCode,\n onCountryCodeChange,\n error,\n hint,\n containerStyle,\n style,\n className,\n labelClassName,\n labelStyles,\n inputClassName,\n errorClassName,\n hintClassName,\n editable = true,\n onFocus,\n onBlur,\n onChangeText,\n ...props\n}: PhoneInputProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const inputRef = useRef<ComponentRef<typeof TextInput>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const [focused, setFocused] = useState(false);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(inputRef, inputClassName);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n const isDisabled = editable === false;\n const phoneVisualState = resolveInputVisualState({\n focused,\n error: Boolean(error),\n disabled: isDisabled,\n });\n const phoneFieldStyles = getInputFieldStyles(phoneVisualState);\n\n function handleFocus(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(true);\n onFocus?.(event);\n }\n\n function handleBlur(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handleChangeText(value: string) {\n onChangeText?.(sanitizePhoneDigits(value));\n }\n\n const helperMessage = error ?? hint;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label\n disabled={isDisabled}\n className={labelClassName}\n style={labelStyles}\n >\n {label}\n </Label>\n ) : null}\n <View style={styles.row}>\n <View style={[countryOutlineSlot, styles.countryOutline]}>\n <CountryCodeSelector\n value={countryCode}\n onValueChange={onCountryCodeChange}\n disabled={isDisabled}\n style={styles.countrySelector}\n />\n </View>\n <View style={[phoneFieldStyles.outline, styles.phoneOutline]}>\n <View\n style={[\n inputFieldMetrics.containerBase,\n inputFieldMetrics.container,\n phoneFieldStyles.container,\n styles.phoneField,\n ]}\n >\n <TextInput\n ref={inputRef}\n style={[\n inputFieldMetrics.input,\n phoneFieldStyles.text,\n style,\n ]}\n keyboardType=\"phone-pad\"\n placeholderTextColor={\n error ? colors.inputError : phoneFieldStyles.placeholder\n }\n editable={editable}\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n onChangeText={handleChangeText}\n />\n </View>\n </View>\n </View>\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: \"100%\",\n gap: spacing.sm,\n },\n row: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: INPUT_ICON_GAP,\n },\n countryOutline: {\n flexShrink: 0,\n },\n countrySelector: {\n flexShrink: 0,\n },\n phoneOutline: {\n flex: 1,\n },\n phoneField: {\n flex: 1,\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export const CHEVRON_LEFT_PATH = \"M12.5 15L7.5 10L12.5 5\";\nexport const CHEVRON_RIGHT_PATH = \"M7.5 15L12.5 10L7.5 5\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { CHEVRON_LEFT_PATH, CHEVRON_RIGHT_PATH } from \"./chevronNavPaths\";\n\ninterface ChevronNavIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\nexport function ChevronLeftIcon({\n size = 20,\n color = \"#151a1e\",\n strokeWidth = 2,\n}: ChevronNavIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={CHEVRON_LEFT_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n\nexport function ChevronRightIcon({\n size = 20,\n color = \"#151a1e\",\n strokeWidth = 2,\n}: ChevronNavIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={CHEVRON_RIGHT_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { Dimensions, Platform, StyleSheet, type TextStyle, type ViewStyle } from \"react-native\";\nimport { colors, fonts, fontSize, fontWeight, radii, spacing } from \"./tokens\";\n\nexport const CALENDAR_DROPDOWN_GAP = spacing.sm;\nexport const CALENDAR_PANEL_WIDTH = 296;\nexport const CALENDAR_PANEL_PADDING = spacing.md;\nexport const CALENDAR_PANEL_GAP = spacing.md;\nexport const CALENDAR_CONTENT_WIDTH =\n CALENDAR_PANEL_WIDTH - CALENDAR_PANEL_PADDING * 2;\nexport const CALENDAR_HEADER_HEIGHT = 20;\nexport const CALENDAR_WEEKDAY_CELL_SIZE = 32;\nexport const CALENDAR_WEEKDAY_GAP = spacing.sm;\nexport const CALENDAR_WEEKDAY_RADIUS = 6;\nexport const CALENDAR_DAY_SIZE = CALENDAR_WEEKDAY_CELL_SIZE;\nexport const CALENDAR_DAY_GRID_WIDTH = CALENDAR_CONTENT_WIDTH;\nexport const CALENDAR_DAY_GAP_X = spacing.sm;\nexport const CALENDAR_DAY_GAP_Y = spacing.lg;\nexport const CALENDAR_DAY_ROWS = 6;\nexport const CALENDAR_DAY_GRID_HEIGHT =\n CALENDAR_DAY_SIZE * CALENDAR_DAY_ROWS + CALENDAR_DAY_GAP_Y * (CALENDAR_DAY_ROWS - 1);\nexport const CALENDAR_PICKER_COLUMNS = 3;\nexport const CALENDAR_PICKER_ROWS = 4;\nexport const CALENDAR_YEARS_PER_PAGE = 12;\nexport const CALENDAR_PICKER_CELL_WIDTH =\n (CALENDAR_DAY_GRID_WIDTH - CALENDAR_DAY_GAP_X * (CALENDAR_PICKER_COLUMNS - 1)) /\n CALENDAR_PICKER_COLUMNS;\nexport const CALENDAR_PICKER_CELL_HEIGHT = 36;\nexport const CALENDAR_PICKER_BODY_HEIGHT =\n CALENDAR_WEEKDAY_CELL_SIZE + CALENDAR_WEEKDAY_GAP + CALENDAR_DAY_GRID_HEIGHT;\nexport const CALENDAR_DAY_DOT_SIZE = 3;\nexport const CALENDAR_TODAY_TEXT_COLOR = \"#082640\";\nexport const CALENDAR_TODAY_DOT_COLOR = \"#0033A0\";\nexport const CALENDAR_NAV_ICON_SIZE = 20;\nexport const CALENDAR_NAV_ICON_COLOR = colors.stormGray850;\nexport const CALENDAR_FIELD_ICON_SIZE = 20;\nexport const CALENDAR_FIELD_WIDTH = CALENDAR_PANEL_WIDTH;\nexport const CALENDAR_FIELD_HEIGHT = 52;\nexport const CALENDAR_FIELD_PADDING = spacing.lg;\nexport const CALENDAR_FIELD_GAP = spacing.sm;\nexport const CALENDAR_FIELD_PLACEHOLDER_COLOR = colors.stormGray200;\n\n/** @deprecated Use `CALENDAR_PANEL_WIDTH` */\nexport const CALENDAR_PANEL_MIN_WIDTH = CALENDAR_PANEL_WIDTH;\n\nexport const CALENDAR_PANEL_TOTAL_HEIGHT =\n CALENDAR_PANEL_PADDING * 2 +\n CALENDAR_HEADER_HEIGHT +\n CALENDAR_PANEL_GAP * 2 +\n CALENDAR_WEEKDAY_CELL_SIZE +\n CALENDAR_DAY_GRID_HEIGHT;\nexport const CALENDAR_PANEL_HEIGHT = CALENDAR_PANEL_TOTAL_HEIGHT;\n\nexport const calendarLabelTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.sm,\n fontWeight: fontWeight.medium,\n lineHeight: 16,\n letterSpacing: 0,\n color: colors.slateBlue,\n} as const;\n\nexport const calendarFieldTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: 19,\n letterSpacing: 0,\n textAlign: \"left\",\n} as const;\n\nexport const calendarFieldPlaceholderTypography = {\n ...calendarFieldTypography,\n color: CALENDAR_FIELD_PLACEHOLDER_COLOR,\n} as const;\n\nexport const calendarDropdownMetrics = StyleSheet.create({\n panel: {\n width: CALENDAR_PANEL_WIDTH,\n height: CALENDAR_PANEL_HEIGHT,\n borderRadius: radii.lg,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n padding: CALENDAR_PANEL_PADDING,\n gap: CALENDAR_PANEL_GAP,\n overflow: \"hidden\",\n flexDirection: \"column\",\n opacity: 1,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n header: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n height: CALENDAR_HEADER_HEIGHT,\n minHeight: CALENDAR_HEADER_HEIGHT,\n maxHeight: CALENDAR_HEADER_HEIGHT,\n },\n headerTitle: {\n textAlign: \"center\",\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.bold,\n lineHeight: 19,\n letterSpacing: 0,\n color: colors.stormGray850,\n },\n headerTitlePressable: {\n flex: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n minHeight: CALENDAR_HEADER_HEIGHT,\n },\n navButton: {\n width: CALENDAR_NAV_ICON_SIZE,\n height: CALENDAR_NAV_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n weekdayRow: {\n flexDirection: \"row\",\n gap: CALENDAR_WEEKDAY_GAP,\n height: CALENDAR_WEEKDAY_CELL_SIZE,\n minHeight: CALENDAR_WEEKDAY_CELL_SIZE,\n maxHeight: CALENDAR_WEEKDAY_CELL_SIZE,\n opacity: 1,\n },\n weekdayCell: {\n width: CALENDAR_WEEKDAY_CELL_SIZE,\n height: CALENDAR_WEEKDAY_CELL_SIZE,\n borderRadius: CALENDAR_WEEKDAY_RADIUS,\n padding: spacing.xs,\n backgroundColor: colors.stormGray0,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: 1,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n weekdayLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.sm,\n fontWeight: fontWeight.regular,\n lineHeight: 16,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.stormGray300,\n textTransform: \"uppercase\",\n },\n dayGrid: {\n width: CALENDAR_DAY_GRID_WIDTH,\n height: CALENDAR_DAY_GRID_HEIGHT,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n columnGap: CALENDAR_DAY_GAP_X,\n rowGap: CALENDAR_DAY_GAP_Y,\n alignContent: \"flex-start\",\n opacity: 1,\n },\n dayCell: {\n width: CALENDAR_DAY_SIZE,\n height: CALENDAR_DAY_SIZE,\n minHeight: CALENDAR_DAY_SIZE,\n maxHeight: CALENDAR_DAY_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: CALENDAR_WEEKDAY_RADIUS,\n padding: spacing.xs,\n backgroundColor: colors.white,\n opacity: 1,\n position: \"relative\",\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n dayCellPast: {\n backgroundColor: colors.stormGray50,\n },\n dayCellSelected: {\n backgroundColor: colors.navy,\n },\n dayLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: 19,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.navy,\n includeFontPadding: false,\n textAlignVertical: \"center\",\n },\n dayLabelToday: {\n color: CALENDAR_TODAY_TEXT_COLOR,\n },\n dayLabelSelected: {\n fontWeight: fontWeight.semibold,\n color: colors.white,\n },\n dayLabelFuture: {\n color: colors.navy,\n },\n dayLabelMuted: {\n color: colors.stormGray300,\n },\n dayLabelOutsideMonth: {\n color: colors.stormGray300,\n },\n dayLabelDisabled: {\n color: colors.stormGray300,\n opacity: 0.5,\n },\n todayDot: {\n position: \"absolute\",\n bottom: 5,\n left: \"50%\",\n width: CALENDAR_DAY_DOT_SIZE,\n height: CALENDAR_DAY_DOT_SIZE,\n borderRadius: 15,\n backgroundColor: CALENDAR_TODAY_DOT_COLOR,\n marginLeft: -(CALENDAR_DAY_DOT_SIZE / 2),\n zIndex: 1,\n },\n pickerBody: {\n width: CALENDAR_DAY_GRID_WIDTH,\n height: CALENDAR_PICKER_BODY_HEIGHT,\n justifyContent: \"center\",\n },\n pickerGrid: {\n width: CALENDAR_DAY_GRID_WIDTH,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n columnGap: CALENDAR_DAY_GAP_X,\n rowGap: CALENDAR_DAY_GAP_Y,\n alignContent: \"flex-start\",\n },\n pickerCell: {\n width: CALENDAR_PICKER_CELL_WIDTH,\n minHeight: CALENDAR_PICKER_CELL_HEIGHT,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: CALENDAR_WEEKDAY_RADIUS,\n paddingHorizontal: spacing.xs,\n paddingVertical: spacing.xs,\n backgroundColor: colors.white,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n pickerCellSelected: {\n backgroundColor: colors.navy,\n },\n pickerLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: 19,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.navy,\n includeFontPadding: false,\n ...(Platform.OS === \"android\" ? { textAlignVertical: \"center\" as const } : null),\n },\n pickerLabelSelected: {\n fontWeight: fontWeight.semibold,\n color: colors.white,\n },\n pickerLabelDisabled: {\n color: colors.stormGray300,\n opacity: 0.5,\n },\n pickerLabelCurrent: {\n color: CALENDAR_TODAY_TEXT_COLOR,\n },\n});\n\nexport function resolveCalendarDropdownTop(\n anchor: { y: number; height: number },\n panelHeight: number = CALENDAR_PANEL_HEIGHT,\n): number {\n const windowHeight = Dimensions.get(\"window\").height;\n const spaceBelow = windowHeight - (anchor.y + anchor.height + CALENDAR_DROPDOWN_GAP);\n const spaceAbove = anchor.y - CALENDAR_DROPDOWN_GAP;\n const topBelow = anchor.y + anchor.height + CALENDAR_DROPDOWN_GAP;\n const topAbove = anchor.y - CALENDAR_DROPDOWN_GAP - panelHeight;\n\n if (spaceBelow >= panelHeight) {\n return topBelow;\n }\n\n if (spaceAbove >= panelHeight) {\n return topAbove;\n }\n\n if (spaceAbove > spaceBelow) {\n return Math.max(0, topAbove);\n }\n\n return Math.max(0, Math.min(topBelow, windowHeight - panelHeight));\n}\n\nexport function resolveCalendarDropdownLeft(\n anchor: { x: number },\n panelWidth: number = CALENDAR_PANEL_WIDTH,\n): number {\n const windowWidth = Dimensions.get(\"window\").width;\n const maxLeft = Math.max(0, windowWidth - panelWidth);\n\n return Math.max(0, Math.min(anchor.x, maxLeft));\n}\n\nexport const calendarFieldMetrics = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n width: CALENDAR_FIELD_WIDTH,\n minWidth: CALENDAR_FIELD_WIDTH,\n maxWidth: CALENDAR_FIELD_WIDTH,\n height: CALENDAR_FIELD_HEIGHT,\n minHeight: CALENDAR_FIELD_HEIGHT,\n maxHeight: CALENDAR_FIELD_HEIGHT,\n borderRadius: radii.lg,\n padding: CALENDAR_FIELD_PADDING,\n gap: CALENDAR_FIELD_GAP,\n opacity: 1,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n value: {\n flex: 1,\n minWidth: 0,\n ...calendarFieldTypography,\n paddingVertical: 0,\n paddingHorizontal: 0,\n margin: 0,\n ...(Platform.OS === \"android\" ? { includeFontPadding: false } : null),\n ...(Platform.OS === \"web\"\n ? ({\n outlineStyle: \"none\",\n } as TextStyle)\n : null),\n },\n});\n","export function stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport type DateRange = {\n start: Date;\n end?: Date;\n};\n\nexport function normalizeDateRange(range?: DateRange): { start?: Date; end?: Date } {\n if (!range?.start) {\n return {};\n }\n\n const start = stripTime(range.start);\n\n if (!range.end) {\n return { start };\n }\n\n const end = stripTime(range.end);\n\n if (isBeforeDay(end, start)) {\n return { start: end, end: start };\n }\n\n return { start, end };\n}\n\nexport function isInDateRange(date: Date, start?: Date, end?: Date): boolean {\n if (!start) {\n return false;\n }\n\n const day = stripTime(date);\n\n if (!end) {\n return isSameDay(day, start);\n }\n\n return !isBeforeDay(day, start) && !isAfterDay(day, end);\n}\n\nexport function selectRangeDate(clicked: Date, current?: DateRange): DateRange | undefined {\n const clickedDate = stripTime(clicked);\n\n if (!current?.start) {\n return { start: clickedDate };\n }\n\n const start = stripTime(current.start);\n const end = current.end ? stripTime(current.end) : undefined;\n\n if (!end) {\n if (isSameDay(clickedDate, start)) {\n return undefined;\n }\n\n if (isBeforeDay(clickedDate, start)) {\n return { start: clickedDate };\n }\n\n return { start, end: clickedDate };\n }\n\n if (isSameDay(clickedDate, end)) {\n return undefined;\n }\n\n return { start: clickedDate };\n}\n\nexport function isSameDay(left: Date, right: Date): boolean {\n return (\n left.getFullYear() === right.getFullYear() &&\n left.getMonth() === right.getMonth() &&\n left.getDate() === right.getDate()\n );\n}\n\nexport function isBeforeDay(left: Date, right: Date): boolean {\n return stripTime(left).getTime() < stripTime(right).getTime();\n}\n\nexport function isAfterDay(left: Date, right: Date): boolean {\n return stripTime(left).getTime() > stripTime(right).getTime();\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\n}\n\nexport function isDateDisabled(\n date: Date,\n minDate?: Date,\n maxDate?: Date,\n): boolean {\n if (minDate && isBeforeDay(date, minDate)) {\n return true;\n }\n\n if (maxDate && isAfterDay(date, maxDate)) {\n return true;\n }\n\n return false;\n}\n\nexport type CalendarDayCell = {\n date: Date;\n inCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isInRange: boolean;\n isPast: boolean;\n isDisabled: boolean;\n};\n\nconst CALENDAR_VISIBLE_DAY_COUNT = 42;\nconst MONDAY_WEEK_START = 1;\n\nexport function buildCalendarDays({\n viewDate,\n selectedDate,\n selectedRange,\n today,\n minDate,\n maxDate,\n}: {\n viewDate: Date;\n selectedDate?: Date;\n selectedRange?: DateRange;\n today: Date;\n minDate?: Date;\n maxDate?: Date;\n}): CalendarDayCell[] {\n const { start: rangeStart, end: rangeEnd } = normalizeDateRange(selectedRange);\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstOfMonth = new Date(year, month, 1);\n const startOffset = (firstOfMonth.getDay() - MONDAY_WEEK_START + 7) % 7;\n const gridStart = new Date(year, month, 1 - startOffset);\n const days: CalendarDayCell[] = [];\n\n for (let index = 0; index < CALENDAR_VISIBLE_DAY_COUNT; index += 1) {\n const date = new Date(\n gridStart.getFullYear(),\n gridStart.getMonth(),\n gridStart.getDate() + index,\n );\n const inCurrentMonth = date.getMonth() === month;\n const isPast = inCurrentMonth && isBeforeDay(date, today);\n const isDisabled = isDateDisabled(date, minDate, maxDate);\n const isRangeStart = rangeStart ? isSameDay(date, rangeStart) : false;\n const isRangeEnd = rangeEnd ? isSameDay(date, rangeEnd) : false;\n const inSelectedRange =\n rangeStart && rangeEnd ? isInDateRange(date, rangeStart, rangeEnd) : false;\n const isInRange = inSelectedRange && !isRangeStart && !isRangeEnd;\n const isSelected = selectedDate\n ? isSameDay(date, selectedDate)\n : inSelectedRange || Boolean(rangeStart && !rangeEnd && isRangeStart);\n\n days.push({\n date,\n inCurrentMonth,\n isToday: isSameDay(date, today),\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange,\n isPast,\n isDisabled,\n });\n }\n\n return days;\n}\n\nexport function formatCalendarMonthYear(date: Date, locale: string): string {\n const formatted = new Intl.DateTimeFormat(locale, {\n month: \"short\",\n year: \"numeric\",\n }).format(date);\n\n return formatted.charAt(0).toUpperCase() + formatted.slice(1);\n}\n\nexport function formatCalendarYear(year: number, locale: string): string {\n return new Intl.DateTimeFormat(locale, { year: \"numeric\" }).format(new Date(year, 0, 1));\n}\n\nexport function getMonthLabels(locale: string): string[] {\n return Array.from({ length: 12 }, (_, month) => {\n const label = new Intl.DateTimeFormat(locale, { month: \"short\" }).format(\n new Date(2024, month, 1),\n );\n const normalized = label.replace(/\\./g, \"\");\n\n return normalized.charAt(0).toUpperCase() + normalized.slice(1);\n });\n}\n\nexport function getYearPageStart(year: number, yearsPerPage = 12): number {\n return Math.floor(year / yearsPerPage) * yearsPerPage;\n}\n\nexport function isMonthDisabled(\n year: number,\n month: number,\n minDate?: Date,\n maxDate?: Date,\n): boolean {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n\n if (minDate && isBeforeDay(lastDay, minDate)) {\n return true;\n }\n\n if (maxDate && isAfterDay(firstDay, maxDate)) {\n return true;\n }\n\n return false;\n}\n\nexport function isYearDisabled(year: number, minDate?: Date, maxDate?: Date): boolean {\n const firstDay = new Date(year, 0, 1);\n const lastDay = new Date(year, 11, 31);\n\n if (minDate && isBeforeDay(lastDay, minDate)) {\n return true;\n }\n\n if (maxDate && isAfterDay(firstDay, maxDate)) {\n return true;\n }\n\n return false;\n}\n\nexport function formatCalendarDate(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }).format(date);\n}\n\nexport function formatCalendarDateRange(\n range: DateRange,\n locale: string,\n separator = \" – \",\n): string {\n const { start, end } = normalizeDateRange(range);\n\n if (!start) {\n return \"\";\n }\n\n if (!end) {\n return formatCalendarDate(start, locale);\n }\n\n return `${formatCalendarDate(start, locale)}${separator}${formatCalendarDate(end, locale)}`;\n}\n\n/** @deprecated Use `resolveWeekdayLabels` from `calendarLocalization`; calendars are Monday-first. */\nexport function getDefaultWeekdayLabels(locale: string): string[] {\n const labels: string[] = [];\n const formatter = new Intl.DateTimeFormat(locale, { weekday: \"short\" });\n\n for (let index = 0; index < 7; index += 1) {\n const day = new Date(2024, 0, index + 1);\n const label = formatter.format(day).replace(/\\./g, \"\").toUpperCase();\n labels.push(label.slice(0, 2));\n }\n\n return labels;\n}\n","export type CalendarLocale = \"hy-AM\" | \"en-US\" | \"ru-RU\";\n\nexport type CalendarTranslationKey =\n | \"datePlaceholder\"\n | \"rangePlaceholder\"\n | \"previousMonth\"\n | \"nextMonth\"\n | \"previousYear\"\n | \"nextYear\"\n | \"previousYears\"\n | \"nextYears\"\n | \"selectMonth\"\n | \"selectYear\"\n | \"closeCalendar\";\n\nexport type CalendarTranslations = Record<CalendarTranslationKey, string> & {\n /** Weekday labels in Monday-first order. */\n weekdays: string[];\n /** Short month labels used in compact calendar headers and month picker cells. */\n monthsShort: string[];\n /** Full month labels available for consumers that need long-form display. */\n monthsLong: string[];\n};\n\nexport const calendarTranslations: Record<CalendarLocale, CalendarTranslations> = {\n \"hy-AM\": {\n weekdays: [\"ԵՐ\", \"ԵՔ\", \"ՉՐ\", \"ՀՆ\", \"ՈՒՐ\", \"ՇԲ\", \"ԿՐ\"],\n monthsShort: [\n \"Հնվ\",\n \"Փտվ\",\n \"Մրտ\",\n \"Ապր\",\n \"Մյս\",\n \"Հուն\",\n \"Հուլ\",\n \"Օգս\",\n \"Սեպ\",\n \"Հոկ\",\n \"Նոյ\",\n \"Դեկ\",\n ],\n monthsLong: [\n \"Հունվար\",\n \"Փետրվար\",\n \"Մարտ\",\n \"Ապրիլ\",\n \"Մայիս\",\n \"Հունիս\",\n \"Հուլիս\",\n \"Օգոստոս\",\n \"Սեպտեմբեր\",\n \"Հոկտեմբեր\",\n \"Նոյեմբեր\",\n \"Դեկտեմբեր\",\n ],\n datePlaceholder: \"Ընտրել ամսաթիվ\",\n rangePlaceholder: \"Ընտրել ժամանակահատված\",\n previousMonth: \"Նախորդ ամիս\",\n nextMonth: \"Հաջորդ ամիս\",\n previousYear: \"Նախորդ տարի\",\n nextYear: \"Հաջորդ տարի\",\n previousYears: \"Նախորդ տարիներ\",\n nextYears: \"Հաջորդ տարիներ\",\n selectMonth: \"Ընտրել ամիս\",\n selectYear: \"Ընտրել տարի\",\n closeCalendar: \"Փակել օրացույցը\",\n },\n \"en-US\": {\n weekdays: [\"MO\", \"TU\", \"WE\", \"TH\", \"FR\", \"SA\", \"SU\"],\n monthsShort: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n monthsLong: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n datePlaceholder: \"Select date\",\n rangePlaceholder: \"Select date range\",\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n previousYear: \"Previous year\",\n nextYear: \"Next year\",\n previousYears: \"Previous years\",\n nextYears: \"Next years\",\n selectMonth: \"Select month\",\n selectYear: \"Select year\",\n closeCalendar: \"Close calendar\",\n },\n \"ru-RU\": {\n weekdays: [\"ПН\", \"ВТ\", \"СР\", \"ЧТ\", \"ПТ\", \"СБ\", \"ВС\"],\n monthsShort: [\n \"Янв\",\n \"Фев\",\n \"Мар\",\n \"Апр\",\n \"Май\",\n \"Июн\",\n \"Июл\",\n \"Авг\",\n \"Сен\",\n \"Окт\",\n \"Ноя\",\n \"Дек\",\n ],\n monthsLong: [\n \"Январь\",\n \"Февраль\",\n \"Март\",\n \"Апрель\",\n \"Май\",\n \"Июнь\",\n \"Июль\",\n \"Август\",\n \"Сентябрь\",\n \"Октябрь\",\n \"Ноябрь\",\n \"Декабрь\",\n ],\n datePlaceholder: \"Выбрать дату\",\n rangePlaceholder: \"Выбрать период\",\n previousMonth: \"Предыдущий месяц\",\n nextMonth: \"Следующий месяц\",\n previousYear: \"Предыдущий год\",\n nextYear: \"Следующий год\",\n previousYears: \"Предыдущие годы\",\n nextYears: \"Следующие годы\",\n selectMonth: \"Выбрать месяц\",\n selectYear: \"Выбрать год\",\n closeCalendar: \"Закрыть календарь\",\n },\n};\n\nexport function resolveCalendarLocale(locale: string): CalendarLocale {\n const normalizedLocale = locale.toLowerCase();\n\n if (normalizedLocale.startsWith(\"hy\")) {\n return \"hy-AM\";\n }\n\n if (normalizedLocale.startsWith(\"ru\")) {\n return \"ru-RU\";\n }\n\n return \"en-US\";\n}\n\nexport function getCalendarTranslations(locale: string): CalendarTranslations {\n return calendarTranslations[resolveCalendarLocale(locale)];\n}\n\nexport function resolveWeekdayLabels(locale: string): string[] {\n return getCalendarTranslations(locale).weekdays;\n}\n\nexport function getCalendarMonthLabels(\n locale: string,\n width: \"short\" | \"long\" = \"short\",\n): string[] {\n const translations = getCalendarTranslations(locale);\n\n return width === \"short\" ? translations.monthsShort : translations.monthsLong;\n}\n\nexport function formatLocalizedCalendarMonthYear(date: Date, locale: string): string {\n return `${getCalendarMonthLabels(locale)[date.getMonth()]} ${date.getFullYear()}`;\n}\n","import { createContext, useContext, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { resolveCalendarLocale, type CalendarLocale } from \"./calendarLocalization\";\n\nconst LOCALE_STORAGE_KEY = \"homepad.locale\";\nconst LOCALE_CHANGE_EVENT = \"homepad:locale-change\";\nconst DEFAULT_CALENDAR_LOCALE: CalendarLocale = \"hy-AM\";\n\nconst CalendarLocaleContext = createContext<string | undefined>(undefined);\n\nexport type CalendarLocaleProviderProps = {\n locale: string;\n children: ReactNode;\n};\n\nexport function CalendarLocaleProvider({ locale, children }: CalendarLocaleProviderProps) {\n return (\n <CalendarLocaleContext.Provider value={locale}>{children}</CalendarLocaleContext.Provider>\n );\n}\n\nfunction normalizeProjectLocale(locale: string | null | undefined): CalendarLocale | null {\n if (!locale) {\n return null;\n }\n\n return resolveCalendarLocale(locale);\n}\n\nfunction readBrowserLocale(): CalendarLocale | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n let storedLocale: CalendarLocale | null = null;\n\n try {\n storedLocale = normalizeProjectLocale(window.localStorage.getItem(LOCALE_STORAGE_KEY));\n } catch {\n storedLocale = null;\n }\n\n if (storedLocale) {\n return storedLocale;\n }\n\n const documentLocale = normalizeProjectLocale(window.document?.documentElement.lang);\n if (documentLocale) {\n return documentLocale;\n }\n\n return normalizeProjectLocale(window.navigator.language);\n}\n\nexport function useCalendarLocale(locale?: string): CalendarLocale {\n const contextLocale = useContext(CalendarLocaleContext);\n const controlledLocale = locale ?? contextLocale;\n const [browserLocale, setBrowserLocale] = useState<CalendarLocale>(() =>\n readBrowserLocale() ?? DEFAULT_CALENDAR_LOCALE,\n );\n\n useEffect(() => {\n if (controlledLocale !== undefined || typeof window === \"undefined\") {\n return;\n }\n\n const syncLocale = () => {\n setBrowserLocale(readBrowserLocale() ?? DEFAULT_CALENDAR_LOCALE);\n };\n\n const handleLocaleChange = (event: Event) => {\n const customEvent = event as CustomEvent<string>;\n const nextLocale = normalizeProjectLocale(customEvent.detail);\n\n if (nextLocale) {\n setBrowserLocale(nextLocale);\n return;\n }\n\n syncLocale();\n };\n\n window.addEventListener(LOCALE_CHANGE_EVENT, handleLocaleChange);\n window.addEventListener(\"storage\", syncLocale);\n\n return () => {\n window.removeEventListener(LOCALE_CHANGE_EVENT, handleLocaleChange);\n window.removeEventListener(\"storage\", syncLocale);\n };\n }, [controlledLocale]);\n\n return useMemo(\n () => normalizeProjectLocale(controlledLocale) ?? browserLocale,\n [browserLocale, controlledLocale],\n );\n}\n","import { useMemo, useRef, useState, type ComponentRef } from \"react\";\nimport { Pressable, Text, View, type StyleProp, type TextStyle, type ViewStyle } from \"react-native\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../icons/ChevronNavIcons\";\nimport {\n CALENDAR_NAV_ICON_COLOR,\n CALENDAR_NAV_ICON_SIZE,\n CALENDAR_YEARS_PER_PAGE,\n calendarDropdownMetrics,\n} from \"../theme/calendar\";\nimport {\n addMonths,\n buildCalendarDays,\n formatCalendarYear,\n getYearPageStart,\n isMonthDisabled,\n isSameDay,\n isYearDisabled,\n selectRangeDate,\n type CalendarDayCell,\n type DateRange,\n} from \"../utils/calendarDays\";\nimport {\n formatLocalizedCalendarMonthYear,\n getCalendarMonthLabels,\n getCalendarTranslations,\n resolveWeekdayLabels,\n type CalendarTranslations,\n} from \"../utils/calendarLocalization\";\nimport { useCalendarLocale } from \"../utils/calendarLocaleContext\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nexport type { DateRange };\n\nexport type CalendarLabels = Partial<Pick<CalendarTranslations, CalendarTranslationKey>> & {\n weekdays?: string[];\n formatMonthYear?: (date: Date) => string;\n};\n\ntype CalendarTranslationKey =\n | \"previousMonth\"\n | \"nextMonth\"\n | \"previousYear\"\n | \"nextYear\"\n | \"previousYears\"\n | \"nextYears\"\n | \"selectMonth\"\n | \"selectYear\"\n | \"closeCalendar\";\n\ntype CalendarPickerView = \"days\" | \"months\" | \"years\";\n\ntype CalendarBaseProps = {\n viewDate?: Date;\n defaultViewDate?: Date;\n onViewDateChange?: (date: Date) => void;\n locale?: string;\n labels?: CalendarLabels;\n minDate?: Date;\n maxDate?: Date;\n today?: Date;\n style?: StyleProp<ViewStyle>;\n className?: string;\n};\n\nexport type CalendarSingleProps = CalendarBaseProps & {\n mode?: \"single\";\n value?: Date;\n onChange?: (date: Date | undefined) => void;\n};\n\nexport type CalendarRangeProps = CalendarBaseProps & {\n mode: \"range\";\n value?: DateRange;\n onChange?: (range: DateRange | undefined) => void;\n};\n\nexport type CalendarProps = CalendarSingleProps | CalendarRangeProps;\n\nfunction resolveDayCellStyle(day: CalendarDayCell): StyleProp<ViewStyle> {\n if (day.isDisabled) {\n return [calendarDropdownMetrics.dayCell];\n }\n\n if (day.isSelected) {\n return [calendarDropdownMetrics.dayCell, calendarDropdownMetrics.dayCellSelected];\n }\n\n return [\n calendarDropdownMetrics.dayCell,\n day.inCurrentMonth && day.isPast && !day.isToday\n ? calendarDropdownMetrics.dayCellPast\n : null,\n ];\n}\n\nfunction resolveDayLabelStyle(day: CalendarDayCell): StyleProp<TextStyle> {\n if (day.isDisabled) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelDisabled];\n }\n\n if (day.isSelected) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelSelected];\n }\n\n if (!day.inCurrentMonth) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelOutsideMonth];\n }\n\n if (day.isToday) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelToday];\n }\n\n if (day.isPast) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelMuted];\n }\n\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelFuture];\n}\n\nexport function Calendar(props: CalendarProps) {\n const rangeProps = props.mode === \"range\" ? (props as CalendarRangeProps) : null;\n const singleProps = props.mode === \"range\" ? null : (props as CalendarSingleProps);\n const {\n viewDate,\n defaultViewDate,\n onViewDateChange,\n locale,\n labels,\n minDate,\n maxDate,\n today = new Date(),\n style,\n className,\n } = props;\n const rootRef = useRef<ComponentRef<typeof View>>(null);\n const [internalViewDate, setInternalViewDate] = useState(() => {\n if (defaultViewDate) {\n return defaultViewDate;\n }\n\n if (rangeProps) {\n return rangeProps.value?.start ?? today;\n }\n\n return singleProps?.value ?? today;\n });\n const activeViewDate = viewDate ?? internalViewDate;\n const [pickerView, setPickerView] = useState<CalendarPickerView>(\"days\");\n const [pickerYear, setPickerYear] = useState(() => activeViewDate.getFullYear());\n const [yearPageStart, setYearPageStart] = useState(() =>\n getYearPageStart(activeViewDate.getFullYear(), CALENDAR_YEARS_PER_PAGE),\n );\n const customWeekdayLabels = labels?.weekdays;\n const formatMonthYearLabel = labels?.formatMonthYear;\n const resolvedLocale = useCalendarLocale(locale);\n const translations = useMemo(\n () => getCalendarTranslations(resolvedLocale),\n [resolvedLocale],\n );\n\n useApplyWebClassName(rootRef, className);\n\n const weekdayLabels = useMemo(\n () => customWeekdayLabels ?? resolveWeekdayLabels(resolvedLocale),\n [customWeekdayLabels, resolvedLocale],\n );\n\n const monthLabels = useMemo(() => getCalendarMonthLabels(resolvedLocale), [resolvedLocale]);\n\n const monthYearLabel = useMemo(() => {\n if (formatMonthYearLabel) {\n return formatMonthYearLabel(activeViewDate);\n }\n\n return formatLocalizedCalendarMonthYear(activeViewDate, resolvedLocale);\n }, [activeViewDate, formatMonthYearLabel, resolvedLocale]);\n\n const headerLabel = useMemo(() => {\n if (pickerView === \"months\") {\n return formatCalendarYear(pickerYear, resolvedLocale);\n }\n\n if (pickerView === \"years\") {\n const endYear = yearPageStart + CALENDAR_YEARS_PER_PAGE - 1;\n return `${yearPageStart} – ${endYear}`;\n }\n\n return monthYearLabel;\n }, [monthYearLabel, pickerView, pickerYear, resolvedLocale, yearPageStart]);\n\n const days = useMemo(\n () =>\n buildCalendarDays({\n viewDate: activeViewDate,\n selectedDate: singleProps?.value,\n selectedRange: rangeProps?.value,\n today,\n minDate,\n maxDate,\n }),\n [activeViewDate, maxDate, minDate, rangeProps?.value, singleProps?.value, today],\n );\n\n const yearOptions = useMemo(\n () =>\n Array.from({ length: CALENDAR_YEARS_PER_PAGE }, (_, index) => yearPageStart + index),\n [yearPageStart],\n );\n\n function getLabel(key: CalendarTranslationKey): string {\n return labels?.[key] ?? translations[key];\n }\n\n function setViewDate(nextDate: Date) {\n if (viewDate === undefined) {\n setInternalViewDate(nextDate);\n }\n\n onViewDateChange?.(nextDate);\n }\n\n function handlePrevious() {\n if (pickerView === \"months\") {\n setPickerYear((year) => year - 1);\n return;\n }\n\n if (pickerView === \"years\") {\n setYearPageStart((start) => start - CALENDAR_YEARS_PER_PAGE);\n return;\n }\n\n setViewDate(addMonths(activeViewDate, -1));\n }\n\n function handleNext() {\n if (pickerView === \"months\") {\n setPickerYear((year) => year + 1);\n return;\n }\n\n if (pickerView === \"years\") {\n setYearPageStart((start) => start + CALENDAR_YEARS_PER_PAGE);\n return;\n }\n\n setViewDate(addMonths(activeViewDate, 1));\n }\n\n function handleHeaderPress() {\n if (pickerView === \"days\") {\n setPickerYear(activeViewDate.getFullYear());\n setPickerView(\"months\");\n return;\n }\n\n if (pickerView === \"months\") {\n setYearPageStart(getYearPageStart(pickerYear, CALENDAR_YEARS_PER_PAGE));\n setPickerView(\"years\");\n }\n }\n\n function handleMonthSelect(month: number) {\n setViewDate(new Date(pickerYear, month, 1));\n setPickerView(\"days\");\n }\n\n function handleYearSelect(year: number) {\n setPickerYear(year);\n setPickerView(\"months\");\n }\n\n function handleDayPress(date: Date) {\n if (rangeProps) {\n rangeProps.onChange?.(selectRangeDate(date, rangeProps.value));\n return;\n }\n\n const currentValue = singleProps?.value;\n\n if (currentValue && isSameDay(date, currentValue)) {\n singleProps?.onChange?.(undefined);\n return;\n }\n\n singleProps?.onChange?.(date);\n }\n\n const headerIsPressable = pickerView === \"days\" || pickerView === \"months\";\n\n return (\n <View ref={rootRef} style={[calendarDropdownMetrics.panel, style]}>\n <View style={calendarDropdownMetrics.header}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n pickerView === \"months\"\n ? getLabel(\"previousYear\")\n : pickerView === \"years\"\n ? getLabel(\"previousYears\")\n : getLabel(\"previousMonth\")\n }\n onPress={handlePrevious}\n style={calendarDropdownMetrics.navButton}\n >\n <ChevronLeftIcon size={CALENDAR_NAV_ICON_SIZE} color={CALENDAR_NAV_ICON_COLOR} />\n </Pressable>\n\n {headerIsPressable ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n pickerView === \"days\" ? getLabel(\"selectMonth\") : getLabel(\"selectYear\")\n }\n onPress={handleHeaderPress}\n style={calendarDropdownMetrics.headerTitlePressable}\n >\n <Text style={calendarDropdownMetrics.headerTitle}>{headerLabel}</Text>\n </Pressable>\n ) : (\n <View style={calendarDropdownMetrics.headerTitlePressable}>\n <Text style={calendarDropdownMetrics.headerTitle}>{headerLabel}</Text>\n </View>\n )}\n\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n pickerView === \"months\"\n ? getLabel(\"nextYear\")\n : pickerView === \"years\"\n ? getLabel(\"nextYears\")\n : getLabel(\"nextMonth\")\n }\n onPress={handleNext}\n style={calendarDropdownMetrics.navButton}\n >\n <ChevronRightIcon size={CALENDAR_NAV_ICON_SIZE} color={CALENDAR_NAV_ICON_COLOR} />\n </Pressable>\n </View>\n\n {pickerView === \"days\" ? (\n <>\n <View style={calendarDropdownMetrics.weekdayRow}>\n {weekdayLabels.map((weekday) => (\n <View key={weekday} style={calendarDropdownMetrics.weekdayCell}>\n <Text style={calendarDropdownMetrics.weekdayLabel}>{weekday}</Text>\n </View>\n ))}\n </View>\n\n <View style={calendarDropdownMetrics.dayGrid}>\n {days.map((day) => (\n <Pressable\n key={day.date.toISOString()}\n accessibilityRole=\"button\"\n accessibilityState={{\n selected: day.isSelected,\n disabled: day.isDisabled,\n }}\n disabled={day.isDisabled}\n onPress={() => handleDayPress(day.date)}\n style={resolveDayCellStyle(day)}\n >\n <Text style={resolveDayLabelStyle(day)}>{day.date.getDate()}</Text>\n {day.isToday && day.inCurrentMonth && !day.isSelected ? (\n <View style={calendarDropdownMetrics.todayDot} />\n ) : null}\n </Pressable>\n ))}\n </View>\n </>\n ) : (\n <View style={calendarDropdownMetrics.pickerBody}>\n <View style={calendarDropdownMetrics.pickerGrid}>\n {pickerView === \"months\"\n ? monthLabels.map((monthLabel, month) => {\n const isSelected =\n activeViewDate.getFullYear() === pickerYear &&\n activeViewDate.getMonth() === month;\n const isCurrent =\n today.getFullYear() === pickerYear && today.getMonth() === month;\n const disabled = isMonthDisabled(pickerYear, month, minDate, maxDate);\n\n return (\n <Pressable\n key={monthLabel}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: isSelected, disabled }}\n disabled={disabled}\n onPress={() => handleMonthSelect(month)}\n style={[\n calendarDropdownMetrics.pickerCell,\n isSelected ? calendarDropdownMetrics.pickerCellSelected : null,\n ]}\n >\n <Text\n style={[\n calendarDropdownMetrics.pickerLabel,\n isSelected ? calendarDropdownMetrics.pickerLabelSelected : null,\n !isSelected && isCurrent\n ? calendarDropdownMetrics.pickerLabelCurrent\n : null,\n disabled ? calendarDropdownMetrics.pickerLabelDisabled : null,\n ]}\n >\n {monthLabel}\n </Text>\n </Pressable>\n );\n })\n : yearOptions.map((year) => {\n const isSelected = activeViewDate.getFullYear() === year;\n const isCurrent = today.getFullYear() === year;\n const disabled = isYearDisabled(year, minDate, maxDate);\n\n return (\n <Pressable\n key={year}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: isSelected, disabled }}\n disabled={disabled}\n onPress={() => handleYearSelect(year)}\n style={[\n calendarDropdownMetrics.pickerCell,\n isSelected ? calendarDropdownMetrics.pickerCellSelected : null,\n ]}\n >\n <Text\n style={[\n calendarDropdownMetrics.pickerLabel,\n isSelected ? calendarDropdownMetrics.pickerLabelSelected : null,\n !isSelected && isCurrent\n ? calendarDropdownMetrics.pickerLabelCurrent\n : null,\n disabled ? calendarDropdownMetrics.pickerLabelDisabled : null,\n ]}\n >\n {year}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n )}\n </View>\n );\n}\n","export const CALENDAR_ICON_BODY_PATH =\n \"M6.66667 1.6665V4.99984M13.3333 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { CALENDAR_ICON_BODY_PATH } from \"./calendarIconPaths\";\n\nexport { CALENDAR_ICON_BODY_PATH } from \"./calendarIconPaths\";\n\ninterface CalendarIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\nexport function CalendarIcon({\n size = 20,\n color = \"#C7CDD1\",\n strokeWidth = 2,\n}: CalendarIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={CALENDAR_ICON_BODY_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { useEffect, useRef, useState, type ComponentRef } from \"react\";\nimport {\n Modal,\n Pressable,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport { CalendarIcon } from \"../icons/CalendarIcon\";\nimport {\n CALENDAR_FIELD_ICON_SIZE,\n CALENDAR_FIELD_WIDTH,\n CALENDAR_PANEL_HEIGHT,\n CALENDAR_PANEL_WIDTH,\n calendarFieldMetrics,\n calendarFieldPlaceholderTypography,\n calendarFieldTypography,\n calendarLabelTypography,\n resolveCalendarDropdownLeft,\n resolveCalendarDropdownTop,\n} from \"../theme/calendar\";\nimport { getSelectFieldStyles, resolveInputVisualState, SELECT_LABEL_GAP } from \"../theme/select\";\nimport { colors } from \"../theme/tokens\";\nimport {\n formatCalendarDate,\n formatCalendarDateRange,\n type DateRange,\n} from \"../utils/calendarDays\";\nimport { getCalendarTranslations } from \"../utils/calendarLocalization\";\nimport { useCalendarLocale } from \"../utils/calendarLocaleContext\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport {\n Calendar,\n type CalendarLabels,\n type CalendarRangeProps,\n type CalendarSingleProps,\n} from \"./Calendar\";\nimport { Label } from \"./Label\";\n\nexport type { CalendarLabels, DateRange };\n\ntype DatePickerFieldProps = {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n invalid?: boolean;\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n className?: string;\n fieldClassName?: string;\n fieldStyle?: StyleProp<ViewStyle>;\n fieldOutlineStyle?: StyleProp<ViewStyle>;\n panelClassName?: string;\n labelClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n /** Opens the calendar popup on mount (useful for Storybook previews). */\n defaultOpen?: boolean;\n /** Closes the popup after a complete range is selected. Defaults to true in range mode. */\n closeOnRangeComplete?: boolean;\n};\n\nexport type DatePickerSingleProps = Omit<CalendarSingleProps, \"style\" | \"className\"> &\n DatePickerFieldProps & {\n mode?: \"single\";\n formatDate?: (date: Date) => string;\n };\n\nexport type DatePickerRangeProps = Omit<CalendarRangeProps, \"style\" | \"className\"> &\n DatePickerFieldProps & {\n mode: \"range\";\n formatRange?: (range: DateRange) => string;\n rangeSeparator?: string;\n };\n\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nexport function DatePicker(props: DatePickerProps) {\n const {\n label,\n placeholder,\n locale,\n labels,\n minDate,\n maxDate,\n today,\n viewDate,\n defaultViewDate,\n onViewDateChange,\n disabled = false,\n error,\n invalid,\n hint,\n containerStyle,\n className,\n fieldClassName,\n fieldStyle,\n fieldOutlineStyle,\n panelClassName,\n labelClassName,\n errorClassName,\n hintClassName,\n defaultOpen = false,\n } = props;\n const mode = props.mode ?? \"single\";\n const closeOnRangeComplete =\n props.mode === \"range\" ? (props.closeOnRangeComplete ?? true) : false;\n const resolvedLocale = useCalendarLocale(locale);\n const translations = getCalendarTranslations(resolvedLocale);\n const resolvedPlaceholder =\n placeholder ?? (mode === \"range\" ? translations.rangePlaceholder : translations.datePlaceholder);\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const triggerRef = useRef<ComponentRef<typeof Pressable>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const [open, setOpen] = useState(defaultOpen);\n const [anchor, setAnchor] = useState<{\n x: number;\n y: number;\n width: number;\n height: number;\n } | null>(null);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(triggerRef, fieldClassName);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n useEffect(() => {\n if (!defaultOpen || disabled) {\n return;\n }\n\n const frame = requestAnimationFrame(() => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [defaultOpen, disabled]);\n\n const hasError = Boolean(error) || Boolean(invalid);\n const fieldStyles = getSelectFieldStyles(\n resolveInputVisualState({\n error: hasError,\n disabled,\n }),\n );\n\n const hasValue =\n mode === \"single\"\n ? Boolean(props.value)\n : Boolean(props.mode === \"range\" && props.value?.start);\n const displayValue = (() => {\n if (props.mode === \"range\") {\n if (!props.value?.start) {\n return resolvedPlaceholder;\n }\n\n return (\n props.formatRange?.(props.value) ??\n formatCalendarDateRange(props.value, resolvedLocale, props.rangeSeparator)\n );\n }\n\n if (props.value) {\n return props.formatDate?.(props.value) ?? formatCalendarDate(props.value, resolvedLocale);\n }\n\n return resolvedPlaceholder;\n })();\n const isPlaceholder = !hasValue;\n const valueTextStyle = isPlaceholder\n ? {\n ...calendarFieldPlaceholderTypography,\n color: disabled ? colors.stormGray300 : calendarFieldPlaceholderTypography.color,\n }\n : {\n ...calendarFieldTypography,\n color: fieldStyles.value.color,\n };\n const helperMessage = error ?? hint;\n const panelWidth = CALENDAR_PANEL_WIDTH;\n const panelLeft = anchor ? resolveCalendarDropdownLeft(anchor, panelWidth) : 0;\n const dropdownTop = anchor ? resolveCalendarDropdownTop(anchor) : 0;\n const resolvedDefaultViewDate =\n defaultViewDate ??\n (props.mode === \"range\" ? props.value?.start : props.value) ??\n today;\n\n function closePicker() {\n setOpen(false);\n setAnchor(null);\n }\n\n function openPicker() {\n if (disabled) {\n return;\n }\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n }\n\n function handleSingleSelect(date: Date | undefined) {\n if (props.mode === \"range\") {\n return;\n }\n\n props.onChange?.(date);\n closePicker();\n }\n\n function handleRangeSelect(range: DateRange | undefined) {\n if (props.mode !== \"range\") {\n return;\n }\n\n props.onChange?.(range);\n\n if (closeOnRangeComplete && range?.end) {\n closePicker();\n }\n }\n\n const isFluidField = Boolean(fieldStyle) || Boolean(fieldOutlineStyle);\n\n return (\n <View\n ref={wrapperRef}\n style={[styles.wrapper, isFluidField && styles.wrapperFluid, containerStyle]}\n >\n {label ? (\n <Label disabled={disabled} style={styles.label} className={labelClassName}>\n {label}\n </Label>\n ) : null}\n\n <View\n style={[\n fieldStyles.outline,\n styles.fieldOutline,\n isFluidField && styles.fieldOutlineFluid,\n fieldOutlineStyle,\n ]}\n >\n <Pressable\n ref={triggerRef}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled, expanded: open }}\n disabled={disabled}\n onPress={openPicker}\n style={[\n calendarFieldMetrics.container,\n isFluidField && styles.fieldContainerFluid,\n fieldStyles.container,\n fieldStyle,\n ]}\n >\n <Text\n style={[calendarFieldMetrics.value, valueTextStyle]}\n numberOfLines={1}\n >\n {displayValue}\n </Text>\n <View style={styles.iconSlot}>\n <CalendarIcon\n size={CALENDAR_FIELD_ICON_SIZE}\n color={disabled ? colors.stormGray200 : colors.stormGray150}\n />\n </View>\n </Pressable>\n </View>\n\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n\n <Modal visible={open} transparent animationType=\"fade\" onRequestClose={closePicker}>\n <View style={styles.modalRoot}>\n <Pressable\n style={styles.backdrop}\n onPress={closePicker}\n accessibilityRole=\"button\"\n accessibilityLabel={labels?.closeCalendar ?? translations.closeCalendar}\n />\n {anchor ? (\n <View\n style={[\n styles.panelPosition,\n {\n top: dropdownTop,\n left: panelLeft,\n width: panelWidth,\n height: CALENDAR_PANEL_HEIGHT,\n },\n ]}\n >\n {props.mode === \"range\" ? (\n <Calendar\n mode=\"range\"\n value={props.value}\n onChange={handleRangeSelect}\n viewDate={viewDate}\n defaultViewDate={resolvedDefaultViewDate}\n onViewDateChange={onViewDateChange}\n locale={resolvedLocale}\n labels={labels}\n minDate={minDate}\n maxDate={maxDate}\n today={today}\n className={panelClassName}\n />\n ) : (\n <Calendar\n mode=\"single\"\n value={props.value}\n onChange={handleSingleSelect}\n viewDate={viewDate}\n defaultViewDate={resolvedDefaultViewDate}\n onViewDateChange={onViewDateChange}\n locale={resolvedLocale}\n labels={labels}\n minDate={minDate}\n maxDate={maxDate}\n today={today}\n className={panelClassName}\n />\n )}\n </View>\n ) : null}\n </View>\n </Modal>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: CALENDAR_FIELD_WIDTH,\n maxWidth: \"100%\",\n gap: SELECT_LABEL_GAP,\n },\n wrapperFluid: {\n width: \"100%\",\n },\n fieldOutline: {\n width: CALENDAR_FIELD_WIDTH,\n maxWidth: \"100%\",\n alignSelf: \"flex-start\",\n },\n fieldOutlineFluid: {\n width: \"100%\",\n alignSelf: \"stretch\",\n },\n fieldContainerFluid: {\n width: \"100%\",\n minWidth: 0,\n maxWidth: \"100%\",\n alignSelf: \"stretch\",\n },\n label: {\n ...calendarLabelTypography,\n },\n iconSlot: {\n width: CALENDAR_FIELD_ICON_SIZE,\n height: CALENDAR_FIELD_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n modalRoot: {\n flex: 1,\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: colors.transparent,\n },\n panelPosition: {\n position: \"absolute\",\n zIndex: 1,\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export const LOCK_ICON_PATH =\n \"M5.83333 8.33317V5.83317C5.83333 4.7281 6.27232 3.66829 7.05372 2.88689C7.83512 2.10549 8.89493 1.6665 10 1.6665C11.1051 1.6665 12.1649 2.10549 12.9463 2.88689C13.7277 3.66829 14.1667 4.7281 14.1667 5.83317V8.33317M10.8333 13.3332C10.8333 13.7934 10.4602 14.1665 10 14.1665C9.53976 14.1665 9.16667 13.7934 9.16667 13.3332C9.16667 12.8729 9.53976 12.4998 10 12.4998C10.4602 12.4998 10.8333 12.8729 10.8333 13.3332ZM4.16667 8.33317H15.8333C16.7538 8.33317 17.5 9.07936 17.5 9.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V9.99984C2.5 9.07936 3.24619 8.33317 4.16667 8.33317Z\";\n","import Svg, { Path } from \"react-native-svg\";\n\nimport { LOCK_ICON_PATH } from \"./lockIconPaths\";\n\nexport { LOCK_ICON_PATH } from \"./lockIconPaths\";\n\ninterface LockIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — react-native-svg (peer dependency). */\nexport function LockIcon({\n size = 20,\n color = \"#c7cdd1\",\n strokeWidth = 2,\n}: LockIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={LOCK_ICON_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/icons/arrowUpRightPath.ts","../src/icons/ArrowUpRightIcon.tsx","../src/theme/tokens.ts","../src/utils/useApplyWebClassName.ts","../src/components/Button.tsx","../src/icons/eyeIconPaths.ts","../src/icons/EyeIcon.tsx","../src/icons/EyeOffIcon.tsx","../src/theme/input.ts","../src/components/Label.tsx","../src/components/Input.tsx","../src/icons/chevronDownPath.ts","../src/icons/ChevronDownIcon.tsx","../src/theme/select.ts","../src/utils/countryDropdownScrollStyles.ts","../src/utils/formatMultiSelectDisplay.ts","../src/components/Select.tsx","../src/data/countries.ts","../src/utils/countryFlag.ts","../src/components/CountryFlag.tsx","../src/components/CountryCodeSelector.tsx","../src/components/PhoneInput.tsx","../src/icons/chevronNavPaths.ts","../src/icons/ChevronNavIcons.tsx","../src/theme/calendar.ts","../src/utils/calendarDays.ts","../src/utils/calendarLocalization.ts","../src/utils/calendarLocaleContext.tsx","../src/components/Calendar.tsx","../src/icons/calendarIconPaths.ts","../src/icons/CalendarIcon.tsx","../src/components/DatePicker.tsx","../src/icons/lockIconPaths.ts","../src/icons/LockIcon.tsx"],"names":["jsx","Svg","Path","useLayoutEffect","Platform","useRef","jsxs","TouchableOpacity","Text","View","StyleSheet","styles","isValidElement","cloneElement","useState","Pressable","TextInput","INPUT_OUTLINE_WIDTH","createOutlineStyle","defaultOutline","Dimensions","useEffect","Animated","useMemo","Easing","Modal","ScrollView","Image","createContext","useContext","Fragment"],"mappings":"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","file":"index.cjs","sourcesContent":["export const ARROW_UP_RIGHT_PATH =\n \"M14.1667 14.1668V5.8335H5.83333M14.1667 5.8335L5.83333 14.1668\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { ARROW_UP_RIGHT_PATH } from \"./arrowUpRightPath\";\n\nexport { ARROW_UP_RIGHT_PATH } from \"./arrowUpRightPath\";\n\ninterface ArrowUpRightIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — react-native-svg (peer dependency). */\nexport function ArrowUpRightIcon({\n size = 20,\n color = \"#082640\",\n strokeWidth = 2,\n}: ArrowUpRightIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={ARROW_UP_RIGHT_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","/**\n * HomePad design tokens — aligned with the Figma design system\n * (navy / storm gray / slate-blue palette from HomePad brand).\n */\n\n/** Storm Gray scale — Figma steps 0 → 8.5 */\nexport const stormGray = {\n \"0\": \"#fbfcfc\",\n \"0.5\": \"#eceef0\",\n \"1\": \"#dadde0\",\n \"1.5\": \"#c7cdd1\",\n \"2\": \"#b5bcc1\",\n \"3\": \"#8f9aa3\",\n \"4\": \"#6a7984\",\n \"5\": \"#455765\",\n \"6\": \"#374651\",\n \"7\": \"#29343d\",\n \"8\": \"#1c2328\",\n \"8.5\": \"#151a1e\",\n} as const;\n\nexport type StormGrayStep = keyof typeof stormGray;\n\n/** Navy scale — Figma steps 0 → 8.5 */\nexport const navy = {\n \"0\": \"#f6fafe\",\n \"0.5\": \"#dee5eb\",\n \"1\": \"#c6d0d8\",\n \"1.5\": \"#afbac5\",\n \"2\": \"#97a5b2\",\n \"3\": \"#677b8c\",\n \"4\": \"#385066\",\n \"5\": \"#082640\",\n \"6\": \"#061e33\",\n \"7\": \"#051726\",\n \"8\": \"#030f1a\",\n \"8.5\": \"#020b13\",\n} as const;\n\nexport type NavyStep = keyof typeof navy;\n\n/** Ruby Red scale — Figma steps 0 → 8.5 */\nexport const rubyRed = {\n \"0\": \"#fff5f6\",\n \"0.5\": \"#f7dddf\",\n \"1\": \"#efc4c8\",\n \"1.5\": \"#e7acb1\",\n \"2\": \"#df939a\",\n \"3\": \"#ce626d\",\n \"4\": \"#be313f\",\n \"5\": \"#ae0011\",\n \"6\": \"#8b000e\",\n \"7\": \"#68000a\",\n \"8\": \"#460007\",\n \"8.5\": \"#340005\",\n} as const;\n\nexport type RubyRedStep = keyof typeof rubyRed;\n\n/** Emerald Green scale — Figma steps 0 → 8.5 */\nexport const emeraldGreen = {\n \"0\": \"#f0fbf5\",\n \"0.5\": \"#dcf2e5\",\n \"1\": \"#c8e8d5\",\n \"1.5\": \"#b4dfc5\",\n \"2\": \"#a0d5b5\",\n \"3\": \"#77c394\",\n \"4\": \"#4fb074\",\n \"5\": \"#279d54\",\n \"6\": \"#1f7e43\",\n \"7\": \"#175e32\",\n \"8\": \"#103f22\",\n \"8.5\": \"#0c2f19\",\n} as const;\n\nexport type EmeraldGreenStep = keyof typeof emeraldGreen;\n\n/** Figma brand palette — primary swatch per color family */\nexport const brand = {\n slateBlue: \"#182e3c\",\n stormGray: stormGray[\"5\"],\n navy: navy[\"5\"],\n rubyRed: rubyRed[\"5\"],\n emeraldGreen: emeraldGreen[\"5\"],\n} as const;\n\nexport const colors = {\n // Brand colors\n slateBlue: brand.slateBlue,\n\n // Emerald Green — Figma scale + brand swatch\n emeraldGreen0: emeraldGreen[\"0\"],\n emeraldGreen50: emeraldGreen[\"0.5\"],\n emeraldGreen100: emeraldGreen[\"1\"],\n emeraldGreen150: emeraldGreen[\"1.5\"],\n emeraldGreen200: emeraldGreen[\"2\"],\n emeraldGreen300: emeraldGreen[\"3\"],\n emeraldGreen400: emeraldGreen[\"4\"],\n emeraldGreen500: emeraldGreen[\"5\"],\n emeraldGreen600: emeraldGreen[\"6\"],\n emeraldGreen700: emeraldGreen[\"7\"],\n emeraldGreen800: emeraldGreen[\"8\"],\n emeraldGreen850: emeraldGreen[\"8.5\"],\n\n /** Primary brand emerald green — Figma Emerald Green 5 */\n emeraldGreen: brand.emeraldGreen,\n\n // Ruby Red — Figma scale + brand swatch\n rubyRed0: rubyRed[\"0\"],\n rubyRed50: rubyRed[\"0.5\"],\n rubyRed100: rubyRed[\"1\"],\n rubyRed150: rubyRed[\"1.5\"],\n rubyRed200: rubyRed[\"2\"],\n rubyRed300: rubyRed[\"3\"],\n rubyRed400: rubyRed[\"4\"],\n rubyRed500: rubyRed[\"5\"],\n rubyRed600: rubyRed[\"6\"],\n rubyRed700: rubyRed[\"7\"],\n rubyRed800: rubyRed[\"8\"],\n rubyRed850: rubyRed[\"8.5\"],\n\n /** Primary brand ruby red — Figma Ruby Red 5 */\n rubyRed: brand.rubyRed,\n\n // Navy — Figma scale + brand swatch\n navy0: navy[\"0\"],\n navy50: navy[\"0.5\"],\n navy100: navy[\"1\"],\n navy150: navy[\"1.5\"],\n navy200: navy[\"2\"],\n navy300: navy[\"3\"],\n navy400: navy[\"4\"],\n navy500: navy[\"5\"],\n navy600: navy[\"6\"],\n navy700: navy[\"7\"],\n navy800: navy[\"8\"],\n navy850: navy[\"8.5\"],\n\n /** Primary brand navy — Figma Navy 5 */\n navy: brand.navy,\n\n // Storm Gray — Figma scale + brand swatch\n stormGray0: stormGray[\"0\"],\n stormGray50: stormGray[\"0.5\"],\n stormGray100: stormGray[\"1\"],\n stormGray150: stormGray[\"1.5\"],\n stormGray200: stormGray[\"2\"],\n stormGray300: stormGray[\"3\"],\n stormGray400: stormGray[\"4\"],\n stormGray500: stormGray[\"5\"],\n /** Figma brand swatch \"Storm Gray\" — same as `stormGray500` */\n stormGrayBrand: brand.stormGray,\n stormGray600: stormGray[\"6\"],\n stormGray700: stormGray[\"7\"],\n stormGray800: stormGray[\"8\"],\n stormGray850: stormGray[\"8.5\"],\n\n /** @deprecated Use `stormGray0` */\n storm0: stormGray[\"0\"],\n /** @deprecated Use `stormGray50` */\n storm50: stormGray[\"0.5\"],\n /** @deprecated Use `stormGray200` */\n storm200: stormGray[\"2\"],\n /** @deprecated Use `stormGray300` */\n storm300: stormGray[\"3\"],\n /** @deprecated Use `stormGray500` */\n storm500: stormGray[\"5\"],\n /** @deprecated Use `stormGray700` */\n storm700: stormGray[\"7\"],\n /** @deprecated Use `stormGray850` */\n storm900: stormGray[\"8.5\"],\n\n countrySelectorSelectedBg: `${stormGray[\"0.5\"]}99`,\n\n white: \"#ffffff\",\n error: \"#dc2626\",\n errorDark: \"#b3261e\",\n errorLight: \"#fee2e2\",\n /** @deprecated Use `rubyRed` */\n inputError: brand.rubyRed,\n inputOutlineFocus: navy[\"0.5\"],\n inputOutlineError: rubyRed[\"0.5\"],\n warning: \"#92400e\",\n warningBg: \"#fef3c7\",\n success: \"#28a745\",\n successMuted: \"#9fd4a8\",\n /** @deprecated Use `emeraldGreen` */\n green: brand.emeraldGreen,\n transparent: \"transparent\",\n} as const;\n\nexport const radii = {\n sm: 8,\n md: 12,\n lg: 16,\n xl: 20,\n full: 9999,\n} as const;\n\nexport const spacing = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n xl: 24,\n xxl: 32,\n} as const;\n\nexport const fontSize = {\n xs: 11,\n sm: 12,\n md: 14,\n base: 16,\n lg: 18,\n xl: 24,\n xxl: 32,\n} as const;\n\n/**\n * Canonical Homepad type scale (matches `.typography-*` in `src/web/styles/typography.css`).\n * font-size / line-height pairs:\n * 12/16 · 14/19 · 18/24 · 20/27 · 24/25 · 32/34\n */\nexport const typographyScale = {\n 12: { fontSize: 12, lineHeight: 16 },\n 14: { fontSize: 14, lineHeight: 19 },\n 18: { fontSize: 18, lineHeight: 24 },\n 20: { fontSize: 20, lineHeight: 27 },\n 24: { fontSize: 24, lineHeight: 25 },\n 32: { fontSize: 32, lineHeight: 34 },\n} as const;\n\nexport const fontWeight = {\n regular: \"400\" as const,\n medium: \"500\" as const,\n semibold: \"600\" as const,\n bold: \"700\" as const,\n};\n\nexport const fonts = {\n sans: \"Noto Sans Armenian\",\n} as const;\n\n/** Input label typography — Medium, typography-12 scale. */\nexport const labelTypography = {\n fontFamily: fonts.sans,\n fontSize: typographyScale[12].fontSize,\n fontWeight: fontWeight.medium,\n lineHeight: typographyScale[12].lineHeight,\n letterSpacing: 0,\n} as const;\n\n/** Button label typography — SemiBold. */\nexport const buttonTypography = {\n lg: {\n fontFamily: fonts.sans,\n fontSize: typographyScale[14].fontSize,\n fontWeight: fontWeight.semibold,\n lineHeight: typographyScale[14].lineHeight,\n letterSpacing: 0,\n },\n sm: {\n fontFamily: fonts.sans,\n fontSize: typographyScale[12].fontSize,\n fontWeight: fontWeight.semibold,\n lineHeight: typographyScale[12].lineHeight,\n letterSpacing: 0,\n },\n} as const;\n\n/** Announcement status badges shown to residents and admins. API `NEW` is labelled Urgent. */\nexport const announcementStatusBadge = {\n urgent: {\n color: \"#AE0011\",\n background: \"#F7DCDF\",\n },\n important: {\n color: \"#0F52C7\",\n background: \"#E6EFFF\",\n },\n information: {\n color: \"#279D54\",\n background: \"#279D541A\",\n },\n} as const;\n\nexport const shadows = {\n card: {\n shadowColor: colors.navy,\n shadowOffset: { width: 0, height: 1 },\n shadowOpacity: 0.06,\n shadowRadius: 4,\n elevation: 1,\n },\n cardLg: {\n shadowColor: colors.navy,\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.08,\n shadowRadius: 6,\n elevation: 2,\n },\n} as const;\n","import { useLayoutEffect } from \"react\";\nimport { Platform } from \"react-native\";\n\ninterface ClassListElement {\n classList: {\n add: (...classes: string[]) => void;\n remove: (...classes: string[]) => void;\n };\n}\n\nfunction hasClassList(node: unknown): node is ClassListElement {\n return (\n typeof node === \"object\" &&\n node !== null &&\n \"classList\" in node &&\n typeof (node as ClassListElement).classList?.add === \"function\"\n );\n}\n\nfunction resolveWebElement(ref: React.RefObject<unknown>): ClassListElement | null {\n const node = ref.current;\n if (!node) return null;\n\n if (hasClassList(node)) return node;\n\n const host = node as {\n _touchableNode?: unknown;\n getScrollableNode?: () => unknown;\n };\n\n if (hasClassList(host._touchableNode)) return host._touchableNode;\n\n if (typeof host.getScrollableNode === \"function\") {\n const scrollNode = host.getScrollableNode();\n if (hasClassList(scrollNode)) return scrollNode;\n }\n\n return null;\n}\n\n/**\n * Applies CSS class names to the underlying DOM node on web.\n * Keeps TouchableOpacity/Text as the render path so default RN styles stay intact.\n *\n * Retries via rAF when the host node is not ready yet — otherwise classes like\n * `h-13` / `w-full` would only land after a later re-render (e.g. typing in a form),\n * which visibly changes button size.\n */\nexport function useApplyWebClassName(\n ref: React.RefObject<unknown>,\n className?: string,\n enabled = true,\n): void {\n useLayoutEffect(() => {\n if (!enabled || Platform.OS !== \"web\" || !className?.trim()) return;\n\n let cancelled = false;\n let rafId = 0;\n let appliedElement: ClassListElement | null = null;\n const classes = className.trim().split(/\\s+/);\n\n const apply = () => {\n if (cancelled) return;\n\n const element = resolveWebElement(ref);\n if (!element) {\n rafId = requestAnimationFrame(apply);\n return;\n }\n\n appliedElement = element;\n element.classList.add(...classes);\n };\n\n apply();\n\n return () => {\n cancelled = true;\n if (rafId) cancelAnimationFrame(rafId);\n appliedElement?.classList.remove(...classes);\n };\n }, [ref, className, enabled]);\n}\n","import { useRef, type ComponentRef, type ReactNode } from \"react\";\nimport {\n Platform,\n StyleSheet,\n Text,\n TouchableOpacity,\n View,\n type GestureResponderEvent,\n type StyleProp,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { ArrowUpRightIcon } from \"../icons/ArrowUpRightIcon\";\nimport { colors, buttonTypography } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nexport type ButtonVariant = \"white\" | \"primary\" | \"green\" | \"gray\";\nexport type ButtonSize = \"lg\" | \"sm\";\n\nexport interface ButtonProps {\n title?: string;\n children?: ReactNode;\n onPress: (event: GestureResponderEvent) => void;\n disabled?: boolean;\n variant?: ButtonVariant;\n size?: ButtonSize;\n showIcon?: boolean;\n /** Custom icon inside the badge. Defaults to `ArrowUpRightIcon` when `showIcon` is true. */\n icon?: ReactNode;\n style?: StyleProp<ViewStyle>;\n textStyle?: StyleProp<TextStyle>;\n className?: string;\n textClassName?: string;\n}\n\ntype VariantStyleSet = {\n backgroundColor: string;\n textColor: string;\n iconBadgeBackgroundColor: string;\n iconColor: string;\n};\n\nconst variantConfig: Record<ButtonVariant, VariantStyleSet> = {\n white: {\n backgroundColor: colors.white,\n textColor: colors.slateBlue,\n iconBadgeBackgroundColor: colors.stormGray150,\n iconColor: colors.navy,\n },\n primary: {\n backgroundColor: colors.navy,\n textColor: colors.stormGray0,\n iconBadgeBackgroundColor: colors.white,\n iconColor: colors.navy,\n },\n green: {\n backgroundColor: colors.green,\n textColor: colors.stormGray0,\n iconBadgeBackgroundColor: colors.white,\n iconColor: colors.green,\n },\n gray: {\n backgroundColor: colors.stormGray50,\n textColor: colors.slateBlue,\n iconBadgeBackgroundColor: colors.stormGray150,\n iconColor: colors.navy,\n },\n};\n\nconst sizeConfig = {\n lg: {\n /** Matches Tailwind `h-13` so size stays stable before web classNames attach. */\n minHeight: 52,\n borderRadius: 16,\n paddingTop: 8,\n paddingRight: 8,\n paddingBottom: 8,\n paddingLeft: 24,\n paddingHorizontalCentered: 24,\n text: buttonTypography.lg,\n iconContainerSize: 36,\n iconContainerRadius: 12,\n iconContainerPadding: 8,\n iconSize: 20,\n },\n sm: {\n minHeight: 40,\n borderRadius: 12,\n paddingTop: 8,\n paddingRight: 8,\n paddingBottom: 8,\n paddingLeft: 16,\n paddingHorizontalCentered: 16,\n text: buttonTypography.sm,\n iconContainerSize: 32,\n iconContainerRadius: 8,\n iconContainerPadding: 8,\n iconSize: 16,\n },\n} as const;\n\nexport function Button({\n title,\n children,\n onPress,\n disabled = false,\n variant = \"primary\",\n size = \"lg\",\n showIcon = false,\n icon,\n style,\n textStyle,\n className,\n textClassName,\n}: ButtonProps) {\n const containerRef = useRef<ComponentRef<typeof TouchableOpacity>>(null);\n const textRef = useRef<ComponentRef<typeof Text>>(null);\n const preset = variantConfig[variant];\n const metrics = sizeConfig[size];\n\n const label = typeof children !== \"undefined\" ? children : title;\n const hasCustomChildren = typeof children !== \"undefined\";\n const customIcon =\n icon != null && typeof icon !== \"boolean\" ? icon : undefined;\n const hasIcon = showIcon || icon === true || customIcon != null;\n const resolvedContainerClassName = [\n Platform.OS === \"web\" ? \"max-md:px-4!\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n useApplyWebClassName(containerRef, resolvedContainerClassName || undefined);\n useApplyWebClassName(textRef, textClassName);\n\n const iconNode =\n customIcon ?? (\n <ArrowUpRightIcon size={metrics.iconSize} color={preset.iconColor} />\n );\n\n const containerStyle = [\n styles.base,\n {\n minHeight: metrics.minHeight,\n borderRadius: metrics.borderRadius,\n backgroundColor: preset.backgroundColor,\n paddingTop: metrics.paddingTop,\n paddingBottom: metrics.paddingBottom,\n paddingLeft: hasIcon ? metrics.paddingLeft : metrics.paddingHorizontalCentered,\n paddingRight: hasIcon ? metrics.paddingRight : metrics.paddingHorizontalCentered,\n },\n hasIcon ? styles.withIcon : styles.centered,\n disabled && styles.disabled,\n style,\n ];\n\n const labelStyle = [\n styles.label,\n metrics.text,\n { color: preset.textColor },\n Platform.OS === \"android\" ? styles.labelAndroid : null,\n !hasIcon && styles.labelCentered,\n hasIcon && styles.labelWithIcon,\n textStyle,\n ];\n\n return (\n <TouchableOpacity\n ref={containerRef}\n style={containerStyle}\n onPress={onPress}\n disabled={disabled}\n activeOpacity={0.7}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled }}\n >\n {hasCustomChildren ? (\n children\n ) : (\n <Text ref={textRef} style={labelStyle}>\n {label}\n </Text>\n )}\n\n {hasIcon ? (\n <View\n style={[\n styles.iconContainer,\n {\n width: metrics.iconContainerSize,\n height: metrics.iconContainerSize,\n borderRadius: metrics.iconContainerRadius,\n padding: metrics.iconContainerPadding,\n backgroundColor: preset.iconBadgeBackgroundColor,\n },\n ]}\n >\n {iconNode}\n </View>\n ) : null}\n </TouchableOpacity>\n );\n}\n\nconst styles = StyleSheet.create({\n base: {\n flexDirection: \"row\",\n alignItems: \"center\",\n borderWidth: 0,\n },\n centered: {\n justifyContent: \"center\",\n },\n withIcon: {\n justifyContent: \"space-between\",\n gap: 24,\n },\n disabled: {\n opacity: 0.6,\n },\n label: {},\n labelAndroid: {\n includeFontPadding: false,\n },\n labelCentered: {\n textAlign: \"center\",\n },\n labelWithIcon: {\n flex: 1,\n flexShrink: 1,\n },\n iconContainer: {\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n});\n","export const EYE_OPEN_OUTLINE_PATH =\n \"M1.71835 10.2898C1.6489 10.1027 1.6489 9.89691 1.71835 9.70981C2.39476 8.06969 3.54294 6.66735 5.01732 5.68056C6.4917 4.69378 8.22588 4.16699 10 4.16699C11.7741 4.16699 13.5083 4.69378 14.9827 5.68056C16.4571 6.66735 17.6053 8.06969 18.2817 9.70981C18.3511 9.89691 18.3511 10.1027 18.2817 10.2898C17.6053 11.9299 16.4571 13.3323 14.9827 14.3191C13.5083 15.3058 11.7741 15.8326 10 15.8326C8.22588 15.8326 6.4917 15.3058 5.01732 14.3191C3.54294 13.3323 2.39476 11.9299 1.71835 10.2898Z\";\n\nexport const EYE_OPEN_PUPIL_PATH =\n \"M10 12.4998C11.3807 12.4998 12.5 11.3805 12.5 9.99981C12.5 8.6191 11.3807 7.49981 10 7.49981C8.6193 7.49981 7.50001 8.6191 7.50001 9.99981C7.50001 11.3805 8.6193 12.4998 10 12.4998Z\";\n\nexport const EYE_OFF_PATH =\n \"M10.733 5.076C13.0624 4.7984 15.4186 5.29082 17.4419 6.47805C19.4651 7.66528 21.0442 9.48208 21.938 11.651C22.0213 11.8755 22.0213 12.1225 21.938 12.347C21.5705 13.238 21.0848 14.0755 20.494 14.837M14.084 14.158C13.5182 14.7045 12.7604 15.0069 11.9738 15C11.1872 14.9932 10.4348 14.6777 9.87854 14.1215C9.32232 13.5652 9.00681 12.8128 8.99998 12.0262C8.99314 11.2396 9.29553 10.4818 9.842 9.916M17.479 17.499C16.1525 18.2848 14.6725 18.776 13.1394 18.9394C11.6063 19.1028 10.056 18.9345 8.59363 18.4459C7.13131 17.9573 5.79119 17.1599 4.66421 16.1077C3.53723 15.0556 2.64975 13.7734 2.062 12.348C1.97866 12.1235 1.97866 11.8765 2.062 11.652C2.94863 9.50186 4.50867 7.69725 6.508 6.509M2 2L22 22\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { EYE_OPEN_OUTLINE_PATH, EYE_OPEN_PUPIL_PATH } from \"./eyeIconPaths\";\n\nexport { EYE_OPEN_OUTLINE_PATH, EYE_OPEN_PUPIL_PATH } from \"./eyeIconPaths\";\n\ninterface EyeIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — open eye (password hidden). */\nexport function EyeIcon({\n size = 20,\n color = \"#c7cdd1\",\n strokeWidth = 2,\n}: EyeIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={EYE_OPEN_OUTLINE_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <Path\n d={EYE_OPEN_PUPIL_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import Svg, { Path } from \"react-native-svg\";\nimport { EYE_OFF_PATH } from \"./eyeIconPaths\";\n\nexport { EYE_OFF_PATH } from \"./eyeIconPaths\";\n\ninterface EyeOffIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — slashed eye (password visible). */\nexport function EyeOffIcon({\n size = 20,\n color = \"#c7cdd1\",\n strokeWidth = 2,\n}: EyeOffIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n <Path\n d={EYE_OFF_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { Platform, StyleSheet, type TextStyle, type ViewStyle } from \"react-native\";\nimport { colors, fonts, fontSize, fontWeight, radii } from \"./tokens\";\n\nexport const INPUT_HEIGHT = 56;\nexport const INPUT_ICON_SIZE = 20;\nexport const INPUT_ICON_GAP = 10;\nexport const INPUT_OUTLINE_WIDTH = 2;\n/** Natural text metrics; avoid a tighter lineHeight that clips Armenian glyphs. */\nexport const INPUT_TEXT_LINE_HEIGHT = 20;\nexport const INPUT_WEB_VERTICAL_PADDING = 14;\nexport const INPUT_VERTICAL_PADDING = 14;\nexport const INPUT_HORIZONTAL_PADDING = 16;\n/** Default outer height for multiline fields (padding included). */\nexport const INPUT_MULTILINE_MIN_HEIGHT = 120;\nexport const INPUT_MULTILINE_INNER_MIN_HEIGHT =\n INPUT_MULTILINE_MIN_HEIGHT - INPUT_VERTICAL_PADDING * 2;\n\nexport type InputVisualState =\n | \"default\"\n | \"focused\"\n | \"error\"\n | \"disabled\";\n\nexport interface InputStateFlags {\n focused?: boolean;\n error?: boolean;\n disabled?: boolean;\n}\n\nexport function resolveInputVisualState({\n focused = false,\n error = false,\n disabled = false,\n}: InputStateFlags): InputVisualState {\n if (disabled) return \"disabled\";\n if (error) return \"error\";\n if (focused) return \"focused\";\n return \"default\";\n}\n\ninterface FieldStyleSet {\n container: ViewStyle;\n outline: ViewStyle;\n text: TextStyle;\n placeholder: string;\n icon: string;\n}\n\nfunction createOutlineStyle(ringColor: string): ViewStyle {\n return {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: ringColor,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n };\n}\n\nconst defaultOutline: ViewStyle = {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: colors.transparent,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n};\n\nexport function getInputFieldStyles(state: InputVisualState): FieldStyleSet {\n const containerBase: ViewStyle = {\n borderRadius: radii.lg,\n };\n\n switch (state) {\n case \"disabled\":\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.stormGray50,\n },\n text: { color: colors.stormGray300 },\n placeholder: colors.stormGray300,\n icon: colors.stormGray150,\n };\n case \"error\":\n return {\n outline: createOutlineStyle(colors.inputOutlineError),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.inputError,\n backgroundColor: colors.white,\n },\n text: { color: colors.inputError },\n placeholder: colors.stormGray200,\n icon: colors.inputError,\n };\n case \"focused\":\n return {\n outline: createOutlineStyle(colors.inputOutlineFocus),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.navy,\n backgroundColor: colors.white,\n },\n text: { color: colors.slateBlue },\n placeholder: colors.stormGray200,\n icon: colors.navy,\n };\n default:\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n },\n text: { color: colors.slateBlue },\n placeholder: colors.stormGray200,\n icon: colors.stormGray150,\n };\n }\n}\n\nexport const inputFieldMetrics = StyleSheet.create({\n containerBase: {\n flexDirection: \"row\",\n borderRadius: radii.lg,\n paddingHorizontal: INPUT_HORIZONTAL_PADDING,\n paddingVertical: INPUT_VERTICAL_PADDING,\n gap: INPUT_ICON_GAP,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n paddingVertical: INPUT_WEB_VERTICAL_PADDING,\n paddingHorizontal: INPUT_HORIZONTAL_PADDING,\n } as ViewStyle)\n : null),\n },\n container: {\n alignItems: \"center\",\n height: INPUT_HEIGHT,\n // Do not clip glyph ascenders on single-line fields (Armenian / tall fonts).\n overflow: \"visible\",\n },\n /**\n * Column layout + explicit minHeight so the TextInput hit target matches the\n * visible box on Android release builds (row + flexGrow:0 collapsed taps).\n */\n containerMultiline: {\n flexDirection: \"column\",\n alignItems: \"stretch\",\n justifyContent: \"flex-start\",\n minHeight: INPUT_MULTILINE_MIN_HEIGHT,\n overflow: \"hidden\",\n },\n input: {\n flex: 1,\n minWidth: 0,\n width: \"100%\",\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.medium,\n paddingVertical: 0,\n paddingHorizontal: 0,\n margin: 0,\n borderWidth: 0,\n backgroundColor: colors.transparent,\n // Leave lineHeight unset so platform font metrics keep placeholder tops visible.\n ...(Platform.OS === \"web\"\n ? ({\n alignSelf: \"center\",\n outlineStyle: \"none\",\n lineHeight: INPUT_TEXT_LINE_HEIGHT,\n } as TextStyle)\n : {\n alignSelf: \"stretch\",\n }),\n },\n /** Single-line: avoid Android lineHeight jump between placeholder and typed text. */\n inputSingleLine: {\n ...(Platform.OS === \"android\"\n ? ({ textAlignVertical: \"center\", includeFontPadding: false } as TextStyle)\n : null),\n },\n /**\n * Fill the column container so the whole field is tappable in release APKs.\n * `textAlignVertical: \"top\"` keeps typed text (and Android placeholder) at the top.\n */\n inputMultiline: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: \"auto\",\n width: \"100%\",\n minHeight: INPUT_MULTILINE_INNER_MIN_HEIGHT,\n alignSelf: \"stretch\",\n textAlignVertical: \"top\",\n ...(Platform.OS === \"android\"\n ? ({ includeFontPadding: false } as TextStyle)\n : null),\n },\n});\n","import { useRef, type ComponentRef, type ReactNode } from \"react\";\nimport {\n StyleSheet,\n Text,\n type StyleProp,\n type TextProps,\n type TextStyle,\n} from \"react-native\";\nimport { colors, labelTypography } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nexport interface LabelProps extends TextProps {\n children: ReactNode;\n /** Render as a required field indicator. */\n required?: boolean;\n disabled?: boolean;\n style?: StyleProp<TextStyle>;\n className?: string;\n}\n\nexport function Label({\n children,\n required = false,\n disabled = false,\n style,\n className,\n ...props\n}: LabelProps) {\n const ref = useRef<ComponentRef<typeof Text>>(null);\n useApplyWebClassName(ref, className);\n\n return (\n <Text\n ref={ref}\n style={[styles.label, disabled && styles.labelDisabled, style]}\n accessibilityRole=\"text\"\n {...props}\n >\n {children}\n {required ? <Text style={styles.required}> *</Text> : null}\n </Text>\n );\n}\n\nconst styles = StyleSheet.create({\n label: {\n ...labelTypography,\n color: colors.slateBlue,\n },\n labelDisabled: {\n color: colors.stormGray400,\n },\n required: {\n color: colors.inputError,\n },\n});\n","import {\n cloneElement,\n isValidElement,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n Pressable,\n StyleSheet,\n Text,\n TextInput,\n View,\n type NativeSyntheticEvent,\n type StyleProp,\n type TextInputFocusEventData,\n type TextInputProps,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { EyeIcon } from \"../icons/EyeIcon\";\nimport { EyeOffIcon } from \"../icons/EyeOffIcon\";\nimport {\n getInputFieldStyles,\n inputFieldMetrics,\n INPUT_ICON_SIZE,\n resolveInputVisualState,\n} from \"../theme/input\";\nimport { colors, spacing } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport { Label } from \"./Label\";\n\ntype InputIconProps = {\n size?: number;\n color?: string;\n};\n\nfunction renderInputIcon(icon: ReactNode, color: string) {\n if (!icon) return null;\n\n if (isValidElement<InputIconProps>(icon)) {\n return cloneElement(icon, {\n size: icon.props.size ?? INPUT_ICON_SIZE,\n color: icon.props.color ?? color,\n });\n }\n\n return icon;\n}\n\nexport interface InputProps extends TextInputProps {\n /** Optional field label rendered above the input. */\n label?: string;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n /** Validation or helper error message. Shown instead of `hint` when set. */\n error?: string;\n /** Applies error field styling without showing a message (use with a form-level error). */\n invalid?: boolean;\n /** Helper text shown below the input when there is no error. */\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<TextStyle>;\n className?: string;\n /** CSS classes for the bordered field container (web). */\n fieldClassName?: string;\n /** Styles merged into the bordered field container. */\n fieldStyle?: StyleProp<ViewStyle>;\n labelClassName?: string;\n /** Styles merged into the field label. */\n labelStyles?: StyleProp<TextStyle>;\n inputClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n /** When `secureTextEntry` is set, show a toggleable eye icon. Pass `false` to disable. */\n showPasswordToggle?: boolean;\n}\n\nconst INTEGER_KEYBOARD_TYPES = new Set([\n \"numeric\",\n \"number-pad\",\n \"phone-pad\",\n]);\n\n/** Strip non-digits for integer pads; keep one decimal separator for decimal-pad. */\nfunction sanitizeNumericInput(\n value: string,\n keyboardType: TextInputProps[\"keyboardType\"],\n): string {\n if (keyboardType === \"decimal-pad\") {\n const normalized = value.replace(/,/g, \".\").replace(/[^\\d.]/g, \"\");\n const separatorIndex = normalized.indexOf(\".\");\n\n if (separatorIndex === -1) {\n return normalized;\n }\n\n return (\n normalized.slice(0, separatorIndex + 1) +\n normalized.slice(separatorIndex + 1).replace(/\\./g, \"\")\n );\n }\n\n if (keyboardType && INTEGER_KEYBOARD_TYPES.has(keyboardType)) {\n return value.replace(/\\D/g, \"\");\n }\n\n return value;\n}\n\nexport function Input({\n label,\n leftIcon,\n rightIcon,\n error,\n invalid,\n hint,\n containerStyle,\n style,\n className,\n fieldClassName,\n fieldStyle,\n labelClassName,\n labelStyles,\n inputClassName,\n errorClassName,\n hintClassName,\n editable = true,\n secureTextEntry,\n showPasswordToggle,\n onFocus,\n onBlur,\n onChangeText,\n keyboardType,\n multiline,\n textAlign = \"left\",\n textAlignVertical,\n ...props\n}: InputProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const fieldRef = useRef<ComponentRef<typeof View>>(null);\n const inputRef = useRef<ComponentRef<typeof TextInput>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const [focused, setFocused] = useState(false);\n const [passwordVisible, setPasswordVisible] = useState(false);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(fieldRef, fieldClassName);\n useApplyWebClassName(inputRef, inputClassName);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n const isDisabled = editable === false;\n const hasError = Boolean(error) || Boolean(invalid);\n const passwordToggleEnabled =\n secureTextEntry === true && showPasswordToggle !== false && rightIcon == null;\n const effectiveSecureTextEntry = passwordToggleEnabled\n ? !passwordVisible\n : secureTextEntry;\n // Keep placeholder and typed text on the same vertical line (esp. Android).\n const resolvedTextAlignVertical =\n textAlignVertical ?? (multiline ? \"top\" : \"center\");\n const visualState = resolveInputVisualState({\n focused,\n error: hasError,\n disabled: isDisabled,\n });\n const fieldStyles = getInputFieldStyles(visualState);\n const iconColor = fieldStyles.icon;\n\n function handleFocus(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(true);\n onFocus?.(event);\n }\n\n function handleBlur(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handleChangeText(value: string) {\n onChangeText?.(sanitizeNumericInput(value, keyboardType));\n }\n\n const helperMessage = error ?? hint;\n\n function togglePasswordVisibility() {\n if (!isDisabled) {\n setPasswordVisible((visible) => !visible);\n }\n }\n\n const trailingIcon = passwordToggleEnabled ? (\n <Pressable\n onPress={togglePasswordVisibility}\n disabled={isDisabled}\n accessibilityRole=\"button\"\n accessibilityLabel={passwordVisible ? \"Hide password\" : \"Show password\"}\n hitSlop={8}\n style={styles.iconPressable}\n >\n {renderInputIcon(\n passwordVisible ? <EyeOffIcon /> : <EyeIcon />,\n iconColor,\n )}\n </Pressable>\n ) : rightIcon ? (\n renderInputIcon(rightIcon, iconColor)\n ) : null;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label\n disabled={isDisabled}\n className={labelClassName}\n style={labelStyles}\n >\n {label}\n </Label>\n ) : null}\n <View style={fieldStyles.outline}>\n <View\n ref={fieldRef}\n style={[\n inputFieldMetrics.containerBase,\n multiline\n ? inputFieldMetrics.containerMultiline\n : inputFieldMetrics.container,\n fieldStyles.container,\n fieldStyle,\n ]}\n >\n {leftIcon ? (\n <View style={styles.iconSlot}>{renderInputIcon(leftIcon, iconColor)}</View>\n ) : null}\n <TextInput\n ref={inputRef}\n style={[\n inputFieldMetrics.input,\n multiline\n ? inputFieldMetrics.inputMultiline\n : inputFieldMetrics.inputSingleLine,\n fieldStyles.text,\n style,\n ]}\n placeholderTextColor={fieldStyles.placeholder}\n editable={editable}\n keyboardType={keyboardType}\n multiline={multiline}\n scrollEnabled={multiline ? true : undefined}\n secureTextEntry={effectiveSecureTextEntry}\n textAlign={textAlign}\n textAlignVertical={resolvedTextAlignVertical}\n underlineColorAndroid=\"transparent\"\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n onChangeText={handleChangeText}\n />\n {trailingIcon ? (\n <View style={styles.iconSlot}>{trailingIcon}</View>\n ) : null}\n </View>\n </View>\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: \"100%\",\n minWidth: 0,\n gap: spacing.sm,\n },\n iconSlot: {\n minWidth: INPUT_ICON_SIZE,\n minHeight: INPUT_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n iconPressable: {\n width: INPUT_ICON_SIZE,\n height: INPUT_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export const CHEVRON_DOWN_PATH = \"M4 6L8 10L12 6\";\nexport const CHEVRON_DOWN_PATH_20 = \"M5 7.5L10 12.5L15 7.5\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { CHEVRON_DOWN_PATH, CHEVRON_DOWN_PATH_20 } from \"./chevronDownPath\";\n\nexport { CHEVRON_DOWN_PATH, CHEVRON_DOWN_PATH_20 } from \"./chevronDownPath\";\n\ninterface ChevronDownIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — react-native-svg (peer dependency). */\nexport function ChevronDownIcon({\n size = 16,\n color = \"#dadde0\",\n strokeWidth = 2,\n}: ChevronDownIconProps) {\n const useLarge = size >= 20;\n\n return (\n <Svg\n width={size}\n height={size}\n viewBox={useLarge ? \"0 0 20 20\" : \"0 0 16 16\"}\n fill=\"none\"\n >\n <Path\n d={useLarge ? CHEVRON_DOWN_PATH_20 : CHEVRON_DOWN_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { Dimensions, Platform, StyleSheet, type TextStyle, type ViewStyle } from \"react-native\";\nimport {\n resolveInputVisualState,\n type InputStateFlags,\n type InputVisualState,\n} from \"./input\";\nimport { colors, fonts, fontSize, fontWeight, radii, spacing } from \"./tokens\";\n\nexport const SELECT_HEIGHT = 52;\nexport const SELECT_PADDING = 16;\nexport const SELECT_INNER_GAP = 10;\nexport const SELECT_ICON_SIZE = 20;\nexport const SELECT_LABEL_GAP = spacing.sm;\nexport const SELECT_DROPDOWN_GAP = spacing.sm;\nexport const SELECT_DROPDOWN_PADDING = spacing.sm;\nexport const SELECT_DROPDOWN_MAX_HEIGHT = 317;\nexport const SELECT_OPTION_HEIGHT = 43;\nexport const SELECT_OPTION_HEIGHT_COMPACT = 36;\nexport const SELECT_OPTION_GAP = spacing.sm;\nexport const SELECT_CHEVRON_SIZE = 20;\nexport const SELECT_CHEVRON_COLOR = colors.stormGray150;\nexport const SELECT_CHEVRON_ROTATION_MS = 200;\nexport const SELECT_TEXT_LINE_HEIGHT = 19;\n\nexport { resolveInputVisualState };\nexport type { InputStateFlags, InputVisualState };\n\nexport const selectLabelTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.sm,\n fontWeight: fontWeight.medium,\n lineHeight: 16,\n letterSpacing: 0,\n color: colors.slateBlue,\n} as const;\n\nexport const selectValueTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: SELECT_TEXT_LINE_HEIGHT,\n letterSpacing: 0,\n textAlign: \"left\",\n} as const;\n\ninterface SelectFieldStyleSet {\n container: ViewStyle;\n outline: ViewStyle;\n value: TextStyle;\n placeholder: string;\n icon: string;\n}\n\nconst INPUT_OUTLINE_WIDTH = 2;\n\nfunction createOutlineStyle(ringColor: string): ViewStyle {\n return {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: ringColor,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n ...(Platform.OS !== \"web\" ? { overflow: \"hidden\" as const } : null),\n };\n}\n\nconst defaultOutline: ViewStyle = {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: colors.transparent,\n padding: 0,\n backgroundColor: colors.transparent,\n width: \"100%\",\n alignSelf: \"stretch\",\n ...(Platform.OS !== \"web\" ? { overflow: \"hidden\" as const } : null),\n};\n\nexport function getSelectFieldStyles(state: InputVisualState): SelectFieldStyleSet {\n const containerBase: ViewStyle = {\n borderRadius: radii.lg,\n ...(Platform.OS !== \"web\" ? { overflow: \"hidden\" as const } : null),\n };\n\n const valueBase: TextStyle = {\n ...selectValueTypography,\n color: colors.slateBlue,\n };\n\n switch (state) {\n case \"disabled\":\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.stormGray50,\n },\n value: { ...valueBase, color: colors.stormGray300 },\n placeholder: colors.stormGray300,\n icon: colors.stormGray150,\n };\n case \"error\":\n return {\n outline: createOutlineStyle(colors.inputOutlineError),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.inputError,\n backgroundColor: colors.white,\n },\n value: { ...valueBase, color: colors.inputError },\n placeholder: colors.stormGray200,\n icon: colors.inputError,\n };\n case \"focused\":\n return {\n outline: createOutlineStyle(colors.inputOutlineFocus),\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.navy,\n backgroundColor: colors.white,\n },\n value: valueBase,\n placeholder: colors.stormGray200,\n icon: colors.navy,\n };\n default:\n return {\n outline: defaultOutline,\n container: {\n ...containerBase,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n },\n value: valueBase,\n placeholder: colors.stormGray200,\n icon: colors.stormGray150,\n };\n }\n}\n\nexport const selectFieldMetrics = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n height: SELECT_HEIGHT,\n borderRadius: radii.lg,\n padding: SELECT_PADDING,\n gap: SELECT_INNER_GAP,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n value: {\n flex: 1,\n minWidth: 0,\n ...selectValueTypography,\n paddingVertical: 0,\n paddingHorizontal: 0,\n margin: 0,\n ...(Platform.OS === \"android\" ? { includeFontPadding: false } : null),\n ...(Platform.OS === \"web\"\n ? ({\n outlineStyle: \"none\",\n } as TextStyle)\n : null),\n },\n});\n\nexport const selectDropdownMetrics = StyleSheet.create({\n menu: {\n borderRadius: radii.lg,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n padding: SELECT_DROPDOWN_PADDING,\n overflow: \"hidden\",\n },\n option: {\n width: \"100%\",\n height: SELECT_OPTION_HEIGHT,\n minHeight: SELECT_OPTION_HEIGHT,\n maxHeight: SELECT_OPTION_HEIGHT,\n paddingTop: 12,\n paddingRight: spacing.sm,\n paddingBottom: 12,\n paddingLeft: spacing.sm,\n justifyContent: \"center\",\n alignItems: \"flex-start\",\n },\n optionLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: SELECT_TEXT_LINE_HEIGHT,\n letterSpacing: 0,\n textAlign: \"left\",\n color: colors.slateBlue,\n width: \"100%\",\n },\n optionLabelSelected: {\n fontWeight: fontWeight.medium,\n color: colors.slateBlue,\n },\n optionSelected: {\n opacity: 1,\n borderRadius: radii.sm,\n paddingTop: 12,\n paddingRight: spacing.sm,\n paddingBottom: 12,\n paddingLeft: spacing.sm,\n backgroundColor: colors.countrySelectorSelectedBg,\n },\n optionHighlighted: {\n backgroundColor: colors.stormGray0,\n },\n});\n\nexport function resolveSelectDropdownHeight(\n optionCount: number,\n optionHeight: number = SELECT_OPTION_HEIGHT,\n): number {\n const contentHeight =\n optionCount * optionHeight +\n Math.max(0, optionCount - 1) * SELECT_OPTION_GAP +\n SELECT_DROPDOWN_PADDING * 2;\n\n return Math.min(contentHeight, SELECT_DROPDOWN_MAX_HEIGHT);\n}\n\nexport function resolveSelectDropdownContentHeight(\n optionCount: number,\n optionHeight: number = SELECT_OPTION_HEIGHT,\n): number {\n return (\n optionCount * optionHeight + Math.max(0, optionCount - 1) * SELECT_OPTION_GAP\n );\n}\n\nexport function resolveSelectDropdownTop(\n anchor: { y: number; height: number },\n dropdownHeight: number,\n): number {\n const windowHeight = Dimensions.get(\"window\").height;\n const spaceBelow = windowHeight - (anchor.y + anchor.height + SELECT_DROPDOWN_GAP);\n const spaceAbove = anchor.y - SELECT_DROPDOWN_GAP;\n const topBelow = anchor.y + anchor.height + SELECT_DROPDOWN_GAP;\n const topAbove = anchor.y - SELECT_DROPDOWN_GAP - dropdownHeight;\n\n if (spaceBelow >= dropdownHeight) {\n return topBelow;\n }\n\n if (spaceAbove >= dropdownHeight) {\n return topAbove;\n }\n\n if (spaceAbove > spaceBelow) {\n return Math.max(0, topAbove);\n }\n\n return Math.max(0, Math.min(topBelow, windowHeight - dropdownHeight));\n}\n","import { Platform } from \"react-native\";\nimport { colors } from \"../theme/tokens\";\n\nexport const COUNTRY_DROPDOWN_SCROLL_CLASS = \"hp-country-dropdown-scroll\";\nexport const SELECT_DROPDOWN_SCROLL_CLASS = \"hp-select-dropdown-scroll\";\n\nconst STYLE_ID = \"hp-dropdown-scroll-styles\";\n\nfunction createDropdownScrollCss(className: string): string {\n return `\n .${className} {\n scrollbar-width: thin;\n scrollbar-color: ${colors.stormGray300} transparent;\n overflow-y: auto;\n }\n\n .${className}::-webkit-scrollbar {\n width: 4px;\n -webkit-appearance: none;\n appearance: none;\n }\n\n .${className}::-webkit-scrollbar-corner {\n background: transparent;\n }\n\n .${className}::-webkit-scrollbar-button,\n .${className}::-webkit-scrollbar-button:single-button,\n .${className}::-webkit-scrollbar-button:double-button,\n .${className}::-webkit-scrollbar-button:horizontal:decrement,\n .${className}::-webkit-scrollbar-button:horizontal:increment,\n .${className}::-webkit-scrollbar-button:horizontal:start:decrement,\n .${className}::-webkit-scrollbar-button:horizontal:end:increment,\n .${className}::-webkit-scrollbar-button:vertical:decrement,\n .${className}::-webkit-scrollbar-button:vertical:increment,\n .${className}::-webkit-scrollbar-button:vertical:start:decrement,\n .${className}::-webkit-scrollbar-button:vertical:end:increment,\n .${className}::-webkit-scrollbar-button:start:decrement,\n .${className}::-webkit-scrollbar-button:end:increment,\n .${className}::-webkit-scrollbar-button:decrement,\n .${className}::-webkit-scrollbar-button:increment {\n display: none;\n width: 0;\n height: 0;\n max-width: 0;\n max-height: 0;\n min-width: 0;\n min-height: 0;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n }\n\n .${className}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .${className}::-webkit-scrollbar-thumb {\n background-color: ${colors.stormGray300};\n border-radius: 9999px;\n }\n`;\n}\n\nexport const dropdownScrollCss = [\n createDropdownScrollCss(COUNTRY_DROPDOWN_SCROLL_CLASS),\n createDropdownScrollCss(SELECT_DROPDOWN_SCROLL_CLASS),\n].join(\"\\n\");\n\n/** @deprecated Use `dropdownScrollCss` */\nexport const countryDropdownScrollCss = dropdownScrollCss;\n\nexport function ensureDropdownScrollStyles(): void {\n if (Platform.OS !== \"web\" || typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = dropdownScrollCss;\n document.head.appendChild(style);\n}\n\nexport function ensureCountryDropdownScrollStyles(): void {\n ensureDropdownScrollStyles();\n}\n\nexport function ensureSelectDropdownScrollStyles(): void {\n ensureDropdownScrollStyles();\n}\n","import { fontSize } from \"../theme/tokens\";\n\nconst MULTI_SELECT_SUFFIX = \" ... + \";\nconst MULTI_SELECT_SUFFIX_UNIT = \" items\";\n\n/** Rough width estimate for Noto Sans Armenian at 14px (single-select value text). */\nfunction estimateTextWidth(text: string, size = fontSize.md): number {\n return text.length * size * 0.58;\n}\n\nexport function formatMultiSelectDisplay(\n labels: string[],\n maxWidth: number,\n textSize = fontSize.md,\n): string {\n if (labels.length === 0) {\n return \"\";\n }\n\n if (labels.length === 1) {\n return labels[0];\n }\n\n const fits = (text: string) => estimateTextWidth(text, textSize) <= maxWidth;\n const fullText = labels.join(\", \");\n\n if (fits(fullText)) {\n return fullText;\n }\n\n for (let visibleCount = labels.length - 1; visibleCount >= 1; visibleCount -= 1) {\n const hiddenCount = labels.length - visibleCount;\n const truncatedText = `${labels.slice(0, visibleCount).join(\", \")}${MULTI_SELECT_SUFFIX}${hiddenCount}${MULTI_SELECT_SUFFIX_UNIT}`;\n\n if (fits(truncatedText)) {\n return truncatedText;\n }\n }\n\n return `... + ${labels.length}${MULTI_SELECT_SUFFIX_UNIT}`;\n}\n\nexport function resolveSelectedLabels(\n options: { value: string; label: string }[],\n selectedValues: string[],\n): string[] {\n if (selectedValues.length === 0) {\n return [];\n }\n\n const labelByValue = new Map(options.map((option) => [option.value, option.label]));\n\n return selectedValues\n .map((value) => labelByValue.get(value))\n .filter((label): label is string => Boolean(label));\n}\n","import {\n cloneElement,\n isValidElement,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport {\n Animated,\n Easing,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { ChevronDownIcon } from \"../icons/ChevronDownIcon\";\nimport {\n getSelectFieldStyles,\n SELECT_CHEVRON_COLOR,\n SELECT_CHEVRON_ROTATION_MS,\n SELECT_CHEVRON_SIZE,\n SELECT_ICON_SIZE,\n SELECT_LABEL_GAP,\n SELECT_DROPDOWN_MAX_HEIGHT,\n SELECT_DROPDOWN_PADDING,\n SELECT_OPTION_GAP,\n SELECT_OPTION_HEIGHT,\n SELECT_OPTION_HEIGHT_COMPACT,\n resolveInputVisualState,\n resolveSelectDropdownContentHeight,\n resolveSelectDropdownHeight,\n resolveSelectDropdownTop,\n selectDropdownMetrics,\n selectFieldMetrics,\n selectLabelTypography,\n} from \"../theme/select\";\nimport { colors } from \"../theme/tokens\";\nimport {\n ensureSelectDropdownScrollStyles,\n SELECT_DROPDOWN_SCROLL_CLASS,\n} from \"../utils/countryDropdownScrollStyles\";\nimport {\n formatMultiSelectDisplay,\n resolveSelectedLabels,\n} from \"../utils/formatMultiSelectDisplay\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport { Label } from \"./Label\";\n\ntype SelectIconProps = {\n size?: number;\n color?: string;\n};\n\nfunction renderSelectIcon(icon: ReactNode, color: string) {\n if (!icon) return null;\n\n if (isValidElement<SelectIconProps>(icon)) {\n return cloneElement(icon, {\n size: icon.props.size ?? SELECT_ICON_SIZE,\n color: icon.props.color ?? color,\n });\n }\n\n return icon;\n}\n\nfunction resolveWebTextNode(\n ref: React.RefObject<ComponentRef<typeof Text> | null>,\n): HTMLElement | null {\n if (Platform.OS !== \"web\") {\n return null;\n }\n\n const node = ref.current as unknown;\n return node instanceof HTMLElement ? node : null;\n}\n\nfunction syncTruncatedNativeTitle(\n ref: React.RefObject<ComponentRef<typeof Text> | null>,\n label: string,\n): void {\n const element = resolveWebTextNode(ref);\n if (!element) {\n return;\n }\n\n if (element.scrollWidth > element.clientWidth) {\n element.setAttribute(\"title\", label);\n return;\n }\n\n element.removeAttribute(\"title\");\n}\n\nfunction clearNativeTitle(ref: React.RefObject<ComponentRef<typeof Text> | null>): void {\n resolveWebTextNode(ref)?.removeAttribute(\"title\");\n}\n\ninterface SelectOptionItemProps {\n option: SelectOption;\n compact: boolean;\n optionHeight: number;\n isSelected: boolean;\n isHighlighted: boolean;\n isLast: boolean;\n selectableIndex: number;\n onHighlight: (selectableIndex: number) => void;\n onSelect: (value: string) => void;\n}\n\nfunction SelectOptionItem({\n option,\n compact,\n optionHeight,\n isSelected,\n isHighlighted,\n isLast,\n selectableIndex,\n onHighlight,\n onSelect,\n}: SelectOptionItemProps) {\n const labelRef = useRef<ComponentRef<typeof Text>>(null);\n\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: option.disabled, selected: isSelected }}\n disabled={option.disabled}\n onPress={() => {\n if (!option.disabled) {\n onSelect(option.value);\n }\n }}\n onHoverIn={() => {\n if (!option.disabled && selectableIndex >= 0) {\n onHighlight(selectableIndex);\n }\n\n syncTruncatedNativeTitle(labelRef, option.label);\n }}\n onHoverOut={() => {\n clearNativeTitle(labelRef);\n }}\n style={[\n selectDropdownMetrics.option,\n compact && styles.optionCompact,\n { height: optionHeight, minHeight: optionHeight, maxHeight: optionHeight },\n isSelected && selectDropdownMetrics.optionSelected,\n compact && isSelected && styles.optionSelectedCompact,\n isHighlighted && !isSelected && !option.disabled\n ? selectDropdownMetrics.optionHighlighted\n : null,\n !isLast && styles.optionSpacing,\n option.disabled && styles.optionDisabled,\n ]}\n >\n <Text\n ref={labelRef}\n style={[\n selectDropdownMetrics.optionLabel,\n styles.optionLabel,\n isSelected && selectDropdownMetrics.optionLabelSelected,\n option.disabled && styles.optionLabelDisabled,\n ]}\n numberOfLines={1}\n >\n {option.label}\n </Text>\n </Pressable>\n );\n}\n\nexport type SelectOption = {\n value: string;\n label: string;\n disabled?: boolean;\n};\n\ntype AnchorLayout = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n\ninterface SelectBaseProps {\n label?: string;\n placeholder?: string;\n options: SelectOption[];\n leftIcon?: ReactNode;\n disabled?: boolean;\n error?: string;\n invalid?: boolean;\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n fieldStyle?: StyleProp<ViewStyle>;\n className?: string;\n fieldClassName?: string;\n menuClassName?: string;\n labelClassName?: string;\n /** Styles merged into the field label. */\n labelStyles?: StyleProp<TextStyle>;\n errorClassName?: string;\n hintClassName?: string;\n /** Shorter option rows for compact filter-style dropdowns. */\n compact?: boolean;\n /**\n * When true (default), clicking the already-selected option clears the selection\n * in single-select mode. Set to false for required fields that must keep a value.\n */\n allowDeselect?: boolean;\n}\n\nexport interface SingleSelectProps extends SelectBaseProps {\n multiple?: false;\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nexport interface MultipleSelectProps extends SelectBaseProps {\n multiple: true;\n value?: string[];\n onValueChange?: (value: string[]) => void;\n}\n\nexport type SelectProps = SingleSelectProps | MultipleSelectProps;\n\nfunction normalizeSelectedValues(\n multiple: boolean,\n value: string | string[] | undefined,\n): string[] {\n if (multiple) {\n if (Array.isArray(value)) {\n return value;\n }\n\n return value ? [value] : [];\n }\n\n return typeof value === \"string\" && value.length > 0 ? [value] : [];\n}\n\nexport function Select({\n label,\n placeholder = \"placeholder\",\n value,\n onValueChange,\n options,\n leftIcon,\n multiple = false,\n disabled = false,\n error,\n invalid,\n hint,\n containerStyle,\n fieldStyle,\n className,\n fieldClassName,\n menuClassName,\n labelClassName,\n labelStyles,\n errorClassName,\n hintClassName,\n compact = false,\n allowDeselect = true,\n}: SelectProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const triggerRef = useRef<ComponentRef<typeof Pressable>>(null);\n const menuRef = useRef<ComponentRef<typeof View>>(null);\n const scrollRef = useRef<ComponentRef<typeof ScrollView>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const chevronRotation = useRef(new Animated.Value(0)).current;\n const [open, setOpen] = useState(false);\n const [anchor, setAnchor] = useState<AnchorLayout | null>(null);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const [valueContainerWidth, setValueContainerWidth] = useState(0);\n const optionHeight = compact ? SELECT_OPTION_HEIGHT_COMPACT : SELECT_OPTION_HEIGHT;\n const needsScroll = useMemo(\n () =>\n resolveSelectDropdownContentHeight(options.length, optionHeight) >\n SELECT_DROPDOWN_MAX_HEIGHT - SELECT_DROPDOWN_PADDING * 2,\n [optionHeight, options.length],\n );\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(triggerRef, fieldClassName);\n useApplyWebClassName(menuRef, menuClassName);\n useApplyWebClassName(scrollRef, SELECT_DROPDOWN_SCROLL_CLASS, open && Boolean(anchor) && needsScroll);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n useIsomorphicLayoutEffect(() => {\n ensureSelectDropdownScrollStyles();\n }, []);\n\n useEffect(() => {\n Animated.timing(chevronRotation, {\n toValue: open ? 1 : 0,\n duration: SELECT_CHEVRON_ROTATION_MS,\n easing: Easing.out(Easing.ease),\n useNativeDriver: Platform.OS !== \"web\",\n }).start();\n }, [chevronRotation, open]);\n\n const chevronRotate = chevronRotation.interpolate({\n inputRange: [0, 1],\n outputRange: [\"0deg\", \"180deg\"],\n });\n\n const selectedValues = useMemo(\n () => normalizeSelectedValues(multiple, value),\n [multiple, value],\n );\n const selectedValueSet = useMemo(() => new Set(selectedValues), [selectedValues]);\n const selectedLabels = useMemo(\n () => resolveSelectedLabels(options, selectedValues),\n [options, selectedValues],\n );\n const selectableOptions = useMemo(\n () => options.filter((option) => !option.disabled),\n [options],\n );\n // Empty option lists cannot open — treat as disabled so the field does not look interactive.\n const isEffectivelyDisabled = disabled || selectableOptions.length === 0;\n const hasError = Boolean(error) || Boolean(invalid);\n const visualState = resolveInputVisualState({\n focused: open,\n error: hasError,\n disabled: isEffectivelyDisabled,\n });\n const fieldStyles = getSelectFieldStyles(visualState);\n const selectableIndexByValue = useMemo(\n () =>\n new Map(\n selectableOptions.map((option, index) => [option.value, index] as const),\n ),\n [selectableOptions],\n );\n const displayLabel = useMemo(() => {\n if (selectedLabels.length === 0) {\n return placeholder;\n }\n\n if (!multiple) {\n return selectedLabels[0];\n }\n\n if (valueContainerWidth <= 0) {\n return selectedLabels.join(\", \");\n }\n\n return formatMultiSelectDisplay(selectedLabels, valueContainerWidth);\n }, [multiple, placeholder, selectedLabels, valueContainerWidth]);\n\n const isPlaceholder = selectedLabels.length === 0;\n const dropdownHeight = resolveSelectDropdownHeight(options.length, optionHeight);\n const helperMessage = error ?? hint;\n\n function closeMenu() {\n setOpen(false);\n setAnchor(null);\n setHighlightedIndex(-1);\n }\n\n function openMenu() {\n if (isEffectivelyDisabled) {\n return;\n }\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n const selectedIndex = selectableOptions.findIndex((option) =>\n selectedValueSet.has(option.value),\n );\n setHighlightedIndex(selectedIndex >= 0 ? selectedIndex : 0);\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n }\n\n function handleSelect(nextValue: string) {\n if (multiple) {\n const nextValues = selectedValues.includes(nextValue)\n ? selectedValues.filter((item) => item !== nextValue)\n : [...selectedValues, nextValue];\n\n (onValueChange as MultipleSelectProps[\"onValueChange\"] | undefined)?.(nextValues);\n return;\n }\n\n if (selectedValues.includes(nextValue)) {\n if (allowDeselect) {\n (onValueChange as SingleSelectProps[\"onValueChange\"] | undefined)?.(\"\");\n }\n closeMenu();\n return;\n }\n\n (onValueChange as SingleSelectProps[\"onValueChange\"] | undefined)?.(nextValue);\n closeMenu();\n }\n\n const optionList = options.map((option, index) => {\n const selectableIndex = selectableIndexByValue.get(option.value) ?? -1;\n const isSelected = selectedValueSet.has(option.value);\n const isHighlighted = selectableIndex === highlightedIndex;\n const isLast = index === options.length - 1;\n\n return (\n <SelectOptionItem\n key={option.value}\n option={option}\n compact={compact}\n optionHeight={optionHeight}\n isSelected={isSelected}\n isHighlighted={isHighlighted}\n isLast={isLast}\n selectableIndex={selectableIndex}\n onHighlight={setHighlightedIndex}\n onSelect={handleSelect}\n />\n );\n });\n\n const dropdownTop = anchor ? resolveSelectDropdownTop(anchor, dropdownHeight) : 0;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label\n disabled={isEffectivelyDisabled}\n style={[styles.label, labelStyles]}\n className={labelClassName}\n >\n {label}\n </Label>\n ) : null}\n\n <View style={fieldStyles.outline}>\n <Pressable\n ref={triggerRef}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled: isEffectivelyDisabled, expanded: open }}\n disabled={isEffectivelyDisabled}\n onPress={open ? closeMenu : openMenu}\n style={[selectFieldMetrics.container, fieldStyles.container, fieldStyle]}\n >\n {leftIcon ? (\n <View style={styles.iconSlot}>\n {renderSelectIcon(leftIcon, fieldStyles.icon)}\n </View>\n ) : null}\n <View\n style={styles.valueContainer}\n onLayout={(event) => {\n setValueContainerWidth(event.nativeEvent.layout.width);\n }}\n >\n <Text\n style={[\n selectFieldMetrics.value,\n fieldStyles.value,\n isPlaceholder && { color: fieldStyles.placeholder },\n ]}\n numberOfLines={1}\n >\n {displayLabel}\n </Text>\n </View>\n <Animated.View\n style={[styles.iconSlot, { transform: [{ rotate: chevronRotate }] }]}\n >\n <ChevronDownIcon\n size={SELECT_CHEVRON_SIZE}\n color={isEffectivelyDisabled ? colors.stormGray200 : SELECT_CHEVRON_COLOR}\n />\n </Animated.View>\n </Pressable>\n </View>\n\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n\n <Modal visible={open} transparent animationType=\"fade\" onRequestClose={closeMenu}>\n <View style={styles.overlay}>\n <Pressable\n style={styles.backdrop}\n onPress={closeMenu}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Close\"\n />\n {anchor ? (\n <View\n ref={menuRef}\n style={[\n selectDropdownMetrics.menu,\n styles.dropdown,\n {\n top: dropdownTop,\n left: anchor.x,\n width: anchor.width,\n height: dropdownHeight,\n },\n ]}\n >\n {needsScroll ? (\n <ScrollView\n ref={scrollRef}\n style={styles.dropdownScroll}\n contentContainerStyle={styles.dropdownContent}\n keyboardShouldPersistTaps=\"handled\"\n showsVerticalScrollIndicator\n bounces={false}\n nestedScrollEnabled\n >\n {optionList}\n </ScrollView>\n ) : (\n <View style={styles.dropdownContent}>{optionList}</View>\n )}\n </View>\n ) : null}\n </View>\n </Modal>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: \"100%\",\n gap: SELECT_LABEL_GAP,\n },\n label: {\n ...selectLabelTypography,\n },\n iconSlot: {\n width: SELECT_ICON_SIZE,\n height: SELECT_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n valueContainer: {\n flex: 1,\n minWidth: 0,\n justifyContent: \"center\",\n },\n overlay: {\n flex: 1,\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: colors.transparent,\n },\n dropdown: {\n position: \"absolute\",\n zIndex: 1,\n },\n dropdownScroll: {\n flex: 1,\n },\n dropdownContent: {\n flexGrow: 1,\n },\n optionSpacing: {\n marginBottom: SELECT_OPTION_GAP,\n },\n optionCompact: {\n paddingTop: 8,\n paddingBottom: 8,\n },\n optionSelectedCompact: {\n paddingTop: 8,\n paddingBottom: 8,\n },\n optionDisabled: {\n opacity: 0.5,\n },\n optionLabel: {\n minWidth: 0,\n ...(Platform.OS === \"web\"\n ? ({\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n } as const)\n : null),\n },\n optionLabelDisabled: {\n color: colors.stormGray300,\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export type Country = {\n code: string;\n name: string;\n dialCode: string;\n};\n\nexport const defaultCountry: Country = {\n code: \"AM\",\n name: \"Armenia\",\n dialCode: \"+374\",\n};\n\nexport const countries: Country[] = [\n defaultCountry,\n { code: \"AF\", name: \"Afghanistan\", dialCode: \"+93\" },\n { code: \"AL\", name: \"Albania\", dialCode: \"+355\" },\n { code: \"DZ\", name: \"Algeria\", dialCode: \"+213\" },\n { code: \"AR\", name: \"Argentina\", dialCode: \"+54\" },\n { code: \"AU\", name: \"Australia\", dialCode: \"+61\" },\n { code: \"AT\", name: \"Austria\", dialCode: \"+43\" },\n { code: \"AZ\", name: \"Azerbaijan\", dialCode: \"+994\" },\n { code: \"BH\", name: \"Bahrain\", dialCode: \"+973\" },\n { code: \"BY\", name: \"Belarus\", dialCode: \"+375\" },\n { code: \"BE\", name: \"Belgium\", dialCode: \"+32\" },\n { code: \"BR\", name: \"Brazil\", dialCode: \"+55\" },\n { code: \"BG\", name: \"Bulgaria\", dialCode: \"+359\" },\n { code: \"CA\", name: \"Canada\", dialCode: \"+1\" },\n { code: \"CL\", name: \"Chile\", dialCode: \"+56\" },\n { code: \"CN\", name: \"China\", dialCode: \"+86\" },\n { code: \"CO\", name: \"Colombia\", dialCode: \"+57\" },\n { code: \"HR\", name: \"Croatia\", dialCode: \"+385\" },\n { code: \"CY\", name: \"Cyprus\", dialCode: \"+357\" },\n { code: \"CZ\", name: \"Czech Republic\", dialCode: \"+420\" },\n { code: \"DK\", name: \"Denmark\", dialCode: \"+45\" },\n { code: \"EG\", name: \"Egypt\", dialCode: \"+20\" },\n { code: \"EE\", name: \"Estonia\", dialCode: \"+372\" },\n { code: \"FI\", name: \"Finland\", dialCode: \"+358\" },\n { code: \"FR\", name: \"France\", dialCode: \"+33\" },\n { code: \"GE\", name: \"Georgia\", dialCode: \"+995\" },\n { code: \"DE\", name: \"Germany\", dialCode: \"+49\" },\n { code: \"GR\", name: \"Greece\", dialCode: \"+30\" },\n { code: \"HK\", name: \"Hong Kong\", dialCode: \"+852\" },\n { code: \"HU\", name: \"Hungary\", dialCode: \"+36\" },\n { code: \"IN\", name: \"India\", dialCode: \"+91\" },\n { code: \"ID\", name: \"Indonesia\", dialCode: \"+62\" },\n { code: \"IR\", name: \"Iran\", dialCode: \"+98\" },\n { code: \"IQ\", name: \"Iraq\", dialCode: \"+964\" },\n { code: \"IE\", name: \"Ireland\", dialCode: \"+353\" },\n { code: \"IL\", name: \"Israel\", dialCode: \"+972\" },\n { code: \"IT\", name: \"Italy\", dialCode: \"+39\" },\n { code: \"JP\", name: \"Japan\", dialCode: \"+81\" },\n { code: \"JO\", name: \"Jordan\", dialCode: \"+962\" },\n { code: \"KZ\", name: \"Kazakhstan\", dialCode: \"+7\" },\n { code: \"KW\", name: \"Kuwait\", dialCode: \"+965\" },\n { code: \"LV\", name: \"Latvia\", dialCode: \"+371\" },\n { code: \"LB\", name: \"Lebanon\", dialCode: \"+961\" },\n { code: \"LT\", name: \"Lithuania\", dialCode: \"+370\" },\n { code: \"LU\", name: \"Luxembourg\", dialCode: \"+352\" },\n { code: \"MY\", name: \"Malaysia\", dialCode: \"+60\" },\n { code: \"MX\", name: \"Mexico\", dialCode: \"+52\" },\n { code: \"MD\", name: \"Moldova\", dialCode: \"+373\" },\n { code: \"NL\", name: \"Netherlands\", dialCode: \"+31\" },\n { code: \"NZ\", name: \"New Zealand\", dialCode: \"+64\" },\n { code: \"NG\", name: \"Nigeria\", dialCode: \"+234\" },\n { code: \"NO\", name: \"Norway\", dialCode: \"+47\" },\n { code: \"PK\", name: \"Pakistan\", dialCode: \"+92\" },\n { code: \"PS\", name: \"Palestine\", dialCode: \"+970\" },\n { code: \"PH\", name: \"Philippines\", dialCode: \"+63\" },\n { code: \"PL\", name: \"Poland\", dialCode: \"+48\" },\n { code: \"PT\", name: \"Portugal\", dialCode: \"+351\" },\n { code: \"QA\", name: \"Qatar\", dialCode: \"+974\" },\n { code: \"RO\", name: \"Romania\", dialCode: \"+40\" },\n { code: \"RU\", name: \"Russia\", dialCode: \"+7\" },\n { code: \"SA\", name: \"Saudi Arabia\", dialCode: \"+966\" },\n { code: \"RS\", name: \"Serbia\", dialCode: \"+381\" },\n { code: \"SG\", name: \"Singapore\", dialCode: \"+65\" },\n { code: \"SK\", name: \"Slovakia\", dialCode: \"+421\" },\n { code: \"SI\", name: \"Slovenia\", dialCode: \"+386\" },\n { code: \"ZA\", name: \"South Africa\", dialCode: \"+27\" },\n { code: \"KR\", name: \"South Korea\", dialCode: \"+82\" },\n { code: \"ES\", name: \"Spain\", dialCode: \"+34\" },\n { code: \"SE\", name: \"Sweden\", dialCode: \"+46\" },\n { code: \"CH\", name: \"Switzerland\", dialCode: \"+41\" },\n { code: \"SY\", name: \"Syria\", dialCode: \"+963\" },\n { code: \"TW\", name: \"Taiwan\", dialCode: \"+886\" },\n { code: \"TH\", name: \"Thailand\", dialCode: \"+66\" },\n { code: \"TR\", name: \"Turkey\", dialCode: \"+90\" },\n { code: \"UA\", name: \"Ukraine\", dialCode: \"+380\" },\n { code: \"AE\", name: \"United Arab Emirates\", dialCode: \"+971\" },\n { code: \"GB\", name: \"United Kingdom\", dialCode: \"+44\" },\n { code: \"US\", name: \"United States\", dialCode: \"+1\" },\n { code: \"UZ\", name: \"Uzbekistan\", dialCode: \"+998\" },\n { code: \"VN\", name: \"Vietnam\", dialCode: \"+84\" },\n];\n\nexport function findCountry(code: string): Country {\n return countries.find((country) => country.code === code) ?? defaultCountry;\n}\n","/** ISO 3166-1 alpha-2 country code → flag emoji. Prefer CountryFlag images on Windows. */\nexport function countryCodeToFlagEmoji(code: string): string {\n const upper = code.trim().toUpperCase();\n if (upper.length !== 2) return \"\";\n\n return String.fromCodePoint(\n ...upper.split(\"\").map((char) => 0x1f1e6 - 65 + char.charCodeAt(0)),\n );\n}\n\n/**\n * PNG flag URL (flagcdn). Windows does not render regional-indicator flag emoji,\n * so UI should use images instead of countryCodeToFlagEmoji.\n */\nexport function getCountryFlagImageUri(code: string): string | null {\n const lower = code.trim().toLowerCase();\n if (!/^[a-z]{2}$/.test(lower)) return null;\n\n return `https://flagcdn.com/w40/${lower}.png`;\n}\n","import { Image, StyleSheet, type StyleProp, type ImageStyle } from \"react-native\";\n\nimport { getCountryFlagImageUri } from \"../utils/countryFlag\";\n\nconst FLAG_HEIGHT = 18;\nconst FLAG_WIDTH = 24;\n\nexport type CountryFlagProps = {\n code: string;\n style?: StyleProp<ImageStyle>;\n};\n\n/** Renders a country flag image (works on Windows; emoji flags do not). */\nexport function CountryFlag({ code, style }: CountryFlagProps) {\n const uri = getCountryFlagImageUri(code);\n\n if (uri === null) {\n return null;\n }\n\n return (\n <Image\n source={{ uri }}\n style={[styles.flag, style]}\n accessibilityIgnoresInvertColors\n accessibilityLabel={`${code.trim().toUpperCase()} flag`}\n />\n );\n}\n\nconst styles = StyleSheet.create({\n flag: {\n width: FLAG_WIDTH,\n height: FLAG_HEIGHT,\n borderRadius: 2,\n },\n});\n","import { useRef, useState, useLayoutEffect, type ComponentRef } from \"react\";\nimport {\n Dimensions,\n Modal,\n Platform,\n Pressable,\n ScrollView,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport {\n countries,\n defaultCountry,\n findCountry,\n type Country,\n} from \"../data/countries\";\nimport { ChevronDownIcon } from \"../icons/ChevronDownIcon\";\nimport { INPUT_HEIGHT } from \"../theme/input\";\nimport { colors, fontSize, fontWeight, radii, spacing, fonts } from \"../theme/tokens\";\nimport {\n COUNTRY_DROPDOWN_SCROLL_CLASS,\n ensureCountryDropdownScrollStyles,\n} from \"../utils/countryDropdownScrollStyles\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport { CountryFlag } from \"./CountryFlag\";\n\nconst DROPDOWN_GAP = 10;\nconst DROPDOWN_HEIGHT = 186;\nconst DROPDOWN_PADDING = 8;\nconst OPTION_GAP = 10;\nconst OPTION_HEIGHT = 35;\n/** Match shared text-field height (`INPUT_HEIGHT`) so PhoneInput columns align. */\nconst TRIGGER_HEIGHT = INPUT_HEIGHT;\nconst CHEVRON_SIZE = 16;\n\nexport interface CountryCodeSelectorProps {\n value?: string;\n onValueChange?: (countryCode: string) => void;\n /** Country list (defaults to built-in list). */\n options?: Country[];\n disabled?: boolean;\n style?: StyleProp<ViewStyle>;\n className?: string;\n}\n\ntype AnchorLayout = {\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nfunction resolveDropdownTop(anchor: AnchorLayout): number {\n const windowHeight = Dimensions.get(\"window\").height;\n const topBelow = anchor.y + anchor.height + DROPDOWN_GAP;\n const topAbove = anchor.y - DROPDOWN_GAP - DROPDOWN_HEIGHT;\n const fitsBelow = topBelow + DROPDOWN_HEIGHT <= windowHeight;\n\n if (fitsBelow) return topBelow;\n if (topAbove >= 0) return topAbove;\n\n return Math.max(0, Math.min(topBelow, windowHeight - DROPDOWN_HEIGHT));\n}\n\nexport function CountryCodeSelector({\n value = defaultCountry.code,\n onValueChange,\n options = countries,\n disabled = false,\n style,\n className,\n}: CountryCodeSelectorProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const triggerRef = useRef<ComponentRef<typeof Pressable>>(null);\n const scrollRef = useRef<ComponentRef<typeof ScrollView>>(null);\n const [open, setOpen] = useState(false);\n const [anchor, setAnchor] = useState<AnchorLayout | null>(null);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(\n scrollRef,\n COUNTRY_DROPDOWN_SCROLL_CLASS,\n open && Boolean(anchor),\n );\n\n useLayoutEffect(() => {\n ensureCountryDropdownScrollStyles();\n }, []);\n\n const selected = findCountry(value);\n const textColor = disabled ? colors.stormGray200 : colors.slateBlue;\n\n function closeDropdown() {\n setOpen(false);\n setAnchor(null);\n }\n\n function handleOpen() {\n if (disabled) return;\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n }\n\n function handleSelect(code: string) {\n onValueChange?.(code);\n closeDropdown();\n }\n\n const dropdownTop = anchor ? resolveDropdownTop(anchor) : 0;\n\n const optionList = options.map((item, index) => {\n const isSelected = item.code === selected.code;\n const isLast = index === options.length - 1;\n return (\n <Pressable\n key={item.code}\n accessibilityRole=\"button\"\n onPress={() => handleSelect(item.code)}\n style={[\n styles.option,\n isSelected && styles.optionSelected,\n !isLast && styles.optionSpacing,\n ]}\n >\n <CountryFlag code={item.code} />\n <Text style={styles.optionDialCode}>{item.dialCode}</Text>\n </Pressable>\n );\n });\n\n const dropdownList = (\n <ScrollView\n ref={scrollRef}\n style={styles.dropdownScroll}\n contentContainerStyle={styles.dropdownContent}\n keyboardShouldPersistTaps=\"handled\"\n showsVerticalScrollIndicator\n bounces={false}\n nestedScrollEnabled\n >\n {optionList}\n </ScrollView>\n );\n\n return (\n <View ref={wrapperRef} style={[styles.root, style]}>\n <Pressable\n ref={triggerRef}\n accessibilityRole=\"button\"\n disabled={disabled}\n onPress={handleOpen}\n style={[\n styles.trigger,\n disabled ? styles.triggerDisabled : styles.triggerEnabled,\n Platform.OS === \"web\" ? styles.triggerWeb : null,\n ]}\n >\n <CountryFlag code={selected.code} />\n <Text style={[styles.dialCode, { color: textColor }]}>{selected.dialCode}</Text>\n <ChevronDownIcon size={CHEVRON_SIZE} color={colors.stormGray100} />\n </Pressable>\n\n <Modal\n visible={open}\n transparent\n animationType=\"fade\"\n onRequestClose={closeDropdown}\n >\n <Pressable style={styles.overlay} onPress={closeDropdown}>\n {anchor ? (\n <View\n style={[\n styles.dropdown,\n {\n top: dropdownTop,\n left: anchor.x,\n width: anchor.width,\n },\n ]}\n >\n {dropdownList}\n </View>\n ) : null}\n </Pressable>\n </Modal>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n root: {\n alignSelf: \"flex-start\",\n flexShrink: 0,\n },\n trigger: {\n flexDirection: \"row\",\n alignItems: \"center\",\n alignSelf: \"flex-start\",\n flexGrow: 0,\n flexShrink: 0,\n height: TRIGGER_HEIGHT,\n borderRadius: radii.lg,\n borderWidth: 1,\n padding: spacing.lg,\n gap: spacing.sm,\n },\n triggerEnabled: {\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n },\n triggerDisabled: {\n borderColor: colors.stormGray50,\n backgroundColor: colors.stormGray50,\n },\n triggerWeb: {\n width: \"max-content\" as ViewStyle[\"width\"],\n },\n dialCode: {\n fontSize: fontSize.md,\n fontWeight: fontWeight.medium,\n lineHeight: 19,\n },\n overlay: {\n flex: 1,\n backgroundColor: \"transparent\",\n },\n dropdown: {\n position: \"absolute\",\n height: DROPDOWN_HEIGHT,\n borderRadius: radii.lg,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n padding: DROPDOWN_PADDING,\n overflow: \"hidden\",\n },\n dropdownScroll: {\n flex: 1,\n },\n dropdownContent: {\n flexGrow: 1,\n },\n option: {\n flexDirection: \"row\",\n alignItems: \"center\",\n height: OPTION_HEIGHT,\n borderRadius: radii.sm,\n padding: spacing.sm,\n gap: spacing.sm,\n },\n optionSpacing: {\n marginBottom: OPTION_GAP,\n },\n optionSelected: {\n backgroundColor: colors.countrySelectorSelectedBg,\n },\n optionDialCode: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: fontSize.md,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.slateBlue,\n },\n});\n","import { useRef, useState, type ComponentRef } from \"react\";\nimport {\n StyleSheet,\n Text,\n TextInput,\n View,\n type NativeSyntheticEvent,\n type StyleProp,\n type TextInputFocusEventData,\n type TextInputProps,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { CountryCodeSelector } from \"./CountryCodeSelector\";\nimport { Label } from \"./Label\";\nimport {\n getInputFieldStyles,\n inputFieldMetrics,\n INPUT_ICON_GAP,\n INPUT_OUTLINE_WIDTH,\n resolveInputVisualState,\n} from \"../theme/input\";\nimport { colors, radii, spacing } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\n/** Keep country trigger outer box equal to the phone field (transparent focus ring). */\nconst countryOutlineSlot = {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n borderWidth: INPUT_OUTLINE_WIDTH,\n borderColor: colors.transparent,\n padding: 0,\n backgroundColor: colors.transparent,\n} as const;\n\nexport interface PhoneInputProps extends Omit<TextInputProps, \"style\"> {\n label?: string;\n countryCode?: string;\n onCountryCodeChange?: (countryCode: string) => void;\n error?: string;\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n style?: StyleProp<TextStyle>;\n className?: string;\n labelClassName?: string;\n /** Styles merged into the field label. */\n labelStyles?: StyleProp<TextStyle>;\n inputClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n}\n\n/** National phone field: digits only (blocks pasted letters/symbols). */\nfunction sanitizePhoneDigits(value: string): string {\n return value.replace(/\\D/g, \"\");\n}\n\nexport function PhoneInput({\n label,\n countryCode,\n onCountryCodeChange,\n error,\n hint,\n containerStyle,\n style,\n className,\n labelClassName,\n labelStyles,\n inputClassName,\n errorClassName,\n hintClassName,\n editable = true,\n onFocus,\n onBlur,\n onChangeText,\n ...props\n}: PhoneInputProps) {\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const inputRef = useRef<ComponentRef<typeof TextInput>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const [focused, setFocused] = useState(false);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(inputRef, inputClassName);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n const isDisabled = editable === false;\n const phoneVisualState = resolveInputVisualState({\n focused,\n error: Boolean(error),\n disabled: isDisabled,\n });\n const phoneFieldStyles = getInputFieldStyles(phoneVisualState);\n\n function handleFocus(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(true);\n onFocus?.(event);\n }\n\n function handleBlur(event: NativeSyntheticEvent<TextInputFocusEventData>) {\n setFocused(false);\n onBlur?.(event);\n }\n\n function handleChangeText(value: string) {\n onChangeText?.(sanitizePhoneDigits(value));\n }\n\n const helperMessage = error ?? hint;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label\n disabled={isDisabled}\n className={labelClassName}\n style={labelStyles}\n >\n {label}\n </Label>\n ) : null}\n <View style={styles.row}>\n <View style={[countryOutlineSlot, styles.countryOutline]}>\n <CountryCodeSelector\n value={countryCode}\n onValueChange={onCountryCodeChange}\n disabled={isDisabled}\n style={styles.countrySelector}\n />\n </View>\n <View style={[phoneFieldStyles.outline, styles.phoneOutline]}>\n <View\n style={[\n inputFieldMetrics.containerBase,\n inputFieldMetrics.container,\n phoneFieldStyles.container,\n styles.phoneField,\n ]}\n >\n <TextInput\n ref={inputRef}\n style={[\n inputFieldMetrics.input,\n phoneFieldStyles.text,\n style,\n ]}\n keyboardType=\"phone-pad\"\n placeholderTextColor={\n error ? colors.inputError : phoneFieldStyles.placeholder\n }\n editable={editable}\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n onChangeText={handleChangeText}\n />\n </View>\n </View>\n </View>\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: \"100%\",\n gap: spacing.sm,\n },\n row: {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: INPUT_ICON_GAP,\n },\n countryOutline: {\n flexShrink: 0,\n },\n countrySelector: {\n flexShrink: 0,\n },\n phoneOutline: {\n flex: 1,\n },\n phoneField: {\n flex: 1,\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export const CHEVRON_LEFT_PATH = \"M12.5 15L7.5 10L12.5 5\";\nexport const CHEVRON_RIGHT_PATH = \"M7.5 15L12.5 10L7.5 5\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { CHEVRON_LEFT_PATH, CHEVRON_RIGHT_PATH } from \"./chevronNavPaths\";\n\ninterface ChevronNavIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\nexport function ChevronLeftIcon({\n size = 20,\n color = \"#151a1e\",\n strokeWidth = 2,\n}: ChevronNavIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={CHEVRON_LEFT_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n\nexport function ChevronRightIcon({\n size = 20,\n color = \"#151a1e\",\n strokeWidth = 2,\n}: ChevronNavIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={CHEVRON_RIGHT_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { Dimensions, Platform, StyleSheet, type TextStyle, type ViewStyle } from \"react-native\";\nimport { colors, fonts, fontSize, fontWeight, radii, spacing } from \"./tokens\";\n\nexport const CALENDAR_DROPDOWN_GAP = spacing.sm;\nexport const CALENDAR_PANEL_WIDTH = 296;\nexport const CALENDAR_PANEL_PADDING = spacing.md;\nexport const CALENDAR_PANEL_GAP = spacing.md;\nexport const CALENDAR_CONTENT_WIDTH =\n CALENDAR_PANEL_WIDTH - CALENDAR_PANEL_PADDING * 2;\nexport const CALENDAR_HEADER_HEIGHT = 20;\nexport const CALENDAR_WEEKDAY_CELL_SIZE = 32;\nexport const CALENDAR_WEEKDAY_GAP = spacing.sm;\nexport const CALENDAR_WEEKDAY_RADIUS = 6;\nexport const CALENDAR_DAY_SIZE = CALENDAR_WEEKDAY_CELL_SIZE;\nexport const CALENDAR_DAY_GRID_WIDTH = CALENDAR_CONTENT_WIDTH;\nexport const CALENDAR_DAY_GAP_X = spacing.sm;\nexport const CALENDAR_DAY_GAP_Y = spacing.lg;\nexport const CALENDAR_DAY_ROWS = 6;\nexport const CALENDAR_DAY_GRID_HEIGHT =\n CALENDAR_DAY_SIZE * CALENDAR_DAY_ROWS + CALENDAR_DAY_GAP_Y * (CALENDAR_DAY_ROWS - 1);\nexport const CALENDAR_PICKER_COLUMNS = 3;\nexport const CALENDAR_PICKER_ROWS = 4;\nexport const CALENDAR_YEARS_PER_PAGE = 12;\nexport const CALENDAR_PICKER_CELL_WIDTH =\n (CALENDAR_DAY_GRID_WIDTH - CALENDAR_DAY_GAP_X * (CALENDAR_PICKER_COLUMNS - 1)) /\n CALENDAR_PICKER_COLUMNS;\nexport const CALENDAR_PICKER_CELL_HEIGHT = 36;\nexport const CALENDAR_PICKER_BODY_HEIGHT =\n CALENDAR_WEEKDAY_CELL_SIZE + CALENDAR_WEEKDAY_GAP + CALENDAR_DAY_GRID_HEIGHT;\nexport const CALENDAR_DAY_DOT_SIZE = 3;\nexport const CALENDAR_TODAY_TEXT_COLOR = \"#082640\";\nexport const CALENDAR_TODAY_DOT_COLOR = \"#0033A0\";\nexport const CALENDAR_NAV_ICON_SIZE = 20;\nexport const CALENDAR_NAV_ICON_COLOR = colors.stormGray850;\nexport const CALENDAR_FIELD_ICON_SIZE = 20;\nexport const CALENDAR_FIELD_WIDTH = CALENDAR_PANEL_WIDTH;\nexport const CALENDAR_FIELD_HEIGHT = 52;\nexport const CALENDAR_FIELD_PADDING = spacing.lg;\nexport const CALENDAR_FIELD_GAP = spacing.sm;\nexport const CALENDAR_FIELD_PLACEHOLDER_COLOR = colors.stormGray200;\n\n/** @deprecated Use `CALENDAR_PANEL_WIDTH` */\nexport const CALENDAR_PANEL_MIN_WIDTH = CALENDAR_PANEL_WIDTH;\n\nexport const CALENDAR_PANEL_TOTAL_HEIGHT =\n CALENDAR_PANEL_PADDING * 2 +\n CALENDAR_HEADER_HEIGHT +\n CALENDAR_PANEL_GAP * 2 +\n CALENDAR_WEEKDAY_CELL_SIZE +\n CALENDAR_DAY_GRID_HEIGHT;\nexport const CALENDAR_PANEL_HEIGHT = CALENDAR_PANEL_TOTAL_HEIGHT;\n\nexport const calendarLabelTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.sm,\n fontWeight: fontWeight.medium,\n lineHeight: 16,\n letterSpacing: 0,\n color: colors.slateBlue,\n} as const;\n\nexport const calendarFieldTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: 19,\n letterSpacing: 0,\n textAlign: \"left\",\n} as const;\n\nexport const calendarFieldPlaceholderTypography = {\n ...calendarFieldTypography,\n color: CALENDAR_FIELD_PLACEHOLDER_COLOR,\n} as const;\n\nexport const calendarDropdownMetrics = StyleSheet.create({\n panel: {\n width: CALENDAR_PANEL_WIDTH,\n height: CALENDAR_PANEL_HEIGHT,\n borderRadius: radii.lg,\n borderWidth: 1,\n borderColor: colors.stormGray50,\n backgroundColor: colors.white,\n padding: CALENDAR_PANEL_PADDING,\n gap: CALENDAR_PANEL_GAP,\n overflow: \"hidden\",\n flexDirection: \"column\",\n opacity: 1,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n header: {\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n height: CALENDAR_HEADER_HEIGHT,\n minHeight: CALENDAR_HEADER_HEIGHT,\n maxHeight: CALENDAR_HEADER_HEIGHT,\n },\n headerTitle: {\n textAlign: \"center\",\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.bold,\n lineHeight: 19,\n letterSpacing: 0,\n color: colors.stormGray850,\n },\n headerTitlePressable: {\n flex: 1,\n alignItems: \"center\",\n justifyContent: \"center\",\n minHeight: CALENDAR_HEADER_HEIGHT,\n },\n navButton: {\n width: CALENDAR_NAV_ICON_SIZE,\n height: CALENDAR_NAV_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n weekdayRow: {\n flexDirection: \"row\",\n gap: CALENDAR_WEEKDAY_GAP,\n height: CALENDAR_WEEKDAY_CELL_SIZE,\n minHeight: CALENDAR_WEEKDAY_CELL_SIZE,\n maxHeight: CALENDAR_WEEKDAY_CELL_SIZE,\n opacity: 1,\n },\n weekdayCell: {\n width: CALENDAR_WEEKDAY_CELL_SIZE,\n height: CALENDAR_WEEKDAY_CELL_SIZE,\n borderRadius: CALENDAR_WEEKDAY_RADIUS,\n padding: spacing.xs,\n backgroundColor: colors.stormGray0,\n alignItems: \"center\",\n justifyContent: \"center\",\n opacity: 1,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n weekdayLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.sm,\n fontWeight: fontWeight.regular,\n lineHeight: 16,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.stormGray300,\n textTransform: \"uppercase\",\n },\n dayGrid: {\n width: CALENDAR_DAY_GRID_WIDTH,\n height: CALENDAR_DAY_GRID_HEIGHT,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n columnGap: CALENDAR_DAY_GAP_X,\n rowGap: CALENDAR_DAY_GAP_Y,\n alignContent: \"flex-start\",\n opacity: 1,\n },\n dayCell: {\n width: CALENDAR_DAY_SIZE,\n height: CALENDAR_DAY_SIZE,\n minHeight: CALENDAR_DAY_SIZE,\n maxHeight: CALENDAR_DAY_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: CALENDAR_WEEKDAY_RADIUS,\n padding: spacing.xs,\n backgroundColor: colors.white,\n opacity: 1,\n position: \"relative\",\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n dayCellPast: {\n backgroundColor: colors.stormGray50,\n },\n dayCellSelected: {\n backgroundColor: colors.navy,\n },\n dayLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: 19,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.navy,\n includeFontPadding: false,\n textAlignVertical: \"center\",\n },\n dayLabelToday: {\n color: CALENDAR_TODAY_TEXT_COLOR,\n },\n dayLabelSelected: {\n fontWeight: fontWeight.semibold,\n color: colors.white,\n },\n dayLabelFuture: {\n color: colors.navy,\n },\n dayLabelMuted: {\n color: colors.stormGray300,\n },\n dayLabelOutsideMonth: {\n color: colors.stormGray300,\n },\n dayLabelDisabled: {\n color: colors.stormGray300,\n opacity: 0.5,\n },\n todayDot: {\n position: \"absolute\",\n bottom: 5,\n left: \"50%\",\n width: CALENDAR_DAY_DOT_SIZE,\n height: CALENDAR_DAY_DOT_SIZE,\n borderRadius: 15,\n backgroundColor: CALENDAR_TODAY_DOT_COLOR,\n marginLeft: -(CALENDAR_DAY_DOT_SIZE / 2),\n zIndex: 1,\n },\n pickerBody: {\n width: CALENDAR_DAY_GRID_WIDTH,\n height: CALENDAR_PICKER_BODY_HEIGHT,\n justifyContent: \"center\",\n },\n pickerGrid: {\n width: CALENDAR_DAY_GRID_WIDTH,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n columnGap: CALENDAR_DAY_GAP_X,\n rowGap: CALENDAR_DAY_GAP_Y,\n alignContent: \"flex-start\",\n },\n pickerCell: {\n width: CALENDAR_PICKER_CELL_WIDTH,\n minHeight: CALENDAR_PICKER_CELL_HEIGHT,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: CALENDAR_WEEKDAY_RADIUS,\n paddingHorizontal: spacing.xs,\n paddingVertical: spacing.xs,\n backgroundColor: colors.white,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n pickerCellSelected: {\n backgroundColor: colors.navy,\n },\n pickerLabel: {\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.regular,\n lineHeight: 19,\n letterSpacing: 0,\n textAlign: \"center\",\n color: colors.navy,\n includeFontPadding: false,\n ...(Platform.OS === \"android\" ? { textAlignVertical: \"center\" as const } : null),\n },\n pickerLabelSelected: {\n fontWeight: fontWeight.semibold,\n color: colors.white,\n },\n pickerLabelDisabled: {\n color: colors.stormGray300,\n opacity: 0.5,\n },\n pickerLabelCurrent: {\n color: CALENDAR_TODAY_TEXT_COLOR,\n },\n});\n\nexport function resolveCalendarDropdownTop(\n anchor: { y: number; height: number },\n panelHeight: number = CALENDAR_PANEL_HEIGHT,\n): number {\n const windowHeight = Dimensions.get(\"window\").height;\n const spaceBelow = windowHeight - (anchor.y + anchor.height + CALENDAR_DROPDOWN_GAP);\n const spaceAbove = anchor.y - CALENDAR_DROPDOWN_GAP;\n const topBelow = anchor.y + anchor.height + CALENDAR_DROPDOWN_GAP;\n const topAbove = anchor.y - CALENDAR_DROPDOWN_GAP - panelHeight;\n\n if (spaceBelow >= panelHeight) {\n return topBelow;\n }\n\n if (spaceAbove >= panelHeight) {\n return topAbove;\n }\n\n if (spaceAbove > spaceBelow) {\n return Math.max(0, topAbove);\n }\n\n return Math.max(0, Math.min(topBelow, windowHeight - panelHeight));\n}\n\nexport function resolveCalendarDropdownLeft(\n anchor: { x: number },\n panelWidth: number = CALENDAR_PANEL_WIDTH,\n): number {\n const windowWidth = Dimensions.get(\"window\").width;\n const maxLeft = Math.max(0, windowWidth - panelWidth);\n\n return Math.max(0, Math.min(anchor.x, maxLeft));\n}\n\nexport const calendarFieldMetrics = StyleSheet.create({\n container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n width: CALENDAR_FIELD_WIDTH,\n minWidth: CALENDAR_FIELD_WIDTH,\n maxWidth: CALENDAR_FIELD_WIDTH,\n height: CALENDAR_FIELD_HEIGHT,\n minHeight: CALENDAR_FIELD_HEIGHT,\n maxHeight: CALENDAR_FIELD_HEIGHT,\n borderRadius: radii.lg,\n padding: CALENDAR_FIELD_PADDING,\n gap: CALENDAR_FIELD_GAP,\n opacity: 1,\n ...(Platform.OS === \"web\"\n ? ({\n boxSizing: \"border-box\",\n } as ViewStyle)\n : null),\n },\n value: {\n flex: 1,\n minWidth: 0,\n ...calendarFieldTypography,\n paddingVertical: 0,\n paddingHorizontal: 0,\n margin: 0,\n ...(Platform.OS === \"android\" ? { includeFontPadding: false } : null),\n ...(Platform.OS === \"web\"\n ? ({\n outlineStyle: \"none\",\n } as TextStyle)\n : null),\n },\n});\n","export function stripTime(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nexport type DateRange = {\n start: Date;\n end?: Date;\n};\n\nexport function normalizeDateRange(range?: DateRange): { start?: Date; end?: Date } {\n if (!range?.start) {\n return {};\n }\n\n const start = stripTime(range.start);\n\n if (!range.end) {\n return { start };\n }\n\n const end = stripTime(range.end);\n\n if (isBeforeDay(end, start)) {\n return { start: end, end: start };\n }\n\n return { start, end };\n}\n\nexport function isInDateRange(date: Date, start?: Date, end?: Date): boolean {\n if (!start) {\n return false;\n }\n\n const day = stripTime(date);\n\n if (!end) {\n return isSameDay(day, start);\n }\n\n return !isBeforeDay(day, start) && !isAfterDay(day, end);\n}\n\nexport function selectRangeDate(clicked: Date, current?: DateRange): DateRange | undefined {\n const clickedDate = stripTime(clicked);\n\n if (!current?.start) {\n return { start: clickedDate };\n }\n\n const start = stripTime(current.start);\n const end = current.end ? stripTime(current.end) : undefined;\n\n if (!end) {\n if (isSameDay(clickedDate, start)) {\n return undefined;\n }\n\n if (isBeforeDay(clickedDate, start)) {\n return { start: clickedDate };\n }\n\n return { start, end: clickedDate };\n }\n\n if (isSameDay(clickedDate, end)) {\n return undefined;\n }\n\n return { start: clickedDate };\n}\n\nexport function isSameDay(left: Date, right: Date): boolean {\n return (\n left.getFullYear() === right.getFullYear() &&\n left.getMonth() === right.getMonth() &&\n left.getDate() === right.getDate()\n );\n}\n\nexport function isBeforeDay(left: Date, right: Date): boolean {\n return stripTime(left).getTime() < stripTime(right).getTime();\n}\n\nexport function isAfterDay(left: Date, right: Date): boolean {\n return stripTime(left).getTime() > stripTime(right).getTime();\n}\n\nexport function addMonths(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, 1);\n}\n\nexport function isDateDisabled(\n date: Date,\n minDate?: Date,\n maxDate?: Date,\n): boolean {\n if (minDate && isBeforeDay(date, minDate)) {\n return true;\n }\n\n if (maxDate && isAfterDay(date, maxDate)) {\n return true;\n }\n\n return false;\n}\n\nexport type CalendarDayCell = {\n date: Date;\n inCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n isRangeStart: boolean;\n isRangeEnd: boolean;\n isInRange: boolean;\n isPast: boolean;\n isDisabled: boolean;\n};\n\nconst CALENDAR_VISIBLE_DAY_COUNT = 42;\nconst MONDAY_WEEK_START = 1;\n\nexport function buildCalendarDays({\n viewDate,\n selectedDate,\n selectedRange,\n today,\n minDate,\n maxDate,\n}: {\n viewDate: Date;\n selectedDate?: Date;\n selectedRange?: DateRange;\n today: Date;\n minDate?: Date;\n maxDate?: Date;\n}): CalendarDayCell[] {\n const { start: rangeStart, end: rangeEnd } = normalizeDateRange(selectedRange);\n const year = viewDate.getFullYear();\n const month = viewDate.getMonth();\n const firstOfMonth = new Date(year, month, 1);\n const startOffset = (firstOfMonth.getDay() - MONDAY_WEEK_START + 7) % 7;\n const gridStart = new Date(year, month, 1 - startOffset);\n const days: CalendarDayCell[] = [];\n\n for (let index = 0; index < CALENDAR_VISIBLE_DAY_COUNT; index += 1) {\n const date = new Date(\n gridStart.getFullYear(),\n gridStart.getMonth(),\n gridStart.getDate() + index,\n );\n const inCurrentMonth = date.getMonth() === month;\n const isPast = inCurrentMonth && isBeforeDay(date, today);\n const isDisabled = isDateDisabled(date, minDate, maxDate);\n const isRangeStart = rangeStart ? isSameDay(date, rangeStart) : false;\n const isRangeEnd = rangeEnd ? isSameDay(date, rangeEnd) : false;\n const inSelectedRange =\n rangeStart && rangeEnd ? isInDateRange(date, rangeStart, rangeEnd) : false;\n const isInRange = inSelectedRange && !isRangeStart && !isRangeEnd;\n const isSelected = selectedDate\n ? isSameDay(date, selectedDate)\n : inSelectedRange || Boolean(rangeStart && !rangeEnd && isRangeStart);\n\n days.push({\n date,\n inCurrentMonth,\n isToday: isSameDay(date, today),\n isSelected,\n isRangeStart,\n isRangeEnd,\n isInRange,\n isPast,\n isDisabled,\n });\n }\n\n return days;\n}\n\nexport function formatCalendarMonthYear(date: Date, locale: string): string {\n const formatted = new Intl.DateTimeFormat(locale, {\n month: \"short\",\n year: \"numeric\",\n }).format(date);\n\n return formatted.charAt(0).toUpperCase() + formatted.slice(1);\n}\n\nexport function formatCalendarYear(year: number, locale: string): string {\n return new Intl.DateTimeFormat(locale, { year: \"numeric\" }).format(new Date(year, 0, 1));\n}\n\nexport function getMonthLabels(locale: string): string[] {\n return Array.from({ length: 12 }, (_, month) => {\n const label = new Intl.DateTimeFormat(locale, { month: \"short\" }).format(\n new Date(2024, month, 1),\n );\n const normalized = label.replace(/\\./g, \"\");\n\n return normalized.charAt(0).toUpperCase() + normalized.slice(1);\n });\n}\n\nexport function getYearPageStart(year: number, yearsPerPage = 12): number {\n return Math.floor(year / yearsPerPage) * yearsPerPage;\n}\n\nexport function isMonthDisabled(\n year: number,\n month: number,\n minDate?: Date,\n maxDate?: Date,\n): boolean {\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n\n if (minDate && isBeforeDay(lastDay, minDate)) {\n return true;\n }\n\n if (maxDate && isAfterDay(firstDay, maxDate)) {\n return true;\n }\n\n return false;\n}\n\nexport function isYearDisabled(year: number, minDate?: Date, maxDate?: Date): boolean {\n const firstDay = new Date(year, 0, 1);\n const lastDay = new Date(year, 11, 31);\n\n if (minDate && isBeforeDay(lastDay, minDate)) {\n return true;\n }\n\n if (maxDate && isAfterDay(firstDay, maxDate)) {\n return true;\n }\n\n return false;\n}\n\nexport function formatCalendarDate(date: Date, locale: string): string {\n return new Intl.DateTimeFormat(locale, {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }).format(date);\n}\n\nexport function formatCalendarDateRange(\n range: DateRange,\n locale: string,\n separator = \" – \",\n): string {\n const { start, end } = normalizeDateRange(range);\n\n if (!start) {\n return \"\";\n }\n\n if (!end) {\n return formatCalendarDate(start, locale);\n }\n\n return `${formatCalendarDate(start, locale)}${separator}${formatCalendarDate(end, locale)}`;\n}\n\n/** @deprecated Use `resolveWeekdayLabels` from `calendarLocalization`; calendars are Monday-first. */\nexport function getDefaultWeekdayLabels(locale: string): string[] {\n const labels: string[] = [];\n const formatter = new Intl.DateTimeFormat(locale, { weekday: \"short\" });\n\n for (let index = 0; index < 7; index += 1) {\n const day = new Date(2024, 0, index + 1);\n const label = formatter.format(day).replace(/\\./g, \"\").toUpperCase();\n labels.push(label.slice(0, 2));\n }\n\n return labels;\n}\n","export type CalendarLocale = \"hy-AM\" | \"en-US\" | \"ru-RU\";\n\nexport type CalendarTranslationKey =\n | \"datePlaceholder\"\n | \"rangePlaceholder\"\n | \"previousMonth\"\n | \"nextMonth\"\n | \"previousYear\"\n | \"nextYear\"\n | \"previousYears\"\n | \"nextYears\"\n | \"selectMonth\"\n | \"selectYear\"\n | \"closeCalendar\";\n\nexport type CalendarTranslations = Record<CalendarTranslationKey, string> & {\n /** Weekday labels in Monday-first order. */\n weekdays: string[];\n /** Short month labels used in compact calendar headers and month picker cells. */\n monthsShort: string[];\n /** Full month labels available for consumers that need long-form display. */\n monthsLong: string[];\n};\n\nexport const calendarTranslations: Record<CalendarLocale, CalendarTranslations> = {\n \"hy-AM\": {\n weekdays: [\"ԵՐ\", \"ԵՔ\", \"ՉՐ\", \"ՀՆ\", \"ՈՒՐ\", \"ՇԲ\", \"ԿՐ\"],\n monthsShort: [\n \"Հնվ\",\n \"Փտվ\",\n \"Մրտ\",\n \"Ապր\",\n \"Մյս\",\n \"Հուն\",\n \"Հուլ\",\n \"Օգս\",\n \"Սեպ\",\n \"Հոկ\",\n \"Նոյ\",\n \"Դեկ\",\n ],\n monthsLong: [\n \"Հունվար\",\n \"Փետրվար\",\n \"Մարտ\",\n \"Ապրիլ\",\n \"Մայիս\",\n \"Հունիս\",\n \"Հուլիս\",\n \"Օգոստոս\",\n \"Սեպտեմբեր\",\n \"Հոկտեմբեր\",\n \"Նոյեմբեր\",\n \"Դեկտեմբեր\",\n ],\n datePlaceholder: \"Ընտրել ամսաթիվ\",\n rangePlaceholder: \"Ընտրել ժամանակահատված\",\n previousMonth: \"Նախորդ ամիս\",\n nextMonth: \"Հաջորդ ամիս\",\n previousYear: \"Նախորդ տարի\",\n nextYear: \"Հաջորդ տարի\",\n previousYears: \"Նախորդ տարիներ\",\n nextYears: \"Հաջորդ տարիներ\",\n selectMonth: \"Ընտրել ամիս\",\n selectYear: \"Ընտրել տարի\",\n closeCalendar: \"Փակել օրացույցը\",\n },\n \"en-US\": {\n weekdays: [\"MO\", \"TU\", \"WE\", \"TH\", \"FR\", \"SA\", \"SU\"],\n monthsShort: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n monthsLong: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n datePlaceholder: \"Select date\",\n rangePlaceholder: \"Select date range\",\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n previousYear: \"Previous year\",\n nextYear: \"Next year\",\n previousYears: \"Previous years\",\n nextYears: \"Next years\",\n selectMonth: \"Select month\",\n selectYear: \"Select year\",\n closeCalendar: \"Close calendar\",\n },\n \"ru-RU\": {\n weekdays: [\"ПН\", \"ВТ\", \"СР\", \"ЧТ\", \"ПТ\", \"СБ\", \"ВС\"],\n monthsShort: [\n \"Янв\",\n \"Фев\",\n \"Мар\",\n \"Апр\",\n \"Май\",\n \"Июн\",\n \"Июл\",\n \"Авг\",\n \"Сен\",\n \"Окт\",\n \"Ноя\",\n \"Дек\",\n ],\n monthsLong: [\n \"Январь\",\n \"Февраль\",\n \"Март\",\n \"Апрель\",\n \"Май\",\n \"Июнь\",\n \"Июль\",\n \"Август\",\n \"Сентябрь\",\n \"Октябрь\",\n \"Ноябрь\",\n \"Декабрь\",\n ],\n datePlaceholder: \"Выбрать дату\",\n rangePlaceholder: \"Выбрать период\",\n previousMonth: \"Предыдущий месяц\",\n nextMonth: \"Следующий месяц\",\n previousYear: \"Предыдущий год\",\n nextYear: \"Следующий год\",\n previousYears: \"Предыдущие годы\",\n nextYears: \"Следующие годы\",\n selectMonth: \"Выбрать месяц\",\n selectYear: \"Выбрать год\",\n closeCalendar: \"Закрыть календарь\",\n },\n};\n\nexport function resolveCalendarLocale(locale: string): CalendarLocale {\n const normalizedLocale = locale.toLowerCase();\n\n if (normalizedLocale.startsWith(\"hy\")) {\n return \"hy-AM\";\n }\n\n if (normalizedLocale.startsWith(\"ru\")) {\n return \"ru-RU\";\n }\n\n return \"en-US\";\n}\n\nexport function getCalendarTranslations(locale: string): CalendarTranslations {\n return calendarTranslations[resolveCalendarLocale(locale)];\n}\n\nexport function resolveWeekdayLabels(locale: string): string[] {\n return getCalendarTranslations(locale).weekdays;\n}\n\nexport function getCalendarMonthLabels(\n locale: string,\n width: \"short\" | \"long\" = \"short\",\n): string[] {\n const translations = getCalendarTranslations(locale);\n\n return width === \"short\" ? translations.monthsShort : translations.monthsLong;\n}\n\nexport function formatLocalizedCalendarMonthYear(date: Date, locale: string): string {\n return `${getCalendarMonthLabels(locale)[date.getMonth()]} ${date.getFullYear()}`;\n}\n","import { createContext, useContext, useEffect, useMemo, useState, type ReactNode } from \"react\";\nimport { resolveCalendarLocale, type CalendarLocale } from \"./calendarLocalization\";\n\nconst LOCALE_STORAGE_KEY = \"homepad.locale\";\nconst LOCALE_CHANGE_EVENT = \"homepad:locale-change\";\nconst DEFAULT_CALENDAR_LOCALE: CalendarLocale = \"hy-AM\";\n\nconst CalendarLocaleContext = createContext<string | undefined>(undefined);\n\nexport type CalendarLocaleProviderProps = {\n locale: string;\n children: ReactNode;\n};\n\nexport function CalendarLocaleProvider({ locale, children }: CalendarLocaleProviderProps) {\n return (\n <CalendarLocaleContext.Provider value={locale}>{children}</CalendarLocaleContext.Provider>\n );\n}\n\nfunction normalizeProjectLocale(locale: string | null | undefined): CalendarLocale | null {\n if (!locale) {\n return null;\n }\n\n return resolveCalendarLocale(locale);\n}\n\nfunction readBrowserLocale(): CalendarLocale | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n let storedLocale: CalendarLocale | null = null;\n\n try {\n storedLocale = normalizeProjectLocale(window.localStorage.getItem(LOCALE_STORAGE_KEY));\n } catch {\n storedLocale = null;\n }\n\n if (storedLocale) {\n return storedLocale;\n }\n\n const documentLocale = normalizeProjectLocale(window.document?.documentElement.lang);\n if (documentLocale) {\n return documentLocale;\n }\n\n return normalizeProjectLocale(window.navigator.language);\n}\n\nexport function useCalendarLocale(locale?: string): CalendarLocale {\n const contextLocale = useContext(CalendarLocaleContext);\n const controlledLocale = locale ?? contextLocale;\n const [browserLocale, setBrowserLocale] = useState<CalendarLocale>(() =>\n readBrowserLocale() ?? DEFAULT_CALENDAR_LOCALE,\n );\n\n useEffect(() => {\n if (controlledLocale !== undefined || typeof window === \"undefined\") {\n return;\n }\n\n const syncLocale = () => {\n setBrowserLocale(readBrowserLocale() ?? DEFAULT_CALENDAR_LOCALE);\n };\n\n const handleLocaleChange = (event: Event) => {\n const customEvent = event as CustomEvent<string>;\n const nextLocale = normalizeProjectLocale(customEvent.detail);\n\n if (nextLocale) {\n setBrowserLocale(nextLocale);\n return;\n }\n\n syncLocale();\n };\n\n window.addEventListener(LOCALE_CHANGE_EVENT, handleLocaleChange);\n window.addEventListener(\"storage\", syncLocale);\n\n return () => {\n window.removeEventListener(LOCALE_CHANGE_EVENT, handleLocaleChange);\n window.removeEventListener(\"storage\", syncLocale);\n };\n }, [controlledLocale]);\n\n return useMemo(\n () => normalizeProjectLocale(controlledLocale) ?? browserLocale,\n [browserLocale, controlledLocale],\n );\n}\n","import { useMemo, useRef, useState, type ComponentRef } from \"react\";\nimport { Pressable, Text, View, type StyleProp, type TextStyle, type ViewStyle } from \"react-native\";\nimport { ChevronLeftIcon, ChevronRightIcon } from \"../icons/ChevronNavIcons\";\nimport {\n CALENDAR_NAV_ICON_COLOR,\n CALENDAR_NAV_ICON_SIZE,\n CALENDAR_YEARS_PER_PAGE,\n calendarDropdownMetrics,\n} from \"../theme/calendar\";\nimport {\n addMonths,\n buildCalendarDays,\n formatCalendarYear,\n getYearPageStart,\n isMonthDisabled,\n isSameDay,\n isYearDisabled,\n selectRangeDate,\n type CalendarDayCell,\n type DateRange,\n} from \"../utils/calendarDays\";\nimport {\n formatLocalizedCalendarMonthYear,\n getCalendarMonthLabels,\n getCalendarTranslations,\n resolveWeekdayLabels,\n type CalendarTranslations,\n} from \"../utils/calendarLocalization\";\nimport { useCalendarLocale } from \"../utils/calendarLocaleContext\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nexport type { DateRange };\n\nexport type CalendarLabels = Partial<Pick<CalendarTranslations, CalendarTranslationKey>> & {\n weekdays?: string[];\n formatMonthYear?: (date: Date) => string;\n};\n\ntype CalendarTranslationKey =\n | \"previousMonth\"\n | \"nextMonth\"\n | \"previousYear\"\n | \"nextYear\"\n | \"previousYears\"\n | \"nextYears\"\n | \"selectMonth\"\n | \"selectYear\"\n | \"closeCalendar\";\n\ntype CalendarPickerView = \"days\" | \"months\" | \"years\";\n\ntype CalendarBaseProps = {\n viewDate?: Date;\n defaultViewDate?: Date;\n onViewDateChange?: (date: Date) => void;\n locale?: string;\n labels?: CalendarLabels;\n minDate?: Date;\n maxDate?: Date;\n today?: Date;\n style?: StyleProp<ViewStyle>;\n className?: string;\n};\n\nexport type CalendarSingleProps = CalendarBaseProps & {\n mode?: \"single\";\n value?: Date;\n onChange?: (date: Date | undefined) => void;\n};\n\nexport type CalendarRangeProps = CalendarBaseProps & {\n mode: \"range\";\n value?: DateRange;\n onChange?: (range: DateRange | undefined) => void;\n};\n\nexport type CalendarProps = CalendarSingleProps | CalendarRangeProps;\n\nfunction resolveDayCellStyle(day: CalendarDayCell): StyleProp<ViewStyle> {\n if (day.isDisabled) {\n return [calendarDropdownMetrics.dayCell];\n }\n\n if (day.isSelected) {\n return [calendarDropdownMetrics.dayCell, calendarDropdownMetrics.dayCellSelected];\n }\n\n return [\n calendarDropdownMetrics.dayCell,\n day.inCurrentMonth && day.isPast && !day.isToday\n ? calendarDropdownMetrics.dayCellPast\n : null,\n ];\n}\n\nfunction resolveDayLabelStyle(day: CalendarDayCell): StyleProp<TextStyle> {\n if (day.isDisabled) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelDisabled];\n }\n\n if (day.isSelected) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelSelected];\n }\n\n if (!day.inCurrentMonth) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelOutsideMonth];\n }\n\n if (day.isToday) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelToday];\n }\n\n if (day.isPast) {\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelMuted];\n }\n\n return [calendarDropdownMetrics.dayLabel, calendarDropdownMetrics.dayLabelFuture];\n}\n\nexport function Calendar(props: CalendarProps) {\n const rangeProps = props.mode === \"range\" ? (props as CalendarRangeProps) : null;\n const singleProps = props.mode === \"range\" ? null : (props as CalendarSingleProps);\n const {\n viewDate,\n defaultViewDate,\n onViewDateChange,\n locale,\n labels,\n minDate,\n maxDate,\n today = new Date(),\n style,\n className,\n } = props;\n const rootRef = useRef<ComponentRef<typeof View>>(null);\n const [internalViewDate, setInternalViewDate] = useState(() => {\n if (defaultViewDate) {\n return defaultViewDate;\n }\n\n if (rangeProps) {\n return rangeProps.value?.start ?? today;\n }\n\n return singleProps?.value ?? today;\n });\n const activeViewDate = viewDate ?? internalViewDate;\n const [pickerView, setPickerView] = useState<CalendarPickerView>(\"days\");\n const [pickerYear, setPickerYear] = useState(() => activeViewDate.getFullYear());\n const [yearPageStart, setYearPageStart] = useState(() =>\n getYearPageStart(activeViewDate.getFullYear(), CALENDAR_YEARS_PER_PAGE),\n );\n const customWeekdayLabels = labels?.weekdays;\n const formatMonthYearLabel = labels?.formatMonthYear;\n const resolvedLocale = useCalendarLocale(locale);\n const translations = useMemo(\n () => getCalendarTranslations(resolvedLocale),\n [resolvedLocale],\n );\n\n useApplyWebClassName(rootRef, className);\n\n const weekdayLabels = useMemo(\n () => customWeekdayLabels ?? resolveWeekdayLabels(resolvedLocale),\n [customWeekdayLabels, resolvedLocale],\n );\n\n const monthLabels = useMemo(() => getCalendarMonthLabels(resolvedLocale), [resolvedLocale]);\n\n const monthYearLabel = useMemo(() => {\n if (formatMonthYearLabel) {\n return formatMonthYearLabel(activeViewDate);\n }\n\n return formatLocalizedCalendarMonthYear(activeViewDate, resolvedLocale);\n }, [activeViewDate, formatMonthYearLabel, resolvedLocale]);\n\n const headerLabel = useMemo(() => {\n if (pickerView === \"months\") {\n return formatCalendarYear(pickerYear, resolvedLocale);\n }\n\n if (pickerView === \"years\") {\n const endYear = yearPageStart + CALENDAR_YEARS_PER_PAGE - 1;\n return `${yearPageStart} – ${endYear}`;\n }\n\n return monthYearLabel;\n }, [monthYearLabel, pickerView, pickerYear, resolvedLocale, yearPageStart]);\n\n const days = useMemo(\n () =>\n buildCalendarDays({\n viewDate: activeViewDate,\n selectedDate: singleProps?.value,\n selectedRange: rangeProps?.value,\n today,\n minDate,\n maxDate,\n }),\n [activeViewDate, maxDate, minDate, rangeProps?.value, singleProps?.value, today],\n );\n\n const yearOptions = useMemo(\n () =>\n Array.from({ length: CALENDAR_YEARS_PER_PAGE }, (_, index) => yearPageStart + index),\n [yearPageStart],\n );\n\n function getLabel(key: CalendarTranslationKey): string {\n return labels?.[key] ?? translations[key];\n }\n\n function setViewDate(nextDate: Date) {\n if (viewDate === undefined) {\n setInternalViewDate(nextDate);\n }\n\n onViewDateChange?.(nextDate);\n }\n\n function handlePrevious() {\n if (pickerView === \"months\") {\n setPickerYear((year) => year - 1);\n return;\n }\n\n if (pickerView === \"years\") {\n setYearPageStart((start) => start - CALENDAR_YEARS_PER_PAGE);\n return;\n }\n\n setViewDate(addMonths(activeViewDate, -1));\n }\n\n function handleNext() {\n if (pickerView === \"months\") {\n setPickerYear((year) => year + 1);\n return;\n }\n\n if (pickerView === \"years\") {\n setYearPageStart((start) => start + CALENDAR_YEARS_PER_PAGE);\n return;\n }\n\n setViewDate(addMonths(activeViewDate, 1));\n }\n\n function handleHeaderPress() {\n if (pickerView === \"days\") {\n setPickerYear(activeViewDate.getFullYear());\n setPickerView(\"months\");\n return;\n }\n\n if (pickerView === \"months\") {\n setYearPageStart(getYearPageStart(pickerYear, CALENDAR_YEARS_PER_PAGE));\n setPickerView(\"years\");\n }\n }\n\n function handleMonthSelect(month: number) {\n setViewDate(new Date(pickerYear, month, 1));\n setPickerView(\"days\");\n }\n\n function handleYearSelect(year: number) {\n setPickerYear(year);\n setPickerView(\"months\");\n }\n\n function handleDayPress(date: Date) {\n if (rangeProps) {\n rangeProps.onChange?.(selectRangeDate(date, rangeProps.value));\n return;\n }\n\n const currentValue = singleProps?.value;\n\n if (currentValue && isSameDay(date, currentValue)) {\n singleProps?.onChange?.(undefined);\n return;\n }\n\n singleProps?.onChange?.(date);\n }\n\n const headerIsPressable = pickerView === \"days\" || pickerView === \"months\";\n\n return (\n <View ref={rootRef} style={[calendarDropdownMetrics.panel, style]}>\n <View style={calendarDropdownMetrics.header}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n pickerView === \"months\"\n ? getLabel(\"previousYear\")\n : pickerView === \"years\"\n ? getLabel(\"previousYears\")\n : getLabel(\"previousMonth\")\n }\n onPress={handlePrevious}\n style={calendarDropdownMetrics.navButton}\n >\n <ChevronLeftIcon size={CALENDAR_NAV_ICON_SIZE} color={CALENDAR_NAV_ICON_COLOR} />\n </Pressable>\n\n {headerIsPressable ? (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n pickerView === \"days\" ? getLabel(\"selectMonth\") : getLabel(\"selectYear\")\n }\n onPress={handleHeaderPress}\n style={calendarDropdownMetrics.headerTitlePressable}\n >\n <Text style={calendarDropdownMetrics.headerTitle}>{headerLabel}</Text>\n </Pressable>\n ) : (\n <View style={calendarDropdownMetrics.headerTitlePressable}>\n <Text style={calendarDropdownMetrics.headerTitle}>{headerLabel}</Text>\n </View>\n )}\n\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={\n pickerView === \"months\"\n ? getLabel(\"nextYear\")\n : pickerView === \"years\"\n ? getLabel(\"nextYears\")\n : getLabel(\"nextMonth\")\n }\n onPress={handleNext}\n style={calendarDropdownMetrics.navButton}\n >\n <ChevronRightIcon size={CALENDAR_NAV_ICON_SIZE} color={CALENDAR_NAV_ICON_COLOR} />\n </Pressable>\n </View>\n\n {pickerView === \"days\" ? (\n <>\n <View style={calendarDropdownMetrics.weekdayRow}>\n {weekdayLabels.map((weekday) => (\n <View key={weekday} style={calendarDropdownMetrics.weekdayCell}>\n <Text style={calendarDropdownMetrics.weekdayLabel}>{weekday}</Text>\n </View>\n ))}\n </View>\n\n <View style={calendarDropdownMetrics.dayGrid}>\n {days.map((day) => (\n <Pressable\n key={day.date.toISOString()}\n accessibilityRole=\"button\"\n accessibilityState={{\n selected: day.isSelected,\n disabled: day.isDisabled,\n }}\n disabled={day.isDisabled}\n onPress={() => handleDayPress(day.date)}\n style={resolveDayCellStyle(day)}\n >\n <Text style={resolveDayLabelStyle(day)}>{day.date.getDate()}</Text>\n {day.isToday && day.inCurrentMonth && !day.isSelected ? (\n <View style={calendarDropdownMetrics.todayDot} />\n ) : null}\n </Pressable>\n ))}\n </View>\n </>\n ) : (\n <View style={calendarDropdownMetrics.pickerBody}>\n <View style={calendarDropdownMetrics.pickerGrid}>\n {pickerView === \"months\"\n ? monthLabels.map((monthLabel, month) => {\n const isSelected =\n activeViewDate.getFullYear() === pickerYear &&\n activeViewDate.getMonth() === month;\n const isCurrent =\n today.getFullYear() === pickerYear && today.getMonth() === month;\n const disabled = isMonthDisabled(pickerYear, month, minDate, maxDate);\n\n return (\n <Pressable\n key={monthLabel}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: isSelected, disabled }}\n disabled={disabled}\n onPress={() => handleMonthSelect(month)}\n style={[\n calendarDropdownMetrics.pickerCell,\n isSelected ? calendarDropdownMetrics.pickerCellSelected : null,\n ]}\n >\n <Text\n style={[\n calendarDropdownMetrics.pickerLabel,\n isSelected ? calendarDropdownMetrics.pickerLabelSelected : null,\n !isSelected && isCurrent\n ? calendarDropdownMetrics.pickerLabelCurrent\n : null,\n disabled ? calendarDropdownMetrics.pickerLabelDisabled : null,\n ]}\n >\n {monthLabel}\n </Text>\n </Pressable>\n );\n })\n : yearOptions.map((year) => {\n const isSelected = activeViewDate.getFullYear() === year;\n const isCurrent = today.getFullYear() === year;\n const disabled = isYearDisabled(year, minDate, maxDate);\n\n return (\n <Pressable\n key={year}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: isSelected, disabled }}\n disabled={disabled}\n onPress={() => handleYearSelect(year)}\n style={[\n calendarDropdownMetrics.pickerCell,\n isSelected ? calendarDropdownMetrics.pickerCellSelected : null,\n ]}\n >\n <Text\n style={[\n calendarDropdownMetrics.pickerLabel,\n isSelected ? calendarDropdownMetrics.pickerLabelSelected : null,\n !isSelected && isCurrent\n ? calendarDropdownMetrics.pickerLabelCurrent\n : null,\n disabled ? calendarDropdownMetrics.pickerLabelDisabled : null,\n ]}\n >\n {year}\n </Text>\n </Pressable>\n );\n })}\n </View>\n </View>\n )}\n </View>\n );\n}\n","export const CALENDAR_ICON_BODY_PATH =\n \"M6.66667 1.6665V4.99984M13.3333 1.6665V4.99984M2.5 8.33317H17.5M4.16667 3.33317H15.8333C16.7538 3.33317 17.5 4.07936 17.5 4.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V4.99984C2.5 4.07936 3.24619 3.33317 4.16667 3.33317Z\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { CALENDAR_ICON_BODY_PATH } from \"./calendarIconPaths\";\n\nexport { CALENDAR_ICON_BODY_PATH } from \"./calendarIconPaths\";\n\ninterface CalendarIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\nexport function CalendarIcon({\n size = 20,\n color = \"#C7CDD1\",\n strokeWidth = 2,\n}: CalendarIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={CALENDAR_ICON_BODY_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","import { useEffect, useRef, useState, type ComponentRef } from \"react\";\nimport {\n Modal,\n Pressable,\n StyleSheet,\n Text,\n View,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport { CalendarIcon } from \"../icons/CalendarIcon\";\nimport {\n CALENDAR_FIELD_ICON_SIZE,\n CALENDAR_FIELD_WIDTH,\n CALENDAR_PANEL_HEIGHT,\n CALENDAR_PANEL_WIDTH,\n calendarFieldMetrics,\n calendarFieldPlaceholderTypography,\n calendarFieldTypography,\n calendarLabelTypography,\n resolveCalendarDropdownLeft,\n resolveCalendarDropdownTop,\n} from \"../theme/calendar\";\nimport { getSelectFieldStyles, resolveInputVisualState, SELECT_LABEL_GAP } from \"../theme/select\";\nimport { colors } from \"../theme/tokens\";\nimport {\n formatCalendarDate,\n formatCalendarDateRange,\n type DateRange,\n} from \"../utils/calendarDays\";\nimport { getCalendarTranslations } from \"../utils/calendarLocalization\";\nimport { useCalendarLocale } from \"../utils/calendarLocaleContext\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\nimport {\n Calendar,\n type CalendarLabels,\n type CalendarRangeProps,\n type CalendarSingleProps,\n} from \"./Calendar\";\nimport { Label } from \"./Label\";\n\nexport type { CalendarLabels, DateRange };\n\ntype DatePickerFieldProps = {\n label?: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n invalid?: boolean;\n hint?: string;\n containerStyle?: StyleProp<ViewStyle>;\n className?: string;\n fieldClassName?: string;\n fieldStyle?: StyleProp<ViewStyle>;\n fieldOutlineStyle?: StyleProp<ViewStyle>;\n panelClassName?: string;\n labelClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n /** Opens the calendar popup on mount (useful for Storybook previews). */\n defaultOpen?: boolean;\n /** Closes the popup after a complete range is selected. Defaults to true in range mode. */\n closeOnRangeComplete?: boolean;\n};\n\nexport type DatePickerSingleProps = Omit<CalendarSingleProps, \"style\" | \"className\"> &\n DatePickerFieldProps & {\n mode?: \"single\";\n formatDate?: (date: Date) => string;\n };\n\nexport type DatePickerRangeProps = Omit<CalendarRangeProps, \"style\" | \"className\"> &\n DatePickerFieldProps & {\n mode: \"range\";\n formatRange?: (range: DateRange) => string;\n rangeSeparator?: string;\n };\n\nexport type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;\n\nexport function DatePicker(props: DatePickerProps) {\n const {\n label,\n placeholder,\n locale,\n labels,\n minDate,\n maxDate,\n today,\n viewDate,\n defaultViewDate,\n onViewDateChange,\n disabled = false,\n error,\n invalid,\n hint,\n containerStyle,\n className,\n fieldClassName,\n fieldStyle,\n fieldOutlineStyle,\n panelClassName,\n labelClassName,\n errorClassName,\n hintClassName,\n defaultOpen = false,\n } = props;\n const mode = props.mode ?? \"single\";\n const closeOnRangeComplete =\n props.mode === \"range\" ? (props.closeOnRangeComplete ?? true) : false;\n const resolvedLocale = useCalendarLocale(locale);\n const translations = getCalendarTranslations(resolvedLocale);\n const resolvedPlaceholder =\n placeholder ?? (mode === \"range\" ? translations.rangePlaceholder : translations.datePlaceholder);\n const wrapperRef = useRef<ComponentRef<typeof View>>(null);\n const triggerRef = useRef<ComponentRef<typeof Pressable>>(null);\n const helperRef = useRef<ComponentRef<typeof Text>>(null);\n const [open, setOpen] = useState(defaultOpen);\n const [anchor, setAnchor] = useState<{\n x: number;\n y: number;\n width: number;\n height: number;\n } | null>(null);\n\n useApplyWebClassName(wrapperRef, className);\n useApplyWebClassName(triggerRef, fieldClassName);\n useApplyWebClassName(helperRef, error ? errorClassName : hintClassName);\n\n useEffect(() => {\n if (!defaultOpen || disabled) {\n return;\n }\n\n const frame = requestAnimationFrame(() => {\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n });\n\n return () => cancelAnimationFrame(frame);\n }, [defaultOpen, disabled]);\n\n const hasError = Boolean(error) || Boolean(invalid);\n const fieldStyles = getSelectFieldStyles(\n resolveInputVisualState({\n error: hasError,\n disabled,\n }),\n );\n\n const hasValue =\n mode === \"single\"\n ? Boolean(props.value)\n : Boolean(props.mode === \"range\" && props.value?.start);\n const displayValue = (() => {\n if (props.mode === \"range\") {\n if (!props.value?.start) {\n return resolvedPlaceholder;\n }\n\n return (\n props.formatRange?.(props.value) ??\n formatCalendarDateRange(props.value, resolvedLocale, props.rangeSeparator)\n );\n }\n\n if (props.value) {\n return props.formatDate?.(props.value) ?? formatCalendarDate(props.value, resolvedLocale);\n }\n\n return resolvedPlaceholder;\n })();\n const isPlaceholder = !hasValue;\n const valueTextStyle = isPlaceholder\n ? {\n ...calendarFieldPlaceholderTypography,\n color: disabled ? colors.stormGray300 : calendarFieldPlaceholderTypography.color,\n }\n : {\n ...calendarFieldTypography,\n color: fieldStyles.value.color,\n };\n const helperMessage = error ?? hint;\n const panelWidth = CALENDAR_PANEL_WIDTH;\n const panelLeft = anchor ? resolveCalendarDropdownLeft(anchor, panelWidth) : 0;\n const dropdownTop = anchor ? resolveCalendarDropdownTop(anchor) : 0;\n const resolvedDefaultViewDate =\n defaultViewDate ??\n (props.mode === \"range\" ? props.value?.start : props.value) ??\n today;\n\n function closePicker() {\n setOpen(false);\n setAnchor(null);\n }\n\n function openPicker() {\n if (disabled) {\n return;\n }\n\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setAnchor({ x, y, width, height });\n setOpen(true);\n });\n }\n\n function handleSingleSelect(date: Date | undefined) {\n if (props.mode === \"range\") {\n return;\n }\n\n props.onChange?.(date);\n closePicker();\n }\n\n function handleRangeSelect(range: DateRange | undefined) {\n if (props.mode !== \"range\") {\n return;\n }\n\n props.onChange?.(range);\n\n if (closeOnRangeComplete && range?.end) {\n closePicker();\n }\n }\n\n const isFluidField = Boolean(fieldStyle) || Boolean(fieldOutlineStyle);\n\n return (\n <View\n ref={wrapperRef}\n style={[styles.wrapper, isFluidField && styles.wrapperFluid, containerStyle]}\n >\n {label ? (\n <Label disabled={disabled} style={styles.label} className={labelClassName}>\n {label}\n </Label>\n ) : null}\n\n <View\n style={[\n fieldStyles.outline,\n styles.fieldOutline,\n isFluidField && styles.fieldOutlineFluid,\n fieldOutlineStyle,\n ]}\n >\n <Pressable\n ref={triggerRef}\n accessibilityRole=\"button\"\n accessibilityState={{ disabled, expanded: open }}\n disabled={disabled}\n onPress={openPicker}\n style={[\n calendarFieldMetrics.container,\n isFluidField && styles.fieldContainerFluid,\n fieldStyles.container,\n fieldStyle,\n ]}\n >\n <Text\n style={[calendarFieldMetrics.value, valueTextStyle]}\n numberOfLines={1}\n >\n {displayValue}\n </Text>\n <View style={styles.iconSlot}>\n <CalendarIcon\n size={CALENDAR_FIELD_ICON_SIZE}\n color={disabled ? colors.stormGray200 : colors.stormGray150}\n />\n </View>\n </Pressable>\n </View>\n\n {helperMessage ? (\n <Text ref={helperRef} style={error ? styles.error : styles.hint}>\n {helperMessage}\n </Text>\n ) : null}\n\n <Modal visible={open} transparent animationType=\"fade\" onRequestClose={closePicker}>\n <View style={styles.modalRoot}>\n <Pressable\n style={styles.backdrop}\n onPress={closePicker}\n accessibilityRole=\"button\"\n accessibilityLabel={labels?.closeCalendar ?? translations.closeCalendar}\n />\n {anchor ? (\n <View\n style={[\n styles.panelPosition,\n {\n top: dropdownTop,\n left: panelLeft,\n width: panelWidth,\n height: CALENDAR_PANEL_HEIGHT,\n },\n ]}\n >\n {props.mode === \"range\" ? (\n <Calendar\n mode=\"range\"\n value={props.value}\n onChange={handleRangeSelect}\n viewDate={viewDate}\n defaultViewDate={resolvedDefaultViewDate}\n onViewDateChange={onViewDateChange}\n locale={resolvedLocale}\n labels={labels}\n minDate={minDate}\n maxDate={maxDate}\n today={today}\n className={panelClassName}\n />\n ) : (\n <Calendar\n mode=\"single\"\n value={props.value}\n onChange={handleSingleSelect}\n viewDate={viewDate}\n defaultViewDate={resolvedDefaultViewDate}\n onViewDateChange={onViewDateChange}\n locale={resolvedLocale}\n labels={labels}\n minDate={minDate}\n maxDate={maxDate}\n today={today}\n className={panelClassName}\n />\n )}\n </View>\n ) : null}\n </View>\n </Modal>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n wrapper: {\n width: CALENDAR_FIELD_WIDTH,\n maxWidth: \"100%\",\n gap: SELECT_LABEL_GAP,\n },\n wrapperFluid: {\n width: \"100%\",\n },\n fieldOutline: {\n width: CALENDAR_FIELD_WIDTH,\n maxWidth: \"100%\",\n alignSelf: \"flex-start\",\n },\n fieldOutlineFluid: {\n width: \"100%\",\n alignSelf: \"stretch\",\n },\n fieldContainerFluid: {\n width: \"100%\",\n minWidth: 0,\n maxWidth: \"100%\",\n alignSelf: \"stretch\",\n },\n label: {\n ...calendarLabelTypography,\n },\n iconSlot: {\n width: CALENDAR_FIELD_ICON_SIZE,\n height: CALENDAR_FIELD_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n modalRoot: {\n flex: 1,\n },\n backdrop: {\n ...StyleSheet.absoluteFillObject,\n backgroundColor: colors.transparent,\n },\n panelPosition: {\n position: \"absolute\",\n zIndex: 1,\n },\n error: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 16,\n color: colors.stormGray300,\n },\n});\n","export const LOCK_ICON_PATH =\n \"M5.83333 8.33317V5.83317C5.83333 4.7281 6.27232 3.66829 7.05372 2.88689C7.83512 2.10549 8.89493 1.6665 10 1.6665C11.1051 1.6665 12.1649 2.10549 12.9463 2.88689C13.7277 3.66829 14.1667 4.7281 14.1667 5.83317V8.33317M10.8333 13.3332C10.8333 13.7934 10.4602 14.1665 10 14.1665C9.53976 14.1665 9.16667 13.7934 9.16667 13.3332C9.16667 12.8729 9.53976 12.4998 10 12.4998C10.4602 12.4998 10.8333 12.8729 10.8333 13.3332ZM4.16667 8.33317H15.8333C16.7538 8.33317 17.5 9.07936 17.5 9.99984V16.6665C17.5 17.587 16.7538 18.3332 15.8333 18.3332H4.16667C3.24619 18.3332 2.5 17.587 2.5 16.6665V9.99984C2.5 9.07936 3.24619 8.33317 4.16667 8.33317Z\";\n","import Svg, { Path } from \"react-native-svg\";\n\nimport { LOCK_ICON_PATH } from \"./lockIconPaths\";\n\nexport { LOCK_ICON_PATH } from \"./lockIconPaths\";\n\ninterface LockIconProps {\n size?: number;\n color?: string;\n strokeWidth?: number;\n}\n\n/** Native — react-native-svg (peer dependency). */\nexport function LockIcon({\n size = 20,\n color = \"#c7cdd1\",\n strokeWidth = 2,\n}: LockIconProps) {\n return (\n <Svg width={size} height={size} viewBox=\"0 0 20 20\" fill=\"none\">\n <Path\n d={LOCK_ICON_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n"]}
|