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 && ( - + <Title + testID="test-title" + style={[TextInputTheme.labelStyle, StyleSheet.flatten(labelStyle)]} + {...labelProps}> {label} {!!isRequire && <StarText testID="test-startText"> *</StarText>} )} + 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,