diff --git a/.cursor/rules/testing-guidelines.mdc b/.cursor/rules/testing-guidelines.mdc
index 150b63b1..519ac1e3 100644
--- a/.cursor/rules/testing-guidelines.mdc
+++ b/.cursor/rules/testing-guidelines.mdc
@@ -26,7 +26,7 @@ alwaysApply: true
```typescript
import React from 'react'
import {render, fireEvent} from '@testing-library/react-native'
-import {Button} from '../components/Button'
+import {ButtonPrimary} from '../components/Button'
import {BaseProvider} from '../core/BaseProvider'
const renderWithProvider = (component: React.ReactElement) => {
@@ -55,9 +55,9 @@ describe('Button Component', () => {
it('applies correct styles for variants', () => {
const {getByTestId} = renderWithProvider(
-
+ Primary
)
-
+
const button = getByTestId('primary-button')
// Test styling expectations
})
diff --git a/example/app/_layout.tsx b/example/app/_layout.tsx
index 65315877..baadb845 100644
--- a/example/app/_layout.tsx
+++ b/example/app/_layout.tsx
@@ -1,12 +1,26 @@
-import { Stack } from 'expo-router'
+import { ScreenProps, Stack } from 'expo-router'
import { StatusBar } from 'expo-status-bar'
import 'react-native-reanimated'
import React from 'react'
import { BaseProvider } from 'rn-base-component'
+const baseHeaderOptions: ScreenProps['options']
+ = {
+ headerShown: true,
+ headerBackTitle: 'Back',
+ headerStyle: {
+ backgroundColor: '#f8f9fa',
+ },
+ headerTintColor: '#1a1a1a',
+ headerTitleStyle: {
+ fontWeight: 'bold',
+ fontSize: 18,
+ },
+}
export default function RootLayout() {
+
return (
@@ -20,16 +34,14 @@ export default function RootLayout() {
name="code-input"
options={{
title: 'CodeInput Component',
- headerShown: true,
- headerBackTitle: 'Back',
- headerStyle: {
- backgroundColor: '#f8f9fa',
- },
- headerTintColor: '#1a1a1a',
- headerTitleStyle: {
- fontWeight: 'bold',
- fontSize: 18,
- },
+ ...baseHeaderOptions,
+ }}
+ />
+
diff --git a/example/app/text-input.tsx b/example/app/text-input.tsx
new file mode 100644
index 00000000..1d9a56af
--- /dev/null
+++ b/example/app/text-input.tsx
@@ -0,0 +1,8 @@
+import React from 'react'
+import { TextInputDemo } from '@/components/TextInputDemo'
+
+const TextInputDemoScreen = () => {
+ return
+}
+
+export default TextInputDemoScreen
diff --git a/example/components/TextInputDemo/BasicExamples.tsx b/example/components/TextInputDemo/BasicExamples.tsx
new file mode 100644
index 00000000..4986e8f4
--- /dev/null
+++ b/example/components/TextInputDemo/BasicExamples.tsx
@@ -0,0 +1,60 @@
+import React, { useState } from 'react'
+import { Text, View } from 'react-native'
+import { TextInput } from 'rn-base-component'
+import { demoStyles } from './styles'
+
+export const BasicExamples = () => {
+ const [name, setName] = useState('')
+ const [email, setEmail] = useState('')
+ const [phone, setPhone] = useState('')
+
+ return (
+
+ 📝 Basic Examples
+
+
+ Default TextInput
+
+
+
+
+ Required Field with Label
+
+
+
+
+ With Placeholder and Keyboard Type
+
+
+
+
+ Password Input
+
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/DisabledState.tsx b/example/components/TextInputDemo/DisabledState.tsx
new file mode 100644
index 00000000..290e0ec8
--- /dev/null
+++ b/example/components/TextInputDemo/DisabledState.tsx
@@ -0,0 +1,106 @@
+import React from 'react'
+import { Text, View } from 'react-native'
+import { TextInput } from 'rn-base-component'
+import { demoStyles } from './styles'
+
+export const DisabledState = () => {
+ return (
+
+ 🚫 Disabled States
+
+ TextInput in disabled state for read-only scenarios
+
+
+
+ Disabled Default Input
+
+
+
+
+ Disabled Outlined Input
+
+
+
+
+ Disabled Flat Input
+
+
+
+
+ Disabled with Required Indicator
+
+
+
+
+ Disabled with Icons
+
+ 📞
+
+ }
+ rightComponent={
+
+ ✅
+
+ }
+ />
+
+
+
+ Disabled Multiline Input
+
+
+
+
+ Comparison: Enabled vs Disabled
+
+
+
+
+
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/IconsAndComponents.tsx b/example/components/TextInputDemo/IconsAndComponents.tsx
new file mode 100644
index 00000000..4e688808
--- /dev/null
+++ b/example/components/TextInputDemo/IconsAndComponents.tsx
@@ -0,0 +1,133 @@
+import React, { useState } from 'react'
+import { Text, TouchableOpacity, View } from 'react-native'
+import { TextInput } from 'rn-base-component'
+import { demoStyles } from './styles'
+
+export const IconsAndComponents = () => {
+ const [searchText, setSearchText] = useState('')
+ const [phoneNumber, setPhoneNumber] = useState('')
+ const [isPasswordVisible, setIsPasswordVisible] = useState(false)
+
+ const SearchIcon = () => (
+
+ 🔍
+
+ )
+
+ const PhoneIcon = () => (
+
+ 📞
+
+ )
+
+ const EyeIcon = ({ visible }: { visible: boolean }) => (
+ setIsPasswordVisible(!visible)}
+ style={{ paddingHorizontal: 8 }}
+ >
+ {visible ? '👁️' : '🙈'}
+
+ )
+
+ const ClearButton = ({ onClear }: { onClear: () => void }) => (
+
+ ❌
+
+ )
+
+ const UnitLabel = ({ unit }: { unit: string }) => (
+
+ {unit}
+
+ )
+
+ return (
+
+ 🎨 Icons and Components
+
+ TextInput with left and right components for enhanced UX
+
+
+
+ Search Input with Icon
+ }
+ rightComponent={
+ searchText ? setSearchText('')} /> : undefined
+ }
+ />
+
+
+
+ Phone Number Input
+ }
+ />
+
+
+
+ Password with Visibility Toggle
+ }
+ />
+
+
+
+ Weight Input with Unit
+ }
+ />
+
+
+
+ Price Input with Currency
+ }
+ />
+
+
+
+ Complex Example - Email with Actions
+
+ ✉️
+
+ }
+ rightComponent={
+
+
+ 📎
+
+
+ ⚙️
+
+
+ }
+ />
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/InteractivePlayground.tsx b/example/components/TextInputDemo/InteractivePlayground.tsx
new file mode 100644
index 00000000..081750e9
--- /dev/null
+++ b/example/components/TextInputDemo/InteractivePlayground.tsx
@@ -0,0 +1,130 @@
+import React, { useRef, useState } from 'react'
+import { Alert, Text, TouchableOpacity, View } from 'react-native'
+import { ButtonPrimary, TextInput, TextInputRef } from 'rn-base-component'
+import { demoStyles } from './styles'
+
+export const InteractivePlayground = () => {
+ const playgroundRef = useRef(null)
+ const [playgroundValue, setPlaygroundValue] = useState('')
+ const [hasError, setHasError] = useState(false)
+ const [isDisabled, setIsDisabled] = useState(false)
+ const [isRequired, setIsRequired] = useState(false)
+
+ const handlePlaygroundChange = (text: string) => {
+ setPlaygroundValue(text)
+ }
+
+ const handlePlaygroundSubmit = () => {
+ Alert.alert('Text Submitted', `You entered: ${playgroundValue}`)
+ setHasError(false)
+ }
+
+ const toggleError = () => {
+ setHasError(!hasError)
+ }
+
+ const toggleDisabled = () => setIsDisabled(!isDisabled)
+ const toggleRequired = () => setIsRequired(!isRequired)
+
+ const clearInput = () => {
+ playgroundRef.current?.clear()
+ setPlaygroundValue('')
+ setHasError(false)
+ }
+
+ const focusInput = () => {
+ playgroundRef.current?.focus()
+ }
+
+ const blurInput = () => {
+ playgroundRef.current?.blur()
+ }
+
+ const getCurrentValue = () => {
+ Alert.alert('Current Value', playgroundValue || '(empty)')
+ }
+
+ return (
+
+ 🎮 Interactive Playground
+
+ Experiment with different TextInput states and behaviors
+
+
+
+ Playground Controls
+
+
+
+
+ {hasError ? 'Remove Error' : 'Add Error'}
+
+
+
+
+
+ {isDisabled ? 'Enable' : 'Disable'}
+
+
+
+
+
+ {isRequired ? 'Optional' : 'Required'}
+
+
+
+
+
+
+ Focus
+
+
+
+ Blur
+
+
+
+ Clear
+
+
+
+ Get Value
+
+
+
+
+
+
+
+
+ Current Status:
+
+ Value: "{playgroundValue}" | Length: {playgroundValue.length} | Error: {hasError ? 'Yes' : 'No'} | Disabled: {isDisabled ? 'Yes' : 'No'}
+
+
+
+
+ Submit Text
+
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/MultilineDemo.tsx b/example/components/TextInputDemo/MultilineDemo.tsx
new file mode 100644
index 00000000..6a3564d4
--- /dev/null
+++ b/example/components/TextInputDemo/MultilineDemo.tsx
@@ -0,0 +1,103 @@
+import React, { useState } from 'react'
+import { Text, View } from 'react-native'
+import { TextInput } from 'rn-base-component'
+import { demoStyles } from './styles'
+
+export const MultilineDemo = () => {
+ const [comment, setComment] = useState('')
+ const [description, setDescription] = useState('')
+ const [notes, setNotes] = useState('')
+
+ return (
+
+ 📝 Multiline TextInput
+
+ TextInput configured for multi-line text input
+
+
+
+ Basic Multiline Input
+
+
+ Characters: {comment.length}
+
+
+
+
+ Description Field
+
+
+
+
+ Notes with Character Limit
+ {
+ if (text.length <= 200) {
+ setNotes(text)
+ }
+ }}
+ multiline
+ numberOfLines={3}
+ errorText={
+ notes.length > 200 ? 'Maximum 200 characters allowed' : undefined
+ }
+ />
+ 180 ? '#ff6b6b' : '#666',
+ marginTop: 4,
+ textAlign: 'right'
+ }}>
+ {notes.length}/200
+
+
+
+
+ Multiline with Variants
+
+
+
+
+
+
+
+
+ Auto-expanding Multiline
+
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/ValidationStates.tsx b/example/components/TextInputDemo/ValidationStates.tsx
new file mode 100644
index 00000000..a64fb460
--- /dev/null
+++ b/example/components/TextInputDemo/ValidationStates.tsx
@@ -0,0 +1,143 @@
+import React, { useState } from 'react'
+import { Text, View } from 'react-native'
+import { TextInput } from 'rn-base-component'
+import { demoStyles } from './styles'
+
+export const ValidationStates = () => {
+ const [email, setEmail] = useState('')
+ const [password, setPassword] = useState('')
+ const [confirmPassword, setConfirmPassword] = useState('')
+ const [age, setAge] = useState('')
+
+ // Validation logic
+ const isValidEmail = (email: string) => {
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
+ return emailRegex.test(email)
+ }
+
+ const isValidPassword = (password: string) => {
+ return password.length >= 8
+ }
+
+ const doPasswordsMatch = (password: string, confirmPassword: string) => {
+ return password === confirmPassword && confirmPassword.length > 0
+ }
+
+ const isValidAge = (age: string) => {
+ const ageNum = parseInt(age)
+ return !isNaN(ageNum) && ageNum >= 18 && ageNum <= 120
+ }
+
+ return (
+
+ ✅ Validation States
+
+ TextInput with error states and validation feedback
+
+
+
+
+ Email Validation
+
+ {email && isValidEmail(email) && (
+
+
+ ✓ Valid email address
+
+
+ )}
+
+
+
+ Password Strength
+
+ {password && isValidPassword(password) && (
+
+
+ ✓ Strong password
+
+
+ )}
+
+
+
+ Password Confirmation
+
+ {confirmPassword && doPasswordsMatch(password, confirmPassword) && (
+
+
+ ✓ Passwords match
+
+
+ )}
+
+
+
+ Age Validation
+
+ {age && isValidAge(age) && (
+
+
+ ✓ Valid age
+
+
+ )}
+
+
+
+ Always Show Error
+
+
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/VariantsDemo.tsx b/example/components/TextInputDemo/VariantsDemo.tsx
new file mode 100644
index 00000000..d3383d0b
--- /dev/null
+++ b/example/components/TextInputDemo/VariantsDemo.tsx
@@ -0,0 +1,101 @@
+import React, { useState } from 'react'
+import { Text, View } from 'react-native'
+import { TextInput } from 'rn-base-component'
+import { demoStyles } from './styles'
+
+export const VariantsDemo = () => {
+ const [outlinedValue, setOutlinedValue] = useState('')
+ const [flatValue, setFlatValue] = useState('')
+ const [defaultValue, setDefaultValue] = useState('')
+
+ return (
+
+ 🎭 TextInput Variants
+
+ Different visual styles: Default, Outlined, and Flat
+
+
+
+ Default Style
+
+
+
+
+ Variant Comparison
+
+
+ Outlined
+
+
+
+
+ Flat
+
+
+
+
+
+
+ Outlined with Error
+
+
+
+
+ Flat with Icon
+
+ 🔍
+
+ }
+ />
+
+
+
+ All Variants with Required Field
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/index.tsx b/example/components/TextInputDemo/index.tsx
new file mode 100644
index 00000000..0091b592
--- /dev/null
+++ b/example/components/TextInputDemo/index.tsx
@@ -0,0 +1,30 @@
+import React from 'react'
+import { ScrollView, Text, View } from 'react-native'
+import { demoStyles } from './styles'
+import { InteractivePlayground } from './InteractivePlayground'
+import { BasicExamples } from './BasicExamples'
+import { ValidationStates } from './ValidationStates'
+import { IconsAndComponents } from './IconsAndComponents'
+import { VariantsDemo } from './VariantsDemo'
+import { MultilineDemo } from './MultilineDemo'
+import { DisabledState } from './DisabledState'
+
+export const TextInputDemo = () => {
+ return (
+
+ TextInput Component Demo
+
+
+
+
+
+
+
+
+
+
+ 🎯 Explore all TextInput features above!
+
+
+ )
+}
diff --git a/example/components/TextInputDemo/styles.ts b/example/components/TextInputDemo/styles.ts
new file mode 100644
index 00000000..622021b5
--- /dev/null
+++ b/example/components/TextInputDemo/styles.ts
@@ -0,0 +1,224 @@
+import { StyleSheet } from 'react-native'
+import { demoColors } from '../../theme/demoColors'
+import { demoMetrics, componentMetrics } from '../../theme/demoMetrics'
+
+export const demoStyles = StyleSheet.create({
+ // Container styles
+ container: {
+ flex: 1,
+ backgroundColor: demoColors.backgroundLight,
+ },
+ contentContainer: {
+ padding: componentMetrics.containerPadding,
+ paddingBottom: componentMetrics.containerPaddingBottom,
+ },
+
+ // Header styles
+ mainTitle: {
+ fontSize: demoMetrics.fontSize.heading,
+ fontWeight: 'bold',
+ color: demoColors.textPrimary,
+ marginBottom: demoMetrics.margin.medium,
+ textAlign: 'center',
+ },
+
+ // Section styles
+ section: {
+ backgroundColor: demoColors.surface,
+ borderRadius: componentMetrics.sectionBorderRadius,
+ padding: componentMetrics.sectionPadding,
+ marginVertical: componentMetrics.sectionMargin,
+ shadowColor: demoColors.shadow,
+ ...demoMetrics.shadow.normal,
+ },
+ sectionTitle: {
+ fontSize: demoMetrics.fontSize.large,
+ fontWeight: '700',
+ color: demoColors.textDark,
+ marginBottom: demoMetrics.margin.small,
+ },
+ sectionDescription: {
+ fontSize: demoMetrics.fontSize.body,
+ color: demoColors.textSecondary,
+ marginBottom: demoMetrics.spacing.large,
+ },
+
+ // Example styles
+ example: {
+ marginVertical: demoMetrics.margin.normal,
+ paddingVertical: demoMetrics.padding.medium,
+ borderBottomWidth: demoMetrics.borderWidth.normal,
+ borderBottomColor: demoColors.borderLight,
+ },
+ exampleTitle: {
+ fontSize: demoMetrics.fontSize.medium,
+ fontWeight: '600',
+ color: demoColors.textDark,
+ marginBottom: demoMetrics.margin.small,
+ },
+ exampleDescription: {
+ fontSize: demoMetrics.fontSize.small,
+ color: demoColors.textSecondary,
+ marginBottom: demoMetrics.margin.small,
+ },
+
+ // Playground styles
+ playground: {
+ backgroundColor: demoColors.primaryBackground,
+ borderRadius: componentMetrics.cardBorderRadius,
+ padding: componentMetrics.cardPadding,
+ marginVertical: demoMetrics.margin.normal,
+ },
+ playgroundTitle: {
+ fontSize: demoMetrics.fontSize.medium,
+ fontWeight: '600',
+ color: demoColors.textDark,
+ marginBottom: demoMetrics.margin.normal,
+ },
+ playgroundControls: {
+ flexDirection: 'row',
+ flexWrap: 'wrap',
+ gap: demoMetrics.spacing.small,
+ marginBottom: demoMetrics.margin.normal,
+ },
+ controlButton: {
+ backgroundColor: demoColors.primary,
+ paddingHorizontal: demoMetrics.padding.medium,
+ paddingVertical: demoMetrics.padding.small,
+ borderRadius: demoMetrics.borderRadius.small,
+ minWidth: 80,
+ },
+ controlButtonText: {
+ color: demoColors.surface,
+ fontSize: demoMetrics.fontSize.small,
+ fontWeight: '600',
+ textAlign: 'center',
+ },
+ controlButtonSecondary: {
+ backgroundColor: demoColors.primaryLight,
+ },
+ controlButtonDanger: {
+ backgroundColor: demoColors.error,
+ },
+
+ // Status display
+ statusContainer: {
+ backgroundColor: demoColors.surface,
+ padding: demoMetrics.padding.medium,
+ borderRadius: demoMetrics.borderRadius.medium,
+ marginVertical: demoMetrics.margin.small,
+ },
+ statusText: {
+ fontSize: demoMetrics.fontSize.small,
+ color: demoColors.textSecondary,
+ },
+ statusValue: {
+ fontSize: demoMetrics.fontSize.body,
+ fontWeight: '600',
+ color: demoColors.textPrimary,
+ marginTop: demoMetrics.margin.tiny,
+ },
+
+ // Component wrapper
+ componentWrapper: {
+ marginVertical: demoMetrics.margin.small,
+ },
+
+ // Footer styles
+ footer: {
+ alignItems: 'center',
+ paddingVertical: demoMetrics.padding.large,
+ marginTop: demoMetrics.margin.large,
+ },
+ footerText: {
+ fontSize: demoMetrics.fontSize.body,
+ color: demoColors.textSecondary,
+ textAlign: 'center',
+ },
+
+ // Grid styles
+ gridContainer: {
+ flexDirection: 'row',
+ flexWrap: 'wrap',
+ gap: demoMetrics.spacing.medium,
+ },
+ gridItem: {
+ flex: 1,
+ minWidth: 150,
+ },
+
+ // Custom styles for specific demos
+ variantComparison: {
+ flexDirection: 'row',
+ gap: demoMetrics.spacing.medium,
+ alignItems: 'flex-start',
+ },
+ variantItem: {
+ flex: 1,
+ },
+ variantLabel: {
+ fontSize: demoMetrics.fontSize.small,
+ fontWeight: '600',
+ color: demoColors.textSecondary,
+ marginBottom: demoMetrics.margin.tiny,
+ textAlign: 'center',
+ },
+
+ // Icon demo styles
+ iconDemoContainer: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: demoMetrics.spacing.small,
+ },
+ iconLabel: {
+ fontSize: demoMetrics.fontSize.small,
+ color: demoColors.textSecondary,
+ flex: 1,
+ },
+
+ // Multiline demo styles
+ multilineContainer: {
+ minHeight: 100,
+ },
+
+ // Form styles
+ formContainer: {
+ gap: demoMetrics.spacing.medium,
+ },
+ formRow: {
+ flexDirection: 'row',
+ gap: demoMetrics.spacing.small,
+ alignItems: 'flex-start',
+ },
+ formField: {
+ flex: 1,
+ },
+
+ // Validation styles
+ validationContainer: {
+ gap: demoMetrics.spacing.small,
+ },
+ validationResult: {
+ padding: demoMetrics.padding.small,
+ borderRadius: demoMetrics.borderRadius.small,
+ borderWidth: demoMetrics.borderWidth.normal,
+ },
+ validationSuccess: {
+ backgroundColor: demoColors.primaryBackgroundLight,
+ borderColor: demoColors.success,
+ },
+ validationError: {
+ backgroundColor: demoColors.primaryBackgroundLight,
+ borderColor: demoColors.error,
+ },
+ validationText: {
+ fontSize: demoMetrics.fontSize.small,
+ fontWeight: '500',
+ },
+ validationTextSuccess: {
+ color: demoColors.success,
+ },
+ validationTextError: {
+ color: demoColors.error,
+ },
+})
diff --git a/example/constants/components.ts b/example/constants/components.ts
index 4fd9eff4..fcb72f2c 100644
--- a/example/constants/components.ts
+++ b/example/constants/components.ts
@@ -27,9 +27,10 @@ export const COMPONENTS: ComponentItem[] = [
id: 'text-input',
name: 'TextInput',
description: 'Text input fields with flat and outlined variants',
+ route: '/text-input',
icon: '📝',
category: 'Input',
- status: 'Coming Soon',
+ status: 'Complete',
},
{
id: 'button',
diff --git a/example/package.json b/example/package.json
index fa9555e3..7aba8d51 100644
--- a/example/package.json
+++ b/example/package.json
@@ -15,22 +15,22 @@
"@react-navigation/bottom-tabs": "^7.3.10",
"@react-navigation/elements": "^2.3.8",
"@react-navigation/native": "^7.1.6",
- "expo": "~53.0.20",
+ "expo": "~53.0.23",
"expo-blur": "~14.1.5",
"expo-constants": "~17.1.7",
"expo-font": "~13.3.2",
"expo-haptics": "~14.1.4",
- "expo-image": "~2.4.0",
+ "expo-image": "~2.4.1",
"expo-linking": "~7.1.7",
- "expo-router": "~5.1.4",
+ "expo-router": "~5.1.7",
"expo-splash-screen": "~0.30.10",
"expo-status-bar": "~2.2.3",
"expo-symbols": "~0.4.5",
- "expo-system-ui": "~5.0.10",
+ "expo-system-ui": "~5.0.11",
"expo-web-browser": "~14.2.0",
"react": "19.0.0",
"react-dom": "19.0.0",
- "react-native": "0.79.5",
+ "react-native": "0.79.6",
"react-native-gesture-handler": "~2.24.0",
"react-native-reanimated": "~3.17.4",
"react-native-safe-area-context": "5.4.0",
diff --git a/example/yarn.lock b/example/yarn.lock
index cb237840..f61ba7dc 100644
--- a/example/yarn.lock
+++ b/example/yarn.lock
@@ -744,20 +744,7 @@
"@babel/parser" "^7.27.2"
"@babel/types" "^7.27.1"
-"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3":
- version "7.28.0"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b"
- integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==
- dependencies:
- "@babel/code-frame" "^7.27.1"
- "@babel/generator" "^7.28.0"
- "@babel/helper-globals" "^7.28.0"
- "@babel/parser" "^7.28.0"
- "@babel/template" "^7.27.2"
- "@babel/types" "^7.28.0"
- debug "^4.3.1"
-
-"@babel/traverse@^7.25.3", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0":
+"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3", "@babel/traverse@^7.25.3", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0":
version "7.28.0"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b"
integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==
@@ -890,10 +877,10 @@
"@eslint/core" "^0.15.2"
levn "^0.4.1"
-"@expo/cli@0.24.20":
- version "0.24.20"
- resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.24.20.tgz#c9a3ad7eb93b0d6a39da20ef8804976b65838790"
- integrity sha512-uF1pOVcd+xizNtVTuZqNGzy7I6IJon5YMmQidsURds1Ww96AFDxrR/NEACqeATNAmY60m8wy1VZZpSg5zLNkpw==
+"@expo/cli@0.24.22":
+ version "0.24.22"
+ resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.24.22.tgz#75bef7ce8df0e239b489b70a396e9ddf9833bad1"
+ integrity sha512-cEg6/F8ZWjoVkEwm0rXKReWbsCUROFbLFBYht+d5RzHnDwJoTX4QWJKx4m+TGNDPamRUIGw36U4z41Fvev0XmA==
dependencies:
"@0no-co/graphql.web" "^1.0.8"
"@babel/runtime" "^7.20.0"
@@ -908,11 +895,12 @@
"@expo/osascript" "^2.2.5"
"@expo/package-manager" "^1.8.6"
"@expo/plist" "^0.3.5"
- "@expo/prebuild-config" "^9.0.11"
+ "@expo/prebuild-config" "^9.0.12"
+ "@expo/schema-utils" "^0.1.0"
"@expo/spawn-async" "^1.7.2"
"@expo/ws-tunnel" "^1.0.1"
"@expo/xcpretty" "^4.3.0"
- "@react-native/dev-middleware" "0.79.5"
+ "@react-native/dev-middleware" "0.79.6"
"@urql/core" "^5.0.6"
"@urql/exchange-retry" "^1.3.0"
accepts "^1.3.8"
@@ -1095,10 +1083,10 @@
postcss "~8.4.32"
resolve-from "^5.0.0"
-"@expo/metro-runtime@5.0.4":
- version "5.0.4"
- resolved "https://registry.yarnpkg.com/@expo/metro-runtime/-/metro-runtime-5.0.4.tgz#0ea7a7ecf27e3f159289705ef5160328b9fdde42"
- integrity sha512-r694MeO+7Vi8IwOsDIDzH/Q5RPMt1kUDYbiTJwnO15nIqiDwlE8HU55UlRhffKZy6s5FmxQsZ8HA+T8DqUW8cQ==
+"@expo/metro-runtime@5.0.5":
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/@expo/metro-runtime/-/metro-runtime-5.0.5.tgz#0b6d365e87034e3dde96fb2f7373fcb0de40af1e"
+ integrity sha512-P8UFTi+YsmiD1BmdTdiIQITzDMcZgronsA3RTQ4QKJjHM3bas11oGzLQOnFaIZnlEV8Rrr3m1m+RHxvnpL+t/A==
"@expo/osascript@^2.2.5":
version "2.2.5"
@@ -1129,7 +1117,7 @@
base64-js "^1.2.3"
xmlbuilder "^15.1.1"
-"@expo/prebuild-config@^9.0.10", "@expo/prebuild-config@^9.0.11":
+"@expo/prebuild-config@^9.0.10":
version "9.0.11"
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.11.tgz#0cc3039522dafd04102163f02ee596b5683d9d2b"
integrity sha512-0DsxhhixRbCCvmYskBTq8czsU0YOBsntYURhWPNpkl0IPVpeP9haE5W4OwtHGzXEbmHdzaoDwNmVcWjS/mqbDw==
@@ -1145,6 +1133,27 @@
semver "^7.6.0"
xml2js "0.6.0"
+"@expo/prebuild-config@^9.0.12":
+ version "9.0.12"
+ resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-9.0.12.tgz#ee009b6b4e01ce93f90726f58b084016d2e820a3"
+ integrity sha512-AKH5Scf+gEMgGxZZaimrJI2wlUJlRoqzDNn7/rkhZa5gUTnO4l6slKak2YdaH+nXlOWCNfAQWa76NnpQIfmv6Q==
+ dependencies:
+ "@expo/config" "~11.0.13"
+ "@expo/config-plugins" "~10.1.2"
+ "@expo/config-types" "^53.0.5"
+ "@expo/image-utils" "^0.7.6"
+ "@expo/json-file" "^9.1.5"
+ "@react-native/normalize-colors" "0.79.6"
+ debug "^4.3.1"
+ resolve-from "^5.0.0"
+ semver "^7.6.0"
+ xml2js "0.6.0"
+
+"@expo/schema-utils@^0.1.0":
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/@expo/schema-utils/-/schema-utils-0.1.7.tgz#38baa0effa0823cd4eca3f05e5eee3bde311da12"
+ integrity sha512-jWHoSuwRb5ZczjahrychMJ3GWZu54jK9ulNdh1d4OzAEq672K9E5yOlnlBsfIHWHGzUAT+0CL7Yt1INiXTz68g==
+
"@expo/sdk-runtime-versions@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c"
@@ -1415,23 +1424,23 @@
dependencies:
"@radix-ui/react-compose-refs" "1.1.2"
-"@react-native/assets-registry@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.5.tgz#90a178ec6646a22eb4218285cc2df7fd82603e34"
- integrity sha512-N4Kt1cKxO5zgM/BLiyzuuDNquZPiIgfktEQ6TqJ/4nKA8zr4e8KJgU6Tb2eleihDO4E24HmkvGc73naybKRz/w==
+"@react-native/assets-registry@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/assets-registry/-/assets-registry-0.79.6.tgz#cecc2a1140a9584d590000b951a08a0611ec30c3"
+ integrity sha512-UVSP1224PWg0X+mRlZNftV5xQwZGfawhivuW8fGgxNK9MS/U84xZ+16lkqcPh1ank6MOt239lIWHQ1S33CHgqA==
-"@react-native/babel-plugin-codegen@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.5.tgz#a2a9fd04fbb28ac75694952c234b159de25b2c52"
- integrity sha512-Rt/imdfqXihD/sn0xnV4flxxb1aLLjPtMF1QleQjEhJsTUPpH4TFlfOpoCvsrXoDl4OIcB1k4FVM24Ez92zf5w==
+"@react-native/babel-plugin-codegen@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.6.tgz#2e86024a649072268b03b28da8555f9c81bdb51b"
+ integrity sha512-CS5OrgcMPixOyUJ/Sk/HSsKsKgyKT5P7y3CojimOQzWqRZBmoQfxdST4ugj7n1H+ebM2IKqbgovApFbqXsoX0g==
dependencies:
"@babel/traverse" "^7.25.3"
- "@react-native/codegen" "0.79.5"
+ "@react-native/codegen" "0.79.6"
-"@react-native/babel-preset@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.79.5.tgz#2af2d055d4e67c321bf32744b85917490132992b"
- integrity sha512-GDUYIWslMLbdJHEgKNfrOzXk8EDKxKzbwmBXUugoiSlr6TyepVZsj3GZDLEFarOcTwH1EXXHJsixihk8DCRQDA==
+"@react-native/babel-preset@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/babel-preset/-/babel-preset-0.79.6.tgz#bc0e94a0b3403d237a60902161587ff90205835c"
+ integrity sha512-H+FRO+r2Ql6b5IwfE0E7D52JhkxjeGSBSUpCXAI5zQ60zSBJ54Hwh2bBJOohXWl4J+C7gKYSAd2JHMUETu+c/A==
dependencies:
"@babel/core" "^7.25.2"
"@babel/plugin-proposal-export-default-from" "^7.24.7"
@@ -1474,28 +1483,30 @@
"@babel/plugin-transform-typescript" "^7.25.2"
"@babel/plugin-transform-unicode-regex" "^7.24.7"
"@babel/template" "^7.25.0"
- "@react-native/babel-plugin-codegen" "0.79.5"
+ "@react-native/babel-plugin-codegen" "0.79.6"
babel-plugin-syntax-hermes-parser "0.25.1"
babel-plugin-transform-flow-enums "^0.0.2"
react-refresh "^0.14.0"
-"@react-native/codegen@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.79.5.tgz#f0f1f82b2603959b8e23711b55eac3dab6490596"
- integrity sha512-FO5U1R525A1IFpJjy+KVznEinAgcs3u7IbnbRJUG9IH/MBXi2lEU2LtN+JarJ81MCfW4V2p0pg6t/3RGHFRrlQ==
+"@react-native/codegen@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/codegen/-/codegen-0.79.6.tgz#25e9bb68ce02afcdb01b9b2b0bf8a3a7fd99bf8b"
+ integrity sha512-iRBX8Lgbqypwnfba7s6opeUwVyaR23mowh9ILw7EcT2oLz3RqMmjJdrbVpWhGSMGq2qkPfqAH7bhO8C7O+xfjQ==
dependencies:
+ "@babel/core" "^7.25.2"
+ "@babel/parser" "^7.25.3"
glob "^7.1.1"
hermes-parser "0.25.1"
invariant "^2.2.4"
nullthrows "^1.1.1"
yargs "^17.6.2"
-"@react-native/community-cli-plugin@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.5.tgz#1cf71637f575a322cdcf6f8b5aeb928aed842508"
- integrity sha512-ApLO1ARS8JnQglqS3JAHk0jrvB+zNW3dvNJyXPZPoygBpZVbf8sjvqeBiaEYpn8ETbFWddebC4HoQelDndnrrA==
+"@react-native/community-cli-plugin@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.6.tgz#6d95bc10b0dff0150f8e971b4b0f0867b8c0c06c"
+ integrity sha512-ZHVst9vByGsegeaddkD2YbZ6NvYb4n3pD9H7Pit94u+NlByq2uBJghoOjT6EKqg+UVl8tLRdi88cU2pDPwdHqA==
dependencies:
- "@react-native/dev-middleware" "0.79.5"
+ "@react-native/dev-middleware" "0.79.6"
chalk "^4.0.0"
debug "^2.2.0"
invariant "^2.2.4"
@@ -1504,18 +1515,18 @@
metro-core "^0.82.0"
semver "^7.1.3"
-"@react-native/debugger-frontend@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.79.5.tgz#76b8d77b62003b4ea99354fe435c01d727b64584"
- integrity sha512-WQ49TRpCwhgUYo5/n+6GGykXmnumpOkl4Lr2l2o2buWU9qPOwoiBqJAtmWEXsAug4ciw3eLiVfthn5ufs0VB0A==
+"@react-native/debugger-frontend@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/debugger-frontend/-/debugger-frontend-0.79.6.tgz#ec0ea9c2f140a564d26789a18dc097519f1b9c48"
+ integrity sha512-lIK/KkaH7ueM22bLO0YNaQwZbT/oeqhaghOvmZacaNVbJR1Cdh/XAqjT8FgCS+7PUnbxA8B55NYNKGZG3O2pYw==
-"@react-native/dev-middleware@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.79.5.tgz#8c7b2b790943f24e33a21da39a7c3959ea93304b"
- integrity sha512-U7r9M/SEktOCP/0uS6jXMHmYjj4ESfYCkNAenBjFjjsRWekiHE+U/vRMeO+fG9gq4UCcBAUISClkQCowlftYBw==
+"@react-native/dev-middleware@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/dev-middleware/-/dev-middleware-0.79.6.tgz#62a4c0b987e5d100eae3e8c95c58ae1c8abe377a"
+ integrity sha512-BK3GZBa9c7XSNR27EDRtxrgyyA3/mf1j3/y+mPk7Ac0Myu85YNrXnC9g3mL5Ytwo0g58TKrAIgs1fF2Q5Mn6mQ==
dependencies:
"@isaacs/ttlcache" "^1.4.1"
- "@react-native/debugger-frontend" "0.79.5"
+ "@react-native/debugger-frontend" "0.79.6"
chrome-launcher "^0.15.2"
chromium-edge-launcher "^0.2.0"
connect "^3.6.5"
@@ -1526,30 +1537,35 @@
serve-static "^1.16.2"
ws "^6.2.3"
-"@react-native/gradle-plugin@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.5.tgz#c2dbdf17a2b724b8f4442a01613c847564503813"
- integrity sha512-K3QhfFNKiWKF3HsCZCEoWwJPSMcPJQaeqOmzFP4RL8L3nkpgUwn74PfSCcKHxooVpS6bMvJFQOz7ggUZtNVT+A==
+"@react-native/gradle-plugin@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/gradle-plugin/-/gradle-plugin-0.79.6.tgz#02d996aae3df87512c2a56e1f5fefffc883c8a18"
+ integrity sha512-C5odetI6py3CSELeZEVz+i00M+OJuFZXYnjVD4JyvpLn462GesHRh+Se8mSkU5QSaz9cnpMnyFLJAx05dokWbA==
-"@react-native/js-polyfills@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.79.5.tgz#61b6c43832b644669d1f00dbbaa51a079c5b9b4c"
- integrity sha512-a2wsFlIhvd9ZqCD5KPRsbCQmbZi6KxhRN++jrqG0FUTEV5vY7MvjjUqDILwJd2ZBZsf7uiDuClCcKqA+EEdbvw==
+"@react-native/js-polyfills@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/js-polyfills/-/js-polyfills-0.79.6.tgz#11dab284ace2708f0483833cfff0c9aee81274df"
+ integrity sha512-6wOaBh1namYj9JlCNgX2ILeGUIwc6OP6MWe3Y5jge7Xz9fVpRqWQk88Q5Y9VrAtTMTcxoX3CvhrfRr3tGtSfQw==
"@react-native/normalize-colors@0.79.5":
version "0.79.5"
resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.79.5.tgz#e281d00a4177c8bcccec8ca695359303cae45eb1"
integrity sha512-nGXMNMclZgzLUxijQQ38Dm3IAEhgxuySAWQHnljFtfB0JdaMwpe0Ox9H7Tp2OgrEA+EMEv+Od9ElKlHwGKmmvQ==
+"@react-native/normalize-colors@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.79.6.tgz#e076519b6dba9150dad7f935c1b0a64ea0a90033"
+ integrity sha512-0v2/ruY7eeKun4BeKu+GcfO+SHBdl0LJn4ZFzTzjHdWES0Cn+ONqKljYaIv8p9MV2Hx/kcdEvbY4lWI34jC/mQ==
+
"@react-native/normalize-colors@^0.74.1":
version "0.74.89"
resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.89.tgz#b8ac17d1bbccd3ef9a1f921665d04d42cff85976"
integrity sha512-qoMMXddVKVhZ8PA1AbUCk83trpd6N+1nF2A6k1i6LsQObyS92fELuk8kU/lQs6M7BsMHwqyLCpQJ1uFgNvIQXg==
-"@react-native/virtualized-lists@0.79.5":
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.79.5.tgz#5dbc01dcb4c836d40edcb4034b240a300ee310fb"
- integrity sha512-EUPM2rfGNO4cbI3olAbhPkIt3q7MapwCwAJBzUfWlZ/pu0PRNOnMQ1IvaXTf3TpeozXV52K1OdprLEI/kI5eUA==
+"@react-native/virtualized-lists@0.79.6":
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/@react-native/virtualized-lists/-/virtualized-lists-0.79.6.tgz#ab395e3a1edba1c8c564d3a85961f213cc164a99"
+ integrity sha512-khA/Hrbb+rB68YUHrLubfLgMOD9up0glJhw25UE3Kntj32YDyuO0Tqc81ryNTcCekFKJ8XrAaEjcfPg81zBGPw==
dependencies:
invariant "^2.2.4"
nullthrows "^1.1.1"
@@ -1710,7 +1726,7 @@
dependencies:
"@types/istanbul-lib-report" "*"
-"@types/json-schema@^7.0.15", "@types/json-schema@^7.0.9":
+"@types/json-schema@^7.0.15":
version "7.0.15"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
@@ -2002,20 +2018,6 @@ agent-base@^7.1.2:
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
-ajv-formats@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
- integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
- dependencies:
- ajv "^8.0.0"
-
-ajv-keywords@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
- integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
- dependencies:
- fast-deep-equal "^3.1.3"
-
ajv@^6.12.4:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
@@ -2026,16 +2028,6 @@ ajv@^6.12.4:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
-ajv@^8.0.0, ajv@^8.9.0:
- version "8.17.1"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6"
- integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==
- dependencies:
- fast-deep-equal "^3.1.3"
- fast-uri "^3.0.1"
- json-schema-traverse "^1.0.0"
- require-from-string "^2.0.2"
-
anser@^1.4.9:
version "1.4.10"
resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.10.tgz#befa3eddf282684bd03b63dcda3927aef8c2e35b"
@@ -2328,10 +2320,10 @@ babel-preset-current-node-syntax@^1.0.0:
"@babel/plugin-syntax-private-property-in-object" "^7.14.5"
"@babel/plugin-syntax-top-level-await" "^7.14.5"
-babel-preset-expo@~13.2.3:
- version "13.2.3"
- resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-13.2.3.tgz#d96d2df314a9e20d5218a0642e6541c4735f3a34"
- integrity sha512-wQJn92lqj8GKR7Ojg/aW4+GkqI6ZdDNTDyOqhhl7A9bAqk6t0ukUOWLDXQb4p0qKJjMDV1F6gNWasI2KUbuVTQ==
+babel-preset-expo@~13.2.4:
+ version "13.2.4"
+ resolved "https://registry.yarnpkg.com/babel-preset-expo/-/babel-preset-expo-13.2.4.tgz#ad31bbfc8b3169a5a61108cebdee5350feebc071"
+ integrity sha512-3IKORo3KR+4qtLdCkZNDj8KeA43oBn7RRQejFGWfiZgu/NeaRUSri8YwYjZqybm7hn3nmMv9OLahlvXBX23o5Q==
dependencies:
"@babel/helper-module-imports" "^7.25.9"
"@babel/plugin-proposal-decorators" "^7.12.9"
@@ -2347,7 +2339,7 @@ babel-preset-expo@~13.2.3:
"@babel/plugin-transform-runtime" "^7.24.7"
"@babel/preset-react" "^7.22.15"
"@babel/preset-typescript" "^7.23.0"
- "@react-native/babel-preset" "0.79.5"
+ "@react-native/babel-preset" "0.79.6"
babel-plugin-react-native-web "~0.19.13"
babel-plugin-syntax-hermes-parser "^0.25.1"
babel-plugin-transform-flow-enums "^0.0.2"
@@ -3396,10 +3388,10 @@ expo-haptics@~14.1.4:
resolved "https://registry.yarnpkg.com/expo-haptics/-/expo-haptics-14.1.4.tgz#442f48b1bdf83484d4fcadc653445aaae6049b70"
integrity sha512-QZdE3NMX74rTuIl82I+n12XGwpDWKb8zfs5EpwsnGi/D/n7O2Jd4tO5ivH+muEG/OCJOMq5aeaVDqqaQOhTkcA==
-expo-image@~2.4.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/expo-image/-/expo-image-2.4.0.tgz#02f7fd743387206914cd431a6367f5be53509e3e"
- integrity sha512-TQ/LvrtJ9JBr+Tf198CAqflxcvdhuj7P24n0LQ1jHaWIVA7Z+zYKbYHnSMPSDMul/y0U46Z5bFLbiZiSidgcNw==
+expo-image@~2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/expo-image/-/expo-image-2.4.1.tgz#c3f84795e33ea98d833fc4dad11ad750ea290b3e"
+ integrity sha512-yHp0Cy4ylOYyLR21CcH6i70DeRyLRPc0yAIPFPn4BT/BpkJNaX5QMXDppcHa58t4WI3Bb8QRJRLuAQaeCtDF8A==
expo-keep-awake@~14.1.4:
version "14.1.4"
@@ -3434,12 +3426,13 @@ expo-modules-core@2.5.0:
dependencies:
invariant "^2.2.4"
-expo-router@~5.1.4:
- version "5.1.4"
- resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-5.1.4.tgz#37d611b35a474531a95638c2b5cc19b10fe13189"
- integrity sha512-8GulCelVN9x+VSOio74K1ZYTG6VyCdJw417gV+M/J8xJOZZTA7rFxAdzujBZZ7jd6aIAG7WEwOUU3oSvUO76Vw==
+expo-router@~5.1.7:
+ version "5.1.7"
+ resolved "https://registry.yarnpkg.com/expo-router/-/expo-router-5.1.7.tgz#ce8d812df91dcbf9d15bb7e8a4bbec63c7ca60b5"
+ integrity sha512-E7hIqTZs4Cub4sbYPeednfYPi+2cyRGMdqc5IYBJ/vC+WBKoYJ8C9eU13ZLbPz//ZybSo2Dsm7v89uFIlO2Gow==
dependencies:
- "@expo/metro-runtime" "5.0.4"
+ "@expo/metro-runtime" "5.0.5"
+ "@expo/schema-utils" "^0.1.0"
"@expo/server" "^0.6.3"
"@radix-ui/react-slot" "1.2.0"
"@react-navigation/bottom-tabs" "^7.3.10"
@@ -3449,7 +3442,6 @@ expo-router@~5.1.4:
invariant "^2.2.4"
react-fast-compare "^3.2.2"
react-native-is-edge-to-edge "^1.1.6"
- schema-utils "^4.0.1"
semver "~7.6.3"
server-only "^0.0.1"
shallowequal "^1.1.0"
@@ -3476,12 +3468,12 @@ expo-symbols@~0.4.5:
dependencies:
sf-symbols-typescript "^2.0.0"
-expo-system-ui@~5.0.10:
- version "5.0.10"
- resolved "https://registry.yarnpkg.com/expo-system-ui/-/expo-system-ui-5.0.10.tgz#74b14aff7e6b3d127221709f38516593d2868e78"
- integrity sha512-BTXbSyJr80yuN6VO4XQKZj7BjesZQLHgOYZ0bWyf4VB19GFZq7ZnZOEc/eoKk1B3eIocOMKUfNCrg/Wn8Kfcuw==
+expo-system-ui@~5.0.11:
+ version "5.0.11"
+ resolved "https://registry.yarnpkg.com/expo-system-ui/-/expo-system-ui-5.0.11.tgz#2bb70b2dd9f3f5137df85e43aa5d2d557432ad49"
+ integrity sha512-PG5VdaG5cwBe1Rj02mJdnsihKl9Iw/w/a6+qh2mH3f2K/IvQ+Hf7aG2kavSADtkGNCNj7CEIg7Rn4DQz/SE5rQ==
dependencies:
- "@react-native/normalize-colors" "0.79.5"
+ "@react-native/normalize-colors" "0.79.6"
debug "^4.3.2"
expo-web-browser@~14.2.0:
@@ -3489,19 +3481,19 @@ expo-web-browser@~14.2.0:
resolved "https://registry.yarnpkg.com/expo-web-browser/-/expo-web-browser-14.2.0.tgz#d8fb521ae349aebbf5c0ca32448877480124c06c"
integrity sha512-6S51d8pVlDRDsgGAp8BPpwnxtyKiMWEFdezNz+5jVIyT+ctReW42uxnjRgtsdn5sXaqzhaX+Tzk/CWaKCyC0hw==
-expo@~53.0.20:
- version "53.0.20"
- resolved "https://registry.yarnpkg.com/expo/-/expo-53.0.20.tgz#e11b553322de313d47c407367d8d48d3a073e3cc"
- integrity sha512-Nh+HIywVy9KxT/LtH08QcXqrxtUOA9BZhsXn3KCsAYA+kNb80M8VKN8/jfQF+I6CgeKyFKJoPNsWgI0y0VBGrA==
+expo@~53.0.23:
+ version "53.0.23"
+ resolved "https://registry.yarnpkg.com/expo/-/expo-53.0.23.tgz#b6fd102ac74537d86f99e87bd26a254a1b560b9b"
+ integrity sha512-6TOLuNCP3AsSkXBJA5W6U/7wpZUop3Q6BxHMtRD2OOgT7CCPvnYgJdnTzqU+gD1hMfcryD8Ejq9RdHbLduXohg==
dependencies:
"@babel/runtime" "^7.20.0"
- "@expo/cli" "0.24.20"
+ "@expo/cli" "0.24.22"
"@expo/config" "~11.0.13"
"@expo/config-plugins" "~10.1.2"
"@expo/fingerprint" "0.13.4"
"@expo/metro-config" "0.20.17"
"@expo/vector-icons" "^14.0.0"
- babel-preset-expo "~13.2.3"
+ babel-preset-expo "~13.2.4"
expo-asset "~11.1.7"
expo-constants "~17.1.7"
expo-file-system "~18.1.11"
@@ -3543,11 +3535,6 @@ fast-levenshtein@^2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
-fast-uri@^3.0.1:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748"
- integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==
-
fastq@^1.6.0:
version "1.19.1"
resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
@@ -4460,11 +4447,6 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
-json-schema-traverse@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
- integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
-
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
@@ -5592,19 +5574,19 @@ react-native-webview@13.13.5:
escape-string-regexp "^4.0.0"
invariant "2.2.4"
-react-native@0.79.5:
- version "0.79.5"
- resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.5.tgz#a91cd92bb282a4f8420fdd64fe3a9434580404b2"
- integrity sha512-jVihwsE4mWEHZ9HkO1J2eUZSwHyDByZOqthwnGrVZCh6kTQBCm4v8dicsyDa6p0fpWNE5KicTcpX/XXl0ASJFg==
+react-native@0.79.6:
+ version "0.79.6"
+ resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.6.tgz#ee95428f67da2f62ede473eaa6e8a2f4ee40e272"
+ integrity sha512-kvIWSmf4QPfY41HC25TR285N7Fv0Pyn3DAEK8qRL9dA35usSaxsJkHfw+VqnonqJjXOaoKCEanwudRAJ60TBGA==
dependencies:
"@jest/create-cache-key-function" "^29.7.0"
- "@react-native/assets-registry" "0.79.5"
- "@react-native/codegen" "0.79.5"
- "@react-native/community-cli-plugin" "0.79.5"
- "@react-native/gradle-plugin" "0.79.5"
- "@react-native/js-polyfills" "0.79.5"
- "@react-native/normalize-colors" "0.79.5"
- "@react-native/virtualized-lists" "0.79.5"
+ "@react-native/assets-registry" "0.79.6"
+ "@react-native/codegen" "0.79.6"
+ "@react-native/community-cli-plugin" "0.79.6"
+ "@react-native/gradle-plugin" "0.79.6"
+ "@react-native/js-polyfills" "0.79.6"
+ "@react-native/normalize-colors" "0.79.6"
+ "@react-native/virtualized-lists" "0.79.6"
abort-controller "^3.0.0"
anser "^1.4.9"
ansi-regex "^5.0.0"
@@ -5806,7 +5788,7 @@ rimraf@^3.0.2:
glob "^7.1.3"
"rn-base-component@file:..":
- version "0.4.0"
+ version "0.5.0"
dependencies:
eslint-plugin-ft-flow "^2.0.3"
@@ -5860,16 +5842,6 @@ scheduler@0.25.0, scheduler@^0.25.0:
resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015"
integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==
-schema-utils@^4.0.1:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae"
- integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==
- dependencies:
- "@types/json-schema" "^7.0.9"
- ajv "^8.9.0"
- ajv-formats "^2.1.1"
- ajv-keywords "^5.1.0"
-
semver@^6.3.0, semver@^6.3.1:
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
@@ -6182,16 +6154,7 @@ string-natural-compare@^3.0.1:
resolved "https://registry.yarnpkg.com/string-natural-compare/-/string-natural-compare-3.0.1.tgz#7a42d58474454963759e8e8b7ae63d71c1e7fdf4"
integrity sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==
-"string-width-cjs@npm:string-width@^4.2.0":
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -6268,7 +6231,7 @@ string.prototype.trimstart@^1.0.8:
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
@@ -6282,13 +6245,6 @@ strip-ansi@^5.2.0:
dependencies:
ansi-regex "^4.1.0"
-strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
strip-ansi@^7.0.1:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
@@ -6846,16 +6802,7 @@ word-wrap@^1.2.5:
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
- integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
- dependencies:
- ansi-styles "^4.0.0"
- string-width "^4.1.0"
- strip-ansi "^6.0.0"
-
-wrap-ansi@^7.0.0:
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
diff --git a/src/components/Accordion/Accordion.tsx b/src/components/Accordion/Accordion.tsx
index 7c0bfcc1..9667e95c 100644
--- a/src/components/Accordion/Accordion.tsx
+++ b/src/components/Accordion/Accordion.tsx
@@ -1,7 +1,8 @@
import React, {useCallback, useMemo, useState} from 'react'
-import {FlatList, StyleProp, Text, TextStyle, ViewStyle} from 'react-native'
+import {FlatList, StyleSheet, StyleProp, Text, TextStyle, ViewStyle} from 'react-native'
import {AccordionItem} from './AccordionItem'
import type {AnimationType} from './ToggleAnimation'
+import {useTheme} from '../../hooks'
type ViewStyleProp = StyleProp | Array>
type TextTitleStyleProp = StyleProp | Array>
@@ -103,6 +104,7 @@ export interface AccordionProps extends CommonAccordionProps {
const AccordionComponent = React.forwardRef(
({sections, expandMultiple = false, keyExtractor, wrapperStyle, ...rest}, ref) => {
+ const AccordionTheme = useTheme().components.Accordion
const [array, setArray] = useState([])
const _keyExtractor = useMemo(
@@ -149,7 +151,7 @@ const AccordionComponent = React.forwardRef(
return (
= ({
outlineWidth={outlineWidth}
borderRadius={borderRadius ?? ButtonTheme.borderRadius}
disabled={disabled}
- style={[{height: ButtonTheme.height}, StyleSheet.flatten(style)]}
+ style={[{height: ButtonTheme.height}, ButtonTheme.style, StyleSheet.flatten(style)]}
{...props}>
{!!leftIcon && leftIcon}
{typeof children === 'string' ? (
diff --git a/src/components/Card/Card.tsx b/src/components/Card/Card.tsx
index 09672943..ba0d626b 100644
--- a/src/components/Card/Card.tsx
+++ b/src/components/Card/Card.tsx
@@ -1,4 +1,5 @@
import React, {PropsWithChildren} from 'react'
+import {StyleSheet} from 'react-native'
import type {StyleProp, ViewStyle} from 'react-native'
import styled from 'styled-components/native'
import {activeOpacity} from '../../helpers'
@@ -45,7 +46,7 @@ export const Card: React.FC = ({
(
return (
(
}
return (
-
+
{labelComponent ? (
{labelComponent}
diff --git a/src/components/CountDown/CountDown.tsx b/src/components/CountDown/CountDown.tsx
index b85a6d44..68c94e3a 100644
--- a/src/components/CountDown/CountDown.tsx
+++ b/src/components/CountDown/CountDown.tsx
@@ -1,6 +1,6 @@
/* eslint-disable @typescript-eslint/no-shadow */
import React, {forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState} from 'react'
-import {type ViewProps, type TextStyle, type StyleProp} from 'react-native'
+import {type ViewProps, type TextStyle, type StyleProp, StyleSheet} from 'react-native'
import styled from 'styled-components/native'
import dayjs from 'dayjs'
import {Text} from '../Text/Text'
@@ -281,7 +281,7 @@ export const CountDown = forwardRef(
fontSize={fontSize || CountDownTheme.fontSize}
color={textColor || CountDownTheme.textColor}
fontFamily={fontFamily || CountDownTheme.fontFamily}
- style={textStyle || CountDownTheme.textStyle}>
+ style={[CountDownTheme.textStyle, StyleSheet.flatten(textStyle)]}>
{value}
{showLabels && (
@@ -289,7 +289,7 @@ export const CountDown = forwardRef(
fontSize={CountDownTheme.labelFontSize}
color={textColor || CountDownTheme.labelColor}
fontFamily={fontFamily || CountDownTheme.fontFamily}
- style={unitTextStyle || CountDownTheme.unitTextStyle}>
+ style={[CountDownTheme.unitTextStyle, StyleSheet.flatten(unitTextStyle)]}>
{timeLabels[unit.toLowerCase() as keyof typeof timeLabels]}
)}
@@ -298,7 +298,7 @@ export const CountDown = forwardRef(
fontSize={fontSize || CountDownTheme.fontSize}
color={textColor || CountDownTheme.textColor}
fontFamily={fontFamily || CountDownTheme.fontFamily}
- style={textStyle || CountDownTheme.textStyle}>
+ style={[CountDownTheme.textStyle, StyleSheet.flatten(textStyle)]}>
{separator}
)}
@@ -319,7 +319,7 @@ export const CountDown = forwardRef(
return (
(
fontSize={fontSize || CountDownTheme.fontSize}
color={textColor || CountDownTheme.textColor}
fontFamily={fontFamily || CountDownTheme.fontFamily}
- style={textStyle || CountDownTheme.textStyle}>
+ style={[CountDownTheme.textStyle, StyleSheet.flatten(textStyle)]}>
-
)}
@@ -358,7 +358,7 @@ export const CountDown = forwardRef(
: `Countdown: ${countDownTime} seconds`
return (
(
color={textColor || CountDownTheme.textColor}
fontSize={fontSize || CountDownTheme.fontSize}
fontFamily={fontFamily || CountDownTheme.fontFamily}
- style={textStyle || CountDownTheme.textStyle}>
+ style={[CountDownTheme.textStyle, StyleSheet.flatten(textStyle)]}>
{countDownTime}s
diff --git a/src/components/Icon/Icon.tsx b/src/components/Icon/Icon.tsx
index ae1917bc..b01a01ba 100644
--- a/src/components/Icon/Icon.tsx
+++ b/src/components/Icon/Icon.tsx
@@ -46,7 +46,7 @@ export const Icon: React.FunctionComponent = ({
disabled={(!onPress && !onLongPress) || (disabled ?? IconTheme.disabled)}
onPress={onPress}
onLongPress={onLongPress}
- style={buttonStyle ?? IconTheme.buttonStyle}
+ style={[IconTheme.buttonStyle, StyleSheet.flatten(buttonStyle)]}
hitSlop={hitSlop}>
= ({
height: size ?? IconTheme.size,
tintColor: color ?? IconTheme.color,
},
- StyleSheet.flatten(style ?? IconTheme.style),
+ IconTheme.style,
+ StyleSheet.flatten(style),
]}
resizeMode={resizeMode ?? IconTheme.resizeMode}
/>
diff --git a/src/components/RadioButton/RadioButton.tsx b/src/components/RadioButton/RadioButton.tsx
index 6a434e8e..4ed0e0fa 100644
--- a/src/components/RadioButton/RadioButton.tsx
+++ b/src/components/RadioButton/RadioButton.tsx
@@ -158,8 +158,8 @@ export const RadioButton = forwardRef(
- {label}
+ style={[RadioButtonTheme.textContainerStyle, StyleSheet.flatten(textContainerStyle)]}>
+ {label}
) : null)
@@ -170,7 +170,9 @@ export const RadioButton = forwardRef(
}
return (
-
+
(
disabled ?? RadioButtonTheme.disabled ? disableOpacity ?? RadioButtonTheme.disableOpacity : 1,
borderWidth: RadioButtonTheme.borderWidth,
},
- style ?? RadioButtonTheme.style,
+ RadioButtonTheme.style,
+ style,
])}
onPress={handlePress}
{...rest}>
@@ -197,7 +200,7 @@ export const RadioButton = forwardRef(
inner={inner}
isActive={!!(value ?? isActive)}
innerBackgroundColor={innerBackgroundColor ?? RadioButtonTheme.innerBackgroundColor ?? '#007AFF'}
- style={innerContainerStyle ?? RadioButtonTheme.innerContainerStyle}
+ style={[RadioButtonTheme.innerContainerStyle, StyleSheet.flatten(innerContainerStyle)]}
testID="circle"
/>
diff --git a/src/components/Slider/Slider.tsx b/src/components/Slider/Slider.tsx
index 5256e396..b8714d2c 100644
--- a/src/components/Slider/Slider.tsx
+++ b/src/components/Slider/Slider.tsx
@@ -306,15 +306,16 @@ export const Slider: SliderComponentProps = ({
return (
-
-
+
+
{!!actualShowTrackPoint && (
actualTapToSeek && onPressPoint(point)}
/>
)}
@@ -329,12 +330,16 @@ export const Slider: SliderComponentProps = ({
void
-
+
/** If true, the text input will be focused when the user touches the input */
focusOnTouch?: boolean
}
@@ -79,7 +79,7 @@ export const TextInput = forwardRef(
(
{
containerStyle,
- editable,
+ editable = true,
inputContainerStyle,
inputStyle,
label,
@@ -119,23 +119,29 @@ export const TextInput = forwardRef(
const ContainerComponent = componentFocusOnTouch ? TouchableOpacity : View
return (
-
+
{!!label && (
-
+
{label}
{!!isRequire && *}
)}
+ disabled={!editable}>
{!!leftComponent && leftComponent}
(
const TouchableContainer = styled.TouchableOpacity(({theme}) => ({
flexDirection: 'row',
borderColor: theme?.colors?.primaryBorder,
- height: theme?.sizes?.narrow,
+ height: theme?.sizes?.average,
alignItems: 'center',
}))
diff --git a/src/components/Typography/Typography.tsx b/src/components/Typography/Typography.tsx
index abadcb3b..ec3296c5 100644
--- a/src/components/Typography/Typography.tsx
+++ b/src/components/Typography/Typography.tsx
@@ -1,4 +1,5 @@
import React from 'react'
+import {StyleSheet} from 'react-native'
import styled from 'styled-components/native'
import type {TextProps, TextStyle} from 'react-native'
import {useTheme} from '../../hooks'
@@ -79,12 +80,7 @@ export const Typography: React.FC = ({
return (
)
diff --git a/src/core/BaseProvider.tsx b/src/core/BaseProvider.tsx
index 0b0997a5..eea2cc31 100644
--- a/src/core/BaseProvider.tsx
+++ b/src/core/BaseProvider.tsx
@@ -11,7 +11,7 @@ export interface BaseProviderProps {
theme?: ITheme
}
-export const BaseProvider = ({children, theme = defaultTheme}: BaseProviderProps) => {
+export const BaseProvider: React.FC = ({children, theme = defaultTheme}) => {
const [colorModeValue, setColorModeValue] = useState(theme?.config.initialColorMode)
const isLight = useMemo(() => colorModeValue === 'light', [colorModeValue])
diff --git a/src/theme/components/Accordion.ts b/src/theme/components/Accordion.ts
index 594886b8..57bc479c 100644
--- a/src/theme/components/Accordion.ts
+++ b/src/theme/components/Accordion.ts
@@ -1,8 +1,12 @@
+import type {StyleProp, ViewStyle} from 'react-native'
import base from '../base'
-import type {ViewStyle} from 'react-native'
import type {IFontWeight} from '../base/typography'
export interface AccordionThemeProps {
+ /**
+ * Style for the wrapper container
+ */
+ wrapperStyle?: StyleProp
// Container styles
container: {
paddingBottom: number
@@ -42,6 +46,7 @@ export interface AccordionThemeProps {
}
export const AccordionTheme: AccordionThemeProps = {
+ wrapperStyle: undefined,
container: {
paddingBottom: base.spacing.petite,
overflow: 'hidden',
diff --git a/src/theme/components/Button/Button.ts b/src/theme/components/Button/Button.ts
index 4b615423..976fda17 100644
--- a/src/theme/components/Button/Button.ts
+++ b/src/theme/components/Button/Button.ts
@@ -1,9 +1,11 @@
+import type {StyleProp, ViewStyle} from 'react-native'
import base from '../../base'
import {metrics} from '../../../helpers'
import type {ButtonProps} from '../../../components/Button/Button'
export type ButtonThemeProps = {
height?: number
+ style?: StyleProp
} & Pick<
ButtonProps,
'backgroundColor' | 'disabledColor' | 'borderRadius' | 'textColor' | 'outlineWidth' | 'outlineColor'
@@ -15,4 +17,7 @@ export const ButtonTheme: ButtonThemeProps = {
disabledColor: base.colors.muted,
borderRadius: metrics.borderRadius,
textColor: base.colors.white,
+ style: {
+ height: metrics.xxl,
+ },
}
diff --git a/src/theme/components/Checkbox.ts b/src/theme/components/Checkbox.ts
index d1e4d135..35c7b92f 100644
--- a/src/theme/components/Checkbox.ts
+++ b/src/theme/components/Checkbox.ts
@@ -1,8 +1,11 @@
+import type {StyleProp, ViewStyle} from 'react-native'
import base from '../base'
import {metrics} from '../../helpers'
import type {ICheckboxProps} from '../../components/Checkbox/Checkbox'
-export type CheckboxThemeProps = Pick<
+export type CheckboxThemeProps = {
+ style?: StyleProp
+} & Pick<
ICheckboxProps,
'size' | 'borderRadius' | 'fillColor' | 'unfillColor' | 'checkMarkColor' | 'borderWidth'
>
@@ -14,4 +17,5 @@ export const CheckboxTheme: CheckboxThemeProps = {
unfillColor: base.colors.transparent,
checkMarkColor: base.colors.white,
borderWidth: base.borderWidths.tiny,
+ style: undefined,
}
diff --git a/src/theme/components/CountDown.ts b/src/theme/components/CountDown.ts
index 6238813f..66321724 100644
--- a/src/theme/components/CountDown.ts
+++ b/src/theme/components/CountDown.ts
@@ -1,33 +1,32 @@
-import {StyleProp, TextStyle} from 'react-native'
+import type {StyleProp, ViewStyle, TextStyle} from 'react-native'
import type {CountDownProps} from '../../components'
import {metrics} from '../../helpers'
import base from '../base'
-export type CountDownThemeProps = Pick<
- CountDownProps,
- 'fontSize' | 'textColor' | 'fontFamily' | 'textStyle'
-> & {
- /**
- * Font size for time unit labels (d, h, m, s)
- */
- labelFontSize: number
- /**
- * Color for time unit labels
- */
- labelColor: string
- /**
- * Font family for time unit labels
- */
- fontFamily: string
- /**
- * Custom text style for countdown text
- */
- textStyle?: StyleProp
- /**
- * Custom text style for time unit labels
- */
- unitTextStyle?: StyleProp
-}
+export type CountDownThemeProps = {
+ style?: StyleProp
+} & Pick & {
+ /**
+ * Font size for time unit labels (d, h, m, s)
+ */
+ labelFontSize: number
+ /**
+ * Color for time unit labels
+ */
+ labelColor: string
+ /**
+ * Font family for time unit labels
+ */
+ fontFamily: string
+ /**
+ * Custom text style for countdown text
+ */
+ textStyle?: StyleProp
+ /**
+ * Custom text style for time unit labels
+ */
+ unitTextStyle?: StyleProp
+ }
export const CountDownTheme: CountDownThemeProps = {
fontSize: metrics.large,
@@ -37,4 +36,5 @@ export const CountDownTheme: CountDownThemeProps = {
fontFamily: base.fonts.regular as string,
textStyle: undefined, // Optional custom text style
unitTextStyle: undefined, // Optional custom unit text style
+ style: undefined,
}
diff --git a/src/theme/components/TextInput.ts b/src/theme/components/TextInput.ts
index 9612c639..e02534a5 100644
--- a/src/theme/components/TextInput.ts
+++ b/src/theme/components/TextInput.ts
@@ -75,7 +75,6 @@ export type TextInputThemeProps = Pick &
* Default typography variant styles
*/
variantStyles: Record
+ /**
+ * Default style for typography component
+ */
+ style?: StyleProp
}
export const TypographyTheme: TypographyThemeProps = {
@@ -39,4 +43,5 @@ export const TypographyTheme: TypographyThemeProps = {
lineHeight: 24,
},
},
+ style: undefined,
}
diff --git a/tsconfig.json b/tsconfig.json
index 9d89a2c0..9037511b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,18 +2,14 @@
"compilerOptions": {
"baseUrl": "./",
"paths": {
- "rn-base-component": [
- "./src/index"
- ]
+ "rn-base-component": ["./src/index"]
},
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"jsx": "react",
- "lib": [
- "esnext"
- ],
+ "lib": ["esnext"],
"module": "esnext",
"moduleResolution": "node",
"noFallthroughCasesInSwitch": true,