@elvora/react-native 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/dist/index.cjs +5785 -0
  4. package/dist/index.cjs.map +1 -0
  5. package/dist/index.d.cts +1253 -0
  6. package/dist/index.d.ts +1253 -0
  7. package/dist/index.js +5683 -0
  8. package/dist/index.js.map +1 -0
  9. package/package.json +88 -0
  10. package/src/Accordion.tsx +11 -0
  11. package/src/Affix.tsx +20 -0
  12. package/src/Alert.tsx +102 -0
  13. package/src/Anchor.tsx +58 -0
  14. package/src/AutoComplete.tsx +122 -0
  15. package/src/Avatar.tsx +58 -0
  16. package/src/BackTop.tsx +71 -0
  17. package/src/Backdrop.tsx +32 -0
  18. package/src/Badge.tsx +87 -0
  19. package/src/Box.tsx +67 -0
  20. package/src/Breadcrumb.tsx +46 -0
  21. package/src/Button.test.tsx +39 -0
  22. package/src/Button.tsx +127 -0
  23. package/src/ButtonGroup.tsx +74 -0
  24. package/src/Calendar.tsx +165 -0
  25. package/src/Card.tsx +69 -0
  26. package/src/Carousel.tsx +99 -0
  27. package/src/Cascader.tsx +160 -0
  28. package/src/Checkbox.tsx +85 -0
  29. package/src/ChipInput.tsx +130 -0
  30. package/src/Collapse.tsx +120 -0
  31. package/src/ColorPicker.tsx +114 -0
  32. package/src/Container.tsx +22 -0
  33. package/src/DataGrid.tsx +170 -0
  34. package/src/DatePicker.tsx +195 -0
  35. package/src/DateRangePicker.tsx +249 -0
  36. package/src/Descriptions.tsx +98 -0
  37. package/src/Divider.tsx +32 -0
  38. package/src/Drawer.tsx +103 -0
  39. package/src/Dropdown.tsx +15 -0
  40. package/src/ElvoraProvider.tsx +31 -0
  41. package/src/Empty.tsx +34 -0
  42. package/src/FloatButton.tsx +78 -0
  43. package/src/Form.tsx +119 -0
  44. package/src/Grid.tsx +68 -0
  45. package/src/Icon.tsx +49 -0
  46. package/src/IconButton.tsx +28 -0
  47. package/src/Image.tsx +68 -0
  48. package/src/ImageList.tsx +58 -0
  49. package/src/Input.tsx +87 -0
  50. package/src/Label.tsx +46 -0
  51. package/src/List.tsx +82 -0
  52. package/src/Mentions.tsx +148 -0
  53. package/src/Menu.tsx +77 -0
  54. package/src/Modal.tsx +114 -0
  55. package/src/NumberInput.tsx +156 -0
  56. package/src/Pagination.tsx +148 -0
  57. package/src/PaginationVariants.tsx +64 -0
  58. package/src/Popover.tsx +74 -0
  59. package/src/ProForm.tsx +219 -0
  60. package/src/ProLayout.tsx +151 -0
  61. package/src/ProTable.tsx +91 -0
  62. package/src/Progress.tsx +92 -0
  63. package/src/QRCode.tsx +65 -0
  64. package/src/Radio.tsx +98 -0
  65. package/src/Rate.tsx +66 -0
  66. package/src/Result.tsx +64 -0
  67. package/src/Segmented.tsx +75 -0
  68. package/src/Select.tsx +146 -0
  69. package/src/Skeleton.tsx +49 -0
  70. package/src/Slider.tsx +122 -0
  71. package/src/SpeedDial.tsx +87 -0
  72. package/src/Spinner.tsx +29 -0
  73. package/src/Splitter.tsx +91 -0
  74. package/src/Stack.tsx +38 -0
  75. package/src/Statistic.tsx +60 -0
  76. package/src/Stepper.tsx +113 -0
  77. package/src/Steps.tsx +146 -0
  78. package/src/Switch.tsx +52 -0
  79. package/src/Table.tsx +178 -0
  80. package/src/Tabs.tsx +122 -0
  81. package/src/Tag.tsx +83 -0
  82. package/src/Textarea.tsx +22 -0
  83. package/src/TimePicker.tsx +187 -0
  84. package/src/Timeline.tsx +92 -0
  85. package/src/Toast.tsx +140 -0
  86. package/src/ToggleButton.tsx +66 -0
  87. package/src/Tooltip.tsx +56 -0
  88. package/src/Tour.tsx +118 -0
  89. package/src/Transfer.tsx +219 -0
  90. package/src/Tree.tsx +144 -0
  91. package/src/TreeSelect.tsx +221 -0
  92. package/src/Upload.tsx +109 -0
  93. package/src/Watermark.tsx +76 -0
  94. package/src/index.ts +221 -0
  95. package/src/smoke.test.tsx +113 -0
  96. package/src/test/react-native-stub.tsx +413 -0
  97. package/src/test/react-native-svg-stub.tsx +33 -0
  98. package/src/test/setup.ts +7 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ElvoraProvider.tsx","../src/Button.tsx","../src/IconButton.tsx","../src/Input.tsx","../src/Textarea.tsx","../src/Icon.tsx","../src/Checkbox.tsx","../src/Radio.tsx","../src/Switch.tsx","../src/Select.tsx","../src/Label.tsx","../src/Divider.tsx","../src/Avatar.tsx","../src/Badge.tsx","../src/Tag.tsx","../src/Spinner.tsx","../src/Progress.tsx","../src/Tooltip.tsx","../src/Box.tsx","../src/Stack.tsx","../src/Grid.tsx","../src/Container.tsx","../src/Card.tsx","../src/Alert.tsx","../src/Skeleton.tsx","../src/Empty.tsx","../src/Result.tsx","../src/Modal.tsx","../src/Drawer.tsx","../src/Popover.tsx","../src/Toast.tsx","../src/Tabs.tsx","../src/Menu.tsx","../src/Dropdown.tsx","../src/Breadcrumb.tsx","../src/Pagination.tsx","../src/Steps.tsx","../src/Anchor.tsx","../src/BackTop.tsx","../src/Form.tsx","../src/NumberInput.tsx","../src/Segmented.tsx","../src/Slider.tsx","../src/Rate.tsx","../src/Upload.tsx","../src/AutoComplete.tsx","../src/ColorPicker.tsx","../src/DatePicker.tsx","../src/TimePicker.tsx","../src/DateRangePicker.tsx","../src/Cascader.tsx","../src/TreeSelect.tsx","../src/Mentions.tsx","../src/Transfer.tsx","../src/Table.tsx","../src/Tree.tsx","../src/List.tsx","../src/Descriptions.tsx","../src/Calendar.tsx","../src/Statistic.tsx","../src/Carousel.tsx","../src/Image.tsx","../src/Timeline.tsx","../src/Collapse.tsx","../src/Accordion.tsx","../src/Tour.tsx","../src/FloatButton.tsx","../src/Watermark.tsx","../src/QRCode.tsx","../src/Splitter.tsx","../src/Affix.tsx","../src/SpeedDial.tsx","../src/Backdrop.tsx","../src/ImageList.tsx","../src/PaginationVariants.tsx","../src/Stepper.tsx","../src/ToggleButton.tsx","../src/ButtonGroup.tsx","../src/ChipInput.tsx","../src/ProTable.tsx","../src/ProForm.tsx","../src/ProLayout.tsx","../src/DataGrid.tsx"],"names":["Button","jsx","forwardRef","IconButton","Input","useState","Textarea","Icon","jsxs","sizeMap","Checkbox","Pressable","View","Text","createContext","useControllableState","Radio","useContext","Switch","RNSwitch","Select","defaultInputProps","Label","Divider","Avatar","Badge","statusIntent","Tag","sizePx","Spinner","ActivityIndicator","Progress","Modal","Box","Stack","HStack","VStack","Grid","GridItem","Container","Card","CardHeader","CardBody","CardFooter","Alert","Skeleton","useRef","Animated","useEffect","Empty","Result","RNModal","Drawer","Popover","Fragment","useMemo","useCallback","NumberInput","TextInput","FlatList","format","pad","ScrollView","defaultFormat","startOfMonth","addMonths","buildMatrix","isSameDay","Image","RNImage","useWindowDimensions","PanResponder","Children","isValidElement","props","cloneElement","defaultCompare"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext, useContext, useMemo, type ReactNode } from 'react';\r\nimport type { ElvoraTheme, Direction } from '@elvora/core';\r\nimport { defaultTheme } from '@elvora/themes';\r\n\r\ninterface ElvoraContextValue {\r\n theme: ElvoraTheme;\r\n direction: Direction;\r\n}\r\n\r\nconst ElvoraContext = createContext<ElvoraContextValue | null>(null);\r\n\r\nexport interface ElvoraProviderProps {\r\n theme?: ElvoraTheme;\r\n direction?: Direction;\r\n children: ReactNode;\r\n}\r\n\r\nexport function ElvoraProvider({ theme = defaultTheme, direction = 'ltr', children }: ElvoraProviderProps) {\r\n const value = useMemo<ElvoraContextValue>(() => ({ theme, direction }), [theme, direction]);\r\n return <ElvoraContext.Provider value={value}>{children}</ElvoraContext.Provider>;\r\n}\r\n\r\nexport function useElvoraContext(): ElvoraContextValue {\r\n const ctx = useContext(ElvoraContext);\r\n if (!ctx) return { theme: defaultTheme, direction: 'ltr' };\r\n return ctx;\r\n}\r\n\r\nexport function useTheme(): ElvoraTheme {\r\n return useElvoraContext().theme;\r\n}\r\n","import { forwardRef, useState, type ReactNode } from 'react';\r\nimport {\r\n Pressable,\r\n Text,\r\n ActivityIndicator,\r\n View,\r\n type GestureResponderEvent,\r\n type PressableProps,\r\n type StyleProp,\r\n type ViewStyle,\r\n type TextStyle,\r\n} from 'react-native';\r\nimport { defaultButtonProps, getButtonStyle, type ButtonOwnProps } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface ButtonProps extends ButtonOwnProps, Omit<PressableProps, 'children' | 'disabled' | 'style'> {\r\n children?: ReactNode;\r\n leftIcon?: ReactNode;\r\n rightIcon?: ReactNode;\r\n onPress?: (event: GestureResponderEvent) => void;\r\n style?: StyleProp<ViewStyle>;\r\n textStyle?: StyleProp<TextStyle>;\r\n}\r\n\r\n/**\r\n * React Native Button. Same headless contract as the web Button, rendered\r\n * with `Pressable`. Identical variants/sizes/states.\r\n */\r\nexport const Button = forwardRef<View, ButtonProps>(function Button(props, ref) {\r\n const {\r\n variant = defaultButtonProps.variant,\r\n size = defaultButtonProps.size,\r\n intent,\r\n fullWidth = defaultButtonProps.fullWidth,\r\n isLoading = defaultButtonProps.isLoading,\r\n isDisabled = defaultButtonProps.isDisabled,\r\n loadingText = defaultButtonProps.loadingText,\r\n children,\r\n leftIcon,\r\n rightIcon,\r\n onPress,\r\n style,\r\n textStyle,\r\n ...rest\r\n } = props;\r\n\r\n const theme = useTheme();\r\n const [isPressed, setPressed] = useState(false);\r\n\r\n const inert = isDisabled || isLoading;\r\n\r\n const styleResult = getButtonStyle({\r\n theme,\r\n variant,\r\n size,\r\n fullWidth,\r\n isLoading,\r\n isDisabled,\r\n isPressed,\r\n isHovered: false,\r\n isFocusVisible: false,\r\n intent,\r\n });\r\n\r\n // Translate the headless web-style descriptor into RN-friendly ViewStyle.\r\n const rootStyle: ViewStyle = {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n gap: Number(styleResult.root.gap) || 8,\r\n paddingHorizontal: Number(styleResult.root.paddingLeft) || 16,\r\n paddingVertical: Number(styleResult.root.paddingTop) || 8,\r\n minHeight: Number(styleResult.root.minHeight) || 40,\r\n borderRadius: parseInt(String(styleResult.root.borderRadius), 10) || 6,\r\n borderWidth: Number(styleResult.root.borderWidth) || 0,\r\n borderColor: String(styleResult.root.borderColor || 'transparent'),\r\n backgroundColor: String(styleResult.root.backgroundColor || 'transparent'),\r\n opacity: Number(styleResult.root.opacity) || 1,\r\n alignSelf: fullWidth ? 'stretch' : 'flex-start',\r\n };\r\n\r\n return (\r\n <Pressable\r\n ref={ref}\r\n accessibilityRole=\"button\"\r\n accessibilityState={{ disabled: inert, busy: isLoading }}\r\n accessibilityLabel={isLoading ? loadingText : undefined}\r\n disabled={inert}\r\n onPressIn={(e) => {\r\n setPressed(true);\r\n rest.onPressIn?.(e);\r\n }}\r\n onPressOut={(e) => {\r\n setPressed(false);\r\n rest.onPressOut?.(e);\r\n }}\r\n onPress={(e) => {\r\n if (inert) return;\r\n onPress?.(e);\r\n }}\r\n style={[rootStyle, style]}\r\n {...rest}\r\n >\r\n {isLoading ? (\r\n <View style={{ position: 'absolute', alignItems: 'center', justifyContent: 'center' }}>\r\n <ActivityIndicator size=\"small\" color={styleResult.spinnerColor} />\r\n </View>\r\n ) : null}\r\n {leftIcon}\r\n <Text\r\n accessible={false}\r\n style={[\r\n {\r\n color: String(styleResult.label.color),\r\n fontSize: Number(styleResult.label.fontSize) || 14,\r\n fontWeight: String(styleResult.label.fontWeight) as TextStyle['fontWeight'],\r\n opacity: Number(styleResult.label.opacity) ?? 1,\r\n },\r\n textStyle,\r\n ]}\r\n >\r\n {children}\r\n </Text>\r\n {rightIcon}\r\n </Pressable>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { type View } from 'react-native';\r\nimport type { ElvoraSize } from '@elvora/core';\r\nimport { Button, type ButtonProps } from './Button';\r\n\r\nexport interface IconButtonProps extends Omit<ButtonProps, 'children' | 'leftIcon' | 'rightIcon'> {\r\n icon: ReactNode;\r\n /** Required: announce icon-only button to screen readers. */\r\n accessibilityLabel: string;\r\n}\r\n\r\nconst sizePx: Record<ElvoraSize, number> = { xs: 28, sm: 36, md: 44, lg: 52, xl: 60 };\r\n\r\nexport const IconButton = forwardRef<View, IconButtonProps>(function IconButton(props, ref) {\r\n const { icon, size = 'md', accessibilityLabel, style, ...rest } = props;\r\n const px = sizePx[size];\r\n return (\r\n <Button\r\n ref={ref}\r\n size={size}\r\n accessibilityLabel={accessibilityLabel}\r\n style={[{ width: px, minHeight: px, paddingHorizontal: 0 }, style]}\r\n {...rest}\r\n >\r\n {icon}\r\n </Button>\r\n );\r\n});\r\n","import { forwardRef, useState } from 'react';\r\nimport {\r\n TextInput,\r\n type StyleProp,\r\n type TextInputProps,\r\n type ViewStyle,\r\n} from 'react-native';\r\nimport { defaultInputProps, type InputOwnProps } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface InputProps\r\n extends InputOwnProps,\r\n Omit<TextInputProps, 'editable' | 'style'> {\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizeMap = {\r\n xs: { padX: 8, padY: 4, font: 12, height: 28 },\r\n sm: { padX: 10, padY: 6, font: 13, height: 36 },\r\n md: { padX: 12, padY: 8, font: 14, height: 44 },\r\n lg: { padX: 14, padY: 10, font: 16, height: 52 },\r\n xl: { padX: 16, padY: 12, font: 18, height: 60 },\r\n};\r\n\r\n/** React Native text input with Elvora styling. */\r\nexport const Input = forwardRef<TextInput, InputProps>(function Input(props, ref) {\r\n const {\r\n size = defaultInputProps.size,\r\n status = defaultInputProps.status,\r\n isReadOnly = defaultInputProps.isReadOnly,\r\n isDisabled = defaultInputProps.isDisabled,\r\n isInvalid = defaultInputProps.isInvalid,\r\n style,\r\n onFocus,\r\n onBlur,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [focused, setFocused] = useState(false);\r\n const dims = sizeMap[size];\r\n\r\n const invalid = isInvalid || status === 'error';\r\n const intentForStatus =\r\n status === 'error' || invalid\r\n ? theme.colors.intent.danger\r\n : status === 'success'\r\n ? theme.colors.intent.success\r\n : status === 'warning'\r\n ? theme.colors.intent.warning\r\n : status === 'info'\r\n ? theme.colors.intent.info\r\n : theme.colors.intent.primary;\r\n\r\n const borderColor = focused ? intentForStatus.border : invalid ? theme.colors.intent.danger.border : theme.colors.border;\r\n\r\n return (\r\n <TextInput\r\n ref={ref}\r\n editable={!isDisabled && !isReadOnly}\r\n placeholderTextColor={theme.colors.fgMuted}\r\n style={[\r\n {\r\n minHeight: dims.height,\r\n paddingHorizontal: dims.padX,\r\n paddingVertical: dims.padY,\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: 1,\r\n borderColor,\r\n backgroundColor: isDisabled ? theme.colors.surface : theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n fontSize: dims.font,\r\n opacity: isDisabled ? 0.6 : 1,\r\n },\r\n style,\r\n ]}\r\n onFocus={(e) => {\r\n setFocused(true);\r\n onFocus?.(e);\r\n }}\r\n onBlur={(e) => {\r\n setFocused(false);\r\n onBlur?.(e);\r\n }}\r\n {...rest}\r\n />\r\n );\r\n});\r\n","import { forwardRef } from 'react';\r\nimport { type TextInput } from 'react-native';\r\nimport { Input, type InputProps } from './Input';\r\n\r\nexport interface TextareaProps extends InputProps {\r\n rows?: number;\r\n}\r\n\r\n/** Multi-line input. Sets `multiline` and numberOfLines on the RN TextInput. */\r\nexport const Textarea = forwardRef<TextInput, TextareaProps>(function Textarea(props, ref) {\r\n const { rows = 3, style, ...rest } = props;\r\n return (\r\n <Input\r\n ref={ref}\r\n multiline\r\n numberOfLines={rows}\r\n textAlignVertical=\"top\"\r\n style={[{ minHeight: rows * 24 + 16 }, style]}\r\n {...rest}\r\n />\r\n );\r\n});\r\n","import { forwardRef } from 'react';\r\nimport { getIcon, icons, type IconName } from '@elvora/icons';\r\nimport Svg, { Path } from 'react-native-svg';\r\n\r\nexport interface IconProps {\r\n /** Icon name from `@elvora/icons`. */\r\n name: IconName;\r\n /** Pixel size for both width/height. Defaults to 16. */\r\n size?: number;\r\n /** Stroke or fill color. Defaults to `currentColor`-equivalent (black). */\r\n color?: string;\r\n /** Accessible label. When omitted, the icon is treated as decorative. */\r\n label?: string;\r\n}\r\n\r\n/**\r\n * Renders an icon from the Elvora icon set using `react-native-svg`. Install\r\n * `react-native-svg` in your app for this to work.\r\n */\r\nexport const Icon = forwardRef<unknown, IconProps>(function Icon(props, _ref) {\r\n const { name, size = 16, color = '#000', label } = props;\r\n if (!(name in icons)) {\r\n if (typeof console !== 'undefined') {\r\n console.warn(`[elvora] Icon \"${String(name)}\" is not registered.`);\r\n }\r\n return null;\r\n }\r\n const def = getIcon(name);\r\n const a11y = label\r\n ? { accessible: true, accessibilityRole: 'image' as const, accessibilityLabel: label }\r\n : { accessible: false, accessibilityElementsHidden: true, importantForAccessibility: 'no-hide-descendants' as const };\r\n\r\n if (def.stroke) {\r\n return (\r\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" {...a11y}>\r\n {def.d2 ? (\r\n <Path d={def.d2} stroke={color} strokeWidth={def.strokeWidth ?? 2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n ) : null}\r\n <Path d={def.d} stroke={color} strokeWidth={def.strokeWidth ?? 2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </Svg>\r\n );\r\n }\r\n return (\r\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" fill={color} {...a11y}>\r\n {def.d2 ? <Path d={def.d2} /> : null}\r\n <Path d={def.d} />\r\n </Svg>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { Pressable, Text, View, type PressableProps, type StyleProp, type ViewStyle } from 'react-native';\r\nimport { useControllableState } from '@elvora/core/react';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface CheckboxProps extends Omit<PressableProps, 'onPress' | 'children'> {\r\n size?: 'sm' | 'md' | 'lg';\r\n isDisabled?: boolean;\r\n isInvalid?: boolean;\r\n isChecked?: boolean;\r\n defaultChecked?: boolean;\r\n isIndeterminate?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizeMap = {\r\n sm: { box: 16, icon: 12, font: 13 },\r\n md: { box: 20, icon: 14, font: 14 },\r\n lg: { box: 24, icon: 16, font: 16 },\r\n};\r\n\r\nexport const Checkbox = forwardRef<View, CheckboxProps>(function Checkbox(props, ref) {\r\n const {\r\n size = 'md',\r\n isDisabled,\r\n isInvalid,\r\n isChecked,\r\n defaultChecked = false,\r\n isIndeterminate = false,\r\n onChange,\r\n children,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [checked, setChecked] = useControllableState({\r\n value: isChecked,\r\n defaultValue: defaultChecked,\r\n onChange,\r\n });\r\n const dims = sizeMap[size];\r\n const isActive = Boolean(checked) || isIndeterminate;\r\n\r\n return (\r\n <Pressable\r\n ref={ref}\r\n accessibilityRole=\"checkbox\"\r\n accessibilityState={{ checked: isIndeterminate ? 'mixed' : Boolean(checked), disabled: isDisabled }}\r\n disabled={isDisabled}\r\n onPress={() => setChecked(!checked)}\r\n style={[\r\n { flexDirection: 'row', alignItems: 'center', gap: 8, opacity: isDisabled ? 0.5 : 1 },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n <View\r\n style={{\r\n width: dims.box,\r\n height: dims.box,\r\n borderWidth: 1.5,\r\n borderColor: isInvalid\r\n ? theme.colors.intent.danger.border\r\n : isActive\r\n ? theme.colors.intent.primary.solid\r\n : theme.colors.borderStrong,\r\n borderRadius: 4,\r\n backgroundColor: isActive ? theme.colors.intent.primary.solid : theme.colors.surfaceElevated,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {isIndeterminate ? (\r\n <Icon name=\"minus\" size={dims.icon} color={theme.colors.intent.primary.solidFg} />\r\n ) : checked ? (\r\n <Icon name=\"check\" size={dims.icon} color={theme.colors.intent.primary.solidFg} />\r\n ) : null}\r\n </View>\r\n {children ? <Text style={{ color: theme.colors.fg, fontSize: dims.font }}>{children}</Text> : null}\r\n </Pressable>\r\n );\r\n});\r\n","import { createContext, forwardRef, useContext, type ReactNode } from 'react';\r\nimport { Pressable, Text, View, type PressableProps, type StyleProp, type ViewStyle } from 'react-native';\r\nimport { useControllableState } from '@elvora/core/react';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\ninterface RadioGroupContextValue {\r\n name: string;\r\n value: string | undefined;\r\n setValue: (v: string) => void;\r\n isDisabled: boolean;\r\n size: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\r\n\r\nexport interface RadioGroupProps {\r\n name: string;\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n isDisabled?: boolean;\r\n size?: 'sm' | 'md' | 'lg';\r\n label?: string;\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nexport function RadioGroup(props: RadioGroupProps) {\r\n const { name, value, defaultValue, onChange, isDisabled = false, size = 'md', label, children, style } = props;\r\n const [v, setV] = useControllableState({ value, defaultValue, onChange });\r\n return (\r\n <RadioGroupContext.Provider value={{ name, value: v ?? undefined, setValue: setV, isDisabled, size }}>\r\n <View accessibilityRole=\"radiogroup\" accessibilityLabel={label} style={[{ gap: 8 }, style]}>\r\n {children}\r\n </View>\r\n </RadioGroupContext.Provider>\r\n );\r\n}\r\n\r\nexport interface RadioProps extends Omit<PressableProps, 'onPress' | 'children'> {\r\n value: string;\r\n isDisabled?: boolean;\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizeMap = {\r\n sm: { outer: 16, inner: 7, font: 13 },\r\n md: { outer: 20, inner: 9, font: 14 },\r\n lg: { outer: 24, inner: 11, font: 16 },\r\n};\r\n\r\nexport const Radio = forwardRef<View, RadioProps>(function Radio(props, ref) {\r\n const { value, isDisabled, children, style, ...rest } = props;\r\n const ctx = useContext(RadioGroupContext);\r\n const theme = useTheme();\r\n if (!ctx) throw new Error('Radio must be rendered inside a RadioGroup');\r\n const dims = sizeMap[ctx.size];\r\n const isChecked = ctx.value === value;\r\n const disabled = Boolean(ctx.isDisabled || isDisabled);\r\n\r\n return (\r\n <Pressable\r\n ref={ref}\r\n accessibilityRole=\"radio\"\r\n accessibilityState={{ selected: isChecked, disabled }}\r\n disabled={disabled}\r\n onPress={() => ctx.setValue(value)}\r\n style={[{ flexDirection: 'row', alignItems: 'center', gap: 8, opacity: disabled ? 0.5 : 1 }, style]}\r\n {...rest}\r\n >\r\n <View\r\n style={{\r\n width: dims.outer,\r\n height: dims.outer,\r\n borderWidth: 1.5,\r\n borderColor: isChecked ? theme.colors.intent.primary.solid : theme.colors.borderStrong,\r\n borderRadius: dims.outer / 2,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {isChecked ? (\r\n <View\r\n style={{\r\n width: dims.inner,\r\n height: dims.inner,\r\n borderRadius: dims.inner / 2,\r\n backgroundColor: theme.colors.intent.primary.solid,\r\n }}\r\n />\r\n ) : null}\r\n </View>\r\n {children ? <Text style={{ color: theme.colors.fg, fontSize: dims.font }}>{children}</Text> : null}\r\n </Pressable>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport {\r\n Pressable,\r\n Switch as RNSwitch,\r\n Text,\r\n View,\r\n type PressableProps,\r\n type StyleProp,\r\n type ViewStyle,\r\n} from 'react-native';\r\nimport { useControllableState } from '@elvora/core/react';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface SwitchProps extends Omit<PressableProps, 'onPress' | 'children'> {\r\n isDisabled?: boolean;\r\n isChecked?: boolean;\r\n defaultChecked?: boolean;\r\n onChange?: (checked: boolean) => void;\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nexport const Switch = forwardRef<View, SwitchProps>(function Switch(props, ref) {\r\n const { isDisabled = false, isChecked, defaultChecked = false, onChange, children, style, ...rest } = props;\r\n const theme = useTheme();\r\n const [checked, setChecked] = useControllableState({\r\n value: isChecked,\r\n defaultValue: defaultChecked,\r\n onChange,\r\n });\r\n\r\n return (\r\n <Pressable\r\n ref={ref}\r\n accessibilityRole=\"switch\"\r\n accessibilityState={{ checked: Boolean(checked), disabled: isDisabled }}\r\n disabled={isDisabled}\r\n onPress={() => setChecked(!checked)}\r\n style={[{ flexDirection: 'row', alignItems: 'center', gap: 8 }, style]}\r\n {...rest}\r\n >\r\n <RNSwitch\r\n value={Boolean(checked)}\r\n disabled={isDisabled}\r\n onValueChange={setChecked}\r\n trackColor={{ false: theme.colors.intent.neutral.subtle, true: theme.colors.intent.primary.solid }}\r\n thumbColor=\"#fff\"\r\n />\r\n {children ? <Text style={{ color: theme.colors.fg, fontSize: 14 }}>{children}</Text> : null}\r\n </Pressable>\r\n );\r\n});\r\n","import { forwardRef, useState } from 'react';\r\nimport {\r\n FlatList,\r\n Modal,\r\n Pressable,\r\n Text,\r\n View,\r\n type ListRenderItem,\r\n type StyleProp,\r\n type ViewStyle,\r\n} from 'react-native';\r\nimport { defaultInputProps, type InputOwnProps } from '@elvora/core';\r\nimport { useControllableState } from '@elvora/core/react';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface SelectOption {\r\n label: string;\r\n value: string;\r\n disabled?: boolean;\r\n}\r\n\r\nexport interface SelectProps extends InputOwnProps {\r\n options: SelectOption[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n placeholder?: string;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizeMap = {\r\n xs: { padX: 8, padY: 6, font: 12, height: 28 },\r\n sm: { padX: 10, padY: 8, font: 13, height: 36 },\r\n md: { padX: 12, padY: 10, font: 14, height: 44 },\r\n lg: { padX: 14, padY: 12, font: 16, height: 52 },\r\n xl: { padX: 16, padY: 14, font: 18, height: 60 },\r\n};\r\n\r\n/**\r\n * React Native Select. Opens a modal sheet with the option list — the most\r\n * platform-appropriate variant for cross-platform consistency.\r\n */\r\nexport const Select = forwardRef<View, SelectProps>(function Select(props, ref) {\r\n const {\r\n options,\r\n value,\r\n defaultValue,\r\n onChange,\r\n placeholder = 'Select…',\r\n size = defaultInputProps.size,\r\n status = defaultInputProps.status,\r\n isDisabled = defaultInputProps.isDisabled,\r\n isInvalid = defaultInputProps.isInvalid,\r\n style,\r\n } = props;\r\n const theme = useTheme();\r\n const [selected, setSelected] = useControllableState({ value, defaultValue, onChange });\r\n const [open, setOpen] = useState(false);\r\n const dims = sizeMap[size];\r\n\r\n const invalid = isInvalid || status === 'error';\r\n const current = options.find((o) => o.value === selected);\r\n\r\n const renderItem: ListRenderItem<SelectOption> = ({ item }) => {\r\n const isActive = item.value === selected;\r\n return (\r\n <Pressable\r\n accessibilityRole=\"menuitem\"\r\n accessibilityState={{ selected: isActive, disabled: item.disabled }}\r\n disabled={item.disabled}\r\n onPress={() => {\r\n setSelected(item.value);\r\n setOpen(false);\r\n }}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 16,\r\n paddingVertical: 12,\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : 'transparent',\r\n opacity: item.disabled ? 0.5 : 1,\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fg, fontSize: 14 }}>{item.label}</Text>\r\n {isActive ? <Icon name=\"check\" size={16} color={theme.colors.intent.primary.solid} /> : null}\r\n </Pressable>\r\n );\r\n };\r\n\r\n return (\r\n <View ref={ref} style={style}>\r\n <Pressable\r\n accessibilityRole=\"combobox\"\r\n accessibilityState={{ disabled: isDisabled, expanded: open }}\r\n accessibilityValue={{ text: current?.label ?? placeholder }}\r\n disabled={isDisabled}\r\n onPress={() => setOpen(true)}\r\n style={{\r\n minHeight: dims.height,\r\n paddingHorizontal: dims.padX,\r\n paddingVertical: dims.padY,\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: 1,\r\n borderColor: invalid ? theme.colors.intent.danger.border : theme.colors.border,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n }}\r\n >\r\n <Text style={{ color: current ? theme.colors.fg : theme.colors.fgMuted, fontSize: dims.font }}>\r\n {current?.label ?? placeholder}\r\n </Text>\r\n <Icon name=\"chevronDown\" size={16} color={theme.colors.fgMuted} />\r\n </Pressable>\r\n\r\n <Modal visible={open} transparent animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n onPress={() => setOpen(false)}\r\n style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.4)', justifyContent: 'flex-end' }}\r\n >\r\n <Pressable\r\n onPress={(e) => e.stopPropagation()}\r\n style={{\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderTopLeftRadius: 16,\r\n borderTopRightRadius: 16,\r\n maxHeight: '60%',\r\n paddingVertical: 8,\r\n }}\r\n >\r\n <FlatList\r\n data={options}\r\n keyExtractor={(item) => item.value}\r\n renderItem={renderItem}\r\n ItemSeparatorComponent={() => <View style={{ height: 1, backgroundColor: theme.colors.border }} />}\r\n />\r\n </Pressable>\r\n </Pressable>\r\n </Modal>\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { Text, View, type StyleProp, type TextStyle, type ViewStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface LabelProps {\r\n isRequired?: boolean;\r\n size?: 'xs' | 'sm' | 'md' | 'lg';\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n textStyle?: StyleProp<TextStyle>;\r\n}\r\n\r\nconst sizeMap = {\r\n xs: { fontSize: 11 },\r\n sm: { fontSize: 12 },\r\n md: { fontSize: 14 },\r\n lg: { fontSize: 16 },\r\n};\r\n\r\n/** Form label for React Native. */\r\nexport const Label = forwardRef<View, LabelProps>(function Label(props, ref) {\r\n const { isRequired, size = 'md', children, style, textStyle } = props;\r\n const theme = useTheme();\r\n const dims = sizeMap[size];\r\n return (\r\n <View ref={ref} style={[{ flexDirection: 'row', alignItems: 'center' }, style]}>\r\n <Text\r\n style={[\r\n {\r\n color: theme.colors.fg,\r\n fontSize: dims.fontSize,\r\n fontWeight: '500',\r\n },\r\n textStyle,\r\n ]}\r\n >\r\n {children}\r\n </Text>\r\n {isRequired ? (\r\n <Text accessibilityElementsHidden style={{ color: theme.colors.intent.danger.fg, marginLeft: 2 }}>\r\n *\r\n </Text>\r\n ) : null}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { Text, View, type StyleProp, type ViewStyle } from 'react-native';\r\nimport type { Orientation } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface DividerProps {\r\n orientation?: Orientation;\r\n thickness?: number;\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\n/** Visual separator for React Native. */\r\nexport const Divider = forwardRef<View, DividerProps>(function Divider(props, ref) {\r\n const { orientation = 'horizontal', thickness = 1, children, style } = props;\r\n const theme = useTheme();\r\n\r\n if (children) {\r\n return (\r\n <View ref={ref} style={[{ flexDirection: 'row', alignItems: 'center', gap: 12 }, style]}>\r\n <View style={{ flex: 1, height: thickness, backgroundColor: theme.colors.border }} />\r\n <Text style={{ color: theme.colors.fgMuted, fontSize: 13 }}>{children}</Text>\r\n <View style={{ flex: 1, height: thickness, backgroundColor: theme.colors.border }} />\r\n </View>\r\n );\r\n }\r\n\r\n if (orientation === 'vertical') {\r\n return <View ref={ref} accessibilityRole=\"none\" style={[{ width: thickness, alignSelf: 'stretch', backgroundColor: theme.colors.border }, style]} />;\r\n }\r\n return <View ref={ref} accessibilityRole=\"none\" style={[{ height: thickness, alignSelf: 'stretch', backgroundColor: theme.colors.border }, style]} />;\r\n});\r\n","import { forwardRef, useState, type ReactNode } from 'react';\r\nimport { Image, Text, View, type ImageSourcePropType, type StyleProp, type ViewStyle } from 'react-native';\r\nimport type { ElvoraSize } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface AvatarProps {\r\n src?: string | ImageSourcePropType;\r\n alt?: string;\r\n name?: string;\r\n size?: ElvoraSize;\r\n shape?: 'circle' | 'square';\r\n fallback?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizeMap: Record<ElvoraSize, number> = { xs: 20, sm: 28, md: 36, lg: 48, xl: 64 };\r\n\r\nexport const Avatar = forwardRef<View, AvatarProps>(function Avatar(props, ref) {\r\n const { src, alt, name, size = 'md', shape = 'circle', fallback, style } = props;\r\n const theme = useTheme();\r\n const [imgFailed, setImgFailed] = useState(false);\r\n const px = sizeMap[size];\r\n const initials = (name ?? '')\r\n .split(' ')\r\n .map((p) => p[0])\r\n .filter(Boolean)\r\n .slice(0, 2)\r\n .join('')\r\n .toUpperCase();\r\n\r\n const container: ViewStyle = {\r\n width: px,\r\n height: px,\r\n borderRadius: shape === 'circle' ? px / 2 : Number(theme.radii.md),\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n overflow: 'hidden',\r\n };\r\n\r\n const showImage = src && !imgFailed;\r\n const source: ImageSourcePropType | undefined =\r\n typeof src === 'string' ? { uri: src } : (src as ImageSourcePropType | undefined);\r\n\r\n return (\r\n <View ref={ref} accessibilityLabel={alt ?? name} style={[container, style]}>\r\n {showImage && source ? (\r\n <Image source={source} onError={() => setImgFailed(true)} style={{ width: '100%', height: '100%' }} />\r\n ) : initials ? (\r\n <Text style={{ color: theme.colors.intent.neutral.fg, fontWeight: '600', fontSize: Math.max(10, Math.floor(px * 0.4)) }}>\r\n {initials}\r\n </Text>\r\n ) : (\r\n fallback ?? <Text style={{ color: theme.colors.intent.neutral.fg }}>?</Text>\r\n )}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { Text, View, type StyleProp, type ViewStyle } from 'react-native';\r\nimport type { ElvoraSize, ElvoraStatus, ElvoraTone } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface BadgeProps {\r\n status?: ElvoraStatus;\r\n size?: Exclude<ElvoraSize, 'xl'>;\r\n tone?: ElvoraTone;\r\n isDot?: boolean;\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizeMap = {\r\n xs: { padX: 4, padY: 1, font: 10, dotSize: 6 },\r\n sm: { padX: 6, padY: 2, font: 11, dotSize: 8 },\r\n md: { padX: 8, padY: 2, font: 12, dotSize: 10 },\r\n lg: { padX: 10, padY: 4, font: 13, dotSize: 12 },\r\n};\r\n\r\nconst statusIntent = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n} as const;\r\n\r\nexport const Badge = forwardRef<View, BadgeProps>(function Badge(props, ref) {\r\n const { status = 'neutral', size = 'sm', tone = 'subtle', isDot = false, children, style } = props;\r\n const theme = useTheme();\r\n const intent = theme.colors.intent[statusIntent[status]];\r\n const dims = sizeMap[size];\r\n\r\n let bg = intent.subtle;\r\n let fg = intent.fg;\r\n let border = 'transparent';\r\n if (tone === 'solid') {\r\n bg = intent.solid;\r\n fg = intent.solidFg;\r\n } else if (tone === 'outline') {\r\n bg = 'transparent';\r\n fg = intent.fg;\r\n border = intent.border;\r\n }\r\n\r\n if (isDot) {\r\n return (\r\n <View\r\n ref={ref}\r\n accessibilityRole=\"image\"\r\n style={[\r\n {\r\n width: dims.dotSize,\r\n height: dims.dotSize,\r\n borderRadius: dims.dotSize / 2,\r\n backgroundColor: bg,\r\n borderWidth: tone === 'outline' ? 1 : 0,\r\n borderColor: border,\r\n },\r\n style,\r\n ]}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <View\r\n ref={ref}\r\n style={[\r\n {\r\n paddingHorizontal: dims.padX,\r\n paddingVertical: dims.padY,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: bg,\r\n borderWidth: tone === 'outline' ? 1 : 0,\r\n borderColor: border,\r\n alignSelf: 'flex-start',\r\n },\r\n style,\r\n ]}\r\n >\r\n <Text style={{ color: fg, fontSize: dims.font, fontWeight: '500' }}>{children}</Text>\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { Pressable, Text, View, type StyleProp, type ViewStyle } from 'react-native';\r\nimport type { ElvoraSize, ElvoraStatus, ElvoraTone } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface TagProps {\r\n status?: ElvoraStatus;\r\n size?: Exclude<ElvoraSize, 'xl'>;\r\n tone?: ElvoraTone;\r\n onClose?: () => void;\r\n closeLabel?: string;\r\n children?: ReactNode;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizeMap = {\r\n xs: { padX: 6, padY: 2, font: 11 },\r\n sm: { padX: 8, padY: 3, font: 12 },\r\n md: { padX: 10, padY: 4, font: 13 },\r\n lg: { padX: 12, padY: 6, font: 14 },\r\n};\r\n\r\nconst statusIntent = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n} as const;\r\n\r\nexport const Tag = forwardRef<View, TagProps>(function Tag(props, ref) {\r\n const { status = 'neutral', size = 'sm', tone = 'subtle', onClose, closeLabel = 'Remove', children, style } = props;\r\n const theme = useTheme();\r\n const intent = theme.colors.intent[statusIntent[status]];\r\n const dims = sizeMap[size];\r\n\r\n let bg = intent.subtle;\r\n let fg = intent.fg;\r\n let border = 'transparent';\r\n if (tone === 'solid') {\r\n bg = intent.solid;\r\n fg = intent.solidFg;\r\n } else if (tone === 'outline') {\r\n bg = 'transparent';\r\n fg = intent.fg;\r\n border = intent.border;\r\n }\r\n\r\n return (\r\n <View\r\n ref={ref}\r\n style={[\r\n {\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: dims.padX,\r\n paddingVertical: dims.padY,\r\n backgroundColor: bg,\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: tone === 'outline' ? 1 : 0,\r\n borderColor: border,\r\n alignSelf: 'flex-start',\r\n gap: 6,\r\n },\r\n style,\r\n ]}\r\n >\r\n <Text style={{ color: fg, fontSize: dims.font, fontWeight: '500' }}>{children}</Text>\r\n {onClose ? (\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={closeLabel}\r\n onPress={onClose}\r\n hitSlop={6}\r\n style={{ marginLeft: 2 }}\r\n >\r\n <Icon name=\"x\" size={dims.font} color={fg} />\r\n </Pressable>\r\n ) : null}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef } from 'react';\r\nimport { ActivityIndicator, View, type StyleProp, type ViewStyle } from 'react-native';\r\nimport type { ElvoraSize } from '@elvora/core';\r\n\r\nexport interface SpinnerProps {\r\n size?: ElvoraSize | number;\r\n color?: string;\r\n /** Accessible label. */\r\n label?: string;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst sizePx: Record<ElvoraSize, number> = { xs: 12, sm: 14, md: 16, lg: 20, xl: 28 };\r\n\r\nexport const Spinner = forwardRef<View, SpinnerProps>(function Spinner(props, ref) {\r\n const { size = 'md', color = '#0072F5', label = 'Loading', style } = props;\r\n const px = typeof size === 'number' ? size : sizePx[size];\r\n return (\r\n <View\r\n ref={ref}\r\n accessible\r\n accessibilityRole=\"progressbar\"\r\n accessibilityLabel={label}\r\n style={style}\r\n >\r\n <ActivityIndicator size={px <= 18 ? 'small' : 'large'} color={color} />\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, useEffect, useRef } from 'react';\r\nimport { Animated, Easing, View, type StyleProp, type ViewStyle } from 'react-native';\r\nimport type { ElvoraSize, ElvoraStatus } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface ProgressProps {\r\n value?: number;\r\n max?: number;\r\n min?: number;\r\n size?: Exclude<ElvoraSize, 'xl'>;\r\n status?: ElvoraStatus;\r\n label?: string;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\nconst heights = { xs: 4, sm: 6, md: 8, lg: 12 };\r\nconst statusIntent = {\r\n neutral: 'primary',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n} as const;\r\n\r\nexport const Progress = forwardRef<View, ProgressProps>(function Progress(props, ref) {\r\n const { value, max = 100, min = 0, size = 'md', status = 'neutral', label, style } = props;\r\n const theme = useTheme();\r\n const intent = theme.colors.intent[statusIntent[status]];\r\n const indeterminate = value === undefined;\r\n const clamped = indeterminate ? 0 : Math.max(min, Math.min(max, value));\r\n const pct = indeterminate ? 0.3 : (clamped - min) / (max - min);\r\n const height = heights[size];\r\n\r\n const anim = useRef(new Animated.Value(0)).current;\r\n useEffect(() => {\r\n if (!indeterminate) return;\r\n const loop = Animated.loop(\r\n Animated.timing(anim, {\r\n toValue: 1,\r\n duration: 1500,\r\n easing: Easing.inOut(Easing.ease),\r\n useNativeDriver: true,\r\n }),\r\n );\r\n loop.start();\r\n return () => loop.stop();\r\n }, [anim, indeterminate]);\r\n\r\n const translateX = anim.interpolate({ inputRange: [0, 1], outputRange: [-100, 333] });\r\n\r\n return (\r\n <View\r\n ref={ref}\r\n accessibilityRole=\"progressbar\"\r\n accessibilityLabel={label}\r\n accessibilityValue={indeterminate ? undefined : { min, max, now: clamped }}\r\n style={[\r\n {\r\n height,\r\n width: '100%',\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n borderRadius: 9999,\r\n overflow: 'hidden',\r\n },\r\n style,\r\n ]}\r\n >\r\n {indeterminate ? (\r\n <Animated.View\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n bottom: 0,\r\n width: `${pct * 100}%`,\r\n backgroundColor: intent.solid,\r\n borderRadius: 9999,\r\n transform: [{ translateX }],\r\n }}\r\n />\r\n ) : (\r\n <View\r\n style={{\r\n width: `${pct * 100}%`,\r\n height: '100%',\r\n backgroundColor: intent.solid,\r\n borderRadius: 9999,\r\n }}\r\n />\r\n )}\r\n </View>\r\n );\r\n});\r\n","import { Children, cloneElement, isValidElement, useState, type ReactElement, type ReactNode } from 'react';\r\nimport { Modal, Pressable, Text, View, type StyleProp, type ViewStyle } from 'react-native';\r\nimport type { Placement } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface TooltipProps {\r\n label: ReactNode;\r\n placement?: Placement;\r\n /** Single child element. On long-press, the tooltip opens; tap dismisses. */\r\n children: ReactElement;\r\n style?: StyleProp<ViewStyle>;\r\n}\r\n\r\n/**\r\n * React Native Tooltip — opens on long-press with a centered overlay (most\r\n * accessible cross-platform pattern; mobile has no hover state). For\r\n * positioning relative to the trigger, use a dedicated popover library.\r\n */\r\nexport function Tooltip({ label, children, style }: TooltipProps) {\r\n const theme = useTheme();\r\n const [open, setOpen] = useState(false);\r\n const onlyChild = Children.only(children);\r\n if (!isValidElement(onlyChild)) return onlyChild;\r\n\r\n const trigger = cloneElement(onlyChild as ReactElement<Record<string, unknown>>, {\r\n onLongPress: () => setOpen(true),\r\n });\r\n\r\n return (\r\n <>\r\n {trigger}\r\n <Modal visible={open} transparent animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n onPress={() => setOpen(false)}\r\n style={{ flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: 'rgba(0,0,0,0.4)' }}\r\n >\r\n <View\r\n accessibilityRole=\"alert\"\r\n style={[\r\n {\r\n backgroundColor: theme.colors.fg,\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderRadius: Number(theme.radii.md),\r\n maxWidth: '80%',\r\n },\r\n style,\r\n ]}\r\n >\r\n <Text style={{ color: theme.colors.background, fontSize: 13 }}>{label}</Text>\r\n </View>\r\n </Pressable>\r\n </Modal>\r\n </>\r\n );\r\n}\r\n","import { forwardRef } from 'react';\r\nimport { View, type ViewProps, type ViewStyle, type StyleProp } from 'react-native';\r\n\r\nexport interface BoxProps extends ViewProps {\r\n p?: number;\r\n px?: number;\r\n py?: number;\r\n pt?: number;\r\n pr?: number;\r\n pb?: number;\r\n pl?: number;\r\n m?: number;\r\n mx?: number;\r\n my?: number;\r\n mt?: number;\r\n mr?: number;\r\n mb?: number;\r\n ml?: number;\r\n w?: number | string;\r\n h?: number | string;\r\n bg?: string;\r\n rounded?: number;\r\n shadow?: ViewStyle;\r\n}\r\n\r\nfunction resolveStyle(props: BoxProps): ViewStyle {\r\n const s: ViewStyle = {};\r\n if (props.p !== undefined) s.padding = props.p;\r\n if (props.px !== undefined) s.paddingHorizontal = props.px;\r\n if (props.py !== undefined) s.paddingVertical = props.py;\r\n if (props.pt !== undefined) s.paddingTop = props.pt;\r\n if (props.pr !== undefined) s.paddingRight = props.pr;\r\n if (props.pb !== undefined) s.paddingBottom = props.pb;\r\n if (props.pl !== undefined) s.paddingLeft = props.pl;\r\n if (props.m !== undefined) s.margin = props.m;\r\n if (props.mx !== undefined) s.marginHorizontal = props.mx;\r\n if (props.my !== undefined) s.marginVertical = props.my;\r\n if (props.mt !== undefined) s.marginTop = props.mt;\r\n if (props.mr !== undefined) s.marginRight = props.mr;\r\n if (props.mb !== undefined) s.marginBottom = props.mb;\r\n if (props.ml !== undefined) s.marginLeft = props.ml;\r\n if (props.w !== undefined) s.width = props.w as ViewStyle['width'];\r\n if (props.h !== undefined) s.height = props.h as ViewStyle['height'];\r\n if (props.bg !== undefined) s.backgroundColor = props.bg;\r\n if (props.rounded !== undefined) s.borderRadius = props.rounded;\r\n if (props.shadow !== undefined) Object.assign(s, props.shadow);\r\n return s;\r\n}\r\n\r\n/** Box — universal layout primitive for RN. Accepts shorthand style props. */\r\nexport const Box = forwardRef<View, BoxProps>(function Box(props, ref) {\r\n const { style, children, ...rest } = props;\r\n const resolved = resolveStyle(rest);\r\n const passthrough: ViewProps = { ...rest };\r\n for (const k of [\r\n 'p','px','py','pt','pr','pb','pl','m','mx','my','mt','mr','mb','ml',\r\n 'w','h','bg','rounded','shadow',\r\n ] as const) {\r\n delete (passthrough as Record<string, unknown>)[k];\r\n }\r\n const composed: StyleProp<ViewStyle> = [resolved, style];\r\n return (\r\n <View ref={ref} style={composed} {...passthrough}>\r\n {children}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef } from 'react';\r\nimport { View, type ViewProps, type ViewStyle, type StyleProp, type FlexAlignType } from 'react-native';\r\n\r\nexport interface StackProps extends ViewProps {\r\n direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\r\n gap?: number;\r\n align?: FlexAlignType;\r\n justify?: ViewStyle['justifyContent'];\r\n wrap?: boolean;\r\n}\r\n\r\n/** Stack — flex container for RN. */\r\nexport const Stack = forwardRef<View, StackProps>(function Stack(props, ref) {\r\n const { direction = 'column', gap = 8, align, justify, wrap, style, children, ...rest } = props;\r\n const composed: StyleProp<ViewStyle> = [\r\n {\r\n flexDirection: direction,\r\n gap,\r\n alignItems: align,\r\n justifyContent: justify,\r\n flexWrap: wrap ? 'wrap' : 'nowrap',\r\n },\r\n style,\r\n ];\r\n return (\r\n <View ref={ref} style={composed} {...rest}>\r\n {children}\r\n </View>\r\n );\r\n});\r\n\r\nexport const HStack = forwardRef<View, Omit<StackProps, 'direction'>>(function HStack(props, ref) {\r\n return <Stack ref={ref} direction=\"row\" align=\"center\" {...props} />;\r\n});\r\n\r\nexport const VStack = forwardRef<View, Omit<StackProps, 'direction'>>(function VStack(props, ref) {\r\n return <Stack ref={ref} direction=\"column\" {...props} />;\r\n});\r\n","import { forwardRef, type ReactElement, type ReactNode } from 'react';\r\nimport { View, type ViewProps, type ViewStyle } from 'react-native';\r\n\r\nexport interface GridProps extends ViewProps {\r\n /** Number of columns. */\r\n columns?: number;\r\n /** Gap between cells. */\r\n gap?: number;\r\n children?: ReactNode;\r\n}\r\n\r\nexport interface GridItemProps extends ViewProps {\r\n /** Number of columns this item spans. */\r\n colSpan?: number;\r\n children?: ReactNode;\r\n}\r\n\r\n/**\r\n * Grid — simulates CSS Grid by laying out children in equal-width columns via\r\n * flexbox rows. Pure React Native (no native grid module needed).\r\n */\r\nexport const Grid = forwardRef<View, GridProps>(function Grid(props, ref) {\r\n const { columns = 12, gap = 8, style, children, ...rest } = props;\r\n const childArray = Array.isArray(children) ? children : children == null ? [] : [children];\r\n const rows: ReactElement[][] = [];\r\n let currentRow: ReactElement[] = [];\r\n let usedCols = 0;\r\n for (const child of childArray) {\r\n if (!child) continue;\r\n const span = (((child as ReactElement).props as Record<string, unknown> | undefined)?.colSpan as number) ?? 1;\r\n if (usedCols + span > columns) {\r\n rows.push(currentRow);\r\n currentRow = [];\r\n usedCols = 0;\r\n }\r\n currentRow.push(child as ReactElement);\r\n usedCols += span;\r\n }\r\n if (currentRow.length) rows.push(currentRow);\r\n return (\r\n <View ref={ref} style={[{ gap }, style]} {...rest}>\r\n {rows.map((row, i) => (\r\n <View key={i} style={{ flexDirection: 'row', gap }}>\r\n {row.map((child, j) => {\r\n const span = (((child.props as Record<string, unknown>)?.colSpan as number) ?? 1);\r\n const flexStyle: ViewStyle = { flex: span };\r\n return (\r\n <View key={j} style={flexStyle}>\r\n {child}\r\n </View>\r\n );\r\n })}\r\n </View>\r\n ))}\r\n </View>\r\n );\r\n});\r\n\r\n/** GridItem — the colSpan is read by the parent Grid. */\r\nexport const GridItem = forwardRef<View, GridItemProps>(function GridItem(props, ref) {\r\n const { colSpan: _colSpan, style, children, ...rest } = props;\r\n void _colSpan;\r\n return (\r\n <View ref={ref} style={style} {...rest}>\r\n {children}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { View, type ViewProps } from 'react-native';\r\n\r\nexport interface ContainerProps extends ViewProps {\r\n maxWidth?: number;\r\n padding?: number;\r\n children?: ReactNode;\r\n}\r\n\r\n/** Container — centered, max-width container for RN. */\r\nexport const Container = forwardRef<View, ContainerProps>(function Container(props, ref) {\r\n const { maxWidth = 1080, padding = 16, style, children, ...rest } = props;\r\n return (\r\n <View\r\n ref={ref}\r\n style={[{ width: '100%', maxWidth, alignSelf: 'center', paddingHorizontal: padding }, style]}\r\n {...rest}\r\n >\r\n {children}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { View, type ViewProps, type ViewStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface CardProps extends ViewProps {\r\n variant?: 'outline' | 'elevated' | 'filled';\r\n padding?: number;\r\n children?: ReactNode;\r\n}\r\n\r\nconst elevatedShadow: ViewStyle = {\r\n shadowColor: '#000',\r\n shadowOpacity: 0.08,\r\n shadowRadius: 6,\r\n shadowOffset: { width: 0, height: 2 },\r\n elevation: 3,\r\n};\r\n\r\n/** Card — content container for RN. */\r\nexport const Card = forwardRef<View, CardProps>(function Card(props, ref) {\r\n const { variant = 'outline', padding = 16, style, children, ...rest } = props;\r\n const theme = useTheme();\r\n const base: ViewStyle = {\r\n backgroundColor: variant === 'filled' ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n borderColor: theme.colors.border,\r\n borderWidth: variant === 'outline' ? 1 : 0,\r\n borderRadius: theme.radii.lg,\r\n padding,\r\n };\r\n return (\r\n <View ref={ref} style={[base, variant === 'elevated' ? elevatedShadow : null, style]} {...rest}>\r\n {children}\r\n </View>\r\n );\r\n});\r\n\r\nexport const CardHeader = forwardRef<View, ViewProps>(function CardHeader({ style, children, ...rest }, ref) {\r\n const theme = useTheme();\r\n return (\r\n <View\r\n ref={ref}\r\n style={[{ paddingBottom: 12, borderBottomWidth: 1, borderBottomColor: theme.colors.border, marginBottom: 12 }, style]}\r\n {...rest}\r\n >\r\n {children}\r\n </View>\r\n );\r\n});\r\n\r\nexport const CardBody = forwardRef<View, ViewProps>(function CardBody({ style, children, ...rest }, ref) {\r\n return (\r\n <View ref={ref} style={style} {...rest}>\r\n {children}\r\n </View>\r\n );\r\n});\r\n\r\nexport const CardFooter = forwardRef<View, ViewProps>(function CardFooter({ style, children, ...rest }, ref) {\r\n const theme = useTheme();\r\n return (\r\n <View\r\n ref={ref}\r\n style={[{ paddingTop: 12, borderTopWidth: 1, borderTopColor: theme.colors.border, marginTop: 12 }, style]}\r\n {...rest}\r\n >\r\n {children}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps, type ViewStyle } from 'react-native';\r\nimport type { ElvoraStatus, ElvoraTone } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\nimport { IconButton } from './IconButton';\r\nimport type { IconName } from '@elvora/icons';\r\n\r\nexport interface AlertProps extends ViewProps {\r\n status?: ElvoraStatus;\r\n tone?: ElvoraTone;\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n icon?: ReactNode;\r\n onClose?: () => void;\r\n closeLabel?: string;\r\n}\r\n\r\nconst statusIntent = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n} as const;\r\n\r\nconst defaultIcon: Record<ElvoraStatus, IconName> = {\r\n neutral: 'info',\r\n info: 'info',\r\n success: 'checkCircle',\r\n warning: 'alertCircle',\r\n error: 'x',\r\n};\r\n\r\n/** Alert — banner-style feedback for RN. */\r\nexport const Alert = forwardRef<View, AlertProps>(function Alert(props, ref) {\r\n const {\r\n status = 'info',\r\n tone = 'subtle',\r\n title,\r\n description,\r\n icon,\r\n onClose,\r\n closeLabel = 'Dismiss',\r\n children,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const intent = theme.colors.intent[statusIntent[status]];\r\n let bg = intent.subtle;\r\n let fg = intent.fg;\r\n let borderColor = 'transparent';\r\n if (tone === 'solid') {\r\n bg = intent.solid;\r\n fg = intent.solidFg;\r\n } else if (tone === 'outline') {\r\n bg = 'transparent';\r\n fg = intent.fg;\r\n borderColor = intent.border;\r\n }\r\n const base: ViewStyle = {\r\n flexDirection: 'row',\r\n alignItems: 'flex-start',\r\n gap: 12,\r\n paddingHorizontal: 16,\r\n paddingVertical: 12,\r\n borderRadius: theme.radii.md,\r\n backgroundColor: bg,\r\n borderWidth: tone === 'outline' ? 1 : 0,\r\n borderColor,\r\n };\r\n return (\r\n <View\r\n ref={ref}\r\n accessibilityRole={status === 'error' || status === 'warning' ? 'alert' : undefined}\r\n accessibilityLiveRegion=\"polite\"\r\n style={[base, style]}\r\n {...rest}\r\n >\r\n <View style={{ marginTop: 2 }}>{icon ?? <Icon name={defaultIcon[status]} size={18} color={fg} />}</View>\r\n <View style={{ flex: 1, minWidth: 0 }}>\r\n {title ? (\r\n <Text style={{ color: fg, fontWeight: '600', fontSize: 14, marginBottom: description || children ? 2 : 0 }}>\r\n {title}\r\n </Text>\r\n ) : null}\r\n {description ? <Text style={{ color: fg, fontSize: 13, lineHeight: 18 }}>{description}</Text> : null}\r\n {children}\r\n </View>\r\n {onClose ? (\r\n <IconButton\r\n accessibilityLabel={closeLabel}\r\n size=\"xs\"\r\n variant=\"ghost\"\r\n onPress={onClose}\r\n icon={<Icon name=\"x\" size={14} color={fg} />}\r\n />\r\n ) : null}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, useEffect, useRef } from 'react';\r\nimport { Animated, View, type ViewProps, type ViewStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface SkeletonProps extends ViewProps {\r\n width?: number | string;\r\n height?: number | string;\r\n rounded?: number;\r\n /** Animate a pulse effect. Default true. */\r\n animated?: boolean;\r\n}\r\n\r\n/** Skeleton — placeholder loading block for RN. */\r\nexport const Skeleton = forwardRef<View, SkeletonProps>(function Skeleton(props, ref) {\r\n const { width = '100%', height = 16, rounded, animated = true, style, ...rest } = props;\r\n const theme = useTheme();\r\n const opacity = useRef(new Animated.Value(0.6)).current;\r\n\r\n useEffect(() => {\r\n if (!animated) return;\r\n const loop = Animated.loop(\r\n Animated.sequence([\r\n Animated.timing(opacity, { toValue: 1, duration: 700, useNativeDriver: true }),\r\n Animated.timing(opacity, { toValue: 0.6, duration: 700, useNativeDriver: true }),\r\n ]),\r\n );\r\n loop.start();\r\n return () => loop.stop();\r\n }, [animated, opacity]);\r\n\r\n const base: ViewStyle = {\r\n width: width as ViewStyle['width'],\r\n height: height as ViewStyle['height'],\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n borderRadius: rounded ?? theme.radii.sm,\r\n };\r\n\r\n if (!animated) {\r\n return <View ref={ref} accessibilityLabel=\"Loading\" style={[base, style]} {...rest} />;\r\n }\r\n return (\r\n <Animated.View\r\n ref={ref as React.Ref<typeof Animated.View> & React.Ref<View>}\r\n accessibilityLabel=\"Loading\"\r\n style={[base, { opacity }, style]}\r\n {...rest}\r\n />\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface EmptyProps extends ViewProps {\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n icon?: ReactNode;\r\n action?: ReactNode;\r\n}\r\n\r\n/** Empty — placeholder for empty/no-data states. */\r\nexport const Empty = forwardRef<View, EmptyProps>(function Empty(props, ref) {\r\n const { title = 'No data', description, icon, action, style, ...rest } = props;\r\n const theme = useTheme();\r\n return (\r\n <View\r\n ref={ref}\r\n style={[\r\n { alignItems: 'center', justifyContent: 'center', paddingVertical: 40, paddingHorizontal: 16, gap: 12 },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n <View>{icon ?? <Icon name=\"search\" size={48} color={theme.colors.fgSubtle} />}</View>\r\n {title ? <Text style={{ color: theme.colors.fg, fontSize: 16, fontWeight: '600' }}>{title}</Text> : null}\r\n {description ? (\r\n <Text style={{ color: theme.colors.fgMuted, fontSize: 14, textAlign: 'center' }}>{description}</Text>\r\n ) : null}\r\n {action}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport type { ElvoraStatus } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\nimport type { IconName } from '@elvora/icons';\r\n\r\nexport type ResultStatus = ElvoraStatus | '404' | '500' | '403';\r\n\r\nexport interface ResultProps extends ViewProps {\r\n status?: ResultStatus;\r\n title?: ReactNode;\r\n subtitle?: ReactNode;\r\n icon?: ReactNode;\r\n extra?: ReactNode;\r\n children?: ReactNode;\r\n}\r\n\r\nconst statusIntent = {\r\n neutral: 'neutral',\r\n info: 'info',\r\n success: 'success',\r\n warning: 'warning',\r\n error: 'danger',\r\n '404': 'neutral',\r\n '500': 'danger',\r\n '403': 'warning',\r\n} as const;\r\n\r\nconst statusIcon: Record<ResultStatus, IconName> = {\r\n neutral: 'info',\r\n info: 'info',\r\n success: 'checkCircle',\r\n warning: 'alertCircle',\r\n error: 'x',\r\n '404': 'info',\r\n '500': 'alertCircle',\r\n '403': 'x',\r\n};\r\n\r\n/** Result — page-level status component for RN. */\r\nexport const Result = forwardRef<View, ResultProps>(function Result(props, ref) {\r\n const { status = 'info', title, subtitle, icon, extra, children, style, ...rest } = props;\r\n const theme = useTheme();\r\n const intent = theme.colors.intent[statusIntent[status]];\r\n return (\r\n <View\r\n ref={ref}\r\n style={[\r\n { alignItems: 'center', justifyContent: 'center', paddingVertical: 40, paddingHorizontal: 16, gap: 12 },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n <View>{icon ?? <Icon name={statusIcon[status]} size={56} color={intent.solid} />}</View>\r\n {title ? <Text style={{ color: theme.colors.fg, fontSize: 20, fontWeight: '700' }}>{title}</Text> : null}\r\n {subtitle ? (\r\n <Text style={{ color: theme.colors.fgMuted, fontSize: 14, textAlign: 'center' }}>{subtitle}</Text>\r\n ) : null}\r\n {children}\r\n {extra ? <View style={{ flexDirection: 'row', gap: 8, marginTop: 8 }}>{extra}</View> : null}\r\n </View>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { Modal as RNModal, Pressable, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { IconButton } from './IconButton';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface ModalProps extends Omit<ViewProps, 'children'> {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n title?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n showCloseButton?: boolean;\r\n closeOnOverlayPress?: boolean;\r\n closeLabel?: string;\r\n}\r\n\r\n/** Modal — centered overlay dialog for RN (uses native Modal). */\r\nexport const Modal = forwardRef<View, ModalProps>(function Modal(props, ref) {\r\n const {\r\n isOpen,\r\n onClose,\r\n title,\r\n children,\r\n footer,\r\n showCloseButton = true,\r\n closeOnOverlayPress = true,\r\n closeLabel = 'Close',\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n return (\r\n <RNModal\r\n visible={isOpen}\r\n transparent\r\n animationType=\"fade\"\r\n onRequestClose={onClose}\r\n accessibilityViewIsModal\r\n >\r\n <Pressable\r\n onPress={closeOnOverlayPress ? onClose : undefined}\r\n style={{\r\n flex: 1,\r\n backgroundColor: 'rgba(0,0,0,0.5)',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n padding: 16,\r\n }}\r\n >\r\n <Pressable\r\n onPress={(e) => e.stopPropagation()}\r\n accessibilityRole=\"none\"\r\n style={{ width: '100%', maxWidth: 520 }}\r\n >\r\n <View\r\n ref={ref}\r\n accessibilityRole=\"none\"\r\n accessibilityViewIsModal\r\n style={[\r\n {\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: theme.radii.lg,\r\n overflow: 'hidden',\r\n maxHeight: '90%',\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n {(title || showCloseButton) && (\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 12,\r\n padding: 14,\r\n borderBottomWidth: 1,\r\n borderBottomColor: theme.colors.border,\r\n }}\r\n >\r\n <Text style={{ flex: 1, color: theme.colors.fg, fontSize: 16, fontWeight: '600' }}>{title}</Text>\r\n {showCloseButton ? (\r\n <IconButton\r\n accessibilityLabel={closeLabel}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onPress={onClose}\r\n icon={<Icon name=\"x\" size={16} color={theme.colors.fg} />}\r\n />\r\n ) : null}\r\n </View>\r\n )}\r\n <View style={{ padding: 16 }}>{children}</View>\r\n {footer ? (\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n gap: 8,\r\n justifyContent: 'flex-end',\r\n padding: 12,\r\n borderTopWidth: 1,\r\n borderTopColor: theme.colors.border,\r\n }}\r\n >\r\n {footer}\r\n </View>\r\n ) : null}\r\n </View>\r\n </Pressable>\r\n </Pressable>\r\n </RNModal>\r\n );\r\n});\r\n","import { forwardRef, type ReactNode } from 'react';\r\nimport { Modal as RNModal, Pressable, View, Text, type ViewProps, type ViewStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { IconButton } from './IconButton';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface DrawerProps extends Omit<ViewProps, 'children'> {\r\n isOpen: boolean;\r\n onClose: () => void;\r\n placement?: 'left' | 'right' | 'top' | 'bottom';\r\n size?: number | string;\r\n title?: ReactNode;\r\n children?: ReactNode;\r\n footer?: ReactNode;\r\n showCloseButton?: boolean;\r\n closeOnOverlayPress?: boolean;\r\n closeLabel?: string;\r\n}\r\n\r\n/** Drawer — edge-anchored overlay panel for RN. */\r\nexport const Drawer = forwardRef<View, DrawerProps>(function Drawer(props, ref) {\r\n const {\r\n isOpen,\r\n onClose,\r\n placement = 'right',\r\n size = 320,\r\n title,\r\n children,\r\n footer,\r\n showCloseButton = true,\r\n closeOnOverlayPress = true,\r\n closeLabel = 'Close',\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const horizontal = placement === 'left' || placement === 'right';\r\n const panelStyle: ViewStyle = {\r\n backgroundColor: theme.colors.surfaceElevated,\r\n width: horizontal ? size : '100%',\r\n height: horizontal ? '100%' : size,\r\n } as ViewStyle;\r\n const overlayAlign: ViewStyle =\r\n placement === 'right'\r\n ? { alignItems: 'flex-end' }\r\n : placement === 'left'\r\n ? { alignItems: 'flex-start' }\r\n : placement === 'bottom'\r\n ? { justifyContent: 'flex-end' }\r\n : { justifyContent: 'flex-start' };\r\n\r\n return (\r\n <RNModal visible={isOpen} transparent animationType=\"slide\" onRequestClose={onClose} accessibilityViewIsModal>\r\n <Pressable\r\n onPress={closeOnOverlayPress ? onClose : undefined}\r\n style={[{ flex: 1, backgroundColor: 'rgba(0,0,0,0.45)' }, overlayAlign]}\r\n >\r\n <Pressable onPress={(e) => e.stopPropagation()} style={{ flex: horizontal ? undefined : 0 }}>\r\n <View ref={ref} accessibilityViewIsModal style={[panelStyle, style]} {...rest}>\r\n {(title || showCloseButton) && (\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 12,\r\n padding: 14,\r\n borderBottomWidth: 1,\r\n borderBottomColor: theme.colors.border,\r\n }}\r\n >\r\n <Text style={{ flex: 1, color: theme.colors.fg, fontSize: 16, fontWeight: '600' }}>{title}</Text>\r\n {showCloseButton ? (\r\n <IconButton\r\n accessibilityLabel={closeLabel}\r\n variant=\"ghost\"\r\n size=\"sm\"\r\n onPress={onClose}\r\n icon={<Icon name=\"x\" size={16} color={theme.colors.fg} />}\r\n />\r\n ) : null}\r\n </View>\r\n )}\r\n <View style={{ padding: 16, flex: 1 }}>{children}</View>\r\n {footer ? (\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n gap: 8,\r\n justifyContent: 'flex-end',\r\n padding: 12,\r\n borderTopWidth: 1,\r\n borderTopColor: theme.colors.border,\r\n }}\r\n >\r\n {footer}\r\n </View>\r\n ) : null}\r\n </View>\r\n </Pressable>\r\n </Pressable>\r\n </RNModal>\r\n );\r\n});\r\n","import { forwardRef, useState, type ReactNode } from 'react';\r\nimport { Modal as RNModal, Pressable, View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface PopoverProps extends Omit<ViewProps, 'children'> {\r\n /** The trigger element. */\r\n trigger: ReactNode;\r\n /** Popover content. */\r\n children: ReactNode;\r\n /** Controlled open. */\r\n isOpen?: boolean;\r\n /** Controlled change handler. */\r\n onOpenChange?: (open: boolean) => void;\r\n /** Where the popover anchors relative to the screen. */\r\n placement?: 'top' | 'bottom' | 'left' | 'right' | 'center';\r\n}\r\n\r\n/**\r\n * Popover — content overlay anchored to a trigger. RN doesn't expose a\r\n * positioning API, so we use a centered modal-like sheet by default.\r\n */\r\nexport const Popover = forwardRef<View, PopoverProps>(function Popover(props, ref) {\r\n const { trigger, children, isOpen, onOpenChange, placement = 'center', style, ...rest } = props;\r\n const theme = useTheme();\r\n const [internalOpen, setInternalOpen] = useState(false);\r\n const open = isOpen ?? internalOpen;\r\n\r\n const setOpen = (next: boolean) => {\r\n if (isOpen === undefined) setInternalOpen(next);\r\n onOpenChange?.(next);\r\n };\r\n\r\n const align =\r\n placement === 'top'\r\n ? { justifyContent: 'flex-start' as const, paddingTop: 80 }\r\n : placement === 'bottom'\r\n ? { justifyContent: 'flex-end' as const, paddingBottom: 80 }\r\n : { justifyContent: 'center' as const };\r\n\r\n return (\r\n <>\r\n <Pressable onPress={() => setOpen(true)} accessibilityRole=\"button\">\r\n {trigger}\r\n </Pressable>\r\n <RNModal visible={open} transparent animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n onPress={() => setOpen(false)}\r\n style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.25)', alignItems: 'center', padding: 16, ...align }}\r\n >\r\n <Pressable onPress={(e) => e.stopPropagation()}>\r\n <View\r\n ref={ref}\r\n style={[\r\n {\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: theme.radii.md,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n padding: 12,\r\n minWidth: 200,\r\n maxWidth: 320,\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n {children}\r\n </View>\r\n </Pressable>\r\n </Pressable>\r\n </RNModal>\r\n </>\r\n );\r\n});\r\n","import {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n type ReactNode,\r\n} from 'react';\r\nimport { View, type ViewStyle } from 'react-native';\r\nimport { generateId } from '@elvora/core';\r\nimport type { ElvoraStatus } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Alert } from './Alert';\r\n\r\nexport interface ToastOptions {\r\n id?: string;\r\n status?: ElvoraStatus;\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n /** Duration in ms. `null` for sticky. */\r\n duration?: number | null;\r\n action?: ReactNode;\r\n}\r\n\r\ninterface ToastInstance {\r\n id: string;\r\n status: ElvoraStatus;\r\n title?: ReactNode;\r\n description?: ReactNode;\r\n action?: ReactNode;\r\n duration: number | null;\r\n}\r\n\r\nexport interface ToastApi {\r\n show: (opts: ToastOptions) => string;\r\n dismiss: (id: string) => void;\r\n dismissAll: () => void;\r\n}\r\n\r\nconst ToastContext = createContext<ToastApi | null>(null);\r\n\r\nexport interface ToastProviderProps {\r\n children: ReactNode;\r\n defaultDuration?: number;\r\n placement?: 'top' | 'bottom';\r\n}\r\n\r\n/** ToastProvider — mount once at the root of the RN app. */\r\nexport function ToastProvider({ children, defaultDuration = 4000, placement = 'top' }: ToastProviderProps) {\r\n const [toasts, setToasts] = useState<ToastInstance[]>([]);\r\n const timersRef = useRef<Record<string, ReturnType<typeof setTimeout>>>({});\r\n const theme = useTheme();\r\n\r\n const dismiss = useCallback((id: string) => {\r\n setToasts((curr) => curr.filter((t) => t.id !== id));\r\n const timer = timersRef.current[id];\r\n if (timer) {\r\n clearTimeout(timer);\r\n delete timersRef.current[id];\r\n }\r\n }, []);\r\n\r\n const show = useCallback<ToastApi['show']>(\r\n (opts) => {\r\n const id = opts.id ?? generateId('toast');\r\n const inst: ToastInstance = {\r\n id,\r\n status: opts.status ?? 'info',\r\n title: opts.title,\r\n description: opts.description,\r\n action: opts.action,\r\n duration: opts.duration === undefined ? defaultDuration : opts.duration,\r\n };\r\n setToasts((curr) => [...curr, inst]);\r\n if (inst.duration !== null && inst.duration > 0) {\r\n timersRef.current[id] = setTimeout(() => dismiss(id), inst.duration);\r\n }\r\n return id;\r\n },\r\n [defaultDuration, dismiss],\r\n );\r\n\r\n const dismissAll = useCallback(() => {\r\n setToasts([]);\r\n for (const t of Object.values(timersRef.current)) clearTimeout(t);\r\n timersRef.current = {};\r\n }, []);\r\n\r\n useEffect(\r\n () => () => {\r\n for (const t of Object.values(timersRef.current)) clearTimeout(t);\r\n },\r\n [],\r\n );\r\n\r\n const api = useMemo<ToastApi>(() => ({ show, dismiss, dismissAll }), [show, dismiss, dismissAll]);\r\n\r\n const overlay: ViewStyle = {\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n alignItems: 'center',\r\n paddingHorizontal: 16,\r\n pointerEvents: 'box-none',\r\n zIndex: theme.tokens.zIndex.toast,\r\n ...(placement === 'top' ? { top: 24 } : { bottom: 24 }),\r\n };\r\n\r\n return (\r\n <ToastContext.Provider value={api}>\r\n {children}\r\n {toasts.length > 0 ? (\r\n <View style={overlay}>\r\n {toasts.map((t) => (\r\n <View key={t.id} style={{ marginVertical: 4, width: '100%', maxWidth: 420 }}>\r\n <Alert\r\n status={t.status}\r\n tone=\"solid\"\r\n title={t.title}\r\n description={t.description}\r\n onClose={() => dismiss(t.id)}\r\n >\r\n {t.action}\r\n </Alert>\r\n </View>\r\n ))}\r\n </View>\r\n ) : null}\r\n </ToastContext.Provider>\r\n );\r\n}\r\n\r\n/** useToast — must be inside ToastProvider. */\r\nexport function useToast(): ToastApi {\r\n const ctx = useContext(ToastContext);\r\n if (!ctx) throw new Error('useToast must be used inside <ToastProvider>');\r\n return ctx;\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, View, Text, ScrollView, type ViewProps, type ViewStyle } from 'react-native';\r\nimport type { Orientation } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface TabsTab {\r\n value: string;\r\n label: ReactNode;\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface TabsProps extends ViewProps {\r\n tabs: TabsTab[];\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (value: string) => void;\r\n variant?: 'underline' | 'pill' | 'solid';\r\n orientation?: Orientation;\r\n /** Render function for each tab's panel content. */\r\n renderPanel: (value: string) => ReactNode;\r\n}\r\n\r\n/**\r\n * Tabs — RN-friendly tab strip + panel renderer. Doesn't need WAI-ARIA roles,\r\n * uses native accessibility roles. Composition is data-driven rather than\r\n * via slot components.\r\n */\r\nexport function Tabs(props: TabsProps) {\r\n const {\r\n tabs,\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n variant = 'underline',\r\n orientation = 'horizontal',\r\n renderPanel,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const intent = theme.colors.intent.primary;\r\n const [internal, setInternal] = useState<string>(defaultValue ?? tabs[0]?.value ?? '');\r\n const current = valueProp ?? internal;\r\n\r\n const setValue = (v: string) => {\r\n if (valueProp === undefined) setInternal(v);\r\n onChange?.(v);\r\n };\r\n\r\n const horizontal = orientation === 'horizontal';\r\n\r\n const tabStyle = (active: boolean, disabled?: boolean): ViewStyle => {\r\n if (variant === 'pill') {\r\n return {\r\n backgroundColor: active ? intent.subtle : 'transparent',\r\n borderRadius: theme.radii.full,\r\n paddingHorizontal: 14,\r\n paddingVertical: 8,\r\n opacity: disabled ? 0.5 : 1,\r\n };\r\n }\r\n if (variant === 'solid') {\r\n return {\r\n backgroundColor: active ? intent.solid : 'transparent',\r\n borderRadius: theme.radii.md,\r\n paddingHorizontal: 14,\r\n paddingVertical: 8,\r\n opacity: disabled ? 0.5 : 1,\r\n };\r\n }\r\n return {\r\n borderBottomWidth: horizontal ? 2 : 0,\r\n borderRightWidth: !horizontal ? 2 : 0,\r\n borderColor: active ? intent.solid : 'transparent',\r\n paddingHorizontal: 14,\r\n paddingVertical: 10,\r\n opacity: disabled ? 0.5 : 1,\r\n };\r\n };\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <ScrollView\r\n horizontal={horizontal}\r\n showsHorizontalScrollIndicator={false}\r\n contentContainerStyle={{\r\n flexDirection: horizontal ? 'row' : 'column',\r\n gap: 4,\r\n borderBottomWidth: variant === 'underline' && horizontal ? 1 : 0,\r\n borderBottomColor: theme.colors.border,\r\n }}\r\n >\r\n {tabs.map((t) => {\r\n const active = t.value === current;\r\n const labelColor =\r\n variant === 'solid' && active\r\n ? intent.solidFg\r\n : variant === 'pill' && active\r\n ? intent.fg\r\n : active\r\n ? theme.colors.fg\r\n : theme.colors.fgMuted;\r\n return (\r\n <Pressable\r\n key={t.value}\r\n accessibilityRole=\"tab\"\r\n accessibilityState={{ selected: active, disabled: t.isDisabled }}\r\n disabled={t.isDisabled}\r\n onPress={() => setValue(t.value)}\r\n style={tabStyle(active, t.isDisabled)}\r\n >\r\n <Text style={{ color: labelColor, fontSize: 14, fontWeight: '500' }}>{t.label}</Text>\r\n </Pressable>\r\n );\r\n })}\r\n </ScrollView>\r\n <View accessibilityRole=\"none\" style={{ paddingVertical: 12 }}>\r\n {renderPanel(current)}\r\n </View>\r\n </View>\r\n );\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Modal as RNModal, Pressable, View, Text } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface MenuItem {\r\n value: string;\r\n label: string;\r\n isDisabled?: boolean;\r\n hasSeparatorBefore?: boolean;\r\n}\r\n\r\nexport interface MenuProps {\r\n trigger: ReactNode;\r\n items: MenuItem[];\r\n onSelect?: (value: string) => void;\r\n}\r\n\r\n/**\r\n * Menu — opens a modal sheet from the trigger. Suitable for RN because there\r\n * is no anchored-popover API; sheet-style menus are idiomatic.\r\n */\r\nexport function Menu(props: MenuProps) {\r\n const { trigger, items, onSelect } = props;\r\n const [isOpen, setIsOpen] = useState(false);\r\n const theme = useTheme();\r\n\r\n return (\r\n <>\r\n <Pressable accessibilityRole=\"button\" onPress={() => setIsOpen(true)}>\r\n {trigger}\r\n </Pressable>\r\n <RNModal visible={isOpen} transparent animationType=\"fade\" onRequestClose={() => setIsOpen(false)}>\r\n <Pressable\r\n onPress={() => setIsOpen(false)}\r\n style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.35)', justifyContent: 'flex-end' }}\r\n >\r\n <Pressable onPress={(e) => e.stopPropagation()}>\r\n <View\r\n style={{\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderTopLeftRadius: theme.radii.lg,\r\n borderTopRightRadius: theme.radii.lg,\r\n paddingTop: 8,\r\n paddingBottom: 24,\r\n }}\r\n >\r\n {items.map((item) => (\r\n <View key={item.value}>\r\n {item.hasSeparatorBefore ? (\r\n <View style={{ height: 1, backgroundColor: theme.colors.border, marginVertical: 4 }} />\r\n ) : null}\r\n <Pressable\r\n accessibilityRole=\"menuitem\"\r\n accessibilityState={{ disabled: item.isDisabled }}\r\n disabled={item.isDisabled}\r\n onPress={() => {\r\n onSelect?.(item.value);\r\n setIsOpen(false);\r\n }}\r\n style={({ pressed }) => ({\r\n paddingVertical: 14,\r\n paddingHorizontal: 16,\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : 'transparent',\r\n opacity: item.isDisabled ? 0.5 : 1,\r\n })}\r\n >\r\n <Text style={{ fontSize: 16, color: theme.colors.fg }}>{item.label}</Text>\r\n </Pressable>\r\n </View>\r\n ))}\r\n </View>\r\n </Pressable>\r\n </Pressable>\r\n </RNModal>\r\n </>\r\n );\r\n}\r\n","import { type ReactNode } from 'react';\r\nimport { Menu, type MenuItem } from './Menu';\r\n\r\nexport interface DropdownItem extends MenuItem {}\r\n\r\nexport interface DropdownProps {\r\n trigger: ReactNode;\r\n items: DropdownItem[];\r\n onSelect?: (value: string) => void;\r\n}\r\n\r\n/** Dropdown — alias for Menu on RN where both use a modal sheet. */\r\nexport function Dropdown(props: DropdownProps) {\r\n return <Menu {...props} />;\r\n}\r\n","import { Fragment, type ReactNode } from 'react';\r\nimport { Pressable, Text, View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface BreadcrumbItem {\r\n label: string;\r\n onPress?: () => void;\r\n isCurrent?: boolean;\r\n}\r\n\r\nexport interface BreadcrumbProps extends ViewProps {\r\n items: BreadcrumbItem[];\r\n separator?: ReactNode;\r\n}\r\n\r\n/** Breadcrumb — navigation trail for RN. */\r\nexport function Breadcrumb(props: BreadcrumbProps) {\r\n const { items, separator, style, ...rest } = props;\r\n const theme = useTheme();\r\n const sep = separator ?? <Icon name=\"chevronRight\" size={14} color={theme.colors.fgSubtle} />;\r\n return (\r\n <View\r\n accessibilityRole=\"header\"\r\n style={[{ flexDirection: 'row', alignItems: 'center', flexWrap: 'wrap', gap: 6 }, style]}\r\n {...rest}\r\n >\r\n {items.map((item, idx) => {\r\n const isLast = idx === items.length - 1;\r\n const current = item.isCurrent ?? isLast;\r\n const color = current ? theme.colors.fg : theme.colors.fgMuted;\r\n const labelEl = (\r\n <Text accessibilityRole={current ? 'text' : 'link'} style={{ color, fontSize: 14 }}>\r\n {item.label}\r\n </Text>\r\n );\r\n return (\r\n <Fragment key={idx}>\r\n {item.onPress && !current ? <Pressable onPress={item.onPress}>{labelEl}</Pressable> : labelEl}\r\n {!isLast ? <View accessibilityElementsHidden>{sep}</View> : null}\r\n </Fragment>\r\n );\r\n })}\r\n </View>\r\n );\r\n}\r\n","import { Pressable, Text, View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface PaginationProps extends ViewProps {\r\n total: number;\r\n pageSize?: number;\r\n current?: number;\r\n defaultCurrent?: number;\r\n onChange?: (page: number) => void;\r\n siblingCount?: number;\r\n showFirstLast?: boolean;\r\n hideOnSinglePage?: boolean;\r\n}\r\n\r\nfunction range(start: number, end: number): number[] {\r\n const out: number[] = [];\r\n for (let i = start; i <= end; i++) out.push(i);\r\n return out;\r\n}\r\n\r\nfunction buildPages(current: number, totalPages: number, siblingCount: number): Array<number | 'gap'> {\r\n const totalNumbers = siblingCount * 2 + 5;\r\n if (totalPages <= totalNumbers) return range(1, totalPages);\r\n const left = Math.max(current - siblingCount, 1);\r\n const right = Math.min(current + siblingCount, totalPages);\r\n const out: Array<number | 'gap'> = [1];\r\n if (left > 2) out.push('gap');\r\n else if (left === 2) out.push(2);\r\n out.push(...range(Math.max(left, left > 2 ? left : 2), Math.min(right, totalPages - 1)));\r\n if (right < totalPages - 1) out.push('gap');\r\n else if (right === totalPages - 1) out.push(totalPages - 1);\r\n if (totalPages > 1) out.push(totalPages);\r\n const seen = new Set<number | 'gap'>();\r\n return out.filter((v) => {\r\n if (v === 'gap') return true;\r\n if (seen.has(v)) return false;\r\n seen.add(v);\r\n return true;\r\n });\r\n}\r\n\r\n/** Pagination — RN paginator. */\r\nexport function Pagination(props: PaginationProps) {\r\n const {\r\n total,\r\n pageSize = 10,\r\n current: currentProp,\r\n defaultCurrent = 1,\r\n onChange,\r\n siblingCount = 1,\r\n showFirstLast = false,\r\n hideOnSinglePage = false,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\r\n const current = Math.min(Math.max(currentProp ?? defaultCurrent, 1), totalPages);\r\n if (hideOnSinglePage && totalPages <= 1) return null;\r\n\r\n const pages = buildPages(current, totalPages, siblingCount);\r\n const go = (page: number) => {\r\n const next = Math.min(Math.max(page, 1), totalPages);\r\n if (next !== current) onChange?.(next);\r\n };\r\n\r\n const btn = (active: boolean, disabled?: boolean) => ({\r\n minWidth: 32,\r\n height: 32,\r\n paddingHorizontal: 8,\r\n borderRadius: theme.radii.md,\r\n borderWidth: 1,\r\n borderColor: active ? theme.colors.intent.primary.solid : theme.colors.border,\r\n backgroundColor: active ? theme.colors.intent.primary.solid : theme.colors.surfaceElevated,\r\n opacity: disabled ? 0.5 : 1,\r\n alignItems: 'center' as const,\r\n justifyContent: 'center' as const,\r\n });\r\n const txt = (active: boolean) => ({\r\n color: active ? theme.colors.intent.primary.solidFg : theme.colors.fg,\r\n fontSize: 13,\r\n fontWeight: '500' as const,\r\n });\r\n\r\n return (\r\n <View style={[{ flexDirection: 'row', alignItems: 'center', gap: 6 }, style]} {...rest}>\r\n {showFirstLast ? (\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"First page\"\r\n disabled={current === 1}\r\n onPress={() => go(1)}\r\n style={btn(false, current === 1)}\r\n >\r\n <Text style={txt(false)}>«</Text>\r\n </Pressable>\r\n ) : null}\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Previous page\"\r\n disabled={current === 1}\r\n onPress={() => go(current - 1)}\r\n style={btn(false, current === 1)}\r\n >\r\n <Icon name=\"chevronLeft\" size={14} color={theme.colors.fg} />\r\n </Pressable>\r\n {pages.map((p, idx) =>\r\n p === 'gap' ? (\r\n <Text key={`gap-${idx}`} style={{ color: theme.colors.fgSubtle, paddingHorizontal: 4 }}>\r\n …\r\n </Text>\r\n ) : (\r\n <Pressable\r\n key={p}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={`Page ${p}`}\r\n accessibilityState={{ selected: p === current }}\r\n onPress={() => go(p)}\r\n style={btn(p === current)}\r\n >\r\n <Text style={txt(p === current)}>{p}</Text>\r\n </Pressable>\r\n ),\r\n )}\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Next page\"\r\n disabled={current === totalPages}\r\n onPress={() => go(current + 1)}\r\n style={btn(false, current === totalPages)}\r\n >\r\n <Icon name=\"chevronRight\" size={14} color={theme.colors.fg} />\r\n </Pressable>\r\n {showFirstLast ? (\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Last page\"\r\n disabled={current === totalPages}\r\n onPress={() => go(totalPages)}\r\n style={btn(false, current === totalPages)}\r\n >\r\n <Text style={txt(false)}>»</Text>\r\n </Pressable>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { Fragment, type ReactNode } from 'react';\r\nimport { Pressable, Text, View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface Step {\r\n title: ReactNode;\r\n description?: ReactNode;\r\n status?: 'wait' | 'process' | 'finish' | 'error';\r\n}\r\n\r\nexport interface StepsProps extends Omit<ViewProps, 'onChange'> {\r\n steps: Step[];\r\n current?: number;\r\n orientation?: 'horizontal' | 'vertical';\r\n onChange?: (index: number) => void;\r\n}\r\n\r\n/** Steps — multi-step progress indicator for RN. */\r\nexport function Steps(props: StepsProps) {\r\n const { steps, current = 0, orientation = 'horizontal', onChange, style, ...rest } = props;\r\n const theme = useTheme();\r\n const intent = theme.colors.intent.primary;\r\n const isHorizontal = orientation === 'horizontal';\r\n\r\n const resolveStatus = (i: number, override?: Step['status']) => {\r\n if (override) return override;\r\n if (i < current) return 'finish';\r\n if (i === current) return 'process';\r\n return 'wait';\r\n };\r\n\r\n const dotStyle = (s: ReturnType<typeof resolveStatus>) => {\r\n switch (s) {\r\n case 'finish':\r\n return { backgroundColor: intent.solid, color: intent.solidFg, borderColor: intent.solid };\r\n case 'process':\r\n return { backgroundColor: theme.colors.surfaceElevated, color: intent.solid, borderColor: intent.solid };\r\n case 'error':\r\n return {\r\n backgroundColor: theme.colors.surfaceElevated,\r\n color: theme.colors.intent.danger.solid,\r\n borderColor: theme.colors.intent.danger.solid,\r\n };\r\n default:\r\n return {\r\n backgroundColor: theme.colors.surfaceElevated,\r\n color: theme.colors.fgMuted,\r\n borderColor: theme.colors.border,\r\n };\r\n }\r\n };\r\n\r\n return (\r\n <View\r\n style={[\r\n {\r\n flexDirection: isHorizontal ? 'row' : 'column',\r\n alignItems: isHorizontal ? 'flex-start' : 'stretch',\r\n gap: isHorizontal ? 0 : 12,\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n {steps.map((step, i) => {\r\n const status = resolveStatus(i, step.status);\r\n const dot = dotStyle(status);\r\n const isLast = i === steps.length - 1;\r\n return (\r\n <Fragment key={i}>\r\n <Pressable\r\n accessibilityRole={onChange ? 'button' : undefined}\r\n accessibilityState={{ selected: status === 'process' }}\r\n onPress={() => onChange?.(i)}\r\n disabled={!onChange}\r\n style={{\r\n flex: isHorizontal ? 1 : undefined,\r\n flexDirection: isHorizontal ? 'column' : 'row',\r\n alignItems: isHorizontal ? 'center' : 'flex-start',\r\n gap: 8,\r\n }}\r\n >\r\n <View\r\n style={{\r\n width: 28,\r\n height: 28,\r\n borderRadius: 14,\r\n borderWidth: 2,\r\n borderColor: dot.borderColor,\r\n backgroundColor: dot.backgroundColor,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {status === 'finish' ? (\r\n <Icon name=\"check\" size={14} color={dot.color} />\r\n ) : status === 'error' ? (\r\n <Icon name=\"x\" size={14} color={dot.color} />\r\n ) : (\r\n <Text style={{ color: dot.color, fontSize: 13, fontWeight: '600' }}>{i + 1}</Text>\r\n )}\r\n </View>\r\n <View style={{ alignItems: isHorizontal ? 'center' : 'flex-start' }}>\r\n <Text\r\n style={{\r\n fontSize: 14,\r\n fontWeight: '600',\r\n color: status === 'wait' ? theme.colors.fgMuted : theme.colors.fg,\r\n }}\r\n >\r\n {step.title}\r\n </Text>\r\n {step.description ? (\r\n <Text style={{ fontSize: 12, color: theme.colors.fgMuted, marginTop: 2 }}>{step.description}</Text>\r\n ) : null}\r\n </View>\r\n </Pressable>\r\n {!isLast ? (\r\n isHorizontal ? (\r\n <View\r\n style={{\r\n flex: 1,\r\n height: 2,\r\n backgroundColor: status === 'finish' ? intent.solid : theme.colors.border,\r\n alignSelf: 'center',\r\n marginTop: 13,\r\n }}\r\n />\r\n ) : (\r\n <View\r\n style={{\r\n width: 2,\r\n minHeight: 18,\r\n backgroundColor: status === 'finish' ? intent.solid : theme.colors.border,\r\n marginLeft: 13,\r\n }}\r\n />\r\n )\r\n ) : null}\r\n </Fragment>\r\n );\r\n })}\r\n </View>\r\n );\r\n}\r\n","import { type ReactNode, type RefObject } from 'react';\r\nimport { Pressable, Text, View, type ViewProps, type ScrollView } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface AnchorLink {\r\n /** Vertical scroll offset (px) for this section. */\r\n offset: number;\r\n label: ReactNode;\r\n}\r\n\r\nexport interface AnchorProps extends ViewProps {\r\n links: AnchorLink[];\r\n /** Ref to the parent ScrollView used to scroll to each section. */\r\n scrollRef: RefObject<ScrollView>;\r\n activeIndex?: number;\r\n smooth?: boolean;\r\n}\r\n\r\n/**\r\n * Anchor — section jumper for RN. Caller passes a ref to their parent\r\n * `<ScrollView>` and pre-computed offsets for each section. Active highlighting\r\n * is opt-in via `activeIndex`.\r\n */\r\nexport function Anchor(props: AnchorProps) {\r\n const { links, scrollRef, activeIndex, smooth = true, style, ...rest } = props;\r\n const theme = useTheme();\r\n return (\r\n <View accessibilityRole=\"menu\" style={style} {...rest}>\r\n {links.map((link, idx) => {\r\n const isActive = activeIndex === idx;\r\n return (\r\n <Pressable\r\n key={idx}\r\n accessibilityRole=\"link\"\r\n accessibilityState={{ selected: isActive }}\r\n onPress={() => scrollRef.current?.scrollTo({ y: link.offset, animated: smooth })}\r\n style={{\r\n paddingVertical: 6,\r\n paddingLeft: 12,\r\n borderLeftWidth: 2,\r\n borderLeftColor: isActive ? theme.colors.intent.primary.solid : theme.colors.border,\r\n backgroundColor: isActive ? theme.colors.intent.primary.subtle : 'transparent',\r\n }}\r\n >\r\n <Text\r\n style={{\r\n fontSize: 13,\r\n color: isActive ? theme.colors.intent.primary.fg : theme.colors.fgMuted,\r\n }}\r\n >\r\n {link.label}\r\n </Text>\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n );\r\n}\r\n","import { useEffect, useState, type RefObject } from 'react';\r\nimport { Animated, Pressable, type ScrollView } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface BackTopProps {\r\n /** Ref to the ScrollView this button scrolls to top. */\r\n scrollRef: RefObject<ScrollView>;\r\n /** Current Y offset of the parent ScrollView (caller wires up `onScroll`). */\r\n scrollY: number;\r\n /** Show after the user has scrolled past this offset (default 400). */\r\n visibilityHeight?: number;\r\n bottom?: number;\r\n right?: number;\r\n label?: string;\r\n}\r\n\r\n/**\r\n * BackTop — floating \"scroll to top\" button for RN. Caller passes a ref to the\r\n * parent ScrollView plus the current scroll offset (e.g. from `onScroll` event).\r\n */\r\nexport function BackTop(props: BackTopProps) {\r\n const { scrollRef, scrollY, visibilityHeight = 400, bottom = 24, right = 24, label = 'Back to top' } = props;\r\n const theme = useTheme();\r\n const [visible, setVisible] = useState(false);\r\n const opacity = useState(new Animated.Value(0))[0];\r\n\r\n useEffect(() => {\r\n setVisible(scrollY > visibilityHeight);\r\n }, [scrollY, visibilityHeight]);\r\n\r\n useEffect(() => {\r\n Animated.timing(opacity, { toValue: visible ? 1 : 0, duration: 200, useNativeDriver: true }).start();\r\n }, [visible, opacity]);\r\n\r\n if (!visible) return null;\r\n return (\r\n <Animated.View\r\n pointerEvents={visible ? 'auto' : 'none'}\r\n style={{\r\n position: 'absolute',\r\n bottom,\r\n right,\r\n opacity,\r\n }}\r\n >\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={label}\r\n onPress={() => scrollRef.current?.scrollTo({ y: 0, animated: true })}\r\n style={{\r\n width: 44,\r\n height: 44,\r\n borderRadius: 22,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n shadowColor: '#000',\r\n shadowOpacity: 0.15,\r\n shadowRadius: 8,\r\n shadowOffset: { width: 0, height: 4 },\r\n elevation: 4,\r\n }}\r\n >\r\n <Icon name=\"chevronUp\" size={18} color={theme.colors.fg} />\r\n </Pressable>\r\n </Animated.View>\r\n );\r\n}\r\n","import {\r\n createContext,\r\n useCallback,\r\n useContext,\r\n useMemo,\r\n useState,\r\n type ReactNode,\r\n} from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Label } from './Label';\r\n\r\ntype FieldErrors = Record<string, string | undefined>;\r\n\r\ninterface FormContextValue {\r\n layout: 'vertical' | 'horizontal';\r\n labelWidth?: number;\r\n errors: FieldErrors;\r\n setFieldError: (name: string, error: string | undefined) => void;\r\n}\r\n\r\nconst FormContext = createContext<FormContextValue | null>(null);\r\n\r\nfunction useFormContext(): FormContextValue {\r\n return (\r\n useContext(FormContext) ?? {\r\n layout: 'vertical',\r\n labelWidth: undefined,\r\n errors: {},\r\n setFieldError: () => {},\r\n }\r\n );\r\n}\r\n\r\nexport interface FormProps extends ViewProps {\r\n layout?: 'vertical' | 'horizontal';\r\n labelWidth?: number;\r\n children?: ReactNode;\r\n}\r\n\r\n/** Form — RN container that owns shared layout + per-field error state. */\r\nexport function Form(props: FormProps) {\r\n const { layout = 'vertical', labelWidth, children, ...rest } = props;\r\n const [errors, setErrors] = useState<FieldErrors>({});\r\n const setFieldError = useCallback((name: string, error: string | undefined) => {\r\n setErrors((prev) => {\r\n if (prev[name] === error) return prev;\r\n const next = { ...prev };\r\n if (error === undefined) delete next[name];\r\n else next[name] = error;\r\n return next;\r\n });\r\n }, []);\r\n const ctx = useMemo<FormContextValue>(\r\n () => ({ layout, labelWidth, errors, setFieldError }),\r\n [layout, labelWidth, errors, setFieldError],\r\n );\r\n return (\r\n <FormContext.Provider value={ctx}>\r\n <View {...rest}>{children}</View>\r\n </FormContext.Provider>\r\n );\r\n}\r\n\r\nexport interface FormFieldProps extends ViewProps {\r\n name: string;\r\n label?: ReactNode;\r\n hint?: ReactNode;\r\n error?: string;\r\n isRequired?: boolean;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function FormField(props: FormFieldProps) {\r\n const { name, label, hint, error, isRequired, children, style, ...rest } = props;\r\n const ctx = useFormContext();\r\n const theme = useTheme();\r\n const displayedError = error ?? ctx.errors[name];\r\n const isHorizontal = ctx.layout === 'horizontal';\r\n\r\n return (\r\n <View\r\n style={[\r\n {\r\n flexDirection: isHorizontal ? 'row' : 'column',\r\n marginBottom: 16,\r\n gap: isHorizontal ? 12 : 6,\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n {label ? (\r\n <Label isRequired={isRequired} style={isHorizontal ? { width: ctx.labelWidth ?? 120, paddingTop: 8 } : undefined}>\r\n {label}\r\n </Label>\r\n ) : null}\r\n <View style={{ flex: 1 }}>\r\n {children}\r\n {hint && !displayedError ? (\r\n <Text style={{ marginTop: 4, fontSize: 12, color: theme.colors.fgMuted }}>{hint}</Text>\r\n ) : null}\r\n {displayedError ? (\r\n <Text accessibilityRole=\"alert\" style={{ marginTop: 4, fontSize: 12, color: theme.colors.intent.danger.fg }}>\r\n {displayedError}\r\n </Text>\r\n ) : null}\r\n </View>\r\n </View>\r\n );\r\n}\r\n\r\nexport function useFormField(name: string): { error: string | undefined; setError: (e: string | undefined) => void } {\r\n const ctx = useFormContext();\r\n return {\r\n error: ctx.errors[name],\r\n setError: (e) => ctx.setFieldError(name, e),\r\n };\r\n}\r\n","import { forwardRef, useCallback, useState } from 'react';\r\nimport { Pressable, TextInput, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface NumberInputProps extends Omit<ViewProps, 'children'> {\r\n value?: number | null;\r\n defaultValue?: number | null;\r\n onChangeValue?: (value: number | null) => void;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n precision?: number;\r\n isDisabled?: boolean;\r\n isReadOnly?: boolean;\r\n isInvalid?: boolean;\r\n placeholder?: string;\r\n}\r\n\r\nfunction clamp(v: number, min?: number, max?: number): number {\r\n let out = v;\r\n if (typeof min === 'number') out = Math.max(out, min);\r\n if (typeof max === 'number') out = Math.min(out, max);\r\n return out;\r\n}\r\n\r\nfunction format(v: number, precision: number | undefined): string {\r\n if (precision === undefined) return String(v);\r\n return v.toFixed(precision);\r\n}\r\n\r\nexport const NumberInput = forwardRef<View, NumberInputProps>(function NumberInput(props, ref) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChangeValue,\r\n min,\r\n max,\r\n step = 1,\r\n precision,\r\n isDisabled,\r\n isReadOnly,\r\n isInvalid,\r\n placeholder,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<number | null>(defaultValue ?? null);\r\n const value = valueProp !== undefined ? valueProp : internal;\r\n const [text, setText] = useState<string>(value == null ? '' : format(value, precision));\r\n\r\n const setValue = useCallback(\r\n (next: number | null) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChangeValue?.(next);\r\n setText(next == null ? '' : format(next, precision));\r\n },\r\n [onChangeValue, precision, valueProp],\r\n );\r\n\r\n const increment = (delta: number) => {\r\n if (isDisabled || isReadOnly) return;\r\n const current = typeof value === 'number' ? value : 0;\r\n setValue(clamp(parseFloat(format(current + delta, precision ?? 6)), min, max));\r\n };\r\n\r\n const onChangeText = (raw: string) => {\r\n setText(raw);\r\n if (raw === '' || raw === '-') {\r\n if (valueProp === undefined) setInternal(null);\r\n onChangeValue?.(null);\r\n return;\r\n }\r\n const parsed = Number(raw);\r\n if (!Number.isNaN(parsed)) {\r\n const c = clamp(parsed, min, max);\r\n if (valueProp === undefined) setInternal(c);\r\n onChangeValue?.(c);\r\n }\r\n };\r\n\r\n const onBlur = () => {\r\n if (text === '' || text === '-') return;\r\n const parsed = Number(text);\r\n if (Number.isNaN(parsed)) {\r\n setText(value == null ? '' : format(value, precision));\r\n return;\r\n }\r\n setValue(clamp(parsed, min, max));\r\n };\r\n\r\n const borderColor = isInvalid ? theme.colors.intent.danger.solid : theme.colors.border;\r\n\r\n return (\r\n <View\r\n ref={ref}\r\n style={[\r\n {\r\n flexDirection: 'row',\r\n alignItems: 'stretch',\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: 1,\r\n borderColor,\r\n overflow: 'hidden',\r\n backgroundColor: isDisabled ? theme.colors.surface : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n <TextInput\r\n value={text}\r\n keyboardType=\"numeric\"\r\n editable={!isDisabled && !isReadOnly}\r\n placeholder={placeholder}\r\n placeholderTextColor={theme.colors.fgMuted}\r\n onChangeText={onChangeText}\r\n onBlur={onBlur}\r\n style={{ flex: 1, paddingHorizontal: 12, paddingVertical: 8, color: theme.colors.fg, fontSize: 14, minWidth: 80 }}\r\n />\r\n <View style={{ borderLeftWidth: 1, borderLeftColor: borderColor }}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Increment\"\r\n disabled={isDisabled || isReadOnly}\r\n onPress={() => increment(step)}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 10,\r\n flex: 1,\r\n justifyContent: 'center',\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surface,\r\n borderBottomWidth: 1,\r\n borderBottomColor: borderColor,\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fg, fontSize: 12 }}>+</Text>\r\n </Pressable>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Decrement\"\r\n disabled={isDisabled || isReadOnly}\r\n onPress={() => increment(-step)}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 10,\r\n flex: 1,\r\n justifyContent: 'center',\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surface,\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fg, fontSize: 12 }}>-</Text>\r\n </Pressable>\r\n </View>\r\n </View>\r\n );\r\n});\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface SegmentedOption<V extends string = string> {\r\n value: V;\r\n label: ReactNode;\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface SegmentedProps<V extends string = string> extends ViewProps {\r\n options: SegmentedOption<V>[];\r\n value?: V;\r\n defaultValue?: V;\r\n onChange?: (value: V) => void;\r\n size?: 'sm' | 'md' | 'lg';\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport function Segmented<V extends string = string>(props: SegmentedProps<V>) {\r\n const { options, value: valueProp, defaultValue, onChange, size = 'md', isDisabled, style, ...rest } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<V>((defaultValue ?? options[0]?.value) as V);\r\n const current = valueProp ?? internal;\r\n const padY = size === 'sm' ? 4 : size === 'lg' ? 10 : 6;\r\n const padX = size === 'sm' ? 10 : size === 'lg' ? 16 : 12;\r\n const fontSize = size === 'sm' ? 12 : size === 'lg' ? 15 : 14;\r\n\r\n return (\r\n <View\r\n accessibilityRole=\"radiogroup\"\r\n style={[\r\n {\r\n flexDirection: 'row',\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n borderRadius: Number(theme.radii.md),\r\n padding: 4,\r\n alignSelf: 'flex-start',\r\n opacity: isDisabled ? 0.6 : 1,\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n {options.map((opt) => {\r\n const active = opt.value === current;\r\n const disabled = isDisabled || opt.isDisabled;\r\n return (\r\n <Pressable\r\n key={opt.value}\r\n accessibilityRole=\"radio\"\r\n accessibilityState={{ selected: active, disabled }}\r\n disabled={disabled}\r\n onPress={() => {\r\n if (disabled) return;\r\n if (valueProp === undefined) setInternal(opt.value);\r\n onChange?.(opt.value);\r\n }}\r\n style={{\r\n paddingHorizontal: padX,\r\n paddingVertical: padY,\r\n borderRadius: Number(theme.radii.sm),\r\n backgroundColor: active ? theme.colors.surfaceElevated : 'transparent',\r\n marginHorizontal: 2,\r\n }}\r\n >\r\n <Text style={{ color: active ? theme.colors.fg : theme.colors.fgMuted, fontSize, fontWeight: '500' }}>\r\n {opt.label}\r\n </Text>\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n );\r\n}\r\n","import { useRef, useState } from 'react';\r\nimport { PanResponder, View, type LayoutChangeEvent, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface SliderProps extends Omit<ViewProps, 'onChange'> {\r\n value?: number;\r\n defaultValue?: number;\r\n onChange?: (value: number) => void;\r\n onChangeEnd?: (value: number) => void;\r\n min?: number;\r\n max?: number;\r\n step?: number;\r\n isDisabled?: boolean;\r\n}\r\n\r\nfunction snap(value: number, min: number, max: number, step: number): number {\r\n const clamped = Math.min(Math.max(value, min), max);\r\n if (step <= 0) return clamped;\r\n const steps = Math.round((clamped - min) / step);\r\n return Math.min(Math.max(min + steps * step, min), max);\r\n}\r\n\r\nexport function Slider(props: SliderProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue = 0,\r\n onChange,\r\n onChangeEnd,\r\n min = 0,\r\n max = 100,\r\n step = 1,\r\n isDisabled,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [width, setWidth] = useState(1);\r\n const [internal, setInternal] = useState<number>(defaultValue);\r\n const value = valueProp ?? internal;\r\n const trackOriginRef = useRef<number>(0);\r\n\r\n const commit = (next: number) => {\r\n const snapped = snap(next, min, max, step);\r\n if (valueProp === undefined) setInternal(snapped);\r\n onChange?.(snapped);\r\n return snapped;\r\n };\r\n\r\n const panResponder = useRef(\r\n PanResponder.create({\r\n onStartShouldSetPanResponder: () => !isDisabled,\r\n onMoveShouldSetPanResponder: () => !isDisabled,\r\n onPanResponderGrant: (evt) => {\r\n const x = evt.nativeEvent.locationX;\r\n commit(min + (x / width) * (max - min));\r\n },\r\n onPanResponderMove: (_, gesture) => {\r\n const x = Math.max(0, Math.min(width, gesture.moveX - trackOriginRef.current));\r\n commit(min + (x / width) * (max - min));\r\n },\r\n onPanResponderRelease: () => {\r\n onChangeEnd?.(value);\r\n },\r\n }),\r\n ).current;\r\n\r\n const onLayout = (e: LayoutChangeEvent) => {\r\n setWidth(Math.max(1, e.nativeEvent.layout.width));\r\n e.target.measure?.((x) => {\r\n trackOriginRef.current = x;\r\n });\r\n };\r\n\r\n const percent = ((value - min) / (max - min)) * 100;\r\n\r\n return (\r\n <View\r\n accessible\r\n accessibilityRole=\"adjustable\"\r\n accessibilityValue={{ min, max, now: value }}\r\n style={[{ paddingVertical: 12, opacity: isDisabled ? 0.6 : 1 }, style]}\r\n {...rest}\r\n >\r\n <View\r\n onLayout={onLayout}\r\n {...panResponder.panHandlers}\r\n style={{\r\n height: 4,\r\n borderRadius: 999,\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <View\r\n style={{\r\n position: 'absolute',\r\n left: 0,\r\n top: 0,\r\n bottom: 0,\r\n width: `${percent}%`,\r\n backgroundColor: theme.colors.intent.primary.solid,\r\n borderRadius: 999,\r\n }}\r\n />\r\n <View\r\n style={{\r\n position: 'absolute',\r\n left: `${percent}%`,\r\n transform: [{ translateX: -9 }, { translateY: 0 }],\r\n width: 18,\r\n height: 18,\r\n borderRadius: 9,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderWidth: 2,\r\n borderColor: theme.colors.intent.primary.solid,\r\n top: -7,\r\n }}\r\n />\r\n </View>\r\n </View>\r\n );\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface RateProps extends Omit<ViewProps, 'onChange'> {\r\n value?: number;\r\n defaultValue?: number;\r\n onChange?: (value: number) => void;\r\n count?: number;\r\n allowHalf?: boolean;\r\n isDisabled?: boolean;\r\n /** Custom character (string emoji or React node). Defaults to ★ */\r\n character?: ReactNode;\r\n size?: number;\r\n}\r\n\r\nexport function Rate(props: RateProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue = 0,\r\n onChange,\r\n count = 5,\r\n allowHalf,\r\n isDisabled,\r\n character = '★',\r\n size = 24,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<number>(defaultValue);\r\n const value = valueProp ?? internal;\r\n\r\n const setValue = (next: number) => {\r\n if (isDisabled) return;\r\n const clamped = Math.min(Math.max(next, 0), count);\r\n if (valueProp === undefined) setInternal(clamped);\r\n onChange?.(clamped);\r\n };\r\n\r\n return (\r\n <View\r\n accessibilityRole=\"adjustable\"\r\n accessibilityValue={{ min: 0, max: count, now: value }}\r\n style={[{ flexDirection: 'row', opacity: isDisabled ? 0.6 : 1 }, style]}\r\n {...rest}\r\n >\r\n {Array.from({ length: count }).map((_, i) => {\r\n const filled = value >= i + 1;\r\n const half = !filled && allowHalf && value >= i + 0.5;\r\n const color = filled || half ? theme.colors.intent.warning.solid : theme.colors.border;\r\n return (\r\n <Pressable\r\n key={i}\r\n disabled={isDisabled}\r\n onPress={() => setValue(i + 1)}\r\n onLongPress={allowHalf ? () => setValue(i + 0.5) : undefined}\r\n style={{ marginHorizontal: 2 }}\r\n >\r\n <Text style={{ color, fontSize: size }}>{character}</Text>\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n );\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface UploadFile {\r\n id: string;\r\n name: string;\r\n size?: number;\r\n uri?: string;\r\n status?: 'pending' | 'uploading' | 'done' | 'error';\r\n error?: string;\r\n}\r\n\r\nexport interface UploadProps extends ViewProps {\r\n files?: UploadFile[];\r\n defaultFiles?: UploadFile[];\r\n onChange?: (files: UploadFile[]) => void;\r\n /**\r\n * Called when the user taps the picker area. Host app is expected to launch\r\n * the platform file picker (e.g., expo-document-picker) and add the resulting\r\n * files via `onChange`.\r\n */\r\n onPick?: () => void;\r\n description?: ReactNode;\r\n isDisabled?: boolean;\r\n}\r\n\r\nlet nextId = 0;\r\n\r\nexport function Upload(props: UploadProps) {\r\n const { files: filesProp, defaultFiles = [], onChange, onPick, description, isDisabled, style, ...rest } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<UploadFile[]>(defaultFiles);\r\n const files = filesProp ?? internal;\r\n\r\n const setFiles = (next: UploadFile[]) => {\r\n if (filesProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n };\r\n\r\n const remove = (id: string) => setFiles(files.filter((f) => f.id !== id));\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n disabled={isDisabled}\r\n onPress={onPick}\r\n style={({ pressed }) => ({\r\n padding: 20,\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: 2,\r\n borderStyle: 'dashed',\r\n borderColor: pressed ? theme.colors.intent.primary.solid : theme.colors.border,\r\n backgroundColor: pressed ? theme.colors.intent.primary.subtle : theme.colors.surface,\r\n alignItems: 'center',\r\n opacity: isDisabled ? 0.6 : 1,\r\n })}\r\n >\r\n <Text style={{ fontSize: 14, color: theme.colors.fg, fontWeight: '500' }}>Tap to add files</Text>\r\n {description ? <Text style={{ marginTop: 4, fontSize: 12, color: theme.colors.fgMuted }}>{description}</Text> : null}\r\n </Pressable>\r\n {files.length > 0 ? (\r\n <View style={{ marginTop: 12, gap: 6 }}>\r\n {files.map((f) => (\r\n <View\r\n key={f.id}\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderRadius: Number(theme.radii.sm),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: theme.colors.surface,\r\n }}\r\n >\r\n <View style={{ flex: 1 }}>\r\n <Text style={{ fontSize: 13, color: theme.colors.fg }} numberOfLines={1}>\r\n {f.name}\r\n </Text>\r\n <Text style={{ fontSize: 11, color: theme.colors.fgMuted }}>\r\n {f.size != null ? `${(f.size / 1024).toFixed(1)} KB` : ''} {f.status && f.status !== 'pending' ? `• ${f.status}` : ''}\r\n </Text>\r\n </View>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={`Remove ${f.name}`}\r\n onPress={() => remove(f.id)}\r\n style={({ pressed }) => ({\r\n padding: 6,\r\n borderRadius: Number(theme.radii.sm),\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : 'transparent',\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fgMuted }}>×</Text>\r\n </Pressable>\r\n </View>\r\n ))}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n\r\nexport function makeUploadFile(name: string, opts: Partial<UploadFile> = {}): UploadFile {\r\n return { id: `upload-${++nextId}`, name, ...opts };\r\n}\r\n","import { useEffect, useMemo, useState } from 'react';\r\nimport { FlatList, Pressable, TextInput, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface AutoCompleteOption {\r\n value: string;\r\n label?: string;\r\n}\r\n\r\nexport interface AutoCompleteProps extends Omit<ViewProps, 'children'> {\r\n value?: string;\r\n defaultValue?: string;\r\n onChangeValue?: (value: string) => void;\r\n options?: AutoCompleteOption[];\r\n loadOptions?: (query: string) => Promise<AutoCompleteOption[]>;\r\n onSelectOption?: (opt: AutoCompleteOption) => void;\r\n placeholder?: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport function AutoComplete(props: AutoCompleteProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue = '',\r\n onChangeValue,\r\n options = [],\r\n loadOptions,\r\n onSelectOption,\r\n placeholder,\r\n isDisabled,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState(defaultValue);\r\n const query = valueProp ?? internal;\r\n const [isOpen, setOpen] = useState(false);\r\n const [asyncOptions, setAsyncOptions] = useState<AutoCompleteOption[]>([]);\r\n\r\n useEffect(() => {\r\n if (!loadOptions) return;\r\n let cancelled = false;\r\n loadOptions(query).then((opts) => {\r\n if (!cancelled) setAsyncOptions(opts);\r\n });\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [query, loadOptions]);\r\n\r\n const filtered = useMemo(() => {\r\n const source = loadOptions ? asyncOptions : options;\r\n if (!query) return source;\r\n return source.filter((o) => o.value.toLowerCase().includes(query.toLowerCase()));\r\n }, [asyncOptions, options, loadOptions, query]);\r\n\r\n const setQuery = (next: string) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChangeValue?.(next);\r\n };\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <TextInput\r\n value={query}\r\n placeholder={placeholder}\r\n placeholderTextColor={theme.colors.fgMuted}\r\n editable={!isDisabled}\r\n onChangeText={(t) => {\r\n setQuery(t);\r\n setOpen(true);\r\n }}\r\n onFocus={() => setOpen(true)}\r\n onBlur={() => setTimeout(() => setOpen(false), 150)}\r\n style={{\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: isDisabled ? theme.colors.surface : theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n fontSize: 14,\r\n }}\r\n />\r\n {isOpen && filtered.length > 0 ? (\r\n <View\r\n style={{\r\n marginTop: 4,\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n maxHeight: 200,\r\n }}\r\n >\r\n <FlatList\r\n data={filtered}\r\n keyExtractor={(o) => o.value}\r\n keyboardShouldPersistTaps=\"handled\"\r\n renderItem={({ item }) => (\r\n <Pressable\r\n onPress={() => {\r\n setQuery(item.value);\r\n onSelectOption?.(item);\r\n setOpen(false);\r\n }}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 12,\r\n paddingVertical: 10,\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : 'transparent',\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fg }}>{item.label ?? item.value}</Text>\r\n </Pressable>\r\n )}\r\n />\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Modal, Pressable, View, Text, TextInput, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface ColorPickerProps extends Omit<ViewProps, 'onChange'> {\r\n value?: string;\r\n defaultValue?: string;\r\n onChange?: (hex: string) => void;\r\n presets?: string[];\r\n isDisabled?: boolean;\r\n /** Custom trigger node (otherwise a swatch button is rendered). */\r\n trigger?: ReactNode;\r\n}\r\n\r\nconst DEFAULT_PRESETS = ['#0F172A', '#1D4ED8', '#16A34A', '#F59E0B', '#DC2626', '#7C3AED', '#0EA5E9', '#FFFFFF'];\r\n\r\nfunction normalize(v: string): string {\r\n if (!v) return '#000000';\r\n return v.startsWith('#') ? v.toUpperCase() : `#${v.toUpperCase()}`;\r\n}\r\n\r\nexport function ColorPicker(props: ColorPickerProps) {\r\n const { value: valueProp, defaultValue = '#0F172A', onChange, presets = DEFAULT_PRESETS, isDisabled, trigger, style, ...rest } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState(normalize(defaultValue));\r\n const value = normalize(valueProp ?? internal);\r\n const [isOpen, setOpen] = useState(false);\r\n const [hexInput, setHexInput] = useState(value);\r\n\r\n const setValue = (next: string) => {\r\n const n = normalize(next);\r\n if (valueProp === undefined) setInternal(n);\r\n onChange?.(n);\r\n setHexInput(n);\r\n };\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n disabled={isDisabled}\r\n onPress={() => setOpen(true)}\r\n style={({ pressed }) => ({\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n padding: 6,\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n })}\r\n >\r\n {trigger ?? (\r\n <>\r\n <View style={{ width: 24, height: 24, borderRadius: Number(theme.radii.sm), backgroundColor: value, borderWidth: 1, borderColor: theme.colors.border }} />\r\n <Text style={{ marginLeft: 8, color: theme.colors.fg, fontSize: 13 }}>{value}</Text>\r\n </>\r\n )}\r\n </Pressable>\r\n <Modal transparent visible={isOpen} animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.4)' }}\r\n onPress={() => setOpen(false)}\r\n >\r\n <Pressable\r\n onPress={() => undefined}\r\n style={{\r\n padding: 16,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: Number(theme.radii.md),\r\n minWidth: 260,\r\n }}\r\n >\r\n <Text style={{ fontSize: 14, fontWeight: '500', marginBottom: 12, color: theme.colors.fg }}>Pick color</Text>\r\n <View style={{ width: '100%', height: 60, borderRadius: Number(theme.radii.sm), backgroundColor: value, marginBottom: 12, borderWidth: 1, borderColor: theme.colors.border }} />\r\n <TextInput\r\n value={hexInput}\r\n onChangeText={setHexInput}\r\n onSubmitEditing={() => setValue(hexInput)}\r\n autoCapitalize=\"characters\"\r\n placeholder=\"#RRGGBB\"\r\n style={{\r\n paddingHorizontal: 10,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.sm),\r\n color: theme.colors.fg,\r\n marginBottom: 12,\r\n }}\r\n />\r\n <View style={{ flexDirection: 'row', flexWrap: 'wrap', gap: 6 }}>\r\n {presets.map((p) => (\r\n <Pressable\r\n key={p}\r\n onPress={() => setValue(p)}\r\n style={{\r\n width: 28,\r\n height: 28,\r\n borderRadius: Number(theme.radii.sm),\r\n backgroundColor: p,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n }}\r\n />\r\n ))}\r\n </View>\r\n </Pressable>\r\n </Pressable>\r\n </Modal>\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState } from 'react';\r\nimport { Modal, Pressable, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport type DateValue = Date | null;\r\n\r\nexport interface DatePickerProps extends Omit<ViewProps, 'onChange'> {\r\n value?: DateValue;\r\n defaultValue?: DateValue;\r\n onChange?: (value: DateValue) => void;\r\n min?: Date;\r\n max?: Date;\r\n placeholder?: string;\r\n isDisabled?: boolean;\r\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\r\n format?: (d: Date) => string;\r\n}\r\n\r\nfunction pad(n: number) {\r\n return String(n).padStart(2, '0');\r\n}\r\n\r\nconst defaultFormat = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\r\n\r\nfunction isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return a.toDateString() === b.toDateString();\r\n}\r\n\r\nfunction startOfMonth(d: Date) {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(d: Date, n: number) {\r\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\r\n}\r\n\r\nfunction buildMatrix(view: Date, weekStartsOn: number): Date[][] {\r\n const first = startOfMonth(view);\r\n const firstWeekday = (first.getDay() - weekStartsOn + 7) % 7;\r\n const start = new Date(first);\r\n start.setDate(first.getDate() - firstWeekday);\r\n const weeks: Date[][] = [];\r\n for (let w = 0; w < 6; w++) {\r\n const row: Date[] = [];\r\n for (let d = 0; d < 7; d++) {\r\n const day = new Date(start);\r\n day.setDate(start.getDate() + w * 7 + d);\r\n row.push(day);\r\n }\r\n weeks.push(row);\r\n }\r\n return weeks;\r\n}\r\n\r\nexport function DatePicker(props: DatePickerProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue = null,\r\n onChange,\r\n min,\r\n max,\r\n placeholder = 'YYYY-MM-DD',\r\n isDisabled,\r\n weekStartsOn = 0,\r\n format = defaultFormat,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<DateValue>(defaultValue);\r\n const value = valueProp !== undefined ? valueProp : internal;\r\n const [isOpen, setOpen] = useState(false);\r\n const [view, setView] = useState<Date>(value ?? new Date());\r\n\r\n const matrix = useMemo(() => buildMatrix(view, weekStartsOn), [view, weekStartsOn]);\r\n const weekdays = useMemo(() => {\r\n const arr: string[] = [];\r\n const base = new Date(2024, 0, 7);\r\n for (let i = 0; i < 7; i++) {\r\n const d = new Date(base);\r\n d.setDate(base.getDate() + ((i + weekStartsOn) % 7));\r\n arr.push(d.toLocaleString(undefined, { weekday: 'short' }));\r\n }\r\n return arr;\r\n }, [weekStartsOn]);\r\n\r\n const pick = (d: Date) => {\r\n if (valueProp === undefined) setInternal(d);\r\n onChange?.(d);\r\n setOpen(false);\r\n };\r\n\r\n const display = value ? format(value) : '';\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n disabled={isDisabled}\r\n onPress={() => setOpen(true)}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n })}\r\n >\r\n <Text style={{ color: display ? theme.colors.fg : theme.colors.fgMuted, fontSize: 14 }}>{display || placeholder}</Text>\r\n </Pressable>\r\n <Modal transparent visible={isOpen} animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.4)' }}\r\n onPress={() => setOpen(false)}\r\n >\r\n <Pressable\r\n onPress={() => undefined}\r\n style={{\r\n padding: 12,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: Number(theme.radii.md),\r\n width: 280,\r\n }}\r\n >\r\n <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: 8 }}>\r\n <Pressable onPress={() => setView((v) => addMonths(v, -1))} style={{ padding: 6 }}>\r\n <Text style={{ color: theme.colors.fg, fontSize: 18 }}>‹</Text>\r\n </Pressable>\r\n <Text style={{ fontSize: 14, fontWeight: '500', color: theme.colors.fg }}>\r\n {view.toLocaleString(undefined, { month: 'long', year: 'numeric' })}\r\n </Text>\r\n <Pressable onPress={() => setView((v) => addMonths(v, 1))} style={{ padding: 6 }}>\r\n <Text style={{ color: theme.colors.fg, fontSize: 18 }}>›</Text>\r\n </Pressable>\r\n </View>\r\n <View style={{ flexDirection: 'row' }}>\r\n {weekdays.map((wd) => (\r\n <Text key={wd} style={{ flex: 1, textAlign: 'center', fontSize: 11, color: theme.colors.fgMuted, paddingVertical: 4 }}>\r\n {wd}\r\n </Text>\r\n ))}\r\n </View>\r\n {matrix.map((week, wi) => (\r\n <View key={wi} style={{ flexDirection: 'row' }}>\r\n {week.map((d) => {\r\n const inMonth = d.getMonth() === view.getMonth();\r\n const selected = isSameDay(d, value);\r\n const tooEarly = min && d < new Date(min.getFullYear(), min.getMonth(), min.getDate());\r\n const tooLate = max && d > new Date(max.getFullYear(), max.getMonth(), max.getDate());\r\n const disabled = !!tooEarly || !!tooLate;\r\n return (\r\n <Pressable\r\n key={d.toISOString()}\r\n disabled={disabled}\r\n onPress={() => pick(d)}\r\n style={({ pressed }) => ({\r\n flex: 1,\r\n margin: 1,\r\n paddingVertical: 6,\r\n alignItems: 'center',\r\n borderRadius: Number(theme.radii.sm),\r\n backgroundColor: selected\r\n ? theme.colors.intent.primary.solid\r\n : pressed\r\n ? theme.colors.intent.neutral.subtle\r\n : 'transparent',\r\n })}\r\n >\r\n <Text\r\n style={{\r\n fontSize: 13,\r\n color: selected\r\n ? theme.colors.intent.primary.solidFg\r\n : inMonth\r\n ? theme.colors.fg\r\n : theme.colors.fgSubtle,\r\n opacity: disabled ? 0.4 : 1,\r\n }}\r\n >\r\n {d.getDate()}\r\n </Text>\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n ))}\r\n </Pressable>\r\n </Pressable>\r\n </Modal>\r\n </View>\r\n );\r\n}\r\n","import { useState } from 'react';\r\nimport { Modal, Pressable, ScrollView, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface TimeValue {\r\n hours: number;\r\n minutes: number;\r\n seconds?: number;\r\n}\r\n\r\nexport interface TimePickerProps extends Omit<ViewProps, 'onChange'> {\r\n value?: TimeValue | null;\r\n defaultValue?: TimeValue | null;\r\n onChange?: (value: TimeValue | null) => void;\r\n showSeconds?: boolean;\r\n use12Hours?: boolean;\r\n minuteStep?: number;\r\n placeholder?: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\nconst pad = (n: number) => String(n).padStart(2, '0');\r\n\r\nfunction formatTime(t: TimeValue | null, use12: boolean, showSec: boolean): string {\r\n if (!t) return '';\r\n const h = use12 ? ((t.hours + 11) % 12) + 1 : t.hours;\r\n const main = `${pad(h)}:${pad(t.minutes)}${showSec ? `:${pad(t.seconds ?? 0)}` : ''}`;\r\n return use12 ? `${main} ${t.hours >= 12 ? 'PM' : 'AM'}` : main;\r\n}\r\n\r\ninterface ColProps {\r\n values: number[];\r\n current?: number;\r\n format?: (v: number) => string;\r\n onSelect: (v: number) => void;\r\n}\r\n\r\nfunction Col({ values, current, format, onSelect }: ColProps) {\r\n const theme = useTheme();\r\n return (\r\n <ScrollView style={{ height: 168, width: 56, borderRightWidth: 1, borderRightColor: theme.colors.border }}>\r\n {values.map((v) => {\r\n const active = v === current;\r\n return (\r\n <Pressable\r\n key={v}\r\n onPress={() => onSelect(v)}\r\n style={{\r\n paddingVertical: 6,\r\n paddingHorizontal: 10,\r\n alignItems: 'center',\r\n backgroundColor: active ? theme.colors.intent.primary.solid : 'transparent',\r\n borderRadius: Number(theme.radii.sm),\r\n }}\r\n >\r\n <Text style={{ fontSize: 13, color: active ? theme.colors.intent.primary.solidFg : theme.colors.fg }}>\r\n {format ? format(v) : pad(v)}\r\n </Text>\r\n </Pressable>\r\n );\r\n })}\r\n </ScrollView>\r\n );\r\n}\r\n\r\nexport function TimePicker(props: TimePickerProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue = null,\r\n onChange,\r\n showSeconds = false,\r\n use12Hours = false,\r\n minuteStep = 1,\r\n placeholder,\r\n isDisabled,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<TimeValue | null>(defaultValue);\r\n const value = valueProp !== undefined ? valueProp : internal;\r\n const [isOpen, setOpen] = useState(false);\r\n\r\n const set = (next: TimeValue | null) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n };\r\n\r\n const hours = Array.from({ length: use12Hours ? 12 : 24 }, (_, i) => (use12Hours ? i + 1 : i));\r\n const minutes = Array.from({ length: Math.ceil(60 / minuteStep) }, (_, i) => i * minuteStep);\r\n const seconds = Array.from({ length: 60 }, (_, i) => i);\r\n\r\n const display = formatTime(value, use12Hours, showSeconds);\r\n const currentHourCol = value ? (use12Hours ? ((value.hours + 11) % 12) + 1 : value.hours) : undefined;\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n disabled={isDisabled}\r\n onPress={() => setOpen(true)}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n })}\r\n >\r\n <Text style={{ color: display ? theme.colors.fg : theme.colors.fgMuted, fontSize: 14 }}>\r\n {display || placeholder || (showSeconds ? 'HH:MM:SS' : 'HH:MM')}\r\n </Text>\r\n </Pressable>\r\n <Modal transparent visible={isOpen} animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.4)' }}\r\n onPress={() => setOpen(false)}\r\n >\r\n <Pressable\r\n onPress={() => undefined}\r\n style={{\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: Number(theme.radii.md),\r\n flexDirection: 'row',\r\n padding: 8,\r\n }}\r\n >\r\n <Col\r\n values={hours}\r\n current={currentHourCol}\r\n format={(v) => (use12Hours ? pad(v) : pad(v))}\r\n onSelect={(h) => {\r\n let actual = h;\r\n if (use12Hours) {\r\n const isPM = (value?.hours ?? 0) >= 12;\r\n actual = (h % 12) + (isPM ? 12 : 0);\r\n }\r\n set({ hours: actual, minutes: value?.minutes ?? 0, seconds: showSeconds ? value?.seconds ?? 0 : undefined });\r\n }}\r\n />\r\n <Col\r\n values={minutes}\r\n current={value?.minutes}\r\n onSelect={(m) => set({ hours: value?.hours ?? 0, minutes: m, seconds: showSeconds ? value?.seconds ?? 0 : undefined })}\r\n />\r\n {showSeconds ? (\r\n <Col\r\n values={seconds}\r\n current={value?.seconds}\r\n onSelect={(s) => set({ hours: value?.hours ?? 0, minutes: value?.minutes ?? 0, seconds: s })}\r\n />\r\n ) : null}\r\n {use12Hours ? (\r\n <View style={{ paddingHorizontal: 4 }}>\r\n {(['AM', 'PM'] as const).map((p) => {\r\n const isPM = (value?.hours ?? 0) >= 12;\r\n const active = p === 'PM' ? isPM : !isPM;\r\n return (\r\n <Pressable\r\n key={p}\r\n onPress={() => {\r\n const base = value?.hours ?? 0;\r\n const next = p === 'PM' && base < 12 ? base + 12 : p === 'AM' && base >= 12 ? base - 12 : base;\r\n set({ hours: next, minutes: value?.minutes ?? 0, seconds: showSeconds ? value?.seconds ?? 0 : undefined });\r\n }}\r\n style={{\r\n paddingHorizontal: 10,\r\n paddingVertical: 6,\r\n marginVertical: 4,\r\n borderRadius: Number(theme.radii.sm),\r\n backgroundColor: active ? theme.colors.intent.primary.solid : 'transparent',\r\n }}\r\n >\r\n <Text style={{ color: active ? theme.colors.intent.primary.solidFg : theme.colors.fg, fontSize: 13 }}>{p}</Text>\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n ) : null}\r\n </Pressable>\r\n </Pressable>\r\n </Modal>\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState } from 'react';\r\nimport { Modal, Pressable, ScrollView, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface DateRange {\r\n start: Date | null;\r\n end: Date | null;\r\n}\r\n\r\nexport interface DateRangePickerProps extends Omit<ViewProps, 'onChange'> {\r\n value?: DateRange;\r\n defaultValue?: DateRange;\r\n onChange?: (value: DateRange) => void;\r\n min?: Date;\r\n max?: Date;\r\n isDisabled?: boolean;\r\n format?: (d: Date) => string;\r\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\r\n placeholder?: { start?: string; end?: string };\r\n}\r\n\r\nconst pad = (n: number) => String(n).padStart(2, '0');\r\nconst defaultFormat = (d: Date) => `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;\r\n\r\nfunction startOfMonth(d: Date) {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(d: Date, n: number) {\r\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\r\n}\r\n\r\nfunction buildMatrix(view: Date, weekStartsOn: number): Date[][] {\r\n const first = startOfMonth(view);\r\n const firstWeekday = (first.getDay() - weekStartsOn + 7) % 7;\r\n const start = new Date(first);\r\n start.setDate(first.getDate() - firstWeekday);\r\n const weeks: Date[][] = [];\r\n for (let w = 0; w < 6; w++) {\r\n const row: Date[] = [];\r\n for (let d = 0; d < 7; d++) {\r\n const day = new Date(start);\r\n day.setDate(start.getDate() + w * 7 + d);\r\n row.push(day);\r\n }\r\n weeks.push(row);\r\n }\r\n return weeks;\r\n}\r\n\r\nfunction dayKey(d: Date): number {\r\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\r\n}\r\n\r\nfunction isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return a.toDateString() === b.toDateString();\r\n}\r\n\r\nexport function DateRangePicker(props: DateRangePickerProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n min,\r\n max,\r\n isDisabled,\r\n format = defaultFormat,\r\n weekStartsOn = 0,\r\n placeholder,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<DateRange>(defaultValue ?? { start: null, end: null });\r\n const value = valueProp ?? internal;\r\n const [isOpen, setOpen] = useState(false);\r\n const [view, setView] = useState<Date>(value.start ?? new Date());\r\n const [pendingStart, setPendingStart] = useState<Date | null>(null);\r\n\r\n const setRange = (next: DateRange) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n };\r\n\r\n const pickDay = (d: Date) => {\r\n if (!pendingStart || (value.start && value.end)) {\r\n setPendingStart(d);\r\n setRange({ start: d, end: null });\r\n return;\r\n }\r\n const start = pendingStart;\r\n const end = d;\r\n if (dayKey(end) < dayKey(start)) setRange({ start: end, end: start });\r\n else setRange({ start, end });\r\n setPendingStart(null);\r\n setOpen(false);\r\n };\r\n\r\n const weekdays = useMemo(() => {\r\n const arr: string[] = [];\r\n const base = new Date(2024, 0, 7);\r\n for (let i = 0; i < 7; i++) {\r\n const d = new Date(base);\r\n d.setDate(base.getDate() + ((i + weekStartsOn) % 7));\r\n arr.push(d.toLocaleString(undefined, { weekday: 'short' }));\r\n }\r\n return arr;\r\n }, [weekStartsOn]);\r\n\r\n const renderMonth = (offset: number) => {\r\n const monthView = addMonths(view, offset);\r\n const matrix = buildMatrix(monthView, weekStartsOn);\r\n return (\r\n <View key={offset} style={{ width: 240 }}>\r\n <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: 6 }}>\r\n {offset === 0 ? (\r\n <Pressable onPress={() => setView((v) => addMonths(v, -1))} style={{ padding: 4 }}>\r\n <Text style={{ fontSize: 18, color: theme.colors.fg }}>‹</Text>\r\n </Pressable>\r\n ) : (\r\n <View style={{ width: 24 }} />\r\n )}\r\n <Text style={{ fontSize: 14, fontWeight: '500', color: theme.colors.fg }}>\r\n {monthView.toLocaleString(undefined, { month: 'long', year: 'numeric' })}\r\n </Text>\r\n {offset === 1 ? (\r\n <Pressable onPress={() => setView((v) => addMonths(v, 1))} style={{ padding: 4 }}>\r\n <Text style={{ fontSize: 18, color: theme.colors.fg }}>›</Text>\r\n </Pressable>\r\n ) : (\r\n <View style={{ width: 24 }} />\r\n )}\r\n </View>\r\n <View style={{ flexDirection: 'row' }}>\r\n {weekdays.map((wd) => (\r\n <Text key={wd} style={{ flex: 1, textAlign: 'center', fontSize: 11, color: theme.colors.fgMuted, paddingVertical: 4 }}>\r\n {wd}\r\n </Text>\r\n ))}\r\n </View>\r\n {matrix.map((week, wi) => (\r\n <View key={wi} style={{ flexDirection: 'row' }}>\r\n {week.map((d) => {\r\n const inMonth = d.getMonth() === monthView.getMonth();\r\n const isStart = isSameDay(d, value.start);\r\n const isEnd = isSameDay(d, value.end);\r\n const inRange =\r\n value.start && value.end && dayKey(d) > dayKey(value.start) && dayKey(d) < dayKey(value.end);\r\n const tooEarly = min && d < new Date(min.getFullYear(), min.getMonth(), min.getDate());\r\n const tooLate = max && d > new Date(max.getFullYear(), max.getMonth(), max.getDate());\r\n const disabled = !!tooEarly || !!tooLate;\r\n const isEndpoint = isStart || isEnd;\r\n return (\r\n <Pressable\r\n key={d.toISOString()}\r\n disabled={disabled}\r\n onPress={() => pickDay(d)}\r\n style={{\r\n flex: 1,\r\n margin: 1,\r\n paddingVertical: 6,\r\n alignItems: 'center',\r\n borderRadius: Number(theme.radii.sm),\r\n backgroundColor: isEndpoint\r\n ? theme.colors.intent.primary.solid\r\n : inRange\r\n ? theme.colors.intent.primary.subtle\r\n : 'transparent',\r\n }}\r\n >\r\n <Text\r\n style={{\r\n fontSize: 13,\r\n color: isEndpoint\r\n ? theme.colors.intent.primary.solidFg\r\n : inMonth\r\n ? theme.colors.fg\r\n : theme.colors.fgSubtle,\r\n opacity: disabled ? 0.4 : 1,\r\n }}\r\n >\r\n {d.getDate()}\r\n </Text>\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n ))}\r\n </View>\r\n );\r\n };\r\n\r\n const startText = value.start ? format(value.start) : '';\r\n const endText = value.end ? format(value.end) : '';\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n disabled={isDisabled}\r\n onPress={() => setOpen(true)}\r\n style={({ pressed }) => ({\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n gap: 8,\r\n })}\r\n >\r\n <Text style={{ color: startText ? theme.colors.fg : theme.colors.fgMuted, fontSize: 14, minWidth: 90 }}>\r\n {startText || placeholder?.start || 'Start'}\r\n </Text>\r\n <Text style={{ color: theme.colors.fgMuted }}>→</Text>\r\n <Text style={{ color: endText ? theme.colors.fg : theme.colors.fgMuted, fontSize: 14, minWidth: 90 }}>\r\n {endText || placeholder?.end || 'End'}\r\n </Text>\r\n </Pressable>\r\n <Modal transparent visible={isOpen} animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.4)' }}\r\n onPress={() => setOpen(false)}\r\n >\r\n <Pressable\r\n onPress={() => undefined}\r\n style={{\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: Number(theme.radii.md),\r\n padding: 12,\r\n maxWidth: '95%',\r\n }}\r\n >\r\n <ScrollView horizontal>\r\n <View style={{ flexDirection: 'row', gap: 12 }}>\r\n {renderMonth(0)}\r\n {renderMonth(1)}\r\n </View>\r\n </ScrollView>\r\n </Pressable>\r\n </Pressable>\r\n </Modal>\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState, type ReactNode } from 'react';\r\nimport { Modal, Pressable, ScrollView, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface CascaderOption {\r\n value: string;\r\n label: ReactNode;\r\n children?: CascaderOption[];\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface CascaderProps extends Omit<ViewProps, 'onChange'> {\r\n options: CascaderOption[];\r\n value?: string[];\r\n defaultValue?: string[];\r\n onChange?: (value: string[], path: CascaderOption[]) => void;\r\n placeholder?: string;\r\n displaySeparator?: string;\r\n isDisabled?: boolean;\r\n}\r\n\r\nfunction findPath(options: CascaderOption[], value: string[]): CascaderOption[] {\r\n const path: CascaderOption[] = [];\r\n let level = options;\r\n for (const v of value) {\r\n const found = level.find((o) => o.value === v);\r\n if (!found) break;\r\n path.push(found);\r\n level = found.children ?? [];\r\n }\r\n return path;\r\n}\r\n\r\nexport function Cascader(props: CascaderProps) {\r\n const {\r\n options,\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n placeholder = 'Please select',\r\n displaySeparator = ' / ',\r\n isDisabled,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<string[]>(defaultValue ?? []);\r\n const value = valueProp ?? internal;\r\n const [isOpen, setOpen] = useState(false);\r\n const [activePath, setActivePath] = useState<string[]>(value);\r\n\r\n const columns = useMemo(() => {\r\n const cols: CascaderOption[][] = [options];\r\n let level = options;\r\n for (const v of activePath) {\r\n const found = level.find((o) => o.value === v);\r\n if (!found || !found.children?.length) break;\r\n cols.push(found.children);\r\n level = found.children;\r\n }\r\n return cols;\r\n }, [options, activePath]);\r\n\r\n const onSelectAtLevel = (level: number, opt: CascaderOption) => {\r\n if (opt.isDisabled) return;\r\n const nextPath = [...activePath.slice(0, level), opt.value];\r\n setActivePath(nextPath);\r\n if (!opt.children?.length) {\r\n const fullPath = findPath(options, nextPath);\r\n if (valueProp === undefined) setInternal(nextPath);\r\n onChange?.(nextPath, fullPath);\r\n setOpen(false);\r\n }\r\n };\r\n\r\n const displayed = value.length > 0 ? findPath(options, value).map((o) => o.label).join(displaySeparator) : '';\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n disabled={isDisabled}\r\n onPress={() => {\r\n setActivePath(value);\r\n setOpen(true);\r\n }}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n })}\r\n >\r\n <Text style={{ color: displayed ? theme.colors.fg : theme.colors.fgMuted, fontSize: 14 }}>\r\n {displayed || placeholder}\r\n </Text>\r\n </Pressable>\r\n <Modal transparent visible={isOpen} animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.4)' }}\r\n onPress={() => setOpen(false)}\r\n >\r\n <Pressable\r\n onPress={() => undefined}\r\n style={{\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: Number(theme.radii.md),\r\n flexDirection: 'row',\r\n maxWidth: '95%',\r\n maxHeight: 360,\r\n }}\r\n >\r\n {columns.map((col, i) => (\r\n <ScrollView\r\n key={i}\r\n style={{\r\n width: 160,\r\n borderRightWidth: i < columns.length - 1 ? 1 : 0,\r\n borderRightColor: theme.colors.border,\r\n }}\r\n >\r\n {col.map((opt) => {\r\n const isActive = activePath[i] === opt.value;\r\n const hasChildren = !!opt.children?.length;\r\n return (\r\n <Pressable\r\n key={opt.value}\r\n disabled={opt.isDisabled}\r\n onPress={() => onSelectAtLevel(i, opt)}\r\n style={({ pressed }) => ({\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n backgroundColor: isActive\r\n ? theme.colors.intent.primary.subtle\r\n : pressed\r\n ? theme.colors.intent.neutral.subtle\r\n : 'transparent',\r\n })}\r\n >\r\n <Text style={{ color: opt.isDisabled ? theme.colors.fgSubtle : theme.colors.fg, fontSize: 13 }}>\r\n {opt.label}\r\n </Text>\r\n {hasChildren ? <Text style={{ color: theme.colors.fgMuted }}>›</Text> : null}\r\n </Pressable>\r\n );\r\n })}\r\n </ScrollView>\r\n ))}\r\n </Pressable>\r\n </Pressable>\r\n </Modal>\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState, type ReactNode } from 'react';\r\nimport { Modal, Pressable, ScrollView, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface TreeNode {\r\n value: string;\r\n label: ReactNode;\r\n children?: TreeNode[];\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface TreeSelectProps extends Omit<ViewProps, 'onChange'> {\r\n options: TreeNode[];\r\n value?: string | string[];\r\n defaultValue?: string | string[];\r\n onChange?: (value: string | string[]) => void;\r\n multiple?: boolean;\r\n placeholder?: string;\r\n defaultExpanded?: string[];\r\n isDisabled?: boolean;\r\n}\r\n\r\nfunction findNode(nodes: TreeNode[], v: string): TreeNode | undefined {\r\n for (const n of nodes) {\r\n if (n.value === v) return n;\r\n if (n.children) {\r\n const f = findNode(n.children, v);\r\n if (f) return f;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\ninterface NodeRowProps {\r\n node: TreeNode;\r\n depth: number;\r\n expanded: Set<string>;\r\n toggle: (v: string) => void;\r\n isSelected: (v: string) => boolean;\r\n onSelect: (n: TreeNode) => void;\r\n multiple: boolean;\r\n}\r\n\r\nfunction NodeRow({ node, depth, expanded, toggle, isSelected, onSelect, multiple }: NodeRowProps) {\r\n const theme = useTheme();\r\n const hasChildren = !!node.children?.length;\r\n const isExpanded = expanded.has(node.value);\r\n const selected = isSelected(node.value);\r\n\r\n return (\r\n <View>\r\n <Pressable\r\n disabled={node.isDisabled}\r\n onPress={() => onSelect(node)}\r\n style={({ pressed }) => ({\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: 8 + depth * 14,\r\n paddingVertical: 6,\r\n backgroundColor: selected ? theme.colors.intent.primary.subtle : pressed ? theme.colors.intent.neutral.subtle : 'transparent',\r\n })}\r\n >\r\n {hasChildren ? (\r\n <Pressable\r\n onPress={() => toggle(node.value)}\r\n hitSlop={6}\r\n style={{ width: 16, alignItems: 'center', marginRight: 4 }}\r\n >\r\n <Text style={{ color: theme.colors.fgMuted }}>{isExpanded ? '▾' : '▸'}</Text>\r\n </Pressable>\r\n ) : (\r\n <View style={{ width: 20 }} />\r\n )}\r\n {multiple ? (\r\n <View\r\n style={{\r\n width: 16,\r\n height: 16,\r\n borderRadius: Number(theme.radii.sm),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: selected ? theme.colors.intent.primary.solid : 'transparent',\r\n marginRight: 8,\r\n }}\r\n />\r\n ) : null}\r\n <Text style={{ color: node.isDisabled ? theme.colors.fgSubtle : theme.colors.fg, fontSize: 13 }}>{node.label}</Text>\r\n </Pressable>\r\n {hasChildren && isExpanded ? (\r\n <View>\r\n {node.children!.map((child) => (\r\n <NodeRow\r\n key={child.value}\r\n node={child}\r\n depth={depth + 1}\r\n expanded={expanded}\r\n toggle={toggle}\r\n isSelected={isSelected}\r\n onSelect={onSelect}\r\n multiple={multiple}\r\n />\r\n ))}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n\r\nexport function TreeSelect(props: TreeSelectProps) {\r\n const {\r\n options,\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n multiple = false,\r\n placeholder = 'Please select',\r\n defaultExpanded,\r\n isDisabled,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<string | string[]>(defaultValue ?? (multiple ? [] : ''));\r\n const value = valueProp !== undefined ? valueProp : internal;\r\n const [isOpen, setOpen] = useState(false);\r\n const [expanded, setExpanded] = useState<Set<string>>(new Set(defaultExpanded ?? []));\r\n\r\n const setValue = (next: string | string[]) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n };\r\n\r\n const toggle = (v: string) => {\r\n setExpanded((prev) => {\r\n const next = new Set(prev);\r\n if (next.has(v)) next.delete(v);\r\n else next.add(v);\r\n return next;\r\n });\r\n };\r\n\r\n const isSelected = (v: string): boolean => {\r\n if (multiple) return Array.isArray(value) && value.includes(v);\r\n return value === v;\r\n };\r\n\r\n const onSelectNode = (n: TreeNode) => {\r\n if (multiple) {\r\n const arr = Array.isArray(value) ? [...value] : [];\r\n const idx = arr.indexOf(n.value);\r\n if (idx >= 0) arr.splice(idx, 1);\r\n else arr.push(n.value);\r\n setValue(arr);\r\n } else {\r\n setValue(n.value);\r\n setOpen(false);\r\n }\r\n };\r\n\r\n const displayed = useMemo(() => {\r\n if (multiple) {\r\n const arr = Array.isArray(value) ? value : [];\r\n return arr.map((v) => findNode(options, v)?.label).filter(Boolean) as ReactNode[];\r\n }\r\n return typeof value === 'string' && value ? [findNode(options, value)?.label].filter(Boolean) : [];\r\n }, [value, options, multiple]);\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n disabled={isDisabled}\r\n onPress={() => setOpen(true)}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n })}\r\n >\r\n <Text style={{ color: displayed.length === 0 ? theme.colors.fgMuted : theme.colors.fg, fontSize: 14 }}>\r\n {displayed.length === 0 ? placeholder : displayed.map((d, i) => (i > 0 ? `, ${d}` : d)).join('')}\r\n </Text>\r\n </Pressable>\r\n <Modal transparent visible={isOpen} animationType=\"fade\" onRequestClose={() => setOpen(false)}>\r\n <Pressable\r\n style={{ flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'rgba(0,0,0,0.4)' }}\r\n onPress={() => setOpen(false)}\r\n >\r\n <Pressable\r\n onPress={() => undefined}\r\n style={{\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: Number(theme.radii.md),\r\n width: 280,\r\n maxHeight: 360,\r\n }}\r\n >\r\n <ScrollView>\r\n {options.map((opt) => (\r\n <NodeRow\r\n key={opt.value}\r\n node={opt}\r\n depth={0}\r\n expanded={expanded}\r\n toggle={toggle}\r\n isSelected={isSelected}\r\n onSelect={onSelectNode}\r\n multiple={multiple}\r\n />\r\n ))}\r\n </ScrollView>\r\n </Pressable>\r\n </Pressable>\r\n </Modal>\r\n </View>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { Pressable, TextInput, View, Text, type TextInputProps, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface MentionItem {\r\n value: string;\r\n label?: string;\r\n}\r\n\r\nexport interface MentionsProps extends Omit<ViewProps, 'children'> {\r\n value?: string;\r\n defaultValue?: string;\r\n onChangeText?: (v: string) => void;\r\n options?: MentionItem[];\r\n loadOptions?: (query: string) => Promise<MentionItem[]>;\r\n trigger?: string;\r\n isDisabled?: boolean;\r\n textInputProps?: Omit<TextInputProps, 'value' | 'onChangeText'>;\r\n}\r\n\r\ninterface MentionState {\r\n active: boolean;\r\n start: number;\r\n query: string;\r\n}\r\n\r\nexport function Mentions(props: MentionsProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue = '',\r\n onChangeText,\r\n options = [],\r\n loadOptions,\r\n trigger = '@',\r\n isDisabled,\r\n textInputProps,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState(defaultValue);\r\n const value = valueProp ?? internal;\r\n const [state, setState] = useState<MentionState>({ active: false, start: -1, query: '' });\r\n const [suggestions, setSuggestions] = useState<MentionItem[]>([]);\r\n const caretRef = useRef<number>(value.length);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n if (!state.active) {\r\n setSuggestions([]);\r\n return;\r\n }\r\n if (loadOptions) {\r\n loadOptions(state.query).then((opts) => {\r\n if (!cancelled) setSuggestions(opts);\r\n });\r\n } else {\r\n const q = state.query.toLowerCase();\r\n setSuggestions(options.filter((o) => o.value.toLowerCase().includes(q)).slice(0, 8));\r\n }\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [state.active, state.query, options, loadOptions]);\r\n\r\n const setValue = (next: string) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChangeText?.(next);\r\n };\r\n\r\n const handleChange = (next: string) => {\r\n setValue(next);\r\n const caret = caretRef.current;\r\n let i = caret - 1;\r\n while (i >= 0 && next[i] !== trigger && !/\\s/.test(next[i]!)) {\r\n i--;\r\n }\r\n if (i >= 0 && next[i] === trigger) {\r\n setState({ active: true, start: i, query: next.slice(i + 1, caret) });\r\n } else {\r\n setState({ active: false, start: -1, query: '' });\r\n }\r\n };\r\n\r\n const insertSelected = (item: MentionItem) => {\r\n const text = value;\r\n const before = text.slice(0, state.start);\r\n const after = text.slice(caretRef.current);\r\n const insertion = `${trigger}${item.value} `;\r\n setValue(`${before}${insertion}${after}`);\r\n setState({ active: false, start: -1, query: '' });\r\n };\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <TextInput\r\n value={value}\r\n editable={!isDisabled}\r\n multiline\r\n onChangeText={handleChange}\r\n onSelectionChange={(e) => {\r\n caretRef.current = e.nativeEvent.selection.end ?? value.length;\r\n }}\r\n placeholderTextColor={theme.colors.fgMuted}\r\n style={{\r\n minHeight: 84,\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: isDisabled ? theme.colors.surface : theme.colors.surfaceElevated,\r\n color: theme.colors.fg,\r\n fontSize: 14,\r\n textAlignVertical: 'top',\r\n }}\r\n {...textInputProps}\r\n />\r\n {state.active && suggestions.length > 0 ? (\r\n <View\r\n style={{\r\n marginTop: 4,\r\n borderRadius: Number(theme.radii.md),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n maxHeight: 200,\r\n paddingVertical: 4,\r\n }}\r\n >\r\n {suggestions.map((item) => (\r\n <Pressable\r\n key={item.value}\r\n onPress={() => insertSelected(item)}\r\n style={({ pressed }) => ({\r\n paddingHorizontal: 12,\r\n paddingVertical: 8,\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : 'transparent',\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fg, fontSize: 14 }}>{item.label ?? item.value}</Text>\r\n </Pressable>\r\n ))}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState, type ReactNode } from 'react';\r\nimport { Pressable, ScrollView, View, Text, TextInput, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface TransferItem {\r\n key: string;\r\n label: ReactNode;\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface TransferProps extends Omit<ViewProps, 'onChange'> {\r\n dataSource: TransferItem[];\r\n value?: string[];\r\n defaultValue?: string[];\r\n onChange?: (targetKeys: string[]) => void;\r\n titles?: [ReactNode, ReactNode];\r\n showSearch?: boolean;\r\n isDisabled?: boolean;\r\n}\r\n\r\ninterface ListProps {\r\n title: ReactNode;\r\n items: TransferItem[];\r\n selected: Set<string>;\r\n setSelected: (set: Set<string>) => void;\r\n showSearch?: boolean;\r\n isDisabled?: boolean;\r\n}\r\n\r\nfunction ColumnList({ title, items, selected, setSelected, showSearch, isDisabled }: ListProps) {\r\n const theme = useTheme();\r\n const [query, setQuery] = useState('');\r\n const filtered = useMemo(() => {\r\n if (!query) return items;\r\n const q = query.toLowerCase();\r\n return items.filter((it) => String(it.label).toLowerCase().includes(q) || it.key.toLowerCase().includes(q));\r\n }, [items, query]);\r\n\r\n const toggle = (it: TransferItem) => {\r\n if (it.isDisabled || isDisabled) return;\r\n const next = new Set(selected);\r\n if (next.has(it.key)) next.delete(it.key);\r\n else next.add(it.key);\r\n setSelected(next);\r\n };\r\n\r\n return (\r\n <View\r\n style={{\r\n width: 200,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.md),\r\n backgroundColor: theme.colors.surfaceElevated,\r\n maxHeight: 320,\r\n }}\r\n >\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: 10,\r\n paddingVertical: 8,\r\n borderBottomWidth: 1,\r\n borderBottomColor: theme.colors.border,\r\n }}\r\n >\r\n <Text style={{ flex: 1, fontSize: 13, fontWeight: '500', color: theme.colors.fg }}>{title}</Text>\r\n <Text style={{ fontSize: 12, color: theme.colors.fgMuted }}>\r\n {selected.size}/{items.length}\r\n </Text>\r\n </View>\r\n {showSearch ? (\r\n <View style={{ padding: 6, borderBottomWidth: 1, borderBottomColor: theme.colors.border }}>\r\n <TextInput\r\n value={query}\r\n onChangeText={setQuery}\r\n placeholder=\"Search\"\r\n placeholderTextColor={theme.colors.fgMuted}\r\n editable={!isDisabled}\r\n style={{\r\n paddingHorizontal: 8,\r\n paddingVertical: 6,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: Number(theme.radii.sm),\r\n fontSize: 13,\r\n color: theme.colors.fg,\r\n }}\r\n />\r\n </View>\r\n ) : null}\r\n <ScrollView>\r\n {filtered.map((it) => {\r\n const checked = selected.has(it.key);\r\n return (\r\n <Pressable\r\n key={it.key}\r\n disabled={it.isDisabled || isDisabled}\r\n onPress={() => toggle(it)}\r\n style={({ pressed }) => ({\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: 10,\r\n paddingVertical: 8,\r\n backgroundColor: checked\r\n ? theme.colors.intent.primary.subtle\r\n : pressed\r\n ? theme.colors.intent.neutral.subtle\r\n : 'transparent',\r\n })}\r\n >\r\n <View\r\n style={{\r\n width: 16,\r\n height: 16,\r\n borderRadius: Number(theme.radii.sm),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: checked ? theme.colors.intent.primary.solid : 'transparent',\r\n marginRight: 8,\r\n }}\r\n />\r\n <Text style={{ flex: 1, color: it.isDisabled ? theme.colors.fgSubtle : theme.colors.fg, fontSize: 13 }}>\r\n {it.label}\r\n </Text>\r\n </Pressable>\r\n );\r\n })}\r\n </ScrollView>\r\n </View>\r\n );\r\n}\r\n\r\nexport function Transfer(props: TransferProps) {\r\n const { dataSource, value: valueProp, defaultValue, onChange, titles, showSearch, isDisabled, style, ...rest } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<string[]>(defaultValue ?? []);\r\n const targetKeys = valueProp ?? internal;\r\n const [leftSelected, setLeftSelected] = useState<Set<string>>(new Set());\r\n const [rightSelected, setRightSelected] = useState<Set<string>>(new Set());\r\n\r\n const leftItems = dataSource.filter((it) => !targetKeys.includes(it.key));\r\n const rightItems = dataSource.filter((it) => targetKeys.includes(it.key));\r\n\r\n const setTargets = (next: string[]) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n };\r\n\r\n const moveRight = () => {\r\n const keys = leftItems.filter((it) => leftSelected.has(it.key) && !it.isDisabled).map((it) => it.key);\r\n if (keys.length === 0) return;\r\n setTargets([...targetKeys, ...keys]);\r\n setLeftSelected(new Set());\r\n };\r\n\r\n const moveLeft = () => {\r\n const keys = new Set(targetKeys);\r\n rightItems.forEach((it) => {\r\n if (rightSelected.has(it.key) && !it.isDisabled) keys.delete(it.key);\r\n });\r\n setTargets(Array.from(keys));\r\n setRightSelected(new Set());\r\n };\r\n\r\n return (\r\n <View style={[{ flexDirection: 'row', alignItems: 'stretch', gap: 12 }, style]} {...rest}>\r\n <ColumnList\r\n title={titles?.[0] ?? 'Source'}\r\n items={leftItems}\r\n selected={leftSelected}\r\n setSelected={setLeftSelected}\r\n showSearch={showSearch}\r\n isDisabled={isDisabled}\r\n />\r\n <View style={{ justifyContent: 'center', gap: 8 }}>\r\n <Pressable\r\n disabled={isDisabled || leftSelected.size === 0}\r\n onPress={moveRight}\r\n style={({ pressed }) => ({\r\n paddingVertical: 6,\r\n paddingHorizontal: 8,\r\n borderRadius: Number(theme.radii.sm),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled || leftSelected.size === 0 ? 0.4 : 1,\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fg }}>›</Text>\r\n </Pressable>\r\n <Pressable\r\n disabled={isDisabled || rightSelected.size === 0}\r\n onPress={moveLeft}\r\n style={({ pressed }) => ({\r\n paddingVertical: 6,\r\n paddingHorizontal: 8,\r\n borderRadius: Number(theme.radii.sm),\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: pressed ? theme.colors.intent.neutral.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled || rightSelected.size === 0 ? 0.4 : 1,\r\n })}\r\n >\r\n <Text style={{ color: theme.colors.fg }}>‹</Text>\r\n </Pressable>\r\n </View>\r\n <ColumnList\r\n title={titles?.[1] ?? 'Target'}\r\n items={rightItems}\r\n selected={rightSelected}\r\n setSelected={setRightSelected}\r\n showSearch={showSearch}\r\n isDisabled={isDisabled}\r\n />\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState, type ReactNode } from 'react';\r\nimport { Pressable, ScrollView, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport type SortOrder = 'asc' | 'desc' | null;\r\n\r\nexport interface TableColumn<Row = Record<string, unknown>> {\r\n key: string;\r\n title: ReactNode;\r\n dataIndex?: keyof Row | string;\r\n render?: (value: unknown, row: Row, index: number) => ReactNode;\r\n sortable?: boolean;\r\n sorter?: (a: Row, b: Row) => number;\r\n width?: number;\r\n align?: 'left' | 'center' | 'right';\r\n}\r\n\r\nexport interface TableProps<Row = Record<string, unknown>> extends Omit<ViewProps, 'children'> {\r\n columns: TableColumn<Row>[];\r\n dataSource: Row[];\r\n rowKey?: keyof Row | ((row: Row, index: number) => string | number);\r\n size?: 'sm' | 'md' | 'lg';\r\n bordered?: boolean;\r\n striped?: boolean;\r\n emptyState?: ReactNode;\r\n onRowPress?: (row: Row, index: number) => void;\r\n}\r\n\r\nfunction defaultCompare(a: unknown, b: unknown): number {\r\n if (a == null && b == null) return 0;\r\n if (a == null) return -1;\r\n if (b == null) return 1;\r\n if (typeof a === 'number' && typeof b === 'number') return a - b;\r\n return String(a).localeCompare(String(b));\r\n}\r\n\r\nexport function Table<Row extends Record<string, unknown>>(props: TableProps<Row>) {\r\n const {\r\n columns,\r\n dataSource,\r\n rowKey,\r\n size = 'md',\r\n bordered,\r\n striped,\r\n emptyState,\r\n onRowPress,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [sortKey, setSortKey] = useState<string | null>(null);\r\n const [sortOrder, setSortOrder] = useState<SortOrder>(null);\r\n\r\n const sortedRows = useMemo(() => {\r\n if (!sortKey || !sortOrder) return dataSource;\r\n const col = columns.find((c) => c.key === sortKey);\r\n if (!col || !col.sortable) return dataSource;\r\n const arr = [...dataSource];\r\n const compare = col.sorter\r\n ? col.sorter\r\n : (a: Row, b: Row) => defaultCompare(a[col.dataIndex as keyof Row], b[col.dataIndex as keyof Row]);\r\n arr.sort((a, b) => (sortOrder === 'asc' ? compare(a, b) : -compare(a, b)));\r\n return arr;\r\n }, [columns, dataSource, sortKey, sortOrder]);\r\n\r\n const toggleSort = (key: string) => {\r\n if (sortKey !== key) {\r\n setSortKey(key);\r\n setSortOrder('asc');\r\n return;\r\n }\r\n if (sortOrder === 'asc') setSortOrder('desc');\r\n else if (sortOrder === 'desc') {\r\n setSortKey(null);\r\n setSortOrder(null);\r\n } else setSortOrder('asc');\r\n };\r\n\r\n const cellPadding = size === 'sm' ? 8 : size === 'lg' ? 16 : 12;\r\n const borderColor = theme.colors.border;\r\n\r\n const getRowKey = (row: Row, idx: number): string | number => {\r\n if (typeof rowKey === 'function') return rowKey(row, idx);\r\n if (rowKey) return String((row as Record<string, unknown>)[rowKey as string] ?? idx);\r\n return idx;\r\n };\r\n\r\n if (dataSource.length === 0 && emptyState) {\r\n return <View accessibilityRole=\"text\">{typeof emptyState === 'string' ? <Text>{emptyState}</Text> : emptyState}</View>;\r\n }\r\n\r\n return (\r\n <ScrollView horizontal showsHorizontalScrollIndicator={false} style={style} {...rest}>\r\n <View\r\n style={{\r\n borderWidth: bordered ? 1 : 0,\r\n borderColor,\r\n borderRadius: 8,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n borderBottomWidth: 1,\r\n borderBottomColor: borderColor,\r\n }}\r\n >\r\n {columns.map((col) => (\r\n <Pressable\r\n key={col.key}\r\n accessibilityRole={col.sortable ? 'button' : undefined}\r\n onPress={col.sortable ? () => toggleSort(col.key) : undefined}\r\n style={{\r\n width: col.width ?? 120,\r\n padding: cellPadding,\r\n alignItems: col.align === 'center' ? 'center' : col.align === 'right' ? 'flex-end' : 'flex-start',\r\n }}\r\n >\r\n <Text style={{ color: theme.colors.fg, fontWeight: '600', fontSize: 14 }}>\r\n {typeof col.title === 'string' ? col.title : null}\r\n {col.sortable\r\n ? sortKey === col.key\r\n ? sortOrder === 'asc'\r\n ? ' ↑'\r\n : sortOrder === 'desc'\r\n ? ' ↓'\r\n : ''\r\n : ' ⇅'\r\n : ''}\r\n </Text>\r\n </Pressable>\r\n ))}\r\n </View>\r\n <ScrollView>\r\n {sortedRows.map((row, rowIndex) => {\r\n const isStriped = striped && rowIndex % 2 === 1;\r\n return (\r\n <Pressable\r\n key={getRowKey(row, rowIndex)}\r\n onPress={onRowPress ? () => onRowPress(row, rowIndex) : undefined}\r\n style={{\r\n flexDirection: 'row',\r\n backgroundColor: isStriped ? theme.colors.intent.neutral.subtle : 'transparent',\r\n borderBottomWidth: 1,\r\n borderBottomColor: borderColor,\r\n }}\r\n >\r\n {columns.map((col) => {\r\n const value = col.dataIndex !== undefined ? (row as Record<string, unknown>)[col.dataIndex as string] : undefined;\r\n const content = col.render ? col.render(value, row, rowIndex) : (value as ReactNode);\r\n return (\r\n <View\r\n key={col.key}\r\n style={{\r\n width: col.width ?? 120,\r\n padding: cellPadding,\r\n alignItems: col.align === 'center' ? 'center' : col.align === 'right' ? 'flex-end' : 'flex-start',\r\n }}\r\n >\r\n {typeof content === 'string' || typeof content === 'number' ? (\r\n <Text style={{ color: theme.colors.fg, fontSize: 14 }}>{String(content)}</Text>\r\n ) : (\r\n content\r\n )}\r\n </View>\r\n );\r\n })}\r\n </Pressable>\r\n );\r\n })}\r\n </ScrollView>\r\n </View>\r\n </ScrollView>\r\n );\r\n}\r\n","import { useCallback, useState, type ReactNode } from 'react';\r\nimport { Pressable, ScrollView, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface TreeNode {\r\n key: string;\r\n label: ReactNode;\r\n children?: TreeNode[];\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface TreeProps extends Omit<ViewProps, 'onSelect'> {\r\n treeData: TreeNode[];\r\n expandedKeys?: string[];\r\n defaultExpandedKeys?: string[];\r\n onExpand?: (keys: string[]) => void;\r\n selectedKeys?: string[];\r\n defaultSelectedKeys?: string[];\r\n onSelect?: (keys: string[], info: { node: TreeNode }) => void;\r\n multiple?: boolean;\r\n}\r\n\r\ninterface NodeProps {\r\n node: TreeNode;\r\n depth: number;\r\n expandedKeys: Set<string>;\r\n toggleExpand: (key: string) => void;\r\n selectedKeys: Set<string>;\r\n onClickNode: (node: TreeNode) => void;\r\n}\r\n\r\nfunction NodeView({ node, depth, expandedKeys, toggleExpand, selectedKeys, onClickNode }: NodeProps) {\r\n const theme = useTheme();\r\n const hasChildren = !!node.children && node.children.length > 0;\r\n const isExpanded = expandedKeys.has(node.key);\r\n const isSelected = selectedKeys.has(node.key);\r\n\r\n return (\r\n <View>\r\n <Pressable\r\n disabled={node.isDisabled}\r\n onPress={() => {\r\n if (node.isDisabled) return;\r\n if (hasChildren) toggleExpand(node.key);\r\n onClickNode(node);\r\n }}\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingVertical: 6,\r\n paddingHorizontal: 8,\r\n marginLeft: depth * 16,\r\n borderRadius: 6,\r\n backgroundColor: isSelected ? theme.colors.intent.primary.subtle : 'transparent',\r\n }}\r\n >\r\n <Text style={{ width: 14, color: theme.colors.fgSubtle, fontSize: 12 }}>\r\n {hasChildren ? (isExpanded ? '▾' : '▸') : ' '}\r\n </Text>\r\n <Text style={{ color: node.isDisabled ? theme.colors.fgSubtle : theme.colors.fg, fontSize: 14 }}>\r\n {typeof node.label === 'string' ? node.label : null}\r\n </Text>\r\n </Pressable>\r\n {hasChildren && isExpanded\r\n ? node.children!.map((child) => (\r\n <NodeView\r\n key={child.key}\r\n node={child}\r\n depth={depth + 1}\r\n expandedKeys={expandedKeys}\r\n toggleExpand={toggleExpand}\r\n selectedKeys={selectedKeys}\r\n onClickNode={onClickNode}\r\n />\r\n ))\r\n : null}\r\n </View>\r\n );\r\n}\r\n\r\nexport function Tree(props: TreeProps) {\r\n const {\r\n treeData,\r\n expandedKeys: expandedProp,\r\n defaultExpandedKeys,\r\n onExpand,\r\n selectedKeys: selectedProp,\r\n defaultSelectedKeys,\r\n onSelect,\r\n multiple,\r\n style,\r\n ...rest\r\n } = props;\r\n const [expandedInternal, setExpandedInternal] = useState<string[]>(defaultExpandedKeys ?? []);\r\n const [selectedInternal, setSelectedInternal] = useState<string[]>(defaultSelectedKeys ?? []);\r\n\r\n const expandedKeys = new Set(expandedProp ?? expandedInternal);\r\n const selectedKeys = new Set(selectedProp ?? selectedInternal);\r\n\r\n const toggleExpand = useCallback(\r\n (key: string) => {\r\n const next = new Set(expandedKeys);\r\n if (next.has(key)) next.delete(key);\r\n else next.add(key);\r\n const list = Array.from(next);\r\n if (expandedProp === undefined) setExpandedInternal(list);\r\n onExpand?.(list);\r\n },\r\n [expandedKeys, expandedProp, onExpand],\r\n );\r\n\r\n const onClickNode = useCallback(\r\n (node: TreeNode) => {\r\n const next = new Set(selectedKeys);\r\n if (multiple) {\r\n if (next.has(node.key)) next.delete(node.key);\r\n else next.add(node.key);\r\n } else {\r\n next.clear();\r\n next.add(node.key);\r\n }\r\n const list = Array.from(next);\r\n if (selectedProp === undefined) setSelectedInternal(list);\r\n onSelect?.(list, { node });\r\n },\r\n [selectedKeys, selectedProp, multiple, onSelect],\r\n );\r\n\r\n return (\r\n <ScrollView style={style} {...rest}>\r\n {treeData.map((node) => (\r\n <NodeView\r\n key={node.key}\r\n node={node}\r\n depth={0}\r\n expandedKeys={expandedKeys}\r\n toggleExpand={toggleExpand}\r\n selectedKeys={selectedKeys}\r\n onClickNode={onClickNode}\r\n />\r\n ))}\r\n </ScrollView>\r\n );\r\n}\r\n","import { type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface ListProps<Item = unknown> extends Omit<ViewProps, 'children'> {\r\n dataSource: Item[];\r\n renderItem: (item: Item, index: number) => ReactNode;\r\n itemKey?: keyof Item | ((item: Item, index: number) => string | number);\r\n header?: ReactNode;\r\n footer?: ReactNode;\r\n bordered?: boolean;\r\n size?: 'sm' | 'md' | 'lg';\r\n divided?: boolean;\r\n emptyState?: ReactNode;\r\n}\r\n\r\nexport function List<Item>(props: ListProps<Item>) {\r\n const {\r\n dataSource,\r\n renderItem,\r\n itemKey,\r\n header,\r\n footer,\r\n bordered,\r\n size = 'md',\r\n divided = true,\r\n emptyState,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const padding = size === 'sm' ? 10 : size === 'lg' ? 18 : 14;\r\n\r\n const keyFor = (item: Item, idx: number): string => {\r\n if (typeof itemKey === 'function') return String(itemKey(item, idx));\r\n if (itemKey) return String((item as unknown as Record<string, unknown>)[itemKey as string] ?? idx);\r\n return String(idx);\r\n };\r\n\r\n return (\r\n <View\r\n style={[\r\n {\r\n borderWidth: bordered ? 1 : 0,\r\n borderColor: theme.colors.border,\r\n borderRadius: 8,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n overflow: 'hidden',\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n {header ? (\r\n <View style={{ padding, borderBottomWidth: 1, borderBottomColor: theme.colors.border }}>\r\n {typeof header === 'string' ? <Text style={{ color: theme.colors.fg, fontWeight: '600' }}>{header}</Text> : header}\r\n </View>\r\n ) : null}\r\n {dataSource.length === 0 && emptyState ? (\r\n <View style={{ padding }}>{typeof emptyState === 'string' ? <Text style={{ color: theme.colors.fgSubtle }}>{emptyState}</Text> : emptyState}</View>\r\n ) : (\r\n dataSource.map((item, idx) => (\r\n <View\r\n key={keyFor(item, idx)}\r\n style={{\r\n padding,\r\n borderBottomWidth: divided && idx < dataSource.length - 1 ? 1 : 0,\r\n borderBottomColor: theme.colors.border,\r\n }}\r\n >\r\n {renderItem(item, idx)}\r\n </View>\r\n ))\r\n )}\r\n {footer ? (\r\n <View style={{ padding, borderTopWidth: 1, borderTopColor: theme.colors.border }}>\r\n {typeof footer === 'string' ? <Text style={{ color: theme.colors.fgSubtle }}>{footer}</Text> : footer}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface DescriptionItem {\r\n key: string;\r\n label: ReactNode;\r\n children: ReactNode;\r\n span?: number;\r\n}\r\n\r\nexport interface DescriptionsProps extends Omit<ViewProps, 'children'> {\r\n items: DescriptionItem[];\r\n title?: ReactNode;\r\n layout?: 'horizontal' | 'vertical';\r\n bordered?: boolean;\r\n size?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nexport function Descriptions(props: DescriptionsProps) {\r\n const { items, title, layout = 'horizontal', bordered, size = 'md', style, ...rest } = props;\r\n const theme = useTheme();\r\n const cellPadding = size === 'sm' ? 8 : size === 'lg' ? 16 : 12;\r\n const borderColor = theme.colors.border;\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n {title ? (\r\n <Text style={{ color: theme.colors.fg, fontWeight: '600', marginBottom: 8 }}>\r\n {typeof title === 'string' ? title : null}\r\n </Text>\r\n ) : null}\r\n <View\r\n style={{\r\n borderWidth: bordered ? 1 : 0,\r\n borderColor,\r\n borderRadius: bordered ? 8 : 0,\r\n overflow: 'hidden',\r\n }}\r\n >\r\n {items.map((item, idx) => {\r\n if (layout === 'horizontal') {\r\n return (\r\n <View\r\n key={item.key}\r\n style={{\r\n flexDirection: 'row',\r\n borderTopWidth: bordered && idx > 0 ? 1 : 0,\r\n borderTopColor: borderColor,\r\n }}\r\n >\r\n <View\r\n style={{\r\n padding: cellPadding,\r\n backgroundColor: bordered ? theme.colors.intent.neutral.subtle : undefined,\r\n borderRightWidth: bordered ? 1 : 0,\r\n borderRightColor: borderColor,\r\n minWidth: 120,\r\n }}\r\n >\r\n <Text style={{ color: theme.colors.fg, fontWeight: '500' }}>\r\n {typeof item.label === 'string' ? item.label : null}\r\n </Text>\r\n </View>\r\n <View style={{ flex: 1, padding: cellPadding }}>\r\n {typeof item.children === 'string' || typeof item.children === 'number' ? (\r\n <Text style={{ color: theme.colors.fg }}>{String(item.children)}</Text>\r\n ) : (\r\n item.children\r\n )}\r\n </View>\r\n </View>\r\n );\r\n }\r\n return (\r\n <View\r\n key={item.key}\r\n style={{\r\n padding: cellPadding,\r\n borderTopWidth: bordered && idx > 0 ? 1 : 0,\r\n borderTopColor: borderColor,\r\n }}\r\n >\r\n <Text style={{ color: theme.colors.fgSubtle, fontWeight: '500', marginBottom: 4 }}>\r\n {typeof item.label === 'string' ? item.label : null}\r\n </Text>\r\n {typeof item.children === 'string' || typeof item.children === 'number' ? (\r\n <Text style={{ color: theme.colors.fg }}>{String(item.children)}</Text>\r\n ) : (\r\n item.children\r\n )}\r\n </View>\r\n );\r\n })}\r\n </View>\r\n </View>\r\n );\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface CalendarProps extends Omit<ViewProps, 'children'> {\r\n value?: Date;\r\n defaultValue?: Date;\r\n onChange?: (date: Date) => void;\r\n viewMonth?: Date;\r\n onViewMonthChange?: (date: Date) => void;\r\n dateCellRender?: (date: Date) => ReactNode;\r\n isDateDisabled?: (date: Date) => boolean;\r\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\r\n locale?: string;\r\n}\r\n\r\nfunction startOfMonth(d: Date): Date {\r\n return new Date(d.getFullYear(), d.getMonth(), 1);\r\n}\r\n\r\nfunction addMonths(d: Date, n: number): Date {\r\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\r\n}\r\n\r\nfunction isSameDay(a: Date, b: Date): boolean {\r\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();\r\n}\r\n\r\nfunction isSameMonth(a: Date, b: Date): boolean {\r\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\r\n}\r\n\r\nfunction buildMonthMatrix(view: Date, weekStartsOn: number): Date[][] {\r\n const first = startOfMonth(view);\r\n const offset = (first.getDay() - weekStartsOn + 7) % 7;\r\n const start = new Date(first);\r\n start.setDate(first.getDate() - offset);\r\n const weeks: Date[][] = [];\r\n let cursor = new Date(start);\r\n for (let w = 0; w < 6; w++) {\r\n const row: Date[] = [];\r\n for (let d = 0; d < 7; d++) {\r\n row.push(new Date(cursor));\r\n cursor.setDate(cursor.getDate() + 1);\r\n }\r\n weeks.push(row);\r\n }\r\n return weeks;\r\n}\r\n\r\nexport function Calendar(props: CalendarProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n viewMonth: viewMonthProp,\r\n onViewMonthChange,\r\n dateCellRender,\r\n isDateDisabled,\r\n weekStartsOn = 0,\r\n locale,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const today = new Date();\r\n const [internalValue, setInternalValue] = useState<Date | undefined>(defaultValue);\r\n const [internalView, setInternalView] = useState<Date>(startOfMonth(valueProp ?? defaultValue ?? today));\r\n const value = valueProp ?? internalValue;\r\n const view = viewMonthProp ?? internalView;\r\n\r\n const setView = (next: Date) => {\r\n const start = startOfMonth(next);\r\n if (viewMonthProp === undefined) setInternalView(start);\r\n onViewMonthChange?.(start);\r\n };\r\n\r\n const setValue = (next: Date) => {\r\n if (isDateDisabled?.(next)) return;\r\n if (valueProp === undefined) setInternalValue(next);\r\n onChange?.(next);\r\n };\r\n\r\n const dayLabels: string[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n const d = new Date(2024, 0, 7 + i + weekStartsOn);\r\n dayLabels.push(d.toLocaleDateString(locale, { weekday: 'short' }));\r\n }\r\n\r\n const monthLabel = view.toLocaleDateString(locale, { month: 'long', year: 'numeric' });\r\n const weeks = buildMonthMatrix(view, weekStartsOn);\r\n\r\n return (\r\n <View\r\n style={[\r\n {\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: 8,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n padding: 16,\r\n minWidth: 280,\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: 12 }}>\r\n <Pressable accessibilityRole=\"button\" accessibilityLabel=\"Previous month\" onPress={() => setView(addMonths(view, -1))} style={{ padding: 8 }}>\r\n <Text style={{ color: theme.colors.fg }}>{'<'}</Text>\r\n </Pressable>\r\n <Text style={{ color: theme.colors.fg, fontWeight: '600' }}>{monthLabel}</Text>\r\n <Pressable accessibilityRole=\"button\" accessibilityLabel=\"Next month\" onPress={() => setView(addMonths(view, 1))} style={{ padding: 8 }}>\r\n <Text style={{ color: theme.colors.fg }}>{'>'}</Text>\r\n </Pressable>\r\n </View>\r\n <View style={{ flexDirection: 'row' }}>\r\n {dayLabels.map((label) => (\r\n <View key={label} style={{ flex: 1, alignItems: 'center', paddingVertical: 4 }}>\r\n <Text style={{ color: theme.colors.fgSubtle, fontSize: 12, fontWeight: '500' }}>{label}</Text>\r\n </View>\r\n ))}\r\n </View>\r\n {weeks.map((week, wi) => (\r\n <View key={wi} style={{ flexDirection: 'row' }}>\r\n {week.map((d) => {\r\n const inMonth = isSameMonth(d, view);\r\n const selected = value ? isSameDay(d, value) : false;\r\n const isToday = isSameDay(d, today);\r\n const disabled = isDateDisabled?.(d);\r\n const bg = selected\r\n ? theme.colors.intent.primary.solid\r\n : isToday\r\n ? theme.colors.intent.primary.subtle\r\n : 'transparent';\r\n const color = selected\r\n ? theme.colors.intent.primary.solidFg\r\n : !inMonth\r\n ? theme.colors.fgSubtle\r\n : theme.colors.fg;\r\n return (\r\n <Pressable\r\n key={d.toISOString()}\r\n disabled={disabled}\r\n onPress={() => setValue(d)}\r\n style={{\r\n flex: 1,\r\n alignItems: 'center',\r\n paddingVertical: 8,\r\n margin: 1,\r\n borderRadius: 6,\r\n backgroundColor: bg,\r\n opacity: disabled ? 0.5 : 1,\r\n }}\r\n >\r\n <Text style={{ color }}>{d.getDate()}</Text>\r\n {dateCellRender ? <Text style={{ fontSize: 10, color }}>{dateCellRender(d) as string}</Text> : null}\r\n </Pressable>\r\n );\r\n })}\r\n </View>\r\n ))}\r\n </View>\r\n );\r\n}\r\n","import { type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface StatisticProps extends ViewProps {\r\n title?: ReactNode;\r\n value: number | string;\r\n precision?: number;\r\n prefix?: ReactNode;\r\n suffix?: ReactNode;\r\n groupSeparator?: boolean;\r\n tone?: 'default' | 'success' | 'danger' | 'warning' | 'primary';\r\n}\r\n\r\nfunction formatValue(value: number | string, precision?: number, group?: boolean): string {\r\n if (typeof value === 'string') return value;\r\n if (typeof precision === 'number') {\r\n return group ? value.toLocaleString(undefined, { minimumFractionDigits: precision, maximumFractionDigits: precision }) : value.toFixed(precision);\r\n }\r\n return group ? value.toLocaleString() : String(value);\r\n}\r\n\r\nexport function Statistic(props: StatisticProps) {\r\n const { title, value, precision, prefix, suffix, groupSeparator = true, tone = 'default', style, ...rest } = props;\r\n const theme = useTheme();\r\n const formatted = formatValue(value, precision, groupSeparator);\r\n const toneColor =\r\n tone === 'success'\r\n ? theme.colors.intent.success.solid\r\n : tone === 'danger'\r\n ? theme.colors.intent.danger.solid\r\n : tone === 'warning'\r\n ? theme.colors.intent.warning.solid\r\n : tone === 'primary'\r\n ? theme.colors.intent.primary.solid\r\n : theme.colors.fg;\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n {title ? (\r\n <Text style={{ color: theme.colors.fgSubtle, fontSize: 14, marginBottom: 4 }}>\r\n {typeof title === 'string' ? title : null}\r\n </Text>\r\n ) : null}\r\n <View style={{ flexDirection: 'row', alignItems: 'baseline' }}>\r\n {prefix ? (\r\n <Text style={{ color: toneColor, fontSize: 16, marginRight: 4 }}>\r\n {typeof prefix === 'string' || typeof prefix === 'number' ? String(prefix) : ''}\r\n </Text>\r\n ) : null}\r\n <Text style={{ color: toneColor, fontSize: 28, fontWeight: '600' }}>{formatted}</Text>\r\n {suffix ? (\r\n <Text style={{ color: toneColor, fontSize: 16, marginLeft: 4 }}>\r\n {typeof suffix === 'string' || typeof suffix === 'number' ? String(suffix) : ''}\r\n </Text>\r\n ) : null}\r\n </View>\r\n </View>\r\n );\r\n}\r\n","import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\r\nimport { Pressable, ScrollView, View, Text, useWindowDimensions, type NativeScrollEvent, type NativeSyntheticEvent, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface CarouselProps extends Omit<ViewProps, 'onChange'> {\r\n items: ReactNode[];\r\n current?: number;\r\n defaultCurrent?: number;\r\n onChange?: (index: number) => void;\r\n autoplay?: number;\r\n dots?: boolean;\r\n loop?: boolean;\r\n height?: number;\r\n width?: number;\r\n}\r\n\r\nexport function Carousel(props: CarouselProps) {\r\n const {\r\n items,\r\n current: currentProp,\r\n defaultCurrent = 0,\r\n onChange,\r\n autoplay = 0,\r\n dots = true,\r\n loop = true,\r\n height = 200,\r\n width: widthProp,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const { width: windowWidth } = useWindowDimensions();\r\n const width = widthProp ?? windowWidth - 32;\r\n const [internal, setInternal] = useState(defaultCurrent);\r\n const current = currentProp ?? internal;\r\n const scrollRef = useRef<ScrollView>(null);\r\n\r\n const setCurrent = useCallback(\r\n (next: number) => {\r\n const total = items.length;\r\n const wrapped = loop ? (next + total) % total : Math.max(0, Math.min(total - 1, next));\r\n if (currentProp === undefined) setInternal(wrapped);\r\n onChange?.(wrapped);\r\n scrollRef.current?.scrollTo({ x: wrapped * width, animated: true });\r\n },\r\n [items.length, loop, currentProp, onChange, width],\r\n );\r\n\r\n useEffect(() => {\r\n if (!autoplay || items.length < 2) return;\r\n const id = setInterval(() => setCurrent(current + 1), autoplay);\r\n return () => clearInterval(id);\r\n }, [autoplay, current, items.length, setCurrent]);\r\n\r\n const handleMomentumScrollEnd = (e: NativeSyntheticEvent<NativeScrollEvent>) => {\r\n const next = Math.round(e.nativeEvent.contentOffset.x / width);\r\n if (next !== current) {\r\n if (currentProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n }\r\n };\r\n\r\n return (\r\n <View style={[{ width, borderRadius: 8, overflow: 'hidden' }, style]} {...rest}>\r\n <ScrollView\r\n ref={scrollRef}\r\n horizontal\r\n pagingEnabled\r\n showsHorizontalScrollIndicator={false}\r\n onMomentumScrollEnd={handleMomentumScrollEnd}\r\n style={{ height }}\r\n >\r\n {items.map((item, idx) => (\r\n <View key={idx} style={{ width, height, alignItems: 'center', justifyContent: 'center' }}>\r\n {typeof item === 'string' ? <Text style={{ color: theme.colors.fg }}>{item}</Text> : item}\r\n </View>\r\n ))}\r\n </ScrollView>\r\n {dots ? (\r\n <View style={{ flexDirection: 'row', justifyContent: 'center', paddingVertical: 8, gap: 6 }}>\r\n {items.map((_, idx) => (\r\n <Pressable\r\n key={idx}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={`Go to slide ${idx + 1}`}\r\n onPress={() => setCurrent(idx)}\r\n style={{\r\n width: 8,\r\n height: 8,\r\n borderRadius: 4,\r\n backgroundColor: idx === current ? theme.colors.intent.primary.solid : theme.colors.intent.neutral.subtle,\r\n }}\r\n />\r\n ))}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Image as RNImage, Pressable, View, Modal, type ImageProps as RNImageProps, type ImageStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface ImageProps extends Omit<RNImageProps, 'source' | 'style'> {\r\n src: string;\r\n fallback?: string;\r\n placeholder?: ReactNode;\r\n /** Enable tap-to-preview overlay. */\r\n preview?: boolean;\r\n width?: number;\r\n height?: number;\r\n fit?: 'cover' | 'contain' | 'stretch' | 'center';\r\n rounded?: boolean;\r\n style?: ImageStyle;\r\n}\r\n\r\nexport function Image(props: ImageProps) {\r\n const { src, fallback, placeholder, preview, width, height, fit = 'cover', rounded, style, ...rest } = props;\r\n const theme = useTheme();\r\n const [loaded, setLoaded] = useState(false);\r\n const [errored, setErrored] = useState(false);\r\n const [showPreview, setShowPreview] = useState(false);\r\n\r\n const actualSrc = errored && fallback ? fallback : src;\r\n\r\n const img = (\r\n <RNImage\r\n source={{ uri: actualSrc }}\r\n onLoad={() => setLoaded(true)}\r\n onError={() => setErrored(true)}\r\n resizeMode={fit}\r\n style={[{ width: '100%', height: '100%' }, style]}\r\n {...rest}\r\n />\r\n );\r\n\r\n return (\r\n <>\r\n <Pressable\r\n disabled={!preview}\r\n onPress={preview ? () => setShowPreview(true) : undefined}\r\n style={{\r\n width,\r\n height,\r\n borderRadius: rounded ? 8 : 0,\r\n overflow: 'hidden',\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n }}\r\n >\r\n {!loaded && !errored && placeholder ? (\r\n <View style={{ position: 'absolute', inset: 0, alignItems: 'center', justifyContent: 'center' }}>{placeholder}</View>\r\n ) : null}\r\n {img}\r\n </Pressable>\r\n {preview && showPreview ? (\r\n <Modal visible transparent animationType=\"fade\" onRequestClose={() => setShowPreview(false)}>\r\n <Pressable\r\n onPress={() => setShowPreview(false)}\r\n style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.9)', alignItems: 'center', justifyContent: 'center' }}\r\n >\r\n <RNImage source={{ uri: actualSrc }} resizeMode=\"contain\" style={{ width: '90%', height: '90%' }} />\r\n </Pressable>\r\n </Modal>\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport type TimelineItemStatus = 'default' | 'success' | 'danger' | 'warning' | 'info' | 'primary';\r\n\r\nexport interface TimelineItem {\r\n key: string;\r\n children: ReactNode;\r\n label?: ReactNode;\r\n status?: TimelineItemStatus;\r\n dot?: ReactNode;\r\n}\r\n\r\nexport interface TimelineProps extends Omit<ViewProps, 'children'> {\r\n items: TimelineItem[];\r\n pending?: ReactNode;\r\n reverse?: boolean;\r\n}\r\n\r\nfunction colorFor(status: TimelineItemStatus | undefined, theme: ReturnType<typeof useTheme>): string {\r\n switch (status) {\r\n case 'success':\r\n return theme.colors.intent.success.solid;\r\n case 'danger':\r\n return theme.colors.intent.danger.solid;\r\n case 'warning':\r\n return theme.colors.intent.warning.solid;\r\n case 'info':\r\n return theme.colors.intent.info.solid;\r\n case 'primary':\r\n return theme.colors.intent.primary.solid;\r\n default:\r\n return theme.colors.intent.neutral.solid;\r\n }\r\n}\r\n\r\nexport function Timeline(props: TimelineProps) {\r\n const { items, pending, reverse, style, ...rest } = props;\r\n const theme = useTheme();\r\n const list = reverse ? [...items].reverse() : items;\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n {list.map((item, idx) => {\r\n const isLast = idx === list.length - 1 && !pending;\r\n return (\r\n <View key={item.key} style={{ flexDirection: 'row', paddingBottom: isLast ? 0 : 16, gap: 12 }}>\r\n <View style={{ alignItems: 'center' }}>\r\n <View\r\n style={{\r\n width: 12,\r\n height: 12,\r\n borderRadius: 6,\r\n backgroundColor: colorFor(item.status, theme),\r\n }}\r\n />\r\n {!isLast ? <View style={{ flex: 1, width: 2, backgroundColor: theme.colors.border, marginTop: 4 }} /> : null}\r\n </View>\r\n <View style={{ flex: 1 }}>\r\n {item.label ? (\r\n <Text style={{ color: theme.colors.fgSubtle, marginBottom: 2 }}>\r\n {typeof item.label === 'string' ? item.label : null}\r\n </Text>\r\n ) : null}\r\n {typeof item.children === 'string' || typeof item.children === 'number' ? (\r\n <Text style={{ color: theme.colors.fg }}>{String(item.children)}</Text>\r\n ) : (\r\n item.children\r\n )}\r\n </View>\r\n </View>\r\n );\r\n })}\r\n {pending ? (\r\n <View style={{ flexDirection: 'row', gap: 12 }}>\r\n <View\r\n style={{\r\n width: 12,\r\n height: 12,\r\n borderRadius: 6,\r\n backgroundColor: theme.colors.intent.primary.solid,\r\n }}\r\n />\r\n <Text style={{ color: theme.colors.fgSubtle }}>\r\n {typeof pending === 'string' ? pending : ''}\r\n </Text>\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { useCallback, useState, type ReactNode } from 'react';\r\nimport { Pressable, View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface CollapseItem {\r\n key: string;\r\n header: ReactNode;\r\n children: ReactNode;\r\n extra?: ReactNode;\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface CollapseProps extends Omit<ViewProps, 'children' | 'onChange'> {\r\n items: CollapseItem[];\r\n activeKeys?: string[];\r\n defaultActiveKeys?: string[];\r\n onChange?: (keys: string[]) => void;\r\n accordion?: boolean;\r\n bordered?: boolean;\r\n size?: 'sm' | 'md' | 'lg';\r\n}\r\n\r\nexport function Collapse(props: CollapseProps) {\r\n const {\r\n items,\r\n activeKeys: activeProp,\r\n defaultActiveKeys,\r\n onChange,\r\n accordion,\r\n bordered = true,\r\n size = 'md',\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<string[]>(defaultActiveKeys ?? []);\r\n const active = new Set(activeProp ?? internal);\r\n\r\n const padding = size === 'sm' ? 10 : size === 'lg' ? 18 : 14;\r\n\r\n const togglePanel = useCallback(\r\n (key: string) => {\r\n const next = new Set(active);\r\n if (next.has(key)) next.delete(key);\r\n else if (accordion) {\r\n next.clear();\r\n next.add(key);\r\n } else next.add(key);\r\n const list = Array.from(next);\r\n if (activeProp === undefined) setInternal(list);\r\n onChange?.(list);\r\n },\r\n [active, accordion, activeProp, onChange],\r\n );\r\n\r\n return (\r\n <View\r\n style={[\r\n {\r\n borderWidth: bordered ? 1 : 0,\r\n borderColor: theme.colors.border,\r\n borderRadius: 8,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n overflow: 'hidden',\r\n },\r\n style,\r\n ]}\r\n {...rest}\r\n >\r\n {items.map((item, idx) => {\r\n const isOpen = active.has(item.key);\r\n const isLast = idx === items.length - 1;\r\n return (\r\n <View key={item.key}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityState={{ expanded: isOpen, disabled: item.isDisabled }}\r\n disabled={item.isDisabled}\r\n onPress={() => togglePanel(item.key)}\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n padding,\r\n borderBottomWidth: !isLast || isOpen ? 1 : 0,\r\n borderBottomColor: theme.colors.border,\r\n opacity: item.isDisabled ? 0.6 : 1,\r\n }}\r\n >\r\n <Text style={{ width: 14, color: theme.colors.fg }}>{isOpen ? '▾' : '▸'}</Text>\r\n <Text style={{ flex: 1, color: theme.colors.fg, fontWeight: '500' }}>\r\n {typeof item.header === 'string' ? item.header : null}\r\n </Text>\r\n {item.extra ? (\r\n <Text style={{ color: theme.colors.fgSubtle }}>\r\n {typeof item.extra === 'string' ? item.extra : ''}\r\n </Text>\r\n ) : null}\r\n </Pressable>\r\n {isOpen ? (\r\n <View\r\n style={{\r\n padding,\r\n borderBottomWidth: !isLast ? 1 : 0,\r\n borderBottomColor: theme.colors.border,\r\n backgroundColor: theme.colors.surface,\r\n }}\r\n >\r\n {typeof item.children === 'string' || typeof item.children === 'number' ? (\r\n <Text style={{ color: theme.colors.fg }}>{String(item.children)}</Text>\r\n ) : (\r\n item.children\r\n )}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n })}\r\n </View>\r\n );\r\n}\r\n","import { Collapse, type CollapseItem, type CollapseProps } from './Collapse';\r\n\r\nexport interface AccordionItem extends CollapseItem {}\r\n\r\nexport interface AccordionProps extends Omit<CollapseProps, 'accordion' | 'items'> {\r\n items: AccordionItem[];\r\n}\r\n\r\nexport function Accordion(props: AccordionProps) {\r\n return <Collapse {...props} accordion />;\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Modal, Pressable, View, Text } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface TourStep {\r\n title: ReactNode;\r\n description?: ReactNode;\r\n nextLabel?: ReactNode;\r\n prevLabel?: ReactNode;\r\n}\r\n\r\nexport interface TourProps {\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n steps: TourStep[];\r\n current?: number;\r\n defaultCurrent?: number;\r\n onChange?: (index: number) => void;\r\n onClose?: () => void;\r\n finishLabel?: ReactNode;\r\n}\r\n\r\n/**\r\n * Tour (native) — full-screen modal walkthrough. The web variant supports a\r\n * spotlight on a DOM element; on native we render each step in a centered\r\n * card since there is no DOM to highlight by selector.\r\n */\r\nexport function Tour(props: TourProps) {\r\n const {\r\n open: openProp,\r\n defaultOpen,\r\n steps,\r\n current: currentProp,\r\n defaultCurrent = 0,\r\n onChange,\r\n onClose,\r\n finishLabel = 'Finish',\r\n } = props;\r\n const theme = useTheme();\r\n const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false);\r\n const [internalCurrent, setInternalCurrent] = useState(defaultCurrent);\r\n const open = openProp ?? internalOpen;\r\n const current = currentProp ?? internalCurrent;\r\n const step = steps[current];\r\n\r\n if (!open || !step) return null;\r\n\r\n const close = () => {\r\n if (openProp === undefined) setInternalOpen(false);\r\n onClose?.();\r\n };\r\n\r\n const goTo = (next: number) => {\r\n if (next < 0 || next >= steps.length) return;\r\n if (currentProp === undefined) setInternalCurrent(next);\r\n onChange?.(next);\r\n };\r\n\r\n return (\r\n <Modal visible transparent animationType=\"fade\" onRequestClose={close}>\r\n <View style={{ flex: 1, backgroundColor: 'rgba(0,0,0,0.55)', alignItems: 'center', justifyContent: 'center', padding: 24 }}>\r\n <View\r\n style={{\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderRadius: 12,\r\n padding: 16,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n }}\r\n >\r\n <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', marginBottom: 8 }}>\r\n <Text style={{ color: theme.colors.fg, fontWeight: '600', fontSize: 16 }}>\r\n {typeof step.title === 'string' ? step.title : ''}\r\n </Text>\r\n <Pressable accessibilityRole=\"button\" accessibilityLabel=\"Close tour\" onPress={close} style={{ padding: 6 }}>\r\n <Text style={{ color: theme.colors.fg, fontSize: 18 }}>×</Text>\r\n </Pressable>\r\n </View>\r\n {step.description ? (\r\n <Text style={{ color: theme.colors.fgSubtle, marginBottom: 12 }}>\r\n {typeof step.description === 'string' ? step.description : ''}\r\n </Text>\r\n ) : null}\r\n <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between' }}>\r\n <Text style={{ color: theme.colors.fgSubtle, fontSize: 12 }}>{`${current + 1} / ${steps.length}`}</Text>\r\n <View style={{ flexDirection: 'row', gap: 8 }}>\r\n {current > 0 ? (\r\n <Pressable\r\n onPress={() => goTo(current - 1)}\r\n style={{ paddingVertical: 8, paddingHorizontal: 12, borderRadius: 6, borderWidth: 1, borderColor: theme.colors.border }}\r\n >\r\n <Text style={{ color: theme.colors.fg }}>{typeof step.prevLabel === 'string' ? step.prevLabel : 'Previous'}</Text>\r\n </Pressable>\r\n ) : null}\r\n {current < steps.length - 1 ? (\r\n <Pressable\r\n onPress={() => goTo(current + 1)}\r\n style={{ paddingVertical: 8, paddingHorizontal: 12, borderRadius: 6, backgroundColor: theme.colors.intent.primary.solid }}\r\n >\r\n <Text style={{ color: theme.colors.intent.primary.solidFg }}>{typeof step.nextLabel === 'string' ? step.nextLabel : 'Next'}</Text>\r\n </Pressable>\r\n ) : (\r\n <Pressable\r\n onPress={close}\r\n style={{ paddingVertical: 8, paddingHorizontal: 12, borderRadius: 6, backgroundColor: theme.colors.intent.primary.solid }}\r\n >\r\n <Text style={{ color: theme.colors.intent.primary.solidFg }}>{typeof finishLabel === 'string' ? finishLabel : 'Finish'}</Text>\r\n </Pressable>\r\n )}\r\n </View>\r\n </View>\r\n </View>\r\n </View>\r\n </Modal>\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\nimport { Pressable, Text, type ViewStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface FloatButtonProps {\r\n icon?: ReactNode;\r\n label?: string;\r\n size?: number;\r\n right?: number;\r\n bottom?: number;\r\n tone?: 'primary' | 'neutral' | 'danger' | 'success';\r\n extended?: boolean;\r\n onPress?: () => void;\r\n isDisabled?: boolean;\r\n accessibilityLabel?: string;\r\n style?: ViewStyle;\r\n}\r\n\r\nexport function FloatButton(props: FloatButtonProps) {\r\n const {\r\n icon,\r\n label,\r\n size = 56,\r\n right = 24,\r\n bottom = 24,\r\n tone = 'primary',\r\n extended,\r\n onPress,\r\n isDisabled,\r\n accessibilityLabel,\r\n style,\r\n } = props;\r\n const theme = useTheme();\r\n const intent =\r\n tone === 'neutral'\r\n ? theme.colors.intent.neutral\r\n : tone === 'danger'\r\n ? theme.colors.intent.danger\r\n : tone === 'success'\r\n ? theme.colors.intent.success\r\n : theme.colors.intent.primary;\r\n return (\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={accessibilityLabel ?? label}\r\n disabled={isDisabled}\r\n onPress={onPress}\r\n style={({ pressed }) => [\r\n {\r\n position: 'absolute',\r\n right,\r\n bottom,\r\n height: size,\r\n minWidth: size,\r\n paddingHorizontal: extended ? 20 : 0,\r\n borderRadius: extended ? size / 2 : size / 2,\r\n backgroundColor: intent.solid,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexDirection: 'row',\r\n opacity: isDisabled ? 0.6 : pressed ? 0.85 : 1,\r\n gap: 8,\r\n shadowColor: '#000',\r\n shadowOpacity: 0.25,\r\n shadowOffset: { width: 0, height: 4 },\r\n shadowRadius: 8,\r\n elevation: 6,\r\n },\r\n style,\r\n ]}\r\n >\r\n {icon}\r\n {extended && label ? (\r\n <Text style={{ color: intent.solidFg, fontSize: 14, fontWeight: '500' }}>{label}</Text>\r\n ) : null}\r\n </Pressable>\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\nimport { Text, View, type ViewProps } from 'react-native';\r\n\r\nexport interface WatermarkProps extends ViewProps {\r\n content: string;\r\n color?: string;\r\n rotate?: number;\r\n gapX?: number;\r\n gapY?: number;\r\n fontSize?: number;\r\n children?: ReactNode;\r\n}\r\n\r\n/**\r\n * Watermark — repeats text diagonally across the children. Implemented with a\r\n * grid of `<Text>` nodes since RN doesn't expose CSS background patterns.\r\n */\r\nexport function Watermark(props: WatermarkProps) {\r\n const {\r\n content,\r\n color = 'rgba(0,0,0,0.15)',\r\n rotate = -22,\r\n gapX = 140,\r\n gapY = 100,\r\n fontSize = 14,\r\n children,\r\n style,\r\n ...rest\r\n } = props;\r\n const rows = 12;\r\n const cols = 6;\r\n return (\r\n <View style={[{ position: 'relative', overflow: 'hidden' }, style]} {...rest}>\r\n {children}\r\n <View\r\n pointerEvents=\"none\"\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n opacity: 0.7,\r\n }}\r\n >\r\n {Array.from({ length: rows }).map((_, ri) => (\r\n <View\r\n key={ri}\r\n style={{\r\n flexDirection: 'row',\r\n position: 'absolute',\r\n top: ri * gapY,\r\n left: 0,\r\n right: 0,\r\n }}\r\n >\r\n {Array.from({ length: cols }).map((__, ci) => (\r\n <Text\r\n key={ci}\r\n style={{\r\n position: 'absolute',\r\n left: ci * gapX + (ri % 2 ? gapX / 2 : 0),\r\n color,\r\n fontSize,\r\n transform: [{ rotate: `${rotate}deg` }],\r\n }}\r\n >\r\n {content}\r\n </Text>\r\n ))}\r\n </View>\r\n ))}\r\n </View>\r\n </View>\r\n );\r\n}\r\n","import { useMemo, type ReactNode } from 'react';\r\nimport { View, type ViewStyle } from 'react-native';\r\nimport { generateQrMatrix, type ErrorCorrection } from '@elvora/core';\r\n\r\nexport interface QRCodeProps {\r\n value: string;\r\n size?: number;\r\n level?: ErrorCorrection;\r\n foreground?: string;\r\n background?: string;\r\n /** Optional centered node (e.g. logo). Should be roughly 18% of `size`. */\r\n icon?: ReactNode;\r\n style?: ViewStyle;\r\n}\r\n\r\n/**\r\n * QRCode — renders a QR code as a stacked grid of `View` cells. Pure RN, no\r\n * native deps. For very large codes consider rendering on the JS side and\r\n * passing through `react-native-svg` for sharper printing.\r\n */\r\nexport function QRCode(props: QRCodeProps) {\r\n const { value, size = 160, level = 'M', foreground = '#000', background = '#fff', icon, style } = props;\r\n const matrix = useMemo(() => generateQrMatrix(value, level), [value, level]);\r\n const cell = size / matrix.size;\r\n return (\r\n <View\r\n style={[\r\n { width: size, height: size, backgroundColor: background, position: 'relative' },\r\n style,\r\n ]}\r\n >\r\n {matrix.modules.map((row, ri) => (\r\n <View key={ri} style={{ flexDirection: 'row', height: cell }}>\r\n {row.map((isOn, ci) => (\r\n <View\r\n key={ci}\r\n style={{\r\n width: cell,\r\n height: cell,\r\n backgroundColor: isOn ? foreground : background,\r\n }}\r\n />\r\n ))}\r\n </View>\r\n ))}\r\n {icon ? (\r\n <View\r\n style={{\r\n position: 'absolute',\r\n top: size / 2 - size * 0.12,\r\n left: size / 2 - size * 0.12,\r\n width: size * 0.24,\r\n height: size * 0.24,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n backgroundColor: background,\r\n borderRadius: 4,\r\n }}\r\n >\r\n {icon}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { useRef, useState, type ReactNode } from 'react';\r\nimport { PanResponder, View, useWindowDimensions, type ViewStyle, type LayoutChangeEvent } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface SplitterProps {\r\n first: ReactNode;\r\n second: ReactNode;\r\n direction?: 'horizontal' | 'vertical';\r\n /** Controlled split (0..1). */\r\n split?: number;\r\n defaultSplit?: number;\r\n onChange?: (split: number) => void;\r\n minRatio?: number;\r\n maxRatio?: number;\r\n handleSize?: number;\r\n style?: ViewStyle;\r\n}\r\n\r\n/**\r\n * Splitter — drag-to-resize layout for two panes. Horizontal direction stacks\r\n * left/right; vertical stacks top/bottom.\r\n */\r\nexport function Splitter(props: SplitterProps) {\r\n const {\r\n first,\r\n second,\r\n direction = 'horizontal',\r\n split: splitProp,\r\n defaultSplit = 0.5,\r\n onChange,\r\n minRatio = 0.1,\r\n maxRatio = 0.9,\r\n handleSize = 8,\r\n style,\r\n } = props;\r\n const theme = useTheme();\r\n const { width: windowWidth, height: windowHeight } = useWindowDimensions();\r\n const [internal, setInternal] = useState(defaultSplit);\r\n const split = splitProp ?? internal;\r\n const [size, setSize] = useState({ width: windowWidth, height: windowHeight });\r\n const startSplit = useRef(split);\r\n\r\n const responder = useRef(\r\n PanResponder.create({\r\n onStartShouldSetPanResponder: () => true,\r\n onMoveShouldSetPanResponder: () => true,\r\n onPanResponderGrant: () => {\r\n startSplit.current = split;\r\n },\r\n onPanResponderMove: (_e, gesture) => {\r\n const total = direction === 'horizontal' ? size.width : size.height;\r\n if (!total) return;\r\n const delta = direction === 'horizontal' ? gesture.dx : gesture.dy;\r\n const next = Math.min(maxRatio, Math.max(minRatio, startSplit.current + delta / total));\r\n if (splitProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n },\r\n }),\r\n ).current;\r\n\r\n const onLayout = (e: LayoutChangeEvent) => {\r\n const { width, height } = e.nativeEvent.layout;\r\n setSize({ width, height });\r\n };\r\n\r\n const isHorizontal = direction === 'horizontal';\r\n\r\n return (\r\n <View\r\n onLayout={onLayout}\r\n style={[\r\n { flexDirection: isHorizontal ? 'row' : 'column', flex: 1, overflow: 'hidden' },\r\n style,\r\n ]}\r\n >\r\n <View style={{ flexBasis: `${split * 100}%`, [isHorizontal ? 'height' : 'width']: '100%' } as ViewStyle}>\r\n {first}\r\n </View>\r\n <View\r\n {...responder.panHandlers}\r\n accessibilityRole=\"adjustable\"\r\n style={{\r\n width: isHorizontal ? handleSize : '100%',\r\n height: isHorizontal ? '100%' : handleSize,\r\n backgroundColor: theme.colors.border,\r\n }}\r\n />\r\n <View style={{ flex: 1 }}>{second}</View>\r\n </View>\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\nimport { View, type ViewProps } from 'react-native';\r\n\r\nexport interface AffixProps extends ViewProps {\r\n /** No-op on RN — use sticky list headers instead. Pass-through wrapper. */\r\n offsetTop?: number;\r\n offsetBottom?: number;\r\n onChange?: (affixed: boolean) => void;\r\n children?: ReactNode;\r\n}\r\n\r\n/**\r\n * Affix — on React Native there is no global scroll viewport so this is a\r\n * pass-through wrapper. For sticky list headers use `FlatList`'s\r\n * `stickyHeaderIndices` or `ScrollView`'s `stickyHeaderIndices` directly.\r\n */\r\nexport function Affix(props: AffixProps) {\r\n const { children, offsetTop: _o, offsetBottom: _b, onChange: _c, ...rest } = props;\r\n return <View {...rest}>{children}</View>;\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, Text, View } from 'react-native';\r\nimport { FloatButton } from './FloatButton';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface SpeedDialAction {\r\n key: string;\r\n icon: ReactNode;\r\n label: string;\r\n onPress?: () => void;\r\n isDisabled?: boolean;\r\n}\r\n\r\nexport interface SpeedDialProps {\r\n icon: ReactNode;\r\n actions: SpeedDialAction[];\r\n right?: number;\r\n bottom?: number;\r\n open?: boolean;\r\n defaultOpen?: boolean;\r\n onOpenChange?: (open: boolean) => void;\r\n accessibilityLabel?: string;\r\n}\r\n\r\nexport function SpeedDial(props: SpeedDialProps) {\r\n const {\r\n icon,\r\n actions,\r\n right = 24,\r\n bottom = 24,\r\n open: openProp,\r\n defaultOpen = false,\r\n onOpenChange,\r\n accessibilityLabel,\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState(defaultOpen);\r\n const open = openProp ?? internal;\r\n const setOpen = (next: boolean) => {\r\n if (openProp === undefined) setInternal(next);\r\n onOpenChange?.(next);\r\n };\r\n\r\n return (\r\n <View accessibilityLabel={accessibilityLabel}>\r\n {open\r\n ? actions.map((a, idx) => (\r\n <Pressable\r\n key={a.key}\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={a.label}\r\n disabled={a.isDisabled}\r\n onPress={() => {\r\n a.onPress?.();\r\n setOpen(false);\r\n }}\r\n style={({ pressed }) => ({\r\n position: 'absolute',\r\n right,\r\n bottom: bottom + (idx + 1) * 60,\r\n paddingHorizontal: 14,\r\n height: 44,\r\n borderRadius: 22,\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: 8,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n borderColor: theme.colors.border,\r\n borderWidth: 1,\r\n opacity: a.isDisabled ? 0.5 : pressed ? 0.85 : 1,\r\n })}\r\n >\r\n {a.icon}\r\n <Text style={{ color: theme.colors.fg, fontWeight: '500' }}>{a.label}</Text>\r\n </Pressable>\r\n ))\r\n : null}\r\n <FloatButton\r\n icon={icon}\r\n right={right}\r\n bottom={bottom}\r\n accessibilityLabel={accessibilityLabel ?? 'Open actions'}\r\n onPress={() => setOpen(!open)}\r\n />\r\n </View>\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\nimport { Modal, Pressable, View } from 'react-native';\r\n\r\nexport interface BackdropProps {\r\n open: boolean;\r\n onClose?: () => void;\r\n tint?: string;\r\n invisible?: boolean;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function Backdrop(props: BackdropProps) {\r\n const { open, onClose, tint, invisible, children } = props;\r\n if (!open) return null;\r\n return (\r\n <Modal transparent visible animationType=\"fade\" onRequestClose={onClose}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Close\"\r\n onPress={onClose}\r\n style={{\r\n flex: 1,\r\n backgroundColor: invisible ? 'transparent' : tint ?? 'rgba(0,0,0,0.55)',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <View>{children}</View>\r\n </Pressable>\r\n </Modal>\r\n );\r\n}\r\n","import type { ReactNode } from 'react';\r\nimport { Image as RNImage, Text, View, useWindowDimensions, type ViewStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface ImageListItem {\r\n key: string;\r\n src?: string;\r\n alt?: string;\r\n node?: ReactNode;\r\n caption?: ReactNode;\r\n}\r\n\r\nexport interface ImageListProps {\r\n items: ImageListItem[];\r\n cols?: number;\r\n gap?: number;\r\n rowHeight?: number;\r\n style?: ViewStyle;\r\n}\r\n\r\nexport function ImageList(props: ImageListProps) {\r\n const { items, cols = 3, gap = 8, rowHeight = 120, style } = props;\r\n const theme = useTheme();\r\n const { width } = useWindowDimensions();\r\n const cellWidth = (width - gap * (cols + 1) - 32) / cols;\r\n return (\r\n <View style={[{ flexDirection: 'row', flexWrap: 'wrap', gap }, style]}>\r\n {items.map((item) => (\r\n <View\r\n key={item.key}\r\n style={{\r\n width: cellWidth,\r\n height: rowHeight,\r\n borderRadius: 8,\r\n overflow: 'hidden',\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n }}\r\n >\r\n {item.node ?? (item.src ? <RNImage source={{ uri: item.src }} style={{ width: '100%', height: '100%' }} resizeMode=\"cover\" /> : null)}\r\n {item.caption ? (\r\n <View\r\n style={{\r\n position: 'absolute',\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n padding: 6,\r\n backgroundColor: 'rgba(0,0,0,0.55)',\r\n }}\r\n >\r\n <Text style={{ color: '#fff', fontSize: 11 }}>{item.caption}</Text>\r\n </View>\r\n ) : null}\r\n </View>\r\n ))}\r\n </View>\r\n );\r\n}\r\n","import { Pressable, Text, View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface SimplePaginationProps extends ViewProps {\r\n total: number;\r\n pageSize?: number;\r\n current?: number;\r\n defaultCurrent?: number;\r\n onChange?: (page: number) => void;\r\n}\r\n\r\nexport function SimplePagination(props: SimplePaginationProps) {\r\n const { total, pageSize = 10, current: currentProp, defaultCurrent = 1, onChange, style, ...rest } = props;\r\n const theme = useTheme();\r\n const totalPages = Math.max(1, Math.ceil(total / pageSize));\r\n const current = Math.min(Math.max(currentProp ?? defaultCurrent, 1), totalPages);\r\n const go = (n: number) => {\r\n const next = Math.min(Math.max(n, 1), totalPages);\r\n if (next !== current) onChange?.(next);\r\n };\r\n const btn = (disabled: boolean) => ({\r\n width: 32,\r\n height: 32,\r\n borderRadius: theme.radii.md,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n alignItems: 'center' as const,\r\n justifyContent: 'center' as const,\r\n opacity: disabled ? 0.5 : 1,\r\n });\r\n return (\r\n <View style={[{ flexDirection: 'row', alignItems: 'center', gap: 8 }, style]} {...rest}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Previous page\"\r\n disabled={current === 1}\r\n onPress={() => go(current - 1)}\r\n style={btn(current === 1)}\r\n >\r\n <Icon name=\"chevronLeft\" size={14} color={theme.colors.fg} />\r\n </Pressable>\r\n <Text style={{ color: theme.colors.fg, fontSize: 13 }}>\r\n {current} / {totalPages}\r\n </Text>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel=\"Next page\"\r\n disabled={current === totalPages}\r\n onPress={() => go(current + 1)}\r\n style={btn(current === totalPages)}\r\n >\r\n <Icon name=\"chevronRight\" size={14} color={theme.colors.fg} />\r\n </Pressable>\r\n </View>\r\n );\r\n}\r\n\r\nexport interface MiniPaginationProps extends SimplePaginationProps {}\r\n\r\nexport function MiniPagination(props: MiniPaginationProps) {\r\n return <SimplePagination {...props} />;\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, Text, View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Button } from './Button';\r\n\r\nexport interface StepperStep {\r\n key: string;\r\n label: ReactNode;\r\n description?: ReactNode;\r\n content?: ReactNode;\r\n optional?: boolean;\r\n}\r\n\r\nexport interface StepperProps extends Omit<ViewProps, 'children'> {\r\n steps: StepperStep[];\r\n active?: number;\r\n defaultActive?: number;\r\n onChange?: (index: number) => void;\r\n orientation?: 'horizontal' | 'vertical';\r\n showNavigation?: boolean;\r\n nextLabel?: string;\r\n prevLabel?: string;\r\n finishLabel?: string;\r\n onFinish?: () => void;\r\n}\r\n\r\nexport function Stepper(props: StepperProps) {\r\n const {\r\n steps,\r\n active: activeProp,\r\n defaultActive = 0,\r\n onChange,\r\n orientation = 'vertical',\r\n showNavigation = true,\r\n nextLabel = 'Next',\r\n prevLabel = 'Back',\r\n finishLabel = 'Finish',\r\n onFinish,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState(defaultActive);\r\n const active = activeProp ?? internal;\r\n const total = steps.length;\r\n const go = (idx: number) => {\r\n const clamped = Math.max(0, Math.min(total - 1, idx));\r\n if (activeProp === undefined) setInternal(clamped);\r\n onChange?.(clamped);\r\n };\r\n const isVertical = orientation === 'vertical';\r\n\r\n return (\r\n <View style={style} {...rest}>\r\n <View style={{ flexDirection: isVertical ? 'column' : 'row', alignItems: 'flex-start', gap: 8 }}>\r\n {steps.map((step, idx) => {\r\n const done = idx < active;\r\n const isActive = idx === active;\r\n const circleBg = done || isActive ? theme.colors.intent.primary.solid : theme.colors.intent.neutral.subtle;\r\n const circleFg = done || isActive ? theme.colors.intent.primary.solidFg : theme.colors.fg;\r\n return (\r\n <View key={step.key} style={{ flexDirection: 'row', flex: isVertical ? undefined : 1, gap: 8 }}>\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityLabel={`Go to step ${idx + 1}`}\r\n onPress={() => go(idx)}\r\n style={{\r\n width: 28,\r\n height: 28,\r\n borderRadius: 14,\r\n backgroundColor: circleBg,\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n <Text style={{ color: circleFg, fontWeight: '600', fontSize: 12 }}>{done ? '✓' : idx + 1}</Text>\r\n </Pressable>\r\n <View style={{ flex: 1 }}>\r\n <Text style={{ fontWeight: '500', color: isActive ? theme.colors.fg : theme.colors.fgSubtle }}>\r\n {step.label}\r\n {step.optional ? <Text style={{ color: theme.colors.fgSubtle, fontSize: 11 }}> (optional)</Text> : null}\r\n </Text>\r\n {step.description ? (\r\n <Text style={{ color: theme.colors.fgSubtle, fontSize: 12 }}>{step.description}</Text>\r\n ) : null}\r\n {isVertical && isActive && step.content ? <View style={{ marginTop: 8 }}>{step.content}</View> : null}\r\n </View>\r\n </View>\r\n );\r\n })}\r\n </View>\r\n {!isVertical && steps[active]?.content ? <View style={{ marginTop: 12 }}>{steps[active]!.content}</View> : null}\r\n {showNavigation ? (\r\n <View style={{ flexDirection: 'row', justifyContent: 'flex-end', gap: 8, marginTop: 12 }}>\r\n {active > 0 ? (\r\n <Button variant=\"outline\" size=\"sm\" onPress={() => go(active - 1)}>\r\n {prevLabel}\r\n </Button>\r\n ) : null}\r\n {active < total - 1 ? (\r\n <Button size=\"sm\" onPress={() => go(active + 1)}>\r\n {nextLabel}\r\n </Button>\r\n ) : (\r\n <Button size=\"sm\" onPress={onFinish}>\r\n {finishLabel}\r\n </Button>\r\n )}\r\n </View>\r\n ) : null}\r\n </View>\r\n );\r\n}\r\n","import { useState, type ReactNode } from 'react';\r\nimport { Pressable, Text, type ViewStyle } from 'react-native';\r\nimport type { ElvoraSize } from '@elvora/core';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport interface ToggleButtonProps {\r\n selected?: boolean;\r\n defaultSelected?: boolean;\r\n onChange?: (selected: boolean) => void;\r\n isDisabled?: boolean;\r\n size?: ElvoraSize;\r\n value?: string;\r\n children?: ReactNode;\r\n style?: ViewStyle;\r\n}\r\n\r\nconst sizePadding: Record<ElvoraSize, { padX: number; padY: number; font: number }> = {\r\n xs: { padX: 8, padY: 4, font: 11 },\r\n sm: { padX: 10, padY: 6, font: 12 },\r\n md: { padX: 14, padY: 8, font: 13 },\r\n lg: { padX: 18, padY: 10, font: 14 },\r\n xl: { padX: 22, padY: 12, font: 16 },\r\n};\r\n\r\nexport function ToggleButton(props: ToggleButtonProps) {\r\n const { selected: selectedProp, defaultSelected = false, onChange, isDisabled, size = 'md', children, style } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState(defaultSelected);\r\n const selected = selectedProp ?? internal;\r\n const intent = theme.colors.intent.primary;\r\n const pad = sizePadding[size];\r\n\r\n return (\r\n <Pressable\r\n accessibilityRole=\"button\"\r\n accessibilityState={{ selected, disabled: isDisabled }}\r\n disabled={isDisabled}\r\n onPress={() => {\r\n if (selectedProp === undefined) setInternal(!selected);\r\n onChange?.(!selected);\r\n }}\r\n style={({ pressed }) => [\r\n {\r\n paddingHorizontal: pad.padX,\r\n paddingVertical: pad.padY,\r\n borderRadius: 6,\r\n borderWidth: 1,\r\n borderColor: selected ? intent.solid : theme.colors.border,\r\n backgroundColor: selected ? intent.subtle : theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.5 : pressed ? 0.9 : 1,\r\n },\r\n style,\r\n ]}\r\n >\r\n {typeof children === 'string' ? (\r\n <Text\r\n style={{ color: selected ? intent.fg : theme.colors.fg, fontSize: pad.font, fontWeight: '500' }}\r\n >\r\n {children}\r\n </Text>\r\n ) : (\r\n children\r\n )}\r\n </Pressable>\r\n );\r\n}\r\n","import { Children, cloneElement, isValidElement, useCallback, useState, type ReactElement, type ReactNode } from 'react';\r\nimport { View, type ViewStyle } from 'react-native';\r\nimport type { ToggleButtonProps } from './ToggleButton';\r\n\r\nexport type ButtonGroupOrientation = 'horizontal' | 'vertical';\r\nexport type ButtonGroupSelectionMode = 'none' | 'single' | 'multiple';\r\n\r\nexport interface ButtonGroupProps {\r\n orientation?: ButtonGroupOrientation;\r\n mode?: ButtonGroupSelectionMode;\r\n value?: string | string[] | null;\r\n defaultValue?: string | string[] | null;\r\n onChange?: (value: string | string[] | null) => void;\r\n allowDeselect?: boolean;\r\n style?: ViewStyle;\r\n children?: ReactNode;\r\n}\r\n\r\nexport function ButtonGroup(props: ButtonGroupProps) {\r\n const {\r\n orientation = 'horizontal',\r\n mode = 'none',\r\n value: valueProp,\r\n defaultValue,\r\n onChange,\r\n allowDeselect = true,\r\n style,\r\n children,\r\n } = props;\r\n const [internal, setInternal] = useState<string | string[] | null>(\r\n defaultValue ?? (mode === 'multiple' ? [] : null),\r\n );\r\n const value = valueProp !== undefined ? valueProp : internal;\r\n const setValue = useCallback(\r\n (next: string | string[] | null) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n },\r\n [valueProp, onChange],\r\n );\r\n\r\n const handleToggle = useCallback(\r\n (btnValue: string, selected: boolean) => {\r\n if (mode === 'single') {\r\n if (selected) setValue(btnValue);\r\n else if (allowDeselect) setValue(null);\r\n } else if (mode === 'multiple') {\r\n const arr = Array.isArray(value) ? value : [];\r\n if (selected) setValue([...new Set([...arr, btnValue])]);\r\n else setValue(arr.filter((v) => v !== btnValue));\r\n }\r\n },\r\n [mode, value, allowDeselect, setValue],\r\n );\r\n\r\n return (\r\n <View\r\n style={[{ flexDirection: orientation === 'horizontal' ? 'row' : 'column', gap: 4 }, style]}\r\n >\r\n {Children.map(children, (child) => {\r\n if (!isValidElement(child)) return child;\r\n const props = child.props as ToggleButtonProps;\r\n if (mode === 'none' || props.value === undefined) return child;\r\n const btnValue = props.value;\r\n const isSelected =\r\n mode === 'single' ? value === btnValue : Array.isArray(value) && value.includes(btnValue);\r\n return cloneElement(child as ReactElement<ToggleButtonProps>, {\r\n selected: isSelected,\r\n onChange: (s: boolean) => handleToggle(btnValue, s),\r\n });\r\n })}\r\n </View>\r\n );\r\n}\r\n","import { useCallback, useRef, useState } from 'react';\r\nimport { TextInput, View, type NativeSyntheticEvent, type TextInputKeyPressEventData, type ViewStyle } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Tag } from './Tag';\r\n\r\nexport interface ChipInputProps {\r\n value?: string[];\r\n defaultValue?: string[];\r\n onChange?: (chips: string[]) => void;\r\n placeholder?: string;\r\n validate?: (value: string) => boolean;\r\n unique?: boolean;\r\n isDisabled?: boolean;\r\n maxChips?: number;\r\n style?: ViewStyle;\r\n accessibilityLabel?: string;\r\n}\r\n\r\nexport function ChipInput(props: ChipInputProps) {\r\n const {\r\n value: valueProp,\r\n defaultValue = [],\r\n onChange,\r\n placeholder,\r\n validate,\r\n unique = true,\r\n isDisabled,\r\n maxChips,\r\n style,\r\n accessibilityLabel,\r\n } = props;\r\n const theme = useTheme();\r\n const [internal, setInternal] = useState<string[]>(defaultValue);\r\n const value = valueProp ?? internal;\r\n const [draft, setDraft] = useState('');\r\n const inputRef = useRef<TextInput | null>(null);\r\n\r\n const setChips = useCallback(\r\n (next: string[]) => {\r\n if (valueProp === undefined) setInternal(next);\r\n onChange?.(next);\r\n },\r\n [valueProp, onChange],\r\n );\r\n\r\n const addChip = useCallback(\r\n (raw: string) => {\r\n const trimmed = raw.trim();\r\n if (!trimmed) return;\r\n if (validate && !validate(trimmed)) return;\r\n if (maxChips !== undefined && value.length >= maxChips) return;\r\n if (unique && value.includes(trimmed)) {\r\n setDraft('');\r\n return;\r\n }\r\n setChips([...value, trimmed]);\r\n setDraft('');\r\n },\r\n [validate, maxChips, unique, value, setChips],\r\n );\r\n\r\n const removeChip = useCallback(\r\n (idx: number) => {\r\n const next = value.slice();\r\n next.splice(idx, 1);\r\n setChips(next);\r\n },\r\n [value, setChips],\r\n );\r\n\r\n const handleKey = (e: NativeSyntheticEvent<TextInputKeyPressEventData>) => {\r\n const key = e.nativeEvent.key;\r\n if (key === 'Backspace' && !draft && value.length > 0) {\r\n removeChip(value.length - 1);\r\n }\r\n };\r\n\r\n return (\r\n <View\r\n style={[\r\n {\r\n flexDirection: 'row',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: 6,\r\n minHeight: 40,\r\n paddingHorizontal: 8,\r\n paddingVertical: 4,\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: 6,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n opacity: isDisabled ? 0.6 : 1,\r\n },\r\n style,\r\n ]}\r\n >\r\n {value.map((chip, idx) => (\r\n <Tag key={`${chip}-${idx}`} onClose={isDisabled ? undefined : () => removeChip(idx)}>\r\n {chip}\r\n </Tag>\r\n ))}\r\n <TextInput\r\n ref={inputRef}\r\n accessibilityLabel={accessibilityLabel ?? 'Add tag'}\r\n editable={!isDisabled}\r\n value={draft}\r\n onChangeText={(v) => {\r\n if (v.endsWith(',')) {\r\n addChip(v.slice(0, -1));\r\n } else {\r\n setDraft(v);\r\n }\r\n }}\r\n onSubmitEditing={() => addChip(draft)}\r\n onKeyPress={handleKey}\r\n onBlur={() => addChip(draft)}\r\n placeholder={value.length === 0 ? placeholder : undefined}\r\n placeholderTextColor={theme.colors.fgSubtle}\r\n style={{\r\n flex: 1,\r\n minWidth: 80,\r\n color: theme.colors.fg,\r\n fontSize: 14,\r\n paddingVertical: 4,\r\n }}\r\n />\r\n </View>\r\n );\r\n}\r\n","import { useMemo, useState, type ReactNode } from 'react';\r\nimport { View, Text, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Table, type TableColumn } from './Table';\r\nimport { Input } from './Input';\r\n\r\nexport interface ProTableToolbar {\r\n title?: ReactNode;\r\n actions?: ReactNode;\r\n}\r\n\r\nexport interface ProTableColumn<Row = Record<string, unknown>> extends TableColumn<Row> {\r\n searchable?: boolean;\r\n}\r\n\r\nexport interface ProTableProps<Row = Record<string, unknown>> extends Omit<ViewProps, 'children'> {\r\n columns: ProTableColumn<Row>[];\r\n dataSource: Row[];\r\n rowKey?: keyof Row | ((row: Row, index: number) => string | number);\r\n toolbar?: ProTableToolbar;\r\n search?: boolean;\r\n searchPlaceholder?: string;\r\n empty?: ReactNode;\r\n onRowPress?: (row: Row, index: number) => void;\r\n}\r\n\r\nexport function ProTable<Row extends Record<string, unknown>>(props: ProTableProps<Row>) {\r\n const {\r\n columns,\r\n dataSource,\r\n rowKey,\r\n toolbar,\r\n search = true,\r\n searchPlaceholder = 'Search…',\r\n empty,\r\n onRowPress,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [query, setQuery] = useState('');\r\n\r\n const searchableKeys = useMemo(\r\n () =>\r\n columns\r\n .filter((c) => c.searchable !== false && c.dataIndex !== undefined)\r\n .map((c) => String(c.dataIndex)),\r\n [columns],\r\n );\r\n\r\n const filtered = useMemo(() => {\r\n if (!query.trim()) return dataSource;\r\n const lower = query.toLowerCase();\r\n return dataSource.filter((row) =>\r\n searchableKeys.some((key) =>\r\n String((row as Record<string, unknown>)[key] ?? '').toLowerCase().includes(lower),\r\n ),\r\n );\r\n }, [dataSource, query, searchableKeys]);\r\n\r\n return (\r\n <View style={[{ gap: 12 }, style]} {...rest}>\r\n {(toolbar?.title || toolbar?.actions || search) && (\r\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}>\r\n {toolbar?.title && (\r\n <Text style={{ color: theme.colors.fg, fontWeight: '600', fontSize: 16, flex: 1 }}>\r\n {toolbar.title}\r\n </Text>\r\n )}\r\n {search && (\r\n <Input\r\n value={query}\r\n onChangeText={setQuery}\r\n placeholder={searchPlaceholder}\r\n style={{ flex: 1, maxWidth: 240 }}\r\n />\r\n )}\r\n {toolbar?.actions}\r\n </View>\r\n )}\r\n <Table<Row>\r\n columns={columns}\r\n dataSource={filtered}\r\n rowKey={rowKey}\r\n bordered\r\n emptyState={empty ?? 'No data'}\r\n onRowPress={onRowPress}\r\n />\r\n </View>\r\n );\r\n}\r\n","import { useCallback, useMemo, useState, type ReactNode } from 'react';\r\nimport { View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Form, FormField } from './Form';\r\nimport { Input } from './Input';\r\nimport { Textarea } from './Textarea';\r\nimport { Switch } from './Switch';\r\nimport { Checkbox } from './Checkbox';\r\nimport { Select } from './Select';\r\nimport { NumberInput } from './NumberInput';\r\nimport { Button } from './Button';\r\n\r\nexport type ProFormFieldType =\r\n | 'text'\r\n | 'password'\r\n | 'email'\r\n | 'number'\r\n | 'textarea'\r\n | 'switch'\r\n | 'checkbox'\r\n | 'select'\r\n | 'custom';\r\n\r\nexport interface ProFormSelectOption {\r\n value: string;\r\n label: string;\r\n}\r\n\r\nexport interface ProFormField {\r\n name: string;\r\n label?: ReactNode;\r\n type: ProFormFieldType;\r\n placeholder?: string;\r\n hint?: ReactNode;\r\n required?: boolean;\r\n disabled?: boolean;\r\n defaultValue?: unknown;\r\n options?: ProFormSelectOption[];\r\n validate?: (value: unknown, values: Record<string, unknown>) => string | undefined;\r\n render?: (ctx: {\r\n value: unknown;\r\n onChange: (v: unknown) => void;\r\n error: string | undefined;\r\n name: string;\r\n }) => ReactNode;\r\n}\r\n\r\nexport interface ProFormProps extends Omit<ViewProps, 'children'> {\r\n fields: ProFormField[];\r\n initialValues?: Record<string, unknown>;\r\n onSubmit?: (values: Record<string, unknown>) => void | Promise<void>;\r\n submitLabel?: ReactNode;\r\n resetLabel?: ReactNode;\r\n isSubmitting?: boolean;\r\n}\r\n\r\nexport function ProForm(props: ProFormProps) {\r\n const {\r\n fields,\r\n initialValues,\r\n onSubmit,\r\n submitLabel = 'Submit',\r\n resetLabel,\r\n isSubmitting,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n\r\n const initial = useMemo(() => {\r\n const seed: Record<string, unknown> = { ...(initialValues ?? {}) };\r\n for (const f of fields) {\r\n if (seed[f.name] === undefined && f.defaultValue !== undefined) seed[f.name] = f.defaultValue;\r\n }\r\n return seed;\r\n }, [initialValues, fields]);\r\n\r\n const [values, setValues] = useState<Record<string, unknown>>(initial);\r\n const [errors, setErrors] = useState<Record<string, string | undefined>>({});\r\n\r\n const setValue = useCallback((name: string, value: unknown) => {\r\n setValues((prev) => ({ ...prev, [name]: value }));\r\n setErrors((prev) => ({ ...prev, [name]: undefined }));\r\n }, []);\r\n\r\n const validate = useCallback(() => {\r\n const next: Record<string, string | undefined> = {};\r\n for (const field of fields) {\r\n const value = values[field.name];\r\n if (field.required && (value === undefined || value === null || value === '')) {\r\n next[field.name] = 'This field is required';\r\n continue;\r\n }\r\n if (field.validate) {\r\n const msg = field.validate(value, values);\r\n if (msg) next[field.name] = msg;\r\n }\r\n }\r\n setErrors(next);\r\n return Object.values(next).every((v) => !v);\r\n }, [fields, values]);\r\n\r\n const handleSubmit = useCallback(async () => {\r\n if (!validate()) return;\r\n if (onSubmit) await onSubmit(values);\r\n }, [onSubmit, validate, values]);\r\n\r\n const reset = useCallback(() => {\r\n setValues(initial);\r\n setErrors({});\r\n }, [initial]);\r\n\r\n return (\r\n <Form style={style} {...rest}>\r\n {fields.map((field) => {\r\n const value = values[field.name];\r\n const error = errors[field.name];\r\n const onChangeValue = (v: unknown) => setValue(field.name, v);\r\n\r\n let control: ReactNode = null;\r\n switch (field.type) {\r\n case 'textarea':\r\n control = (\r\n <Textarea\r\n placeholder={field.placeholder}\r\n value={String(value ?? '')}\r\n isDisabled={field.disabled || isSubmitting}\r\n isInvalid={Boolean(error)}\r\n onChangeText={(text) => onChangeValue(text)}\r\n />\r\n );\r\n break;\r\n case 'select':\r\n control = (\r\n <Select\r\n value={String(value ?? '')}\r\n options={(field.options ?? []).map((opt) => ({ label: opt.label, value: opt.value }))}\r\n placeholder={field.placeholder ?? 'Select…'}\r\n isDisabled={field.disabled || isSubmitting}\r\n isInvalid={Boolean(error)}\r\n onChange={(v) => onChangeValue(v)}\r\n />\r\n );\r\n break;\r\n case 'number':\r\n control = (\r\n <NumberInput\r\n value={Number(value ?? 0)}\r\n isDisabled={field.disabled || isSubmitting}\r\n onChangeValue={(v) => onChangeValue(v)}\r\n />\r\n );\r\n break;\r\n case 'checkbox':\r\n control = (\r\n <Checkbox\r\n isChecked={Boolean(value)}\r\n isDisabled={field.disabled || isSubmitting}\r\n onChange={(checked) => onChangeValue(checked)}\r\n >\r\n {field.placeholder}\r\n </Checkbox>\r\n );\r\n break;\r\n case 'switch':\r\n control = (\r\n <Switch\r\n isChecked={Boolean(value)}\r\n isDisabled={field.disabled || isSubmitting}\r\n onChange={(checked) => onChangeValue(checked)}\r\n />\r\n );\r\n break;\r\n case 'custom':\r\n control = field.render\r\n ? field.render({ value, onChange: onChangeValue, error, name: field.name })\r\n : null;\r\n break;\r\n default:\r\n control = (\r\n <Input\r\n placeholder={field.placeholder}\r\n value={String(value ?? '')}\r\n isDisabled={field.disabled || isSubmitting}\r\n isInvalid={Boolean(error)}\r\n onChangeText={(text) => onChangeValue(text)}\r\n secureTextEntry={field.type === 'password'}\r\n keyboardType={field.type === 'email' ? 'email-address' : undefined}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <FormField\r\n key={field.name}\r\n name={field.name}\r\n label={field.label}\r\n hint={field.hint}\r\n isRequired={field.required}\r\n error={error}\r\n >\r\n {control}\r\n </FormField>\r\n );\r\n })}\r\n <View style={{ flexDirection: 'row', justifyContent: 'flex-end', gap: 8, marginTop: 8 }}>\r\n {resetLabel ? (\r\n <Button variant=\"ghost\" onPress={reset} isDisabled={isSubmitting}>\r\n {resetLabel}\r\n </Button>\r\n ) : null}\r\n <Button onPress={handleSubmit} isLoading={isSubmitting}>\r\n {submitLabel}\r\n </Button>\r\n </View>\r\n {theme ? null : null}\r\n </Form>\r\n );\r\n}\r\n","import { useCallback, useState, type ReactNode } from 'react';\r\nimport { Pressable, ScrollView, Text, View, useWindowDimensions, type ViewProps } from 'react-native';\r\nimport type { IconName } from '@elvora/icons';\r\nimport { useTheme } from './ElvoraProvider';\r\nimport { Avatar } from './Avatar';\r\nimport { Icon } from './Icon';\r\n\r\nexport interface ProLayoutMenuItem {\r\n key: string;\r\n label: ReactNode;\r\n icon?: IconName;\r\n children?: ProLayoutMenuItem[];\r\n}\r\n\r\nexport interface ProLayoutUser {\r\n name: string;\r\n avatar?: string;\r\n caption?: ReactNode;\r\n}\r\n\r\nexport interface ProLayoutProps extends Omit<ViewProps, 'children'> {\r\n brand?: ReactNode;\r\n menu?: ProLayoutMenuItem[];\r\n selectedKey?: string;\r\n onSelect?: (key: string) => void;\r\n user?: ProLayoutUser;\r\n header?: ReactNode;\r\n footer?: ReactNode;\r\n children?: ReactNode;\r\n}\r\n\r\nfunction renderMenuItems(\r\n items: ProLayoutMenuItem[],\r\n selectedKey: string | undefined,\r\n onSelect: (key: string) => void,\r\n theme: ReturnType<typeof useTheme>,\r\n depth = 0,\r\n): ReactNode {\r\n return items.map((item) => {\r\n const isSelected = item.key === selectedKey;\r\n return (\r\n <View key={item.key}>\r\n <Pressable\r\n accessibilityRole=\"menuitem\"\r\n onPress={() => onSelect(item.key)}\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n paddingHorizontal: 12 + depth * 12,\r\n paddingVertical: 8,\r\n backgroundColor: isSelected ? theme.colors.intent.primary.subtle : 'transparent',\r\n borderRadius: 6,\r\n gap: 8,\r\n }}\r\n >\r\n {item.icon ? <Icon name={item.icon} size={16} /> : null}\r\n <Text\r\n style={{\r\n color: isSelected ? theme.colors.intent.primary.fg : theme.colors.fg,\r\n fontWeight: isSelected ? '600' : '400',\r\n fontSize: 14,\r\n }}\r\n >\r\n {item.label}\r\n </Text>\r\n </Pressable>\r\n {item.children?.length ? renderMenuItems(item.children, selectedKey, onSelect, theme, depth + 1) : null}\r\n </View>\r\n );\r\n });\r\n}\r\n\r\nexport function ProLayout(props: ProLayoutProps) {\r\n const {\r\n brand,\r\n menu = [],\r\n selectedKey,\r\n onSelect,\r\n user,\r\n header,\r\n footer,\r\n children,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const { width } = useWindowDimensions();\r\n const showSidebar = width >= 720;\r\n const [internalKey, setInternalKey] = useState<string | undefined>(selectedKey);\r\n\r\n const handleSelect = useCallback(\r\n (key: string) => {\r\n setInternalKey(key);\r\n onSelect?.(key);\r\n },\r\n [onSelect],\r\n );\r\n\r\n const activeKey = selectedKey ?? internalKey;\r\n\r\n return (\r\n <View style={[{ flex: 1, flexDirection: 'row', backgroundColor: theme.colors.background }, style]} {...rest}>\r\n {showSidebar ? (\r\n <View\r\n style={{\r\n width: 240,\r\n borderRightWidth: 1,\r\n borderRightColor: theme.colors.border,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n padding: 16,\r\n gap: 16,\r\n }}\r\n >\r\n {brand ? <View>{brand}</View> : null}\r\n <ScrollView style={{ flex: 1 }}>{renderMenuItems(menu, activeKey, handleSelect, theme)}</ScrollView>\r\n {footer ? <View>{footer}</View> : null}\r\n </View>\r\n ) : null}\r\n <View style={{ flex: 1 }}>\r\n {(header || user) && (\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n borderBottomWidth: 1,\r\n borderBottomColor: theme.colors.border,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n paddingHorizontal: 16,\r\n paddingVertical: 12,\r\n gap: 12,\r\n }}\r\n >\r\n <View style={{ flex: 1 }}>{header}</View>\r\n {user ? (\r\n <View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>\r\n <Avatar src={user.avatar} name={user.name} size=\"sm\" />\r\n <View>\r\n <Text style={{ color: theme.colors.fg, fontSize: 14, fontWeight: '500' }}>{user.name}</Text>\r\n {user.caption ? (\r\n <Text style={{ color: theme.colors.fgMuted, fontSize: 12 }}>{user.caption}</Text>\r\n ) : null}\r\n </View>\r\n </View>\r\n ) : null}\r\n </View>\r\n )}\r\n <ScrollView contentContainerStyle={{ padding: 16, gap: 12 }}>{children}</ScrollView>\r\n </View>\r\n </View>\r\n );\r\n}\r\n","import { useCallback, useMemo, useState, type ReactNode } from 'react';\r\nimport { FlatList, Pressable, ScrollView, Text, View, type ViewProps } from 'react-native';\r\nimport { useTheme } from './ElvoraProvider';\r\n\r\nexport type DataGridSortOrder = 'asc' | 'desc' | null;\r\n\r\nexport interface DataGridColumn<Row = Record<string, unknown>> {\r\n key: string;\r\n title: ReactNode;\r\n dataIndex?: keyof Row | string;\r\n width?: number;\r\n render?: (value: unknown, row: Row, index: number) => ReactNode;\r\n sortable?: boolean;\r\n sorter?: (a: Row, b: Row) => number;\r\n align?: 'left' | 'center' | 'right';\r\n}\r\n\r\nexport interface DataGridProps<Row = Record<string, unknown>> extends Omit<ViewProps, 'children'> {\r\n columns: DataGridColumn<Row>[];\r\n dataSource: Row[];\r\n rowKey?: keyof Row | ((row: Row, index: number) => string | number);\r\n rowHeight?: number;\r\n height?: number;\r\n empty?: ReactNode;\r\n onRowPress?: (row: Row, index: number) => void;\r\n}\r\n\r\nfunction defaultCompare(a: unknown, b: unknown): number {\r\n if (a == null && b == null) return 0;\r\n if (a == null) return -1;\r\n if (b == null) return 1;\r\n if (typeof a === 'number' && typeof b === 'number') return a - b;\r\n return String(a).localeCompare(String(b));\r\n}\r\n\r\nexport function DataGrid<Row extends Record<string, unknown>>(props: DataGridProps<Row>) {\r\n const {\r\n columns,\r\n dataSource,\r\n rowKey,\r\n rowHeight = 40,\r\n height = 400,\r\n empty,\r\n onRowPress,\r\n style,\r\n ...rest\r\n } = props;\r\n const theme = useTheme();\r\n const [sortKey, setSortKey] = useState<string | null>(null);\r\n const [sortOrder, setSortOrder] = useState<DataGridSortOrder>(null);\r\n\r\n const sorted = useMemo(() => {\r\n if (!sortKey || !sortOrder) return dataSource;\r\n const col = columns.find((c) => c.key === sortKey);\r\n if (!col || !col.sortable) return dataSource;\r\n const arr = [...dataSource];\r\n const compare = col.sorter\r\n ? col.sorter\r\n : (a: Row, b: Row) => defaultCompare(a[col.dataIndex as keyof Row], b[col.dataIndex as keyof Row]);\r\n arr.sort((a, b) => (sortOrder === 'asc' ? compare(a, b) : -compare(a, b)));\r\n return arr;\r\n }, [columns, dataSource, sortKey, sortOrder]);\r\n\r\n const toggleSort = useCallback(\r\n (key: string) => {\r\n if (sortKey !== key) {\r\n setSortKey(key);\r\n setSortOrder('asc');\r\n return;\r\n }\r\n if (sortOrder === 'asc') setSortOrder('desc');\r\n else if (sortOrder === 'desc') {\r\n setSortKey(null);\r\n setSortOrder(null);\r\n } else setSortOrder('asc');\r\n },\r\n [sortKey, sortOrder],\r\n );\r\n\r\n const getRowKey = (row: Row, idx: number): string => {\r\n if (typeof rowKey === 'function') return String(rowKey(row, idx));\r\n if (rowKey) return String((row as Record<string, unknown>)[rowKey as string] ?? idx);\r\n return String(idx);\r\n };\r\n\r\n if (sorted.length === 0 && empty) {\r\n return (\r\n <View accessibilityRole=\"text\" style={style}>\r\n {typeof empty === 'string' ? <Text>{empty}</Text> : empty}\r\n </View>\r\n );\r\n }\r\n\r\n return (\r\n <ScrollView horizontal showsHorizontalScrollIndicator={false} style={style} {...rest}>\r\n <View\r\n style={{\r\n borderWidth: 1,\r\n borderColor: theme.colors.border,\r\n borderRadius: 8,\r\n backgroundColor: theme.colors.surfaceElevated,\r\n overflow: 'hidden',\r\n }}\r\n >\r\n <View\r\n style={{\r\n flexDirection: 'row',\r\n backgroundColor: theme.colors.intent.neutral.subtle,\r\n borderBottomWidth: 1,\r\n borderBottomColor: theme.colors.border,\r\n }}\r\n >\r\n {columns.map((col) => (\r\n <Pressable\r\n key={col.key}\r\n accessibilityRole={col.sortable ? 'button' : undefined}\r\n onPress={col.sortable ? () => toggleSort(col.key) : undefined}\r\n style={{ width: col.width ?? 120, paddingHorizontal: 12, paddingVertical: 8 }}\r\n >\r\n <Text style={{ color: theme.colors.fg, fontWeight: '600', fontSize: 14 }}>\r\n {typeof col.title === 'string' ? col.title : null}\r\n {col.sortable\r\n ? sortKey === col.key\r\n ? sortOrder === 'asc'\r\n ? ' ↑'\r\n : sortOrder === 'desc'\r\n ? ' ↓'\r\n : ''\r\n : ' ⇅'\r\n : ''}\r\n </Text>\r\n </Pressable>\r\n ))}\r\n </View>\r\n <FlatList<Row>\r\n data={sorted}\r\n keyExtractor={(row, idx) => getRowKey(row, idx)}\r\n style={{ height }}\r\n getItemLayout={(_data, index) => ({ length: rowHeight, offset: rowHeight * index, index })}\r\n renderItem={({ item: row, index: rowIndex }) => (\r\n <Pressable\r\n onPress={onRowPress ? () => onRowPress(row, rowIndex) : undefined}\r\n style={{\r\n flexDirection: 'row',\r\n height: rowHeight,\r\n borderBottomWidth: 1,\r\n borderBottomColor: theme.colors.border,\r\n alignItems: 'center',\r\n }}\r\n >\r\n {columns.map((col) => {\r\n const value = col.dataIndex !== undefined ? (row as Record<string, unknown>)[col.dataIndex as string] : undefined;\r\n const content = col.render ? col.render(value, row, rowIndex) : (value as ReactNode);\r\n return (\r\n <View key={col.key} style={{ width: col.width ?? 120, paddingHorizontal: 12 }}>\r\n {typeof content === 'string' || typeof content === 'number' ? (\r\n <Text style={{ color: theme.colors.fg, fontSize: 14 }}>{String(content)}</Text>\r\n ) : (\r\n content\r\n )}\r\n </View>\r\n );\r\n })}\r\n </Pressable>\r\n )}\r\n />\r\n </View>\r\n </ScrollView>\r\n );\r\n}\r\n"]}