@scripso-homepad/ui 0.3.6 → 0.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +232 -78
- package/dist/index.cjs +1128 -85
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +322 -18
- package/dist/index.d.ts +322 -18
- package/dist/index.js +1107 -89
- package/dist/index.js.map +1 -1
- package/package.json +18 -6
- package/src/components/Button.stories.tsx +77 -57
- package/src/components/Button.tsx +146 -124
- package/src/components/CountryCodeSelector.stories.tsx +61 -0
- package/src/components/CountryCodeSelector.tsx +273 -0
- package/src/components/Input.stories.tsx +117 -0
- package/src/components/Input.tsx +177 -0
- package/src/components/Label.tsx +56 -0
- package/src/components/PhoneInput.stories.tsx +85 -0
- package/src/components/PhoneInput.tsx +172 -0
- package/src/data/countries.ts +98 -0
- package/src/icons/ArrowUpRightIcon.tsx +29 -0
- package/src/icons/ArrowUpRightIcon.web.tsx +35 -0
- package/src/icons/ChevronDownIcon.tsx +29 -0
- package/src/icons/ChevronDownIcon.web.tsx +35 -0
- package/src/icons/EyeIcon.tsx +48 -0
- package/src/icons/KeyIcon.tsx +36 -0
- package/src/icons/KeyIcon.web.tsx +42 -0
- package/src/icons/arrowUpRightPath.ts +2 -0
- package/src/icons/chevronDownPath.ts +1 -0
- package/src/icons/keyIconPaths.ts +5 -0
- package/src/index.ts +42 -0
- package/src/theme/input.ts +139 -0
- package/src/theme/tokens.ts +272 -0
- package/src/utils/countryDropdownScrollStyles.ts +52 -0
- package/src/utils/countryFlag.ts +9 -0
- package/src/utils/useApplyWebClassName.ts +3 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/useApplyWebClassName.ts","../src/components/Button.tsx"],"names":["useLayoutEffect","Platform","useRef","jsx","TouchableOpacity","Text","StyleSheet"],"mappings":"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","file":"index.cjs","sourcesContent":["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 */\nexport function useApplyWebClassName(\n ref: React.RefObject<unknown>,\n className?: string,\n): void {\n useLayoutEffect(() => {\n if (Platform.OS !== \"web\" || !className?.trim()) return;\n\n const element = resolveWebElement(ref);\n if (!element) return;\n\n const classes = className.trim().split(/\\s+/);\n element.classList.add(...classes);\n\n return () => {\n element.classList.remove(...classes);\n };\n }, [ref, className]);\n}\n","import { useRef, type ComponentRef } from \"react\";\nimport {\n StyleSheet,\n Text,\n TouchableOpacity,\n type GestureResponderEvent,\n type StyleProp,\n type TextStyle,\n type ViewStyle,\n} from \"react-native\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"outline\" | \"ghost\";\nexport type ButtonSize = \"small\" | \"medium\" | \"large\";\n\nexport interface ButtonProps {\n title: string;\n onPress: (event: GestureResponderEvent) => void;\n disabled?: boolean;\n /** Visual style preset. */\n variant?: ButtonVariant;\n /** Size preset. */\n size?: ButtonSize;\n /** Additional container styles (works on web and native). */\n style?: StyleProp<ViewStyle>;\n /** Additional label styles (works on web and native). */\n textStyle?: StyleProp<TextStyle>;\n /**\n * CSS class names for the container (web: applied to the same DOM node as default styles).\n * On native: ignored unless using NativeWind with cssInterop.\n */\n className?: string;\n /**\n * CSS class names for the label (web).\n * On native: ignored unless using NativeWind with cssInterop.\n */\n textClassName?: string;\n}\n\nexport function Button({\n title,\n onPress,\n disabled = false,\n variant = \"primary\",\n size = \"medium\",\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\n useApplyWebClassName(containerRef, className);\n useApplyWebClassName(textRef, textClassName);\n\n const containerStyle = [\n styles.base,\n variantStyles[variant],\n sizeStyles[size],\n disabled && disabledVariantStyles[variant],\n style,\n ];\n\n const labelStyle = [\n textBaseStyles.base,\n textVariantStyles[variant],\n textSizeStyles[size],\n disabled && textDisabledStyles[variant],\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 <Text ref={textRef} style={labelStyle}>\n {title}\n </Text>\n </TouchableOpacity>\n );\n}\n\nconst styles = StyleSheet.create({\n base: {\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: 8,\n borderWidth: 0,\n },\n});\n\nconst variantStyles = StyleSheet.create({\n primary: {\n backgroundColor: \"#2563eb\",\n },\n secondary: {\n backgroundColor: \"#4b5563\",\n },\n outline: {\n backgroundColor: \"transparent\",\n borderWidth: 1,\n borderColor: \"#2563eb\",\n },\n ghost: {\n backgroundColor: \"transparent\",\n },\n});\n\nconst sizeStyles = StyleSheet.create({\n small: {\n paddingVertical: 8,\n paddingHorizontal: 16,\n minWidth: 96,\n },\n medium: {\n paddingVertical: 12,\n paddingHorizontal: 24,\n minWidth: 120,\n },\n large: {\n paddingVertical: 16,\n paddingHorizontal: 32,\n minWidth: 160,\n },\n});\n\nconst disabledVariantStyles = StyleSheet.create({\n primary: {\n backgroundColor: \"#93c5fd\",\n opacity: 0.7,\n },\n secondary: {\n backgroundColor: \"#9ca3af\",\n opacity: 0.7,\n },\n outline: {\n borderColor: \"#93c5fd\",\n opacity: 0.7,\n },\n ghost: {\n opacity: 0.5,\n },\n});\n\nconst textBaseStyles = StyleSheet.create({\n base: {\n fontWeight: \"600\",\n },\n});\n\nconst textVariantStyles = StyleSheet.create({\n primary: {\n color: \"#ffffff\",\n },\n secondary: {\n color: \"#ffffff\",\n },\n outline: {\n color: \"#2563eb\",\n },\n ghost: {\n color: \"#2563eb\",\n },\n});\n\nconst textSizeStyles = StyleSheet.create({\n small: {\n fontSize: 14,\n },\n medium: {\n fontSize: 16,\n },\n large: {\n fontSize: 18,\n },\n});\n\nconst textDisabledStyles = StyleSheet.create({\n primary: {\n color: \"#e5e7eb\",\n },\n secondary: {\n color: \"#f3f4f6\",\n },\n outline: {\n color: \"#93c5fd\",\n },\n ghost: {\n color: \"#93c5fd\",\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/theme/input.ts","../src/components/Label.tsx","../src/components/Input.tsx","../src/data/countries.ts","../src/icons/chevronDownPath.ts","../src/icons/ChevronDownIcon.tsx","../src/utils/countryFlag.ts","../src/utils/countryDropdownScrollStyles.ts","../src/components/CountryCodeSelector.tsx","../src/components/PhoneInput.tsx"],"names":["jsx","Svg","Path","useLayoutEffect","Platform","useRef","jsxs","TouchableOpacity","Text","View","StyleSheet","styles","isValidElement","cloneElement","useState","TextInput","Dimensions","Pressable","ScrollView","Modal"],"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 = \"#08275d\",\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\": \"#f8f9fb\",\n \"0.5\": \"#e5e9ef\",\n \"1\": \"#cdd3df\",\n \"1.5\": \"#b4bece\",\n \"2\": \"#9ca8be\",\n \"3\": \"#6a7d9e\",\n \"4\": \"#39527d\",\n \"5\": \"#08275d\",\n \"6\": \"#061f4a\",\n \"7\": \"#051738\",\n \"8\": \"#031025\",\n \"8.5\": \"#020c1c\",\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\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 — matches Figma (Medium, 100% line-height). */\nexport const labelTypography = {\n fontFamily: fonts.sans,\n fontSize: fontSize.sm,\n fontWeight: fontWeight.medium,\n lineHeight: fontSize.sm,\n letterSpacing: 0,\n} as const;\n\n/** Button label typography — matches Figma (SemiBold, 100% line-height). */\nexport const buttonTypography = {\n lg: {\n fontFamily: fonts.sans,\n fontSize: 14,\n fontWeight: fontWeight.semibold,\n lineHeight: 14,\n letterSpacing: 0,\n },\n sm: {\n fontFamily: fonts.sans,\n fontSize: 12,\n fontWeight: fontWeight.semibold,\n lineHeight: 12,\n letterSpacing: 0,\n },\n} as const;\n\nexport const shadows = {\n card: {\n shadowColor: colors.navy,\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.05,\n shadowRadius: 20,\n elevation: 2,\n },\n cardLg: {\n shadowColor: colors.navy,\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.1,\n shadowRadius: 20,\n elevation: 4,\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 */\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 const element = resolveWebElement(ref);\n if (!element) return;\n\n const classes = className.trim().split(/\\s+/);\n element.classList.add(...classes);\n\n return () => {\n element.classList.remove(...classes);\n };\n }, [ref, className, enabled]);\n}\n","import { useRef, type ComponentRef, type ReactNode } from \"react\";\nimport {\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 borderRadius: 16,\n paddingTop: 8,\n paddingRight: 8,\n paddingBottom: 8,\n paddingLeft: 24,\n paddingHorizontalCentered: 24,\n minHeight: 52,\n text: buttonTypography.lg,\n iconContainerSize: 36,\n iconContainerRadius: 12,\n iconContainerPadding: 8,\n iconSize: 20,\n },\n sm: {\n borderRadius: 12,\n paddingTop: 8,\n paddingRight: 8,\n paddingBottom: 8,\n paddingLeft: 16,\n paddingHorizontalCentered: 16,\n minHeight: 48,\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 useApplyWebClassName(containerRef, className);\n useApplyWebClassName(textRef, textClassName);\n\n const label = typeof children !== \"undefined\" ? children : title;\n const hasCustomChildren = typeof children !== \"undefined\";\n const hasIcon = showIcon || icon != null;\n const iconNode =\n icon ?? <ArrowUpRightIcon size={metrics.iconSize} color={preset.iconColor} />;\n\n const containerStyle = [\n styles.base,\n {\n borderRadius: metrics.borderRadius,\n backgroundColor: preset.backgroundColor,\n minHeight: metrics.minHeight,\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 !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 },\n disabled: {\n opacity: 0.6,\n },\n label: {},\n labelCentered: {\n textAlign: \"center\",\n },\n labelWithIcon: {\n flex: 1,\n flexShrink: 1,\n marginRight: 8,\n },\n iconContainer: {\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\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 = 52;\nexport const INPUT_ICON_SIZE = 20;\nexport const INPUT_ICON_GAP = 10;\nexport const INPUT_OUTLINE_WIDTH = 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\nexport function getInputFieldStyles(state: InputVisualState): FieldStyleSet {\n const outlineBase: ViewStyle = {\n borderRadius: radii.lg + INPUT_OUTLINE_WIDTH,\n padding: INPUT_OUTLINE_WIDTH,\n backgroundColor: colors.transparent,\n };\n\n switch (state) {\n case \"disabled\":\n return {\n outline: outlineBase,\n container: {\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: {\n ...outlineBase,\n backgroundColor: colors.inputOutlineError,\n },\n container: {\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: {\n ...outlineBase,\n backgroundColor: colors.inputOutlineFocus,\n },\n container: {\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: outlineBase,\n container: {\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 container: {\n flexDirection: \"row\",\n alignItems: \"center\",\n height: INPUT_HEIGHT,\n minHeight: INPUT_HEIGHT,\n maxHeight: INPUT_HEIGHT,\n borderRadius: radii.lg,\n padding: 16,\n gap: INPUT_ICON_GAP,\n ...(Platform.OS === \"web\"\n ? ({ boxSizing: \"border-box\" } as ViewStyle)\n : null),\n },\n input: {\n flex: 1,\n alignSelf: \"stretch\",\n fontFamily: fonts.sans,\n fontSize: fontSize.md,\n fontWeight: fontWeight.medium,\n lineHeight: fontSize.md,\n paddingVertical: 0,\n paddingHorizontal: 0,\n margin: 0,\n borderWidth: 0,\n backgroundColor: colors.transparent,\n ...(Platform.OS === \"web\"\n ? ({\n height: \"100%\",\n minHeight: 0,\n outlineStyle: \"none\",\n } 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 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 {\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 /** 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 labelClassName?: string;\n inputClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n}\n\nexport function Input({\n label,\n leftIcon,\n rightIcon,\n error,\n hint,\n containerStyle,\n style,\n className,\n labelClassName,\n inputClassName,\n errorClassName,\n hintClassName,\n editable = true,\n onFocus,\n onBlur,\n ...props\n}: InputProps) {\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 visualState = resolveInputVisualState({\n focused,\n error: Boolean(error),\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 const helperMessage = error ?? hint;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label disabled={isDisabled} className={labelClassName}>\n {label}\n </Label>\n ) : null}\n <View style={fieldStyles.outline}>\n <View style={[inputFieldMetrics.container, fieldStyles.container]}>\n {leftIcon ? (\n <View style={styles.iconSlot}>{renderInputIcon(leftIcon, iconColor)}</View>\n ) : null}\n <TextInput\n ref={inputRef}\n style={[\n inputFieldMetrics.input,\n fieldStyles.text,\n style,\n ]}\n placeholderTextColor={fieldStyles.placeholder}\n editable={editable}\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n />\n {rightIcon ? (\n <View style={styles.iconSlot}>{renderInputIcon(rightIcon, iconColor)}</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 gap: spacing.sm,\n },\n iconSlot: {\n width: INPUT_ICON_SIZE,\n height: INPUT_ICON_SIZE,\n alignItems: \"center\",\n justifyContent: \"center\",\n flexShrink: 0,\n },\n error: {\n fontSize: 12,\n lineHeight: 12,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 12,\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","export const CHEVRON_DOWN_PATH = \"M4 6L8 10L12 6\";\n","import Svg, { Path } from \"react-native-svg\";\nimport { CHEVRON_DOWN_PATH } from \"./chevronDownPath\";\n\nexport { CHEVRON_DOWN_PATH } 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 return (\n <Svg width={size} height={size} viewBox=\"0 0 16 16\" fill=\"none\">\n <Path\n d={CHEVRON_DOWN_PATH}\n stroke={color}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </Svg>\n );\n}\n","/** ISO 3166-1 alpha-2 country code → flag emoji (cross-platform). */\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","import { Platform } from \"react-native\";\nimport { colors } from \"../theme/tokens\";\n\nexport const COUNTRY_DROPDOWN_SCROLL_CLASS = \"hp-country-dropdown-scroll\";\n\nconst STYLE_ID = \"hp-country-dropdown-scroll-styles\";\n\nexport const countryDropdownScrollCss = `\n .${COUNTRY_DROPDOWN_SCROLL_CLASS} {\n scrollbar-width: thin;\n scrollbar-color: ${colors.stormGray300} transparent;\n overflow-y: auto;\n }\n\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar {\n width: 4px;\n }\n\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar-corner {\n background: transparent;\n }\n\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar-button,\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar-button:single-button,\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar-button:vertical:start:decrement,\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar-button:vertical:end:increment {\n display: none;\n width: 0;\n height: 0;\n -webkit-appearance: none;\n appearance: none;\n }\n\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar-track {\n background: transparent;\n }\n\n .${COUNTRY_DROPDOWN_SCROLL_CLASS}::-webkit-scrollbar-thumb {\n background-color: ${colors.stormGray300};\n border-radius: 9999px;\n }\n`;\n\nexport function ensureCountryDropdownScrollStyles(): 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 = countryDropdownScrollCss;\n document.head.appendChild(style);\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 { colors, fontSize, fontWeight, radii, spacing, fonts } from \"../theme/tokens\";\nimport { countryCodeToFlagEmoji } from \"../utils/countryFlag\";\nimport {\n COUNTRY_DROPDOWN_SCROLL_CLASS,\n ensureCountryDropdownScrollStyles,\n} from \"../utils/countryDropdownScrollStyles\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\n\nconst DROPDOWN_GAP = 10;\nconst DROPDOWN_HEIGHT = 186;\nconst DROPDOWN_PADDING = 8;\nconst OPTION_GAP = 10;\nconst OPTION_HEIGHT = 35;\nconst TRIGGER_HEIGHT = 52;\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 <Text style={styles.flag}>{countryCodeToFlagEmoji(item.code)}</Text>\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 <Text style={styles.flag}>{countryCodeToFlagEmoji(selected.code)}</Text>\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 flag: {\n fontSize: 18,\n lineHeight: 22,\n },\n dialCode: {\n fontSize: fontSize.md,\n fontWeight: fontWeight.medium,\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 resolveInputVisualState,\n} from \"../theme/input\";\nimport { colors, spacing } from \"../theme/tokens\";\nimport { useApplyWebClassName } from \"../utils/useApplyWebClassName\";\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 inputClassName?: string;\n errorClassName?: string;\n hintClassName?: string;\n}\n\nexport function PhoneInput({\n label,\n countryCode,\n onCountryCodeChange,\n error,\n hint,\n containerStyle,\n style,\n className,\n labelClassName,\n inputClassName,\n errorClassName,\n hintClassName,\n editable = true,\n onFocus,\n onBlur,\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 const helperMessage = error ?? hint;\n\n return (\n <View ref={wrapperRef} style={[styles.wrapper, containerStyle]}>\n {label ? (\n <Label disabled={isDisabled} className={labelClassName}>\n {label}\n </Label>\n ) : null}\n <View style={styles.row}>\n <CountryCodeSelector\n value={countryCode}\n onValueChange={onCountryCodeChange}\n disabled={isDisabled}\n style={styles.countrySelector}\n />\n <View style={styles.phoneColumn}>\n <View style={[phoneFieldStyles.outline, styles.phoneOutline]}>\n <View\n style={[\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={phoneFieldStyles.placeholder}\n editable={editable}\n onFocus={handleFocus}\n onBlur={handleBlur}\n accessibilityState={{ disabled: isDisabled }}\n {...props}\n />\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 </View>\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: \"flex-start\",\n gap: INPUT_ICON_GAP,\n },\n countrySelector: {\n flexShrink: 0,\n alignSelf: \"flex-start\",\n },\n phoneColumn: {\n flex: 1,\n gap: spacing.sm,\n },\n phoneOutline: {\n width: \"100%\",\n },\n phoneField: {\n flex: 1,\n },\n error: {\n fontSize: 12,\n lineHeight: 12,\n color: colors.inputError,\n },\n hint: {\n fontSize: 12,\n lineHeight: 12,\n color: colors.stormGray300,\n },\n});\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,31 +1,335 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { GestureResponderEvent, StyleProp, ViewStyle, TextStyle, TextInputProps, TextProps } from 'react-native';
|
|
3
4
|
|
|
4
|
-
type ButtonVariant = "
|
|
5
|
-
type ButtonSize = "
|
|
5
|
+
type ButtonVariant = "white" | "primary" | "green" | "gray";
|
|
6
|
+
type ButtonSize = "lg" | "sm";
|
|
6
7
|
interface ButtonProps {
|
|
7
|
-
title
|
|
8
|
+
title?: string;
|
|
9
|
+
children?: ReactNode;
|
|
8
10
|
onPress: (event: GestureResponderEvent) => void;
|
|
9
11
|
disabled?: boolean;
|
|
10
|
-
/** Visual style preset. */
|
|
11
12
|
variant?: ButtonVariant;
|
|
12
|
-
/** Size preset. */
|
|
13
13
|
size?: ButtonSize;
|
|
14
|
-
|
|
14
|
+
showIcon?: boolean;
|
|
15
|
+
/** Custom icon inside the badge. Defaults to `ArrowUpRightIcon` when `showIcon` is true. */
|
|
16
|
+
icon?: ReactNode;
|
|
15
17
|
style?: StyleProp<ViewStyle>;
|
|
16
|
-
/** Additional label styles (works on web and native). */
|
|
17
18
|
textStyle?: StyleProp<TextStyle>;
|
|
18
|
-
/**
|
|
19
|
-
* CSS class names for the container (web: applied to the same DOM node as default styles).
|
|
20
|
-
* On native: ignored unless using NativeWind with cssInterop.
|
|
21
|
-
*/
|
|
22
19
|
className?: string;
|
|
23
|
-
/**
|
|
24
|
-
* CSS class names for the label (web).
|
|
25
|
-
* On native: ignored unless using NativeWind with cssInterop.
|
|
26
|
-
*/
|
|
27
20
|
textClassName?: string;
|
|
28
21
|
}
|
|
29
|
-
declare function Button({ title, onPress, disabled, variant, size, style, textStyle, className, textClassName, }: ButtonProps): react.JSX.Element;
|
|
22
|
+
declare function Button({ title, children, onPress, disabled, variant, size, showIcon, icon, style, textStyle, className, textClassName, }: ButtonProps): react.JSX.Element;
|
|
30
23
|
|
|
31
|
-
|
|
24
|
+
interface InputProps extends TextInputProps {
|
|
25
|
+
/** Optional field label rendered above the input. */
|
|
26
|
+
label?: string;
|
|
27
|
+
leftIcon?: ReactNode;
|
|
28
|
+
rightIcon?: ReactNode;
|
|
29
|
+
/** Validation or helper error message. Shown instead of `hint` when set. */
|
|
30
|
+
error?: string;
|
|
31
|
+
/** Helper text shown below the input when there is no error. */
|
|
32
|
+
hint?: string;
|
|
33
|
+
containerStyle?: StyleProp<ViewStyle>;
|
|
34
|
+
style?: StyleProp<TextStyle>;
|
|
35
|
+
className?: string;
|
|
36
|
+
labelClassName?: string;
|
|
37
|
+
inputClassName?: string;
|
|
38
|
+
errorClassName?: string;
|
|
39
|
+
hintClassName?: string;
|
|
40
|
+
}
|
|
41
|
+
declare function Input({ label, leftIcon, rightIcon, error, hint, containerStyle, style, className, labelClassName, inputClassName, errorClassName, hintClassName, editable, onFocus, onBlur, ...props }: InputProps): react.JSX.Element;
|
|
42
|
+
|
|
43
|
+
interface PhoneInputProps extends Omit<TextInputProps, "style"> {
|
|
44
|
+
label?: string;
|
|
45
|
+
countryCode?: string;
|
|
46
|
+
onCountryCodeChange?: (countryCode: string) => void;
|
|
47
|
+
error?: string;
|
|
48
|
+
hint?: string;
|
|
49
|
+
containerStyle?: StyleProp<ViewStyle>;
|
|
50
|
+
style?: StyleProp<TextStyle>;
|
|
51
|
+
className?: string;
|
|
52
|
+
labelClassName?: string;
|
|
53
|
+
inputClassName?: string;
|
|
54
|
+
errorClassName?: string;
|
|
55
|
+
hintClassName?: string;
|
|
56
|
+
}
|
|
57
|
+
declare function PhoneInput({ label, countryCode, onCountryCodeChange, error, hint, containerStyle, style, className, labelClassName, inputClassName, errorClassName, hintClassName, editable, onFocus, onBlur, ...props }: PhoneInputProps): react.JSX.Element;
|
|
58
|
+
|
|
59
|
+
type Country = {
|
|
60
|
+
code: string;
|
|
61
|
+
name: string;
|
|
62
|
+
dialCode: string;
|
|
63
|
+
};
|
|
64
|
+
declare const defaultCountry: Country;
|
|
65
|
+
declare const countries: Country[];
|
|
66
|
+
declare function findCountry(code: string): Country;
|
|
67
|
+
|
|
68
|
+
interface CountryCodeSelectorProps {
|
|
69
|
+
value?: string;
|
|
70
|
+
onValueChange?: (countryCode: string) => void;
|
|
71
|
+
/** Country list (defaults to built-in list). */
|
|
72
|
+
options?: Country[];
|
|
73
|
+
disabled?: boolean;
|
|
74
|
+
style?: StyleProp<ViewStyle>;
|
|
75
|
+
className?: string;
|
|
76
|
+
}
|
|
77
|
+
declare function CountryCodeSelector({ value, onValueChange, options, disabled, style, className, }: CountryCodeSelectorProps): react.JSX.Element;
|
|
78
|
+
|
|
79
|
+
interface LabelProps extends TextProps {
|
|
80
|
+
children: ReactNode;
|
|
81
|
+
/** Render as a required field indicator. */
|
|
82
|
+
required?: boolean;
|
|
83
|
+
disabled?: boolean;
|
|
84
|
+
style?: StyleProp<TextStyle>;
|
|
85
|
+
className?: string;
|
|
86
|
+
}
|
|
87
|
+
declare function Label({ children, required, disabled, style, className, ...props }: LabelProps): react.JSX.Element;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* HomePad design tokens — aligned with the Figma design system
|
|
91
|
+
* (navy / storm gray / slate-blue palette from HomePad brand).
|
|
92
|
+
*/
|
|
93
|
+
/** Storm Gray scale — Figma steps 0 → 8.5 */
|
|
94
|
+
declare const stormGray: {
|
|
95
|
+
readonly "0": "#fbfcfc";
|
|
96
|
+
readonly "0.5": "#eceef0";
|
|
97
|
+
readonly "1": "#dadde0";
|
|
98
|
+
readonly "1.5": "#c7cdd1";
|
|
99
|
+
readonly "2": "#b5bcc1";
|
|
100
|
+
readonly "3": "#8f9aa3";
|
|
101
|
+
readonly "4": "#6a7984";
|
|
102
|
+
readonly "5": "#455765";
|
|
103
|
+
readonly "6": "#374651";
|
|
104
|
+
readonly "7": "#29343d";
|
|
105
|
+
readonly "8": "#1c2328";
|
|
106
|
+
readonly "8.5": "#151a1e";
|
|
107
|
+
};
|
|
108
|
+
type StormGrayStep = keyof typeof stormGray;
|
|
109
|
+
/** Navy scale — Figma steps 0 → 8.5 */
|
|
110
|
+
declare const navy: {
|
|
111
|
+
readonly "0": "#f8f9fb";
|
|
112
|
+
readonly "0.5": "#e5e9ef";
|
|
113
|
+
readonly "1": "#cdd3df";
|
|
114
|
+
readonly "1.5": "#b4bece";
|
|
115
|
+
readonly "2": "#9ca8be";
|
|
116
|
+
readonly "3": "#6a7d9e";
|
|
117
|
+
readonly "4": "#39527d";
|
|
118
|
+
readonly "5": "#08275d";
|
|
119
|
+
readonly "6": "#061f4a";
|
|
120
|
+
readonly "7": "#051738";
|
|
121
|
+
readonly "8": "#031025";
|
|
122
|
+
readonly "8.5": "#020c1c";
|
|
123
|
+
};
|
|
124
|
+
type NavyStep = keyof typeof navy;
|
|
125
|
+
/** Ruby Red scale — Figma steps 0 → 8.5 */
|
|
126
|
+
declare const rubyRed: {
|
|
127
|
+
readonly "0": "#fff5f6";
|
|
128
|
+
readonly "0.5": "#f7dddf";
|
|
129
|
+
readonly "1": "#efc4c8";
|
|
130
|
+
readonly "1.5": "#e7acb1";
|
|
131
|
+
readonly "2": "#df939a";
|
|
132
|
+
readonly "3": "#ce626d";
|
|
133
|
+
readonly "4": "#be313f";
|
|
134
|
+
readonly "5": "#ae0011";
|
|
135
|
+
readonly "6": "#8b000e";
|
|
136
|
+
readonly "7": "#68000a";
|
|
137
|
+
readonly "8": "#460007";
|
|
138
|
+
readonly "8.5": "#340005";
|
|
139
|
+
};
|
|
140
|
+
type RubyRedStep = keyof typeof rubyRed;
|
|
141
|
+
/** Emerald Green scale — Figma steps 0 → 8.5 */
|
|
142
|
+
declare const emeraldGreen: {
|
|
143
|
+
readonly "0": "#f0fbf5";
|
|
144
|
+
readonly "0.5": "#dcf2e5";
|
|
145
|
+
readonly "1": "#c8e8d5";
|
|
146
|
+
readonly "1.5": "#b4dfc5";
|
|
147
|
+
readonly "2": "#a0d5b5";
|
|
148
|
+
readonly "3": "#77c394";
|
|
149
|
+
readonly "4": "#4fb074";
|
|
150
|
+
readonly "5": "#279d54";
|
|
151
|
+
readonly "6": "#1f7e43";
|
|
152
|
+
readonly "7": "#175e32";
|
|
153
|
+
readonly "8": "#103f22";
|
|
154
|
+
readonly "8.5": "#0c2f19";
|
|
155
|
+
};
|
|
156
|
+
type EmeraldGreenStep = keyof typeof emeraldGreen;
|
|
157
|
+
/** Figma brand palette — primary swatch per color family */
|
|
158
|
+
declare const brand: {
|
|
159
|
+
readonly slateBlue: "#182e3c";
|
|
160
|
+
readonly stormGray: "#455765";
|
|
161
|
+
readonly navy: "#08275d";
|
|
162
|
+
readonly rubyRed: "#ae0011";
|
|
163
|
+
readonly emeraldGreen: "#279d54";
|
|
164
|
+
};
|
|
165
|
+
declare const colors: {
|
|
166
|
+
readonly slateBlue: "#182e3c";
|
|
167
|
+
readonly emeraldGreen0: "#f0fbf5";
|
|
168
|
+
readonly emeraldGreen50: "#dcf2e5";
|
|
169
|
+
readonly emeraldGreen100: "#c8e8d5";
|
|
170
|
+
readonly emeraldGreen150: "#b4dfc5";
|
|
171
|
+
readonly emeraldGreen200: "#a0d5b5";
|
|
172
|
+
readonly emeraldGreen300: "#77c394";
|
|
173
|
+
readonly emeraldGreen400: "#4fb074";
|
|
174
|
+
readonly emeraldGreen500: "#279d54";
|
|
175
|
+
readonly emeraldGreen600: "#1f7e43";
|
|
176
|
+
readonly emeraldGreen700: "#175e32";
|
|
177
|
+
readonly emeraldGreen800: "#103f22";
|
|
178
|
+
readonly emeraldGreen850: "#0c2f19";
|
|
179
|
+
/** Primary brand emerald green — Figma Emerald Green 5 */
|
|
180
|
+
readonly emeraldGreen: "#279d54";
|
|
181
|
+
readonly rubyRed0: "#fff5f6";
|
|
182
|
+
readonly rubyRed50: "#f7dddf";
|
|
183
|
+
readonly rubyRed100: "#efc4c8";
|
|
184
|
+
readonly rubyRed150: "#e7acb1";
|
|
185
|
+
readonly rubyRed200: "#df939a";
|
|
186
|
+
readonly rubyRed300: "#ce626d";
|
|
187
|
+
readonly rubyRed400: "#be313f";
|
|
188
|
+
readonly rubyRed500: "#ae0011";
|
|
189
|
+
readonly rubyRed600: "#8b000e";
|
|
190
|
+
readonly rubyRed700: "#68000a";
|
|
191
|
+
readonly rubyRed800: "#460007";
|
|
192
|
+
readonly rubyRed850: "#340005";
|
|
193
|
+
/** Primary brand ruby red — Figma Ruby Red 5 */
|
|
194
|
+
readonly rubyRed: "#ae0011";
|
|
195
|
+
readonly navy0: "#f8f9fb";
|
|
196
|
+
readonly navy50: "#e5e9ef";
|
|
197
|
+
readonly navy100: "#cdd3df";
|
|
198
|
+
readonly navy150: "#b4bece";
|
|
199
|
+
readonly navy200: "#9ca8be";
|
|
200
|
+
readonly navy300: "#6a7d9e";
|
|
201
|
+
readonly navy400: "#39527d";
|
|
202
|
+
readonly navy500: "#08275d";
|
|
203
|
+
readonly navy600: "#061f4a";
|
|
204
|
+
readonly navy700: "#051738";
|
|
205
|
+
readonly navy800: "#031025";
|
|
206
|
+
readonly navy850: "#020c1c";
|
|
207
|
+
/** Primary brand navy — Figma Navy 5 */
|
|
208
|
+
readonly navy: "#08275d";
|
|
209
|
+
readonly stormGray0: "#fbfcfc";
|
|
210
|
+
readonly stormGray50: "#eceef0";
|
|
211
|
+
readonly stormGray100: "#dadde0";
|
|
212
|
+
readonly stormGray150: "#c7cdd1";
|
|
213
|
+
readonly stormGray200: "#b5bcc1";
|
|
214
|
+
readonly stormGray300: "#8f9aa3";
|
|
215
|
+
readonly stormGray400: "#6a7984";
|
|
216
|
+
readonly stormGray500: "#455765";
|
|
217
|
+
/** Figma brand swatch "Storm Gray" — same as `stormGray500` */
|
|
218
|
+
readonly stormGrayBrand: "#455765";
|
|
219
|
+
readonly stormGray600: "#374651";
|
|
220
|
+
readonly stormGray700: "#29343d";
|
|
221
|
+
readonly stormGray800: "#1c2328";
|
|
222
|
+
readonly stormGray850: "#151a1e";
|
|
223
|
+
/** @deprecated Use `stormGray0` */
|
|
224
|
+
readonly storm0: "#fbfcfc";
|
|
225
|
+
/** @deprecated Use `stormGray50` */
|
|
226
|
+
readonly storm50: "#eceef0";
|
|
227
|
+
/** @deprecated Use `stormGray200` */
|
|
228
|
+
readonly storm200: "#b5bcc1";
|
|
229
|
+
/** @deprecated Use `stormGray300` */
|
|
230
|
+
readonly storm300: "#8f9aa3";
|
|
231
|
+
/** @deprecated Use `stormGray500` */
|
|
232
|
+
readonly storm500: "#455765";
|
|
233
|
+
/** @deprecated Use `stormGray700` */
|
|
234
|
+
readonly storm700: "#29343d";
|
|
235
|
+
/** @deprecated Use `stormGray850` */
|
|
236
|
+
readonly storm900: "#151a1e";
|
|
237
|
+
readonly countrySelectorSelectedBg: "#eceef099";
|
|
238
|
+
readonly white: "#ffffff";
|
|
239
|
+
readonly error: "#dc2626";
|
|
240
|
+
readonly errorDark: "#b3261e";
|
|
241
|
+
readonly errorLight: "#fee2e2";
|
|
242
|
+
/** @deprecated Use `rubyRed` */
|
|
243
|
+
readonly inputError: "#ae0011";
|
|
244
|
+
readonly inputOutlineFocus: "#e5e9ef";
|
|
245
|
+
readonly inputOutlineError: "#f7dddf";
|
|
246
|
+
readonly warning: "#92400e";
|
|
247
|
+
readonly warningBg: "#fef3c7";
|
|
248
|
+
readonly success: "#28a745";
|
|
249
|
+
readonly successMuted: "#9fd4a8";
|
|
250
|
+
/** @deprecated Use `emeraldGreen` */
|
|
251
|
+
readonly green: "#279d54";
|
|
252
|
+
readonly transparent: "transparent";
|
|
253
|
+
};
|
|
254
|
+
declare const radii: {
|
|
255
|
+
readonly sm: 8;
|
|
256
|
+
readonly md: 12;
|
|
257
|
+
readonly lg: 16;
|
|
258
|
+
readonly xl: 20;
|
|
259
|
+
readonly full: 9999;
|
|
260
|
+
};
|
|
261
|
+
declare const spacing: {
|
|
262
|
+
readonly xs: 4;
|
|
263
|
+
readonly sm: 8;
|
|
264
|
+
readonly md: 12;
|
|
265
|
+
readonly lg: 16;
|
|
266
|
+
readonly xl: 24;
|
|
267
|
+
readonly xxl: 32;
|
|
268
|
+
};
|
|
269
|
+
declare const fontSize: {
|
|
270
|
+
readonly xs: 11;
|
|
271
|
+
readonly sm: 12;
|
|
272
|
+
readonly md: 14;
|
|
273
|
+
readonly base: 16;
|
|
274
|
+
readonly lg: 18;
|
|
275
|
+
readonly xl: 24;
|
|
276
|
+
readonly xxl: 32;
|
|
277
|
+
};
|
|
278
|
+
declare const fontWeight: {
|
|
279
|
+
regular: "400";
|
|
280
|
+
medium: "500";
|
|
281
|
+
semibold: "600";
|
|
282
|
+
bold: "700";
|
|
283
|
+
};
|
|
284
|
+
declare const fonts: {
|
|
285
|
+
readonly sans: "Noto Sans Armenian";
|
|
286
|
+
};
|
|
287
|
+
/** Input label typography — matches Figma (Medium, 100% line-height). */
|
|
288
|
+
declare const labelTypography: {
|
|
289
|
+
readonly fontFamily: "Noto Sans Armenian";
|
|
290
|
+
readonly fontSize: 12;
|
|
291
|
+
readonly fontWeight: "500";
|
|
292
|
+
readonly lineHeight: 12;
|
|
293
|
+
readonly letterSpacing: 0;
|
|
294
|
+
};
|
|
295
|
+
/** Button label typography — matches Figma (SemiBold, 100% line-height). */
|
|
296
|
+
declare const buttonTypography: {
|
|
297
|
+
readonly lg: {
|
|
298
|
+
readonly fontFamily: "Noto Sans Armenian";
|
|
299
|
+
readonly fontSize: 14;
|
|
300
|
+
readonly fontWeight: "600";
|
|
301
|
+
readonly lineHeight: 14;
|
|
302
|
+
readonly letterSpacing: 0;
|
|
303
|
+
};
|
|
304
|
+
readonly sm: {
|
|
305
|
+
readonly fontFamily: "Noto Sans Armenian";
|
|
306
|
+
readonly fontSize: 12;
|
|
307
|
+
readonly fontWeight: "600";
|
|
308
|
+
readonly lineHeight: 12;
|
|
309
|
+
readonly letterSpacing: 0;
|
|
310
|
+
};
|
|
311
|
+
};
|
|
312
|
+
declare const shadows: {
|
|
313
|
+
readonly card: {
|
|
314
|
+
readonly shadowColor: "#08275d";
|
|
315
|
+
readonly shadowOffset: {
|
|
316
|
+
readonly width: 0;
|
|
317
|
+
readonly height: 4;
|
|
318
|
+
};
|
|
319
|
+
readonly shadowOpacity: 0.05;
|
|
320
|
+
readonly shadowRadius: 20;
|
|
321
|
+
readonly elevation: 2;
|
|
322
|
+
};
|
|
323
|
+
readonly cardLg: {
|
|
324
|
+
readonly shadowColor: "#08275d";
|
|
325
|
+
readonly shadowOffset: {
|
|
326
|
+
readonly width: 0;
|
|
327
|
+
readonly height: 4;
|
|
328
|
+
};
|
|
329
|
+
readonly shadowOpacity: 0.1;
|
|
330
|
+
readonly shadowRadius: 20;
|
|
331
|
+
readonly elevation: 4;
|
|
332
|
+
};
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
export { Button, type ButtonProps, type ButtonSize, type ButtonVariant, type Country, CountryCodeSelector, type CountryCodeSelectorProps, type EmeraldGreenStep, Input, type InputProps, Label, type LabelProps, type NavyStep, PhoneInput, type PhoneInputProps, type RubyRedStep, type StormGrayStep, brand, buttonTypography, colors, countries, defaultCountry, emeraldGreen, findCountry, fontSize, fontWeight, fonts, labelTypography, navy, radii, rubyRed, shadows, spacing, stormGray };
|