reza added something

master
Reza_ashrafi 3 years ago
parent 95d927b727
commit a1f24d107b
  1. 56
      App.js
  2. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Black.ttf
  3. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Bold.ttf
  4. BIN
      assets/fonts/Farsi/IRANSansXFaNum-DemiBold.ttf
  5. BIN
      assets/fonts/Farsi/IRANSansXFaNum-ExtraBold.ttf
  6. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Light.ttf
  7. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Medium.ttf
  8. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Regular.ttf
  9. BIN
      assets/fonts/Farsi/IRANSansXFaNum-Thin.ttf
  10. BIN
      assets/fonts/Farsi/IRANSansXFaNum-UltraLight.ttf
  11. 54
      navigation/BottomNavigation.js
  12. 120
      navigation/index.js
  13. 4
      package.json
  14. BIN
      src/assets/video.mp4
  15. 49
      src/components/CustomTextInput.js
  16. 4
      src/components/Header.js
  17. 2
      src/components/Navbar.js
  18. 2
      src/components/Pressable.js
  19. 6
      src/components/Progress.js
  20. 5
      src/components/Search.js
  21. 6
      src/components/Select.js
  22. 2
      src/reducers/index.js
  23. 40
      src/redux/store.js
  24. 101
      src/screens/Home/components/Blogs.js
  25. 30
      src/screens/Home/components/Header.js
  26. 89
      src/screens/Home/components/MyBooks.js
  27. 19
      src/screens/Home/components/Videos.js
  28. 2
      src/screens/Home/index.js
  29. BIN
      src/screens/Login/assets/logo.png
  30. 211
      src/screens/Login/index.js
  31. 2
      src/screens/OrderDetails/index.js
  32. 326
      src/screens/Otp/index.js
  33. 206
      src/screens/Product/components/Book.js
  34. 81
      src/screens/Product/components/Comments.js
  35. 13
      src/screens/Product/components/Description.js
  36. 13
      src/screens/Product/components/LinkBox.js
  37. 10
      src/screens/Product/components/Rates.js
  38. 74
      src/screens/Product/components/Video.js
  39. 4
      src/screens/Product/index.js
  40. 54
      src/screens/Products/components/Book.js
  41. 29
      src/screens/Products/components/Video.js
  42. 2
      src/screens/QR/Content/index.js
  43. 4
      src/screens/QR/index.js
  44. 8
      src/screens/ShoppingCart/components/Code.js
  45. 111
      src/screens/ShoppingCart/components/Product.js
  46. 26
      src/screens/ShoppingCart/index.js
  47. 59
      src/screens/Splash/index.js
  48. 238
      yarn-error.log
  49. 196
      yarn.lock

@ -1,50 +1,22 @@
import React from "react"; import { StyleSheet } from "react-native";
import { StyleSheet, useColorScheme } from "react-native"; import { useFonts } from "expo-font";
import AsyncStorage from "@react-native-async-storage/async-storage"; import AppLoading from "expo-app-loading";
import { Provider } from "react-redux";
import { applyMiddleware, createStore, compose } from "redux";
import { createLogger } from "redux-logger";
import thunk from "redux-thunk";
import { persistStore, persistReducer } from "redux-persist";
import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2";
import allReducers from "./src/reducers";
import Navigation from "./navigation/index"; import Navigation from "./navigation/index";
import AlertModal from "./src/components/AlertModal"; import AlertModal from "./src/components/AlertModal";
import { Provider } from "react-redux";
import store from './src/redux/store';
const persistConfig = {
key: "root",
storage: AsyncStorage,
stateReconciler: autoMergeLevel2, // see "Merge Process" section for details.
whitelist: ["profile"],
};
const pReducer = persistReducer(persistConfig, allReducers);
const middleWare = [];
middleWare.push(thunk);
const loggerMiddleware = createLogger({
predicate: () => process.env.NODE_ENV === "development",
});
middleWare.push(loggerMiddleware);
const store = createStore(pReducer, compose(applyMiddleware(...middleWare)));
const persistor = persistStore(store);
const ReactNative = require("react-native");
try {
ReactNative.I18nManager.allowRTL(true);
// enableScreens();
} catch (e) {
console.log(e);
}
console.disableYellowBox = true;
const App = () => { const App = () => {
const isDarkMode = useColorScheme() === "dark"; let [fontsLoaded] = useFonts({
light : require("./assets/fonts/Farsi/IRANSansXFaNum-Light.ttf"),
regular: require("./assets/fonts/Farsi/IRANSansXFaNum-Regular.ttf"),
bold: require("./assets/fonts/Farsi/IRANSansXFaNum-Medium.ttf"),
});
if (!fontsLoaded) {
return <AppLoading />;
}
return ( return (
<Provider store={store}> <Provider store={store}>
<Navigation /> <Navigation />

@ -1,54 +0,0 @@
import React from "react";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import Home from "../src/screens/Home";
import ShoppingCart from '../src/screens/ShoppingCart';
import Products from "../src/screens/Products";
import { Entypo, FontAwesome } from "@expo/vector-icons";
const Tab = createBottomTabNavigator();
const BottomTabNavigator = () => {
return (
<Tab.Navigator
initialRouteName="Home"
screenOptions={{
headerShown: false,
tabBarActiveTintColor: "white",
tabBarInactiveTintColor: "grey",
tabBarStyle: {
backgroundColor: "#181818",
},
}}
>
<Tab.Screen
name="Home"
component={Home}
options={{
tabBarIcon: ({ focused, color }) => (
<Entypo name="home" size={focused ? 30 : 25} color={color} />
),
}}
/>
<Tab.Screen
name="Products"
component={Products}
options={{
tabBarIcon: ({ focused, color }) => (
<Entypo name="shop" size={focused ? 30 : 25} color={color} />
),
}}
/>
<Tab.Screen
name="ShoppingCart"
component={ShoppingCart}
options={{
tabBarIcon: ({ focused, color }) => (
<FontAwesome name="shopping-cart" size={focused ? 30 : 25} color={color} />
),
}}
/>
</Tab.Navigator>
);
};
export default BottomTabNavigator;

@ -1,9 +1,13 @@
import React from "react"; import React from "react";
import { NavigationContainer } from "@react-navigation/native"; import { NavigationContainer } from "@react-navigation/native";
import { createNativeStackNavigator } from "@react-navigation/native-stack"; import { createNativeStackNavigator } from "@react-navigation/native-stack";
import BottomTabNavigator from "./BottomNavigation"; import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { Entypo, FontAwesome, Ionicons } from "@expo/vector-icons";
import OrderDetails from "../src/screens/OrderDetails";
import { Dimensions } from "react-native";
import Splash from "../src/screens/Splash"; import Splash from "../src/screens/Splash";
import Home from "../src/screens/Home"; import Home from "../src/screens/Home";
import Products from "../src/screens/Products";
import Login from "../src/screens/Login"; import Login from "../src/screens/Login";
import Otp from "../src/screens/Otp"; import Otp from "../src/screens/Otp";
import Product from "../src/screens/Product"; import Product from "../src/screens/Product";
@ -14,7 +18,114 @@ import { useTranslation } from "react-i18next";
import Profile from "../src/screens/Profile"; import Profile from "../src/screens/Profile";
import Videos from "../src/screens/Videos"; import Videos from "../src/screens/Videos";
import Exams from "../src/screens/Exams"; import Exams from "../src/screens/Exams";
import OrderDetails from "../src/screens/OrderDetails"; import ShoppingCart from "../src/screens/ShoppingCart";
const width = Dimensions.get("window").width;
const Tab = createBottomTabNavigator();
const BottomTabNavigator = () => {
return (
<Tab.Navigator
initialRouteName="Home"
screenOptions={{
headerShown: false,
tabBarActiveTintColor: "#06BACE",
tabBarInactiveTintColor: "grey",
tabBarStyle: {
backgroundColor: "#CCE6FF",
},
tabBarLabelStyle: {
fontSize: width / 39,
fontFamily: "light",
},
tabBarShowLabel: false,
// tabBarLabel : 'reza'
}}
>
<Tab.Screen
name="Splash"
component={AuthStackScreen}
options={{
tabBarIcon: ({ focused, color }) => (
<FontAwesome
name="user"
size={focused ? 27 : 23}
color={color}
/>
),
}}
/>
<Tab.Screen
name="ShoppingCart"
component={ShoppingCart}
options={{
tabBarIcon: ({ focused, color }) => (
<FontAwesome
name="shopping-cart"
size={focused ? 27 : 23}
color={color}
/>
),
}}
/>
<Tab.Screen
name="Products"
component={ProductsStackScreen}
options={{
tabBarIcon: ({ focused, color }) => (
<Entypo name="shop" size={focused ? 27 : 23} color={color} />
),
}}
/>
<Tab.Screen
name="Home"
component={HomeStackScreen}
options={{
tabBarIcon: ({ focused, color }) => (
<Ionicons
name="home-outline"
size={focused ? 27 : 23}
color={color}
/>
),
}}
/>
</Tab.Navigator>
);
};
const HomeStack = createNativeStackNavigator();
const HomeStackScreen = () => {
return (
<HomeStack.Navigator screenOptions={{ headerShown: false }} initialRouteName="Home">
<HomeStack.Screen name="Home" component={Home} />
<HomeStack.Screen name="QR" component={QR} />
<HomeStack.Screen name="Product" component={Product} />
</HomeStack.Navigator>
);
};
const ProductsStack = createNativeStackNavigator();
const ProductsStackScreen = () => {
return (
<ProductsStack.Navigator screenOptions={{ headerShown: false }} initialRouteName="Products">
<ProductsStack.Screen name="Products" component={Products} />
<ProductsStack.Screen name="QR" component={QR} />
<ProductsStack.Screen name="Product" component={Product} />
</ProductsStack.Navigator>
);
};
const AuthStack = createNativeStackNavigator();
const AuthStackScreen = () => {
return (
<AuthStack.Navigator screenOptions={{ headerShown: false }} initialRouteName="Splash">
<AuthStack.Screen name="Splash" component={Splash} />
<AuthStack.Screen name="Login" component={Login} />
<AuthStack.Screen name="Otp" component={Otp} />
</AuthStack.Navigator>
);
};
const Stack = createNativeStackNavigator(); const Stack = createNativeStackNavigator();
@ -26,11 +137,6 @@ const Navigation = () => {
screenOptions={{ headerShown: false }} screenOptions={{ headerShown: false }}
> >
<Stack.Screen name="Root" component={BottomTabNavigator} /> <Stack.Screen name="Root" component={BottomTabNavigator} />
<Stack.Screen name="Product" component={Product} />
<Stack.Screen name="Login" component={Login} />
<Stack.Screen name="Otp" component={Otp} />
<Stack.Screen name="Splash" component={Splash} />
<Stack.Screen name="QR" component={QR} />
</Stack.Navigator> </Stack.Navigator>
</NavigationContainer> </NavigationContainer>
); );

@ -10,14 +10,18 @@
"eject": "expo eject" "eject": "expo eject"
}, },
"dependencies": { "dependencies": {
"@expo-google-fonts/noto-sans": "^0.2.0",
"@react-native-async-storage/async-storage": "~1.15.0", "@react-native-async-storage/async-storage": "~1.15.0",
"@react-navigation/bottom-tabs": "^6.0.9", "@react-navigation/bottom-tabs": "^6.0.9",
"@react-navigation/drawer": "^6.1.8",
"@react-navigation/native": "^6.0.6", "@react-navigation/native": "^6.0.6",
"@react-navigation/native-stack": "^6.2.5", "@react-navigation/native-stack": "^6.2.5",
"expo": "^44.0.1", "expo": "^44.0.1",
"expo-app-loading": "~1.3.0",
"expo-barcode-scanner": "~11.2.0", "expo-barcode-scanner": "~11.2.0",
"expo-camera": "~12.1.0", "expo-camera": "~12.1.0",
"expo-device": "~4.1.0", "expo-device": "~4.1.0",
"expo-font": "^10.0.4",
"expo-status-bar": "~1.2.0", "expo-status-bar": "~1.2.0",
"i18next": "^21.6.3", "i18next": "^21.6.3",
"install": "^0.13.0", "install": "^0.13.0",

Binary file not shown.

@ -1,6 +1,8 @@
import React, {useState} from 'react'; import React, {useState} from 'react';
import {TextInput, View, Text, Dimensions, StyleSheet} from 'react-native'; import {TextInput, View, Text, Dimensions, StyleSheet} from 'react-native';
import tw from 'tailwind-react-native-classnames'; import tw from 'tailwind-rn';
const width = Dimensions.get('window').width;
const FloatingLabelInput = ({ const FloatingLabelInput = ({
label, label,
@ -8,48 +10,47 @@ const FloatingLabelInput = ({
direction, direction,
labelBackgroundColor, labelBackgroundColor,
onChange, onChange,
value,
name, name,
value,
color,
maxLength,
autoFocus,
...props ...props
}) => { }) => {
const [isFocused, setIsFocused] = useState(false); const [isFocused, setIsFocused] = useState(false);
const styles = StyleSheet.create({ const styles = StyleSheet.create({
labelStyle: { labelStyle: {
position: 'absolute', fontFamily: 'regular',
right: 15, top: !isFocused ? '50%' : 1,
backgroundColor: 'white', fontSize: !isFocused ? width / 36 : width / 40,
zIndex: 100, transform: [{translateY: -width / 35}],
paddingHorizontal: 5, color: !isFocused ? '#555' : '#196EC0',
textAlign: 'center',
top: !isFocused ? '50%' : 0,
fontSize: !isFocused ? Dimensions.get('window').width / 27 : 14,
transform: [{translateY: -Dimensions.get('window').width / 35}],
color: !isFocused ? '#555' : '#6CBE44',
// transition: Transitions.all(Transitions.)
}, },
inputStyle: { inputStyle: {
fontSize: Dimensions.get('window').width / 25, fontSize: Dimensions.get('window').width / 27,
color: '#000', color: '#000',
borderWidth: 0.5, borderWidth: 1,
borderColor: isFocused ? '#6CBE44' : '#555', borderColor: isFocused ? '#196EC0' : '#777',
paddingVertical: 15, textAlign: textAlign,
paddingHorizontal: 10, fontFamily: 'light'
direction: 'rtl',
textAlign: 'right',
}, },
}); });
return ( return (
<View style={{marginTop: 18}}> <View style={tw('mt-4')}>
<Text <Text
style={[styles.labelStyle, tw.style('transition-all transform duration-300')]}> style={[styles.labelStyle, tw('px-1 z-10 bg-white absolute right-4 text-center')]}>
{label} {label}
</Text> </Text>
<TextInput <TextInput
style={[styles.inputStyle , tw.style('rounded-md') ]} style={[styles.inputStyle , tw('rounded-md p-2') ]}
onChangeText={text => onChange(name, text)} onChangeText={text => onChange(name, text)}
placeholder={'09123456789'}
onFocus={() => setIsFocused(true)} onFocus={() => setIsFocused(true)}
autoFocus={autoFocus}
underlineColorAndroid={"transparent"}
maxLength={maxLength}
onBlur={() => onBlur={() =>
value ? setIsFocused(() => true) : setIsFocused(() => false) value ? setIsFocused(() => false) : setIsFocused(() => false)
} }
/> />
</View> </View>

@ -17,14 +17,14 @@ export default function Header({icon, title, description, background}) {
<Text <Text
style={[ style={[
{fontSize: width / 18, color: '#196EC0'}, {fontSize: width / 18, color: '#196EC0'},
tw.style('font-semibold mb-1'), tw.style(' mb-1'),
]}> ]}>
{title} {title}
</Text> </Text>
<Text <Text
style={[ style={[
{color: '#86A0B9', fontSize: width / 30}, {color: '#86A0B9', fontSize: width / 30},
tw.style('font-semibold mb-2'), tw.style(' mb-2'),
]}> ]}>
{description} {description}
</Text> </Text>

@ -57,7 +57,7 @@ const Navbar = ({ notification }) => {
)} )}
</View> </View>
<Pressable <Pressable
onPress={() => navigation.navigate("Home")} onPress={() => navigation.navigate("خانه")}
style={tw("absolute right-1/2 top-1/2")} style={tw("absolute right-1/2 top-1/2")}
> >
<Image <Image

@ -22,7 +22,7 @@ export default function Pressable1({
width : width, width : width,
}, },
]}> ]}>
<Text style={{fontSize: 14, color: color}}>{title}</Text> <Text style={{fontSize: fullWidth / 36, color: color, fontFamily : 'light'}}>{title}</Text>
</Pressable> </Pressable>
); );
} }

@ -5,7 +5,7 @@ import tw from 'tailwind-rn';
//Color //Color
import Color from '../constants/Colors'; import Color from '../constants/Colors';
function Progress({percent}) { function Progress({percent, alignItems}) {
const [delayPercent, setDelayPercent] = useState(0); const [delayPercent, setDelayPercent] = useState(0);
useEffect(() => { useEffect(() => {
setTimeout(() => { setTimeout(() => {
@ -15,14 +15,14 @@ function Progress({percent}) {
return ( return (
<View <View
style={[ style={[
tw('w-full h-1.5 rounded-full overflow-hidden my-3'), tw(`w-full h-1.5 rounded-full overflow-hidden my-3 flex ${alignItems}`),
{backgroundColor: '#D3E9FF'}, {backgroundColor: '#D3E9FF'},
]}> ]}>
<View <View
style={[ style={[
tw('h-full rounded-full'), tw('h-full rounded-full'),
{ {
backgroundColor: Color.theme1.light.blue3, backgroundColor: Color.theme1.light.blue5,
width: percent + '%', width: percent + '%',
// backgroundColor: Color.theme1.light.blue4, // backgroundColor: Color.theme1.light.blue4,
}, },

@ -20,7 +20,7 @@ const Search = ({
}) => { }) => {
const styles = StyleSheet.create({ const styles = StyleSheet.create({
inputStyle: { inputStyle: {
fontSize: width / 30, fontSize: width / 36,
color: '#000', color: '#000',
borderWidth: 0.5, borderWidth: 0.5,
borderColor: '#DBDBDB', borderColor: '#DBDBDB',
@ -29,6 +29,7 @@ const Search = ({
direction: direction, direction: direction,
textAlign: textAlign, textAlign: textAlign,
backgroundColor: '#F9F9F9', backgroundColor: '#F9F9F9',
fontFamily : 'light'
}, },
}); });
return ( return (
@ -40,7 +41,7 @@ const Search = ({
placeholderTextColor={'#cccccc'} placeholderTextColor={'#cccccc'}
value={value} value={value}
/> />
<Pressable style={tw.style('absolute left-3 top-0 transform inset-y-2')}> <Pressable style={tw.style('absolute left-3 top-0 inset-y-2')}>
<Image source={searchIcon} style={[{width: 20, height: 20}]} /> <Image source={searchIcon} style={[{width: 20, height: 20}]} />
</Pressable> </Pressable>
</View> </View>

@ -15,16 +15,18 @@ function Select({iconPosition, options, onChange, value, width, defaultValue}) {
borderRadius: 6, borderRadius: 6,
height: 36, height: 36,
backgroundColor: '#F9F9F9', backgroundColor: '#F9F9F9',
fontFamily : 'light'
}} }}
rowTextStyle={{fontSize: Dimensions.get('window').width / 30}} rowTextStyle={{fontSize: Dimensions.get('window').width / 36, fontFamily : 'light'}}
defaultButtonText={defaultValue} defaultButtonText={defaultValue}
statusBarTranslucent={true} statusBarTranslucent={true}
buttonTextStyle={{ buttonTextStyle={{
textAlign: 'center', textAlign: 'center',
justifyContent: 'flex-end', justifyContent: 'flex-end',
flex: 0, flex: 0,
fontSize: Dimensions.get('window').width / 30, fontSize: Dimensions.get('window').width / 36,
color: '#707070', color: '#707070',
fontFamily : 'light'
// display: 'inline' // display: 'inline'
}} }}
dropdownIconPosition={iconPosition} dropdownIconPosition={iconPosition}

@ -11,4 +11,4 @@ const allReducers = combineReducers({
}), }),
}); });
export default allReducers; export default allReducers;

@ -0,0 +1,40 @@
import AsyncStorage from "@react-native-async-storage/async-storage";
import { applyMiddleware, createStore, compose } from "redux";
import { createLogger } from "redux-logger";
import thunk from "redux-thunk";
import { persistStore, persistReducer } from "redux-persist";
import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2";
import allReducers from "../reducers";
const persistConfig = {
key: "root",
storage: AsyncStorage,
stateReconciler: autoMergeLevel2, // see "Merge Process" section for details.
whitelist: ["profile"],
};
const pReducer = persistReducer(persistConfig, allReducers);
const middleWare = [];
middleWare.push(thunk);
const loggerMiddleware = createLogger({
predicate: () => process.env.NODE_ENV === "development",
});
middleWare.push(loggerMiddleware);
const store = createStore(pReducer, compose(applyMiddleware(...middleWare)));
const persistor = persistStore(store);
const ReactNative = require("react-native");
try {
ReactNative.I18nManager.allowRTL(true);
// enableScreens();
} catch (e) {
console.log(e);
}
console.disableYellowBox = true;
export default store;

@ -1,4 +1,4 @@
import React from 'react'; import React from "react";
import { import {
View, View,
Image, Image,
@ -6,74 +6,99 @@ import {
Dimensions, Dimensions,
TouchableOpacity, TouchableOpacity,
FlatList, FlatList,
} from 'react-native'; } from "react-native";
const width = Dimensions.get('window').width; const width = Dimensions.get("window").width;
const height = Dimensions.get('window').height; const height = Dimensions.get("window").height;
import Header from '../components/Header'; import Header from "../components/Header";
import tw from 'tailwind-rn'; import tw from "tailwind-rn";
import {connect} from 'react-redux'; import { connect } from "react-redux";
//asssets //asssets
import foodImage from '../assets/food.png'; import foodImage from "../assets/food.png";
import userImage from '../assets/user.png'; import userImage from "../assets/user.png";
import messageIcon from '../assets/message.png'; import messageIcon from "../assets/message.png";
//Color //Color
import Color from '../../../constants/Colors'; import Color from "../../../constants/Colors";
function Blogs({products}) { function Blogs({ products }) {
return ( return (
<View style={[tw('flex flex-col pr-3 mb-5')]}> <View style={[tw("flex flex-col pr-3 mb-5")]}>
<View style={tw('w-full pl-3')}> <View style={tw("w-full pl-3")}>
<Header title={'خواندنیها'} route={'Blogs'} /> <Header title={"خواندنیها"} route={"Blogs"} />
</View> </View>
<FlatList <FlatList
horizontal={true} horizontal={true}
inverted={true} inverted={true}
style={[tw('flex flex-row mt-3')]} style={[tw("flex flex-row mt-3")]}
data={products} data={products}
renderItem={({blog, index}) => <Blog blog={blog} key={index} />} renderItem={({ item }) => <Blog blog={item} />}
keyExtractor={item => item.id}
/> />
</View> </View>
); );
} }
const Blog = ({blog}) => { const Blog = ({ blog }) => {
return ( return (
<TouchableOpacity <TouchableOpacity
style={[tw('rounded-md ml-3 rounded-md relative')]} style={[tw("rounded-md ml-3 rounded-md relative")]}
// onPress={() => navigation.navigate('Product')} // onPress={() => navigation.navigate('Product')}
> >
<Image source={foodImage} style={{width: 227, height: 133}} /> <Image source={foodImage} style={{ width: 227, height: 133 }} />
<View <View
style={[ style={[
{transform: [{translateY: -20}], marginHorizontal: 10}, { transform: [{ translateY: -20 }], marginHorizontal: 10 },
tw('flex flex-col bg-white rounded-md p-2'), tw("flex flex-col bg-white rounded-md p-2"),
]}> ]}
>
<Text <Text
style={[ style={[
tw('font-bold text-sm mb-2'), tw("mb-2"),
{color: Color.theme1.light.blue7}, {
]}> color: Color.theme1.light.blue7,
fontFamily: "bold",
fontSize: width / 36,
},
]}
>
آیا مواد غذای پر فیبر مفید هستند؟ آیا مواد غذای پر فیبر مفید هستند؟
</Text> </Text>
<View style={tw('flex flex-row-reverse justify-between')}> <View style={tw("flex flex-row-reverse justify-between")}>
<View style={tw('flex-row-reverse items-center')}> <View style={tw("flex-row-reverse items-center")}>
<Image <Image
source={userImage} source={userImage}
style={[tw('rounded-full ml-1'), {width: 13, height: 13}]} style={[tw("rounded-full ml-1"), { width: 13, height: 13 }]}
/> />
<Text style={[{color: Color.theme1.light.blue5}]}> <Text
style={[
{
color: Color.theme1.light.blue5,
fontFamily: "light",
fontSize: width / 40,
},
]}
>
حامد دژبانی نسب حامد دژبانی نسب
</Text> </Text>
</View> </View>
<View style={tw('flex-row-reverse items-center')}> <View style={tw("flex-row-reverse items-center")}>
<Text style={[{color: Color.theme1.light.blue5}]}>۳۰ دقیقه</Text> <Text
style={[
{
color: Color.theme1.light.blue5,
fontFamily: "light",
fontSize: width / 40,
},
]}
>
۳۰ دقیقه
</Text>
<Image <Image
source={messageIcon} source={messageIcon}
style={[tw('rounded-full mr-1'), {width: 13, height: 13}]} style={[tw("rounded-full mr-1"), { width: 13, height: 13 }]}
/> />
</View> </View>
</View> </View>
@ -82,7 +107,7 @@ const Blog = ({blog}) => {
); );
}; };
const mapStateToProps = state => ({ const mapStateToProps = (state) => ({
// features: state.publicApi.home?.features, // features: state.publicApi.home?.features,
}); });
export default connect(mapStateToProps, {})(Blogs); export default connect(mapStateToProps, {})(Blogs);
@ -91,27 +116,35 @@ Blogs.defaultProps = {
products: [ products: [
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 0,
}, },
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 1,
}, },
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 2,
}, },
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 3,
}, },
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 4,
}, },
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 5,
}, },
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 6,
}, },
{ {
imageUrl: foodImage, imageUrl: foodImage,
id: 7,
}, },
], ],
}; };

@ -1,22 +1,32 @@
import React from 'react'; import React from "react";
import {View, Text, Image, Pressable} from 'react-native'; import { View, Text, Image, Pressable, Dimensions } from "react-native";
import {useNavigation} from '@react-navigation/native'; import {Entypo} from '@expo/vector-icons';
import tw from 'tailwind-rn'; import { useNavigation } from "@react-navigation/native";
import tw from "tailwind-rn";
//assets //assets
import arrowIcon from '../assets/arrow.png'; import arrowIcon from "../assets/arrow.png";
//Color //Color
import Color from '../../../constants/Colors'; import Color from "../../../constants/Colors";
const Header = ({title, route}) => { const width = Dimensions.get('window').width;
const Header = ({ title, route }) => {
const navigation = useNavigation(); const navigation = useNavigation();
return ( return (
<View style={tw('w-full flex flex-row-reverse justify-between mb-2')}> <View style={tw("w-full flex flex-row-reverse justify-between mb-0")}>
<Text <Text
style={[tw('text-lg font-bold'), {color: Color.theme1.light.blue5}]}> style={[
{
color: Color.theme1.light.blue5,
fontFamily : 'bold',
fontSize : width / 30
},
]}
>
{title} {title}
</Text> </Text>
<Pressable onPress={() => navigation.navigate(route)}> <Pressable onPress={() => navigation.navigate(route)}>
<Image source={arrowIcon} style={{width: 24, height: 24}} /> <Entypo name="chevron-small-left" size={25} color="#196EC0" />
</Pressable> </Pressable>
</View> </View>
); );

@ -1,4 +1,4 @@
import React, {useState, useEffect} from 'react'; import React, { useState, useEffect } from "react";
import { import {
View, View,
Text, Text,
@ -6,82 +6,103 @@ import {
TouchableOpacity, TouchableOpacity,
Dimensions, Dimensions,
FlatList, FlatList,
} from 'react-native'; } from "react-native";
import tw from 'tailwind-rn'; import tw from "tailwind-rn";
import {connect} from 'react-redux'; import {useNavigation} from '@react-navigation/native';
// import { book } from "../../../../../redux/actions"; import { connect } from "react-redux";
import Progress from '../../../components/Progress'; import Progress from "../../../components/Progress";
//assets //assets
import bookImage from '../assets/zist11.png'; import bookImage from "../assets/zist11.png";
//Color //Color
import Color from '../../../constants/Colors'; import Color from "../../../constants/Colors";
const width = Dimensions.get('window').width; const width = Dimensions.get("window").width;
const height = Dimensions.get('window').height; const height = Dimensions.get("window").height;
function MyBooks({getList, list, grades}) { function MyBooks({ getList, list, grades }) {
return ( return (
<View style={[tw('w-full px-4 mb-5')]}> <View style={[tw("w-full px-4 mb-5")]}>
<View <View
style={[ style={[
tw( tw("w-full flex flex-col rounded-md pt-2 px-2 overflow-hidden"),
'w-full flex flex-col rounded-md pt-2 px-2 bg-blueFF1 overflow-hidden',
),
{ {
backgroundColor: Color.theme1.light.blue1, backgroundColor: Color.theme1.light.blue1,
borderColor: Color.theme1.light.blue2, borderColor: Color.theme1.light.blue2,
borderWidth: 1, borderWidth: 1,
}, },
]}> ]}
>
<Text <Text
style={[tw('font-bold text-lg'), {color: Color.theme1.light.blue5}]}> style={[
{
color: Color.theme1.light.blue5,
fontFamily: "bold",
fontSize: width / 30,
},
]}
>
کتابهای من کتابهای من
</Text> </Text>
<FlatList <FlatList
style={[tw('py-3')]} style={[tw("py-3")]}
horizontal={true} horizontal={true}
inverted={true} inverted={true}
data={list} data={list}
renderItem={(book, index) => <Book key={index} />} renderItem={({ item }) => <Book book={item} />}
keyExtractor={(book) => book.name}
/> />
</View> </View>
</View> </View>
); );
} }
const Book = ({book, grades}) => { const Book = ({ book, grades }) => {
const navigation = useNavigation();
return ( return (
<TouchableOpacity style={tw('flex flex-col ml-3')}> <TouchableOpacity
style={tw("flex flex-col ml-3")}
onPress={() => navigation.navigate("Product")}
>
<Image <Image
source={bookImage} source={bookImage}
style={[ style={[
tw('rounded-md'), tw("rounded-md"),
{ {
height: 180, height: 160,
width: 114, width: 110,
}, },
]} ]}
/> />
<Text <Text
style={[ style={[
tw('mt-2 text-md font-semibold'), tw("mt-2 pr-1"),
{color: Color.theme1.light.blue6}, {
]}> color: Color.theme1.light.blue6,
{'نام کتاب'} fontFamily: "bold",
fontSize: width / 36,
},
]}
>
{"نام کتاب"}
</Text> </Text>
<Text <Text
style={[ style={[
tw('font-medium text-xs mt-1'), tw("mt-1 pr-1"),
{color: Color.theme1.light.blue5}, {
]}>{`پایه ${'اول'}`}</Text> color: Color.theme1.light.blue5,
<Progress percent={60} /> fontFamily: "light",
fontSize: width / 40,
},
]}
>{`پایه ${"اول"}`}</Text>
<Progress percent={60} alignItems={'items-end'} />
</TouchableOpacity> </TouchableOpacity>
); );
}; };
const mapStateToProps = state => ({ const mapStateToProps = (state) => ({
// list: state.book.list, // list: state.book.list,
// grades : state.publicApi.grades // grades : state.publicApi.grades
}); });
@ -89,5 +110,5 @@ const mapStateToProps = state => ({
export default connect(mapStateToProps, {})(MyBooks); export default connect(mapStateToProps, {})(MyBooks);
MyBooks.defaultProps = { MyBooks.defaultProps = {
list: [{name: 1}, {name: 2}, {name: 3}, {name: 4}, {name: 5}], list: [{ name: 1 }, { name: 2 }, { name: 3 }, { name: 4 }, { name: 5 }],
}; };

@ -24,11 +24,11 @@ const height = Dimensions.get('window').height;
function Videos({getList, list, grades}) { function Videos({getList, list, grades}) {
return ( return (
<View style={[tw('w-full px-4 mb-5')]}> <View style={[tw('w-full px-2 mb-5')]}>
<View <View
style={[ style={[
tw( tw(
'w-full flex flex-col rounded-md pt-2 px-2 bg-blueFF1 overflow-hidden', 'w-full flex flex-col rounded-md pt-2 px-2 overflow-hidden',
), ),
]}> ]}>
<Header title="دورههای ویدئویی شما" route={'Videos'} /> <Header title="دورههای ویدئویی شما" route={'Videos'} />
@ -37,7 +37,8 @@ function Videos({getList, list, grades}) {
horizontal={true} horizontal={true}
inverted={true} inverted={true}
data={list} data={list}
renderItem={(video, index) => <Video key={index} />} renderItem={(item) => <Video video={item} />}
keyExtractor={item => item.name}
/> />
</View> </View>
</View> </View>
@ -52,22 +53,22 @@ const Video = ({book, grades}) => {
style={[ style={[
tw('rounded-md'), tw('rounded-md'),
{ {
height: 180, height: 160,
width: 114, width: 110,
}, },
]} ]}
/> />
<Text <Text
style={[ style={[
tw('mt-2 text-md font-semibold'), tw('mt-2 pr-1'),
{color: Color.theme1.light.blue6}, {color: Color.theme1.light.blue6, fontFamily : 'bold', fontSize : width / 36},
]}> ]}>
{'نام کتاب'} {'نام کتاب'}
</Text> </Text>
<Text <Text
style={[ style={[
tw('font-medium text-xs mt-1'), tw('mt-1 pr-1'),
{color: Color.theme1.light.blue5}, {color: Color.theme1.light.blue5, fontFamily : 'light', fontSize : width / 40},
]}>{`پایه ${'اول'}`}</Text> ]}>{`پایه ${'اول'}`}</Text>
<Progress percent={60} /> <Progress percent={60} />
</TouchableOpacity> </TouchableOpacity>

@ -23,7 +23,7 @@ function Home(props) {
return ( return (
<SafeAreaView <SafeAreaView
style={{ style={{
paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0 paddingTop: Platform.OS === "android" ? StatusBar.currentHeight : 0,
}} }}
> >
<Navbar /> <Navbar />

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

@ -1,129 +1,132 @@
import React, {useState} from 'react'; import React, { useState } from "react";
import {View, Text, Image, ActivityIndicator, Dimensions, TextInput, TouchableHighlight} from 'react-native'; import {
import Logo from '../../assets/images/logo.png'; View,
import IranFlag from "./components/IranFlag"; Text,
import {digitToEn, digitToPersian} from "../../utils"; Image,
ActivityIndicator,
Dimensions,
TextInput,
TouchableHighlight,
} from "react-native";
import Logo from "./assets/logo.png";
import CustomTextInput from "../../components/CustomTextInput";
import { digitToEn, digitToPersian } from "../../utils";
import services from "./services"; import services from "./services";
import {asyncAwesomeAlert} from "../../utils/AsyncWrappers"; import { asyncAwesomeAlert } from "../../utils/AsyncWrappers";
import tw from "tailwind-rn";
const {width, height} = Dimensions.get('window'); const { width, height } = Dimensions.get("window");
let faNums = ['۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '۰'] let faNums = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"];
function Login(props) { function Login(props) {
const [phone, setPhone] = useState("");
const [loading, setLoading] = useState(false);
const [phone, setPhone] = useState(''); const onChangePhone = (name, value) => {
const [loading, setLoading] = useState(false) let items = digitToPersian(value).split("");
const onChangePhone = (value) => {
let items = digitToPersian(value).split('');
for (let item of items) { for (let item of items) {
if (!faNums.includes(item)) { if (!faNums.includes(item)) {
return return;
} }
} }
setPhone(digitToPersian(value)); setPhone(digitToPersian(value));
} };
const checkPhoneNumber = () => { const checkPhoneNumber = () => {
return phone.split('').length === 9; return phone.split("").length === 11;
} };
const submit = async () => { const submit = async () => {
setLoading(true) setLoading(true);
if (!checkPhoneNumber()) { // if (!checkPhoneNumber()) {
setLoading(false) // setLoading(false);
return asyncAwesomeAlert('خطا', 'شماره وارد شده اشتباه است', {showCancelButton: false}); // return asyncAwesomeAlert("خطا", "شماره وارد شده اشتباه است", {
} // showCancelButton: false,
let res = await services.getSmsCode({ // });
cellphone: '09' + digitToEn(phone) // }
}) // let res = await services.getSmsCode({
if (res.ok) { // cellphone: digitToEn(phone),
setLoading(false) // });
props.navigation.navigate('Otp', {phone: '09' + digitToEn(phone)}); // if (res.ok) {
} // setLoading(false);
setLoading(false) props.navigation.navigate("Otp", { phone: digitToEn(phone) });
} // }
setLoading(false);
};
return ( return (
<View style={{ <View
flex: 1, style={[
justifyContent: 'center', tw("flex flex-col flex-1 justify-center items-center bg-white px-4"),
alignItems: 'center', ]}
backgroundColor: 'white' >
}}> <Image
<Image source={Logo} style={{ source={Logo}
width: width * 0.7, style={{
height: width * 0.7 / 2.09, width: 55,
}} /> height: 80,
<Text style={{ }}
width: width, />
paddingHorizontal: 10, <Text
marginTop: 20, style={[
fontSize: 20, tw("w-full my-5"),
textAlign: 'right', {
}}>{'دانوین'}</Text> fontSize: width / 20,
<Text style={{ fontFamily: "bold",
width: width, color: "#132F52",
paddingHorizontal: 10, },
marginTop: 10, ]}
fontSize: 14, >
color: '#6f7074', {"سلام"}
textAlign: 'right', </Text>
}}>{'به دانوین خوش اومدی برای عضویت و ادامه شماره موبایلت رو وارد کن و روی گزینه ثبت بزن'}</Text> {/* <Text
<View style={{ style={[tw('w-full mt-2'),{
width: width - 10, fontSize: width / 34,
height: width / 8, color: "#6f7074",
borderRadius: 8, fontFamily: "regular"
backgroundColor: '#f2f2f2', }]}
flexDirection: 'row', >
marginTop: 10, {
alignItems: 'center' "به دانوین خوش اومدی برای عضویت و ادامه شماره موبایلت رو وارد کن و روی گزینه ثبت بزن"
}}> }
<IranFlag /> </Text> */}
<Text style={{ <View style={[tw("w-full rounded-md overflow-hidden relative"), {}]}>
// width: width / 7 - 15, <CustomTextInput
fontSize: 18, label="شماره موبایل"
marginLeft: 10, textAlign="left"
color: '#a2a2a2', name="phone"
textAlign: 'right', maxlength="11"
// marginRight: 5,
}}>
{'۰۹'}
</Text>
<TextInput
style={{
width: width / 1.5,
color: '#a2a2a2',
fontSize: 18
}}
maxLength={9}
underlineColorAndroid={'transparent'}
value={phone} value={phone}
onChangeText={text => onChangePhone(text)} onChange={onChangePhone}
autoFocus={true}
/> />
</View> </View>
<TouchableHighlight <TouchableHighlight
disabled={loading} disabled={loading}
style={{ style={[
width: width - 10, tw("w-full py-2 rounded-md"),
height: width / 9, {
backgroundColor: '#6cbe44', backgroundColor: "#196EC0",
alignItems: 'center', alignItems: "center",
justifyContent: 'center', justifyContent: "center",
borderRadius: 10, marginTop: 15,
marginTop: 15, fontFamily: "light",
}} },
onPress={() => submit()}> ]}
{loading ? onPress={() => submit()}
<ActivityIndicator size={'small'} color={'white'}/> >
: {loading ? (
<Text style={{ <ActivityIndicator size={"small"} color={"white"} />
color: 'white', ) : (
fontSize: 18, <Text
}}> style={{
{'ادامه'} color: "white",
fontSize: 18,
}}
>
{"ادامه"}
</Text> </Text>
} )}
</TouchableHighlight> </TouchableHighlight>
</View> </View>
); );

@ -135,7 +135,7 @@ function OrderDetails({order}) {
این کد را پس از دریافت کالا، به مامور ارسال دانوین اعلام فرمایید این کد را پس از دریافت کالا، به مامور ارسال دانوین اعلام فرمایید
</Text> </Text>
</View> </View>
<View style={tw.style('w-full flex flex-column items-end')}> <View style={tw.style('w-full flex flex-col items-end')}>
{order.items.map((item, index) => ( {order.items.map((item, index) => (
<Book book={item} key={index} /> <Book book={item} key={index} />
))} ))}

@ -1,4 +1,4 @@
import React, {useEffect, useState} from 'react' import React, { useEffect, useState } from "react";
import { import {
View, View,
Text, Text,
@ -9,17 +9,18 @@ import {
StyleSheet, StyleSheet,
TouchableOpacity, TouchableOpacity,
ActivityIndicator, ActivityIndicator,
AsyncStorage } from "react-native";
} from 'react-native'; import tw from "tailwind-rn";
import {connect} from 'react-redux'; import AsyncStorage from "@react-native-async-storage/async-storage";
import Logo from "../../assets/images/logo.png"; import { connect } from "react-redux";
import Logo from "../Login/assets/logo.png";
import IranFlag from "../Login/components/IranFlag"; import IranFlag from "../Login/components/IranFlag";
import {digitToEn, digitToPersian} from "../../utils"; // import { digitToEn, digitToPersian } from "../../utils";
import services from "./services"; import services from "./services";
import {buildAction} from "../../reducers/DefaultReducer"; import { buildAction } from "../../reducers/DefaultReducer";
import {PROFILE_RECORD} from "../../actions/actionTypes"; import { PROFILE_RECORD } from "../../actions/actionTypes";
const {width} = Dimensions.get('window') const { width } = Dimensions.get("window");
let ref1; let ref1;
let ref2; let ref2;
let ref3; let ref3;
@ -27,189 +28,222 @@ let ref4;
let timer = 60; let timer = 60;
const mapStateToProps = state => { const mapStateToProps = (state) => {
return { return {
profile: state.profile, profile: state.profile,
} };
} };
function Otp(props) { function Otp(props) {
let faNums = ['۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹', '۰'] let faNums = ["۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹", "۰"];
const [firstCode, setFirstCode] = useState(''); const [firstCode, setFirstCode] = useState("");
const [secondCode, setSecondCode] = useState(''); const [secondCode, setSecondCode] = useState("");
const [thirdCode, setThirdCode] = useState(''); const [thirdCode, setThirdCode] = useState("");
const [fourthCode, setFourthCode] = useState(''); const [fourthCode, setFourthCode] = useState("");
const [time, setTime] = useState(60); const [time, setTime] = useState(60);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const checkValue = (value) => { const checkValue = (value) => {
return faNums.includes(digitToPersian(value)); return faNums.includes(digitToPersian(value));
} };
const onChangeCode = (value, key) => { const onChangeCode = (value, key) => {
// if (!checkValue()) { // if (!checkValue()) {
// return // return
// } // }
switch (key) { switch (key) {
case '1': case "1":
setFirstCode(digitToPersian(value)); setFirstCode(value);
ref2.focus(); if(value !== ''){
ref2.focus();
}
break; break;
case '2': case "2":
setSecondCode(digitToPersian(value)); setSecondCode(value);
ref3.focus(); if(value !== ''){
ref3.focus();
}else{
ref1.focus();
}
break; break;
case '3': case "3":
setThirdCode(digitToPersian(value)); setThirdCode(value);
ref4.focus(); if(value !== ''){
ref4.focus();
}else{
ref2.focus();
}
break; break;
case '4': case "4":
setFourthCode(digitToPersian(value)) setFourthCode(value);
submit(); if(value !== ''){
// ref3.focus();
}else{
ref3.focus();
}
// submit();
break; break;
} }
} };
const getEnCode = () => { const getEnCode = () => {
return Number(digitToEn(firstCode) + digitToEn(secondCode) + digitToEn(thirdCode) + digitToEn(fourthCode)) return Number(
} digitToEn(firstCode) +
digitToEn(secondCode) +
digitToEn(thirdCode) +
digitToEn(fourthCode)
);
};
const submit = async () => { const submit = async () => {
setLoading(true) setLoading(true);
let res = await services.sendOtpCode({ let res = await services.sendOtpCode({
cellphone: props.route.params.phone, cellphone: props.route.params.phone,
otp: String(getEnCode()), otp: String(getEnCode()),
applicationToken: "1", applicationToken: "1",
userToken: "1" userToken: "1",
}) });
if (res.ok) { if (res.ok) {
setLoading(false) setLoading(false);
await AsyncStorage.setItem('accessToken', res.data.accessToken); await AsyncStorage.setItem("accessToken", res.data.accessToken);
await AsyncStorage.setItem('refreshToken', res.data.refreshToken); await AsyncStorage.setItem("refreshToken", res.data.refreshToken);
let action = buildAction(PROFILE_RECORD); let action = buildAction(PROFILE_RECORD);
await props.dispatch(action({ await props.dispatch(
accessToken: res.data.accessToken, action({
refreshToken: res.data.refreshToken, accessToken: res.data.accessToken,
...res.data.profile, refreshToken: res.data.refreshToken,
})) ...res.data.profile,
})
);
props.navigation.reset({ props.navigation.reset({
index: 0, index: 0,
routes: [{name: 'Home'}] routes: [{ name: "Home" }],
}) });
} }
setLoading(false) setLoading(false);
} };
useEffect(() => { useEffect(() => {
let interval = setInterval(() => { // let interval = setInterval(() => {
if (time > 0) { // if (time > 0) {
setTime(timer - 1); // setTime(timer - 1);
timer -= 1; // timer -= 1;
} // }
}, 1000); // }, 1000);
let timeout = setTimeout(() => { // let timeout = setTimeout(() => {
clearInterval(interval) // clearInterval(interval)
}, 60000) // }, 60000)
return () => { // return () => {
clearInterval(interval); // clearInterval(interval);
clearTimeout(timeout) // clearTimeout(timeout)
} // }
}, []); }, []);
return ( return (
<View style={{ <View style={[tw("px-4 flex-1 justify-center items-center bg-white")]}>
flex: 1, <Image
justifyContent: 'center', source={Logo}
alignItems: 'center', style={[
backgroundColor: 'white' tw("mb-12"),
}}> {
<Image source={Logo} style={{ width: 55,
width: width * 0.7, height: 80,
height: width * 0.7 / 2.09, },
}} /> ]}
<Text style={{ />
width: width, <Text
paddingHorizontal: 10, style={[
marginTop: 20, tw("w-full mt-2.5"),
fontSize: 20, {
textAlign: 'right', fontSize: width / 34,
}}>{'دانوین'}</Text> fontFamily: "regular",
<Text style={{ color: "#6f7074",
width: width, },
paddingHorizontal: 10, ]}
marginTop: 10, >{`یک کد تائیدیه به شماره ${props.route.params.phone} ارسال شد. آن را در قسمت زیر وارد کنید`}</Text>
fontSize: 14, <View
color: '#6f7074', style={[
textAlign: 'right', tw("w-full px-4 pt-6 flex flex-row items-center justify-center"),
}}>{`یک کد تائیدیه به شماره ${props.route.params.phone} ارسال شد. آن را در قسمت زیر وارد کنید`}</Text> ]}
<View style={{ >
width: width - 10,
height: width / 8,
borderRadius: 8,
flexDirection: 'row',
marginTop: 10,
alignItems: 'center',
justifyContent: 'space-evenly'
}}>
<TextInput <TextInput
style={styles.input} style={[
underlineColorAndroid={'transparent'} tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={firstCode} value={firstCode}
maxLength={1} maxLength={1}
ref={ref => ref1 = ref} ref={(ref) => (ref1 = ref)}
onChangeText={text => onChangeCode(text, '1')} onChangeText={(text) => onChangeCode(text, "1")}
/> />
<TextInput <TextInput
style={styles.input} style={[
underlineColorAndroid={'transparent'} tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={secondCode} value={secondCode}
maxLength={1} maxLength={1}
ref={ref => ref2 = ref} ref={(ref) => (ref2 = ref)}
onChangeText={text => onChangeCode(text, '2')} onChangeText={(text) => onChangeCode(text, "2")}
/> />
<TextInput <TextInput
style={styles.input} style={[
underlineColorAndroid={'transparent'} tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={thirdCode} value={thirdCode}
maxLength={1} maxLength={1}
ref={ref => ref3 = ref} ref={(ref) => (ref3 = ref)}
onChangeText={text => onChangeCode(text, '3')} onChangeText={(text) => onChangeCode(text, "3")}
/> />
<TextInput <TextInput
style={styles.input} style={[
underlineColorAndroid={'transparent'} tw("bg-gray-200 py-3 px-5 text-center rounded-md mx-1"),
{ fontSize: width / 18, fontFamily: "bold", color: "#196EC0" },
]}
underlineColorAndroid={"transparent"}
value={fourthCode} value={fourthCode}
maxLength={1} maxLength={1}
ref={ref => ref4 = ref} ref={(ref) => (ref4 = ref)}
onChangeText={text => onChangeCode(text, '4')} onChangeText={(text) => onChangeCode(text, "4")}
/> />
</View> </View>
<TouchableOpacity <TouchableOpacity
disabled={loading} disabled={loading}
style={{ style={[
width: width - 10, tw("w-full rounded-md py-2 mt-6 items-center justify-center"),
height: width / 9, {
backgroundColor: '#6cbe44', backgroundColor: "#196EC0",
alignItems: 'center', },
justifyContent: 'center', ]}
borderRadius: 10, onPress={() => submit()}
marginTop: 15, >
}} {loading ? (
onPress={() => submit()}> <ActivityIndicator color={"white"} size={"small"} />
{loading ? ) : (
<ActivityIndicator color={'white'} size={'small'} /> : <Text
<Text style={{ style={{
color: 'white', color: "white",
fontSize: 18, fontSize: width / 25,
}}> fontFamily: "regular",
{'ثبت'} }}
>
{"ثبت"}
</Text> </Text>
} )}
</TouchableOpacity> </TouchableOpacity>
<View> <View>
<Text style={{marginTop: 30, textAlign: 'center'}}> <Text
{'زمان باقی مانده تا انقضای کد: ' + time} style={[
tw("mt-7 text-center"),
{ fontFamily: "light", fontSize: width / 36 },
]}
>
{"زمان باقی مانده تا انقضای کد: " + time}
</Text> </Text>
<TouchableOpacity <TouchableOpacity
style={{ style={{
@ -218,28 +252,24 @@ function Otp(props) {
onPress={() => { onPress={() => {
props.navigation.reset({ props.navigation.reset({
index: 0, index: 0,
routes: [{ name: 'Login' }], routes: [{ name: "Login" }],
}); });
}}> }}
<Text style={{textAlign: 'center'}}> >
{'بازگشت به مرحله قبل و اصلاح شماره'} <Text
style={{
textAlign: "center",
fontFamily: "light",
fontSize: width / 36,
color : '#196EC0'
}}
>
{"بازگشت به مرحله قبل و اصلاح شماره"}
</Text> </Text>
</TouchableOpacity> </TouchableOpacity>
</View> </View>
</View> </View>
) );
} }
const styles = StyleSheet.create({
input: {
width: width / 13 * 2,
height: width / 16 * 2,
backgroundColor: '#a2a2a2',
color: '#000',
fontSize: 22,
borderRadius: 8,
textAlign: 'center'
}
})
export default connect(mapStateToProps)(Otp); export default connect(mapStateToProps)(Otp);

@ -1,5 +1,5 @@
import {t} from 'i18next'; import { t } from "i18next";
import React from 'react'; import React from "react";
import { import {
View, View,
Text, Text,
@ -7,160 +7,176 @@ import {
Dimensions, Dimensions,
ScrollView, ScrollView,
Pressable, Pressable,
} from 'react-native'; } from "react-native";
import CustomPressable from '../../../components/Pressable'; import { Entypo } from '@expo/vector-icons';
import Description from './Description'; import CustomPressable from "../../../components/Pressable";
import LinkBox from './LinkBox'; import Description from "./Description";
import Comments from './Comments'; import LinkBox from "./LinkBox";
import Rates from './Rates'; import Comments from "./Comments";
import tw from 'tailwind-react-native-classnames'; import Rates from "./Rates";
import arrowMoreIcon from '../assets/arrowMore.png'; import tw from "tailwind-react-native-classnames";
const width = Dimensions.get('window').width; const width = Dimensions.get("window").width;
const height = Dimensions.get('window').height; const height = Dimensions.get("window").height;
export default function Book({product}) { export default function Book({ product }) {
return ( return (
<ScrollView style={[tw.style('flex flex-col flex-1')]}> <ScrollView style={[tw.style("flex flex-col flex-1")]}>
<View style={tw.style('flex flex-row-reverse')}> <View style={tw.style("flex flex-row-reverse")}>
<View <View style={[tw.style("rounded-md"), { height: 160, width: 110 }]}>
style={[
tw.style('rounded-md'),
{height: height / 5, width: width / 3.5},
]}>
<Image <Image
source={{uri: product.imageUrl}} source={{ uri: product.imageUrl }}
style={[tw.style('rounded-md h-full w-full')]} style={[tw.style("rounded-md h-full w-full")]}
/> />
</View> </View>
<View <View
style={[ style={[
tw.style('flex flex-col flex-1 justify-between items-end'), tw.style("flex flex-col flex-1 justify-between items-end"),
{ {
paddingRight: 10, paddingRight: 10,
}, },
]}> ]}
<View style={tw.style('flex flex-col items-end')}> >
<View style={tw.style("flex flex-col items-end")}>
<Text <Text
style={{ style={{
color: '#05335F', color: "#05335F",
fontSize: width / 17, fontSize: width / 18,
marginBottom: 5, marginBottom: 5,
}}> fontFamily: "bold",
}}
>
{product.name} {product.name}
</Text> </Text>
<Text style={{color: '#196EC0', fontSize: width / 30}}> <Text
style={{
color: "#196EC0",
fontSize: width / 37,
fontFamily: "light",
}}
>
{product.grade} {product.grade}
</Text> </Text>
</View> </View>
<Text <Text
style={[ style={[
tw.style('text-right w-full'), tw.style("text-right w-full"),
{color: '#323232', fontSize: width / 32}, { color: "#323232", fontSize: width / 38, fontFamily: "light" },
]}> ]}
>
{product.text} {product.text}
</Text> </Text>
</View> </View>
</View> </View>
<View <View
style={tw.style( style={tw.style(
'flex flex-row-reverse items-center justify-around py-6', "flex flex-row-reverse items-center justify-around py-6"
)}> )}
>
<View> <View>
<Text <Text
style={{ style={{
color: '#196EC0', color: "#196EC0",
textAlign: 'center', textAlign: "center",
fontSize: width / 27, fontSize: width / 37,
}}> fontFamily: "light",
{' '} }}
{473 + '\n' + 'صفحه'} >
{" "}
{473 + "\n" + "صفحه"}
</Text> </Text>
</View> </View>
<View <View
style={{backgroundColor: '#196EC055', height: 20, width: 2}}></View> style={{ backgroundColor: "#196EC055", height: 20, width: 2 }}
></View>
<View> <View>
<Text <Text
style={{ style={{
color: '#196EC0', color: "#196EC0",
textAlign: 'center', textAlign: "center",
fontSize: width / 27, fontSize: width / 37,
}}> fontFamily: "light",
{' '} }}
{'فیزیکی- دیجیتالی - ویدئو' + '\n' + 'در دسترس'} >
{" "}
{"فیزیکی- دیجیتالی - ویدئو" + "\n" + "در دسترس"}
</Text> </Text>
</View> </View>
<View <View
style={{backgroundColor: '#196EC055', height: 20, width: 2}}></View> style={{ backgroundColor: "#196EC055", height: 20, width: 2 }}
></View>
<View> <View>
<Text <Text
style={{ style={{
color: '#196EC0', color: "#196EC0",
textAlign: 'center', textAlign: "center",
fontSize: width / 27, fontSize: width / 37,
}}> fontFamily: "light",
{' '} }}
{4.8 + '\n' + 'امتیاز'} >
{" "}
{4.8 + "\n" + "امتیاز"}
</Text> </Text>
</View> </View>
</View> </View>
<View style={'flex flex-col mt-3'}> <View style={"flex flex-col mt-3"}>
<Text <Text
style={[ style={[
tw.style('w-full text-right font-medium'), tw.style("w-full text-right font-medium"),
{color: '#196EC0', fontSize: width / 26}, { color: "#196EC0", fontSize: width / 36, fontFamily: "regular" },
]}> ]}
>
نسخه محصول را انتخاب کنید نسخه محصول را انتخاب کنید
</Text> </Text>
<View style={tw.style('flex justify-between')}></View> <View style={tw.style("flex justify-between")}></View>
</View> </View>
<View <View
style={tw.style( style={tw.style("flex flex-row-reverse justify-between flex-wrap py-3")}
'flex flex-row-reverse justify-between flex-wrap py-3', >
)}>
<CustomPressable <CustomPressable
title={'نسخه فیزیکی'} title={"نسخه فیزیکی"}
backgroundColor="transparent" backgroundColor="transparent"
color={'#196EC0'} color={"#196EC0"}
border={{color: '#196EC0', width: 1}} border={{ color: "#196EC0", width: 1 }}
width={'49%'} width={"49%"}
/> />
<CustomPressable <CustomPressable
title={'نسخه دیجیتال'} title={"نسخه دیجیتال"}
backgroundColor="transparent" backgroundColor="transparent"
color={'#196EC0'} color={"#196EC0"}
border={{color: '#196EC0', width: 1}} border={{ color: "#196EC0", width: 1 }}
width={'49%'} width={"49%"}
/> />
<CustomPressable <CustomPressable
title={'خرید با قیمت 245.000 تومان'} title={"خرید با قیمت 245.000 تومان"}
backgroundColor="#196EC0" backgroundColor="#196EC0"
color={'white'} color={"white"}
border={{color: '#196EC0', width: 0}} border={{ color: "#196EC0", width: 0 }}
width={'65%'} width={"65%"}
/> />
<CustomPressable <CustomPressable
title={'مشاهده نمونه'} title={"مشاهده نمونه"}
backgroundColor="transparent" backgroundColor="transparent"
color={'#196EC0'} color={"#196EC0"}
border={{color: '#196EC0', width: 1}} border={{ color: "#196EC0", width: 1 }}
width={'33%'} width={"33%"}
/> />
<Pressable <Pressable
style={[ style={[
tw.style( tw.style(
'w-full rounded-md flex flex-row justify-center items-center py-3.5', "w-full rounded-md flex flex-row justify-center items-center py-2.5"
), ),
{backgroundColor: '#196EC01a'}, { backgroundColor: "#196EC01a" },
]}> ]}
<Image >
source={arrowMoreIcon} <Entypo name="chevron-small-left" size={20} color="#196EC0" />
style={{width: 12, height: 16, marginRight: 10}}
/>
<Text <Text
style={[tw.style(''), {color: '#275077', fontSize: width / 27}]}> style={[
tw.style(""),
{ color: "#275077", fontSize: width / 36, fontFamily: "light" },
]}
>
مشاهده دوره ویدئویی این محصول مشاهده دوره ویدئویی این محصول
</Text> </Text>
</Pressable> </Pressable>
@ -171,19 +187,15 @@ export default function Book({product}) {
<LinkBox title="پرسش و پاسخ" path="" /> <LinkBox title="پرسش و پاسخ" path="" />
<View <View
style={tw.style( style={tw.style(
'flex flex-row-reverse justify-between items-center my-4', "flex flex-row-reverse justify-between items-center my-6"
)}> )}
>
<Text <Text
style={[ style={[{ fontSize: width / 36, color: "#275077", fontFamily: "regular"}, tw.style("")]}
{fontSize: width / 25, color: '#275077'}, >
tw.style('semibold'),
]}>
امتیازات و نظرات امتیازات و نظرات
</Text> </Text>
<Image <Entypo name="chevron-small-left" size={20} color="#196EC0" />
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
</View> </View>
<Rates rates={product.rates} /> <Rates rates={product.rates} />
<Comments comments={product.comments} /> <Comments comments={product.comments} />

@ -1,59 +1,82 @@
import React from 'react'; import React from "react";
import {View, Text, ScrollView, Image, Dimensions} from 'react-native'; import { View, Text, FlatList, Image, Dimensions } from "react-native";
import tw from 'tailwind-react-native-classnames'; import tw from "tailwind-rn";
const width = Dimensions.get('window').width; const width = Dimensions.get("window").width;
export default function Commnets({comments}) { export default function Commnets({ comments }) {
console.log(comments);
return ( return (
<ScrollView horizontal={true} style={{direction: 'rtl', marginTop: 20}}> <FlatList
{comments.map((comment, index) => ( horizontal={true}
<Comment comment={comment} key={index} /> inverted={true}
))} style={{ marginTop: 20, paddingBottom: 10 }}
</ScrollView> data={comments}
renderItem={({ item }) => <Comment comment={item} />}
keyExtractor={(item) => item.id}
/>
); );
} }
const Comment = ({comment}) => { const Comment = ({ comment }) => {
console.log(comment);
return ( return (
<View <View
style={[ style={[
tw.style('flex flex-col rounded-md p-4 ml-2'), tw("flex flex-col rounded-md p-4 ml-2"),
{width: width / 1.3, borderWidth: 1, borderColor: '#7070701a'}, { width: width / 1.3, borderWidth: 1, borderColor: "#7070701a" },
]}> ]}
<View style={[tw.style('flex flex-row justify-between items-center')]}> >
<View style={tw.style('flex flex-row items-center')}> <View style={[tw("flex flex-row-reverse justify-between items-center")]}>
<View style={tw("flex flex-row-reverse items-center")}>
<Image <Image
source={comment.imageUrl} source={comment.imageUrl}
style={[tw.style('rounded-full'), {width: 35, height: 35}]} style={[tw("rounded-full"), { width: 35, height: 35 }]}
/> />
<Text <Text
style={[ style={[
{fontSize: width / 25, color: '#132F52'}, { fontSize: width / 36, color: "#132F52", fontFamily: "bold" },
tw.style('font-bold'), ,
]}> ]}
>
{comment.name} {comment.name}
</Text> </Text>
</View> </View>
<View style={tw.style('flex flex-row items-center')}> <View style={tw("flex flex-row items-center")}>
<Text style={{fontSize: width / 38, color: '#196EC0'}}>18:20</Text> <Text
style={{
fontSize: width / 40,
color: "#196EC0",
fontFamily: "light",
}}
>
18:20
</Text>
<View <View
style={{ style={{
backgroundColor: '#196EC055', backgroundColor: "#196EC055",
height: 12, height: 12,
width: 2, width: 1,
marginHorizontal: 4, marginHorizontal: 4,
}}></View> }}
<Text style={{fontSize: width / 38, color: '#196EC0'}}> ></View>
<Text
style={{
fontSize: width / 40,
color: "#196EC0",
fontFamily: "light",
}}
>
1400/08/19 1400/08/19
</Text> </Text>
</View> </View>
</View> </View>
<Text <Text
style={[ style={[
{fontSize: width / 32, lineHeight: 20, color: '#132F52'}, { fontSize: width / 40, lineHeight: 20, color: "#132F52", fontFamily: "light",},
tw.style('text-left mt-2'), tw("mt-2"),
]}> ]}
>
{comment.message} {comment.message}
</Text> </Text>
</View> </View>

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import {View, Text, Dimensions, Image} from 'react-native'; import {View, Text, Dimensions, Image} from 'react-native';
import tw from 'tailwind-react-native-classnames'; import tw from 'tailwind-react-native-classnames';
import arrowMoreIcon from '../assets/arrowMore.png'; import {Entypo} from '@expo/vector-icons';
const width = Dimensions.get('window').width; const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height; const height = Dimensions.get('window').height;
@ -13,20 +13,17 @@ export default function Description({description}) {
style={tw.style('flex flex-row-reverse justify-between items-center mb-2')}> style={tw.style('flex flex-row-reverse justify-between items-center mb-2')}>
<Text <Text
style={[ style={[
{fontSize: width / 25, color: '#275077'}, {fontSize: width / 36, color: '#275077', fontFamily: 'regular'},
tw.style('semibold'), tw.style(''),
]}> ]}>
توضیحات توضیحات
</Text> </Text>
<Image <Entypo name="chevron-small-left" size={20} color="#196EC0" />
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
</View> </View>
<Text <Text
style={[ style={[
tw.style('w-full text-right mt-2'), tw.style('w-full text-right mt-2'),
{fontSize: width / 30, color: '#323232bb', lineHeight: 20}, {fontSize: width / 36, color: '#323232bb', lineHeight: 20, fontFamily : 'light'},
]}> ]}>
{description} {description}
</Text> </Text>

@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import {View, Text, Dimensions, Image} from 'react-native'; import {View, Text, Dimensions, Image} from 'react-native';
import tw from 'tailwind-react-native-classnames'; import tw from 'tailwind-react-native-classnames';
import arrowMoreIcon from '../assets/arrowMore.png'; import {Entypo} from '@expo/vector-icons';
const width = Dimensions.get('window').width; const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height; const height = Dimensions.get('window').height;
@ -10,22 +10,19 @@ export default function Description({title, path}) {
return ( return (
<View <View
style={[ style={[
tw.style('flex flex-row-reverse justify-between items-center mt-3 rounded-md px-5 py-4'), tw.style('flex flex-row-reverse justify-between items-center mt-3 rounded-md px-5 py-2.5'),
{ {
backgroundColor: '#50A9FF33' backgroundColor: '#50A9FF33'
} }
]}> ]}>
<Text <Text
style={[ style={[
{fontSize: width / 30, color: '#275077'}, {fontSize: width / 36, color: '#275077', fontFamily: 'regular'},
tw.style('semibold'), tw.style(''),
]}> ]}>
{title} {title}
</Text> </Text>
<Image <Entypo name="chevron-small-left" size={20} color="#196EC0" />
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
</View> </View>
); );
} }

@ -14,12 +14,11 @@ export default function Rates({rates}) {
]}> ]}>
<Text <Text
style={[ style={[
tw.style('font-bold'), {fontSize: width / 13, color: '#05335F', fontFamily: 'bold'},
{fontSize: width / 10, color: '#05335F'},
]}> ]}>
{rates.mid} {rates.mid}
</Text> </Text>
<Text style={{fontSize: width / 30, color: '#707070'}}> <Text style={{fontSize: width / 36, color: '#707070', fontFamily: 'light'}}>
{'از' + ' ' + rates.allRates + ' ' + 'نفر'} {'از' + ' ' + rates.allRates + ' ' + 'نفر'}
</Text> </Text>
</View> </View>
@ -35,7 +34,7 @@ export default function Rates({rates}) {
const Progress = ({data}) => { const Progress = ({data}) => {
return ( return (
<View style={[tw.style('flex flex-1 flex-row items-center py-0.5')]}> <View style={[tw.style('flex flex-1 flex-row items-center py-0.5')]}>
<Text style={{fontSize: width / 30, color: '#05335F'}}>{data.name}</Text> <Text style={{fontSize: width / 36, color: '#05335F', fontFamily: 'regular'}}>{data.name}</Text>
<View <View
style={[ style={[
tw.style('rounded-md ml-2 flex-1'), tw.style('rounded-md ml-2 flex-1'),
@ -49,7 +48,8 @@ const Progress = ({data}) => {
</View> </View>
<Text <Text
style={{ style={{
fontSize: width / 30, fontSize: width / 40,
fontFamily: 'light',
width: width / 7.5, width: width / 7.5,
textAlign: 'center', textAlign: 'center',
color: '#05335F', color: '#05335F',

@ -8,78 +8,80 @@ import {
ScrollView, ScrollView,
Pressable, Pressable,
} from 'react-native'; } from 'react-native';
import {Entypo} from '@expo/vector-icons';
import CustomPressable from '../../../components/Pressable'; import CustomPressable from '../../../components/Pressable';
import Description from './Description'; import Description from './Description';
import LinkBox from './LinkBox'; import LinkBox from './LinkBox';
import Comments from './Comments'; import Comments from './Comments';
import Rates from './Rates'; import Rates from './Rates';
import tw from 'tailwind-react-native-classnames'; import tw from 'tailwind-rn';
import arrowMoreIcon from '../assets/arrowMore.png';
const width = Dimensions.get('window').width; const width = Dimensions.get('window').width;
const height = Dimensions.get('window').height; const height = Dimensions.get('window').height;
export default function Video({product}) { export default function Video({product}) {
return ( return (
<ScrollView style={[tw.style('flex flex-col flex-1')]}> <ScrollView style={[tw('flex flex-col flex-1')]}>
<View style={tw.style('flex flex-column')}> <View style={tw('flex flex-col')}>
<View <View
style={[ style={[
tw.style( tw(
'w-full flex flex-row flex-1 justify-between items-center relative overflow-hidden', 'w-full flex flex-row flex-1 justify-between items-center relative overflow-hidden',
), ),
{height: height / 3.8}, {height: height / 3.8},
]}> ]}>
{/* <View {/* <View
style={[ style={[
tw.style('rounded-full bg-black bg-opacity-20 z-50'), tw('rounded-full bg-black bg-opacity-20 z-50'),
{width: 50, height: 50}, {width: 50, height: 50},
]}></View> */} ]}></View> */}
<Image <Image
source={product.poster} source={product.poster}
style={tw.style('w-full rounded-md h-full absolute left-0 top-0')} style={tw('w-full rounded-md h-full absolute left-0 top-0')}
/> />
<Image <Image
source={{uri: product.imageUrl}} source={{uri: product.imageUrl}}
style={[ style={[
tw.style('rounded-md h-full rounded-md ml-2'), tw('rounded-md h-full rounded-md ml-2'),
{width: width / 5, height: height / 7}, {width: 70, height: 100},
]} ]}
/> />
</View> </View>
<View <View
style={[ style={[
tw.style('flex flex-col flex-1 justify-between items-end'), tw('flex flex-col flex-1 justify-between'),
{ {
paddingRight: 10, paddingRight: 10,
}, },
]}> ]}>
<View style={tw.style('flex flex-col items-end')}> <View style={tw('flex flex-col')}>
<Text <Text
style={{ style={{
marginTop : 5, marginTop : 5,
color: '#05335F', color: '#05335F',
fontSize: width / 17, fontSize: width / 18,
marginBottom: 5, marginBottom: 5,
fontFamily : 'bold'
}}> }}>
{product.name} {product.name}
</Text> </Text>
<Text style={{color: '#196EC0', fontSize: width / 30, marginBottom: 10}}> <Text style={{color: '#196EC0', fontSize: width / 37, marginBottom: 10, fontFamily : 'light'}}>
{product.grade} {product.grade}
</Text> </Text>
</View> </View>
<Text <Text
style={[ style={[
tw.style('text-right w-full'), tw('text-right w-full'),
{color: '#323232', fontSize: width / 32}, {color: '#323232', fontSize: width / 38, fontFamily : 'light'},
]}> ]}>
{product.text} {product.text}
</Text> </Text>
</View> </View>
</View> </View>
<View <View
style={tw.style( style={tw(
'flex flex-row-reverse items-center justify-around py-6', 'flex flex-row-reverse items-center justify-around py-6',
)}> )}>
<View> <View>
@ -87,7 +89,8 @@ export default function Video({product}) {
style={{ style={{
color: '#196EC0', color: '#196EC0',
textAlign: 'center', textAlign: 'center',
fontSize: width / 27, fontSize: width / 37,
fontFamily: 'light'
}}> }}>
{' '} {' '}
{473 + '\n' + 'صفحه'} {473 + '\n' + 'صفحه'}
@ -100,7 +103,8 @@ export default function Video({product}) {
style={{ style={{
color: '#196EC0', color: '#196EC0',
textAlign: 'center', textAlign: 'center',
fontSize: width / 27, fontSize: width / 37,
fontFamily: 'light'
}}> }}>
{' '} {' '}
{'فیزیکی- دیجیتالی - ویدئو' + '\n' + 'در دسترس'} {'فیزیکی- دیجیتالی - ویدئو' + '\n' + 'در دسترس'}
@ -113,7 +117,8 @@ export default function Video({product}) {
style={{ style={{
color: '#196EC0', color: '#196EC0',
textAlign: 'center', textAlign: 'center',
fontSize: width / 27, fontSize: width / 37,
fontFamily: 'light'
}}> }}>
{' '} {' '}
{4.8 + '\n' + 'امتیاز'} {4.8 + '\n' + 'امتیاز'}
@ -123,16 +128,16 @@ export default function Video({product}) {
<View style={'flex flex-col mt-3'}> <View style={'flex flex-col mt-3'}>
<Text <Text
style={[ style={[
tw.style('w-full text-right font-medium'), tw('w-full text-right font-medium'),
{color: '#196EC0', fontSize: width / 26}, {color: '#196EC0', fontSize: width / 36, fontFamily: 'regular'},
]}> ]}>
نسخه محصول را انتخاب کنید نسخه محصول را انتخاب کنید
</Text> </Text>
<View style={tw.style('flex justify-between')}></View> <View style={tw('flex justify-between')}></View>
</View> </View>
<View <View
style={tw.style( style={tw(
'flex flex-row-reverse justify-between flex-wrap py-3', 'flex flex-row justify-between flex-wrap py-3',
)}> )}>
<CustomPressable <CustomPressable
title={'نسخه فیزیکی'} title={'نسخه فیزیکی'}
@ -164,18 +169,15 @@ export default function Video({product}) {
/> />
<Pressable <Pressable
style={[ style={[
tw.style( tw(
'w-full rounded-md flex flex-row justify-center items-center py-3.5', 'w-full rounded-md flex flex-row justify-center items-center py-3.5',
), ),
{backgroundColor: '#196EC01a'}, {backgroundColor: '#196EC01a'},
]}> ]}>
<Image <Entypo name="chevron-small-left" size={20} color="#196EC0" />
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
<Text <Text
style={[tw.style(''), {color: '#275077', fontSize: width / 27}]}> style={[tw(''), {color: '#275077', fontSize: width / 36, fontFamily : 'light'}]}>
مشاهده دوره ویدئویی این محصول مشاهده دوره ویدئویی این محصول
</Text> </Text>
</Pressable> </Pressable>
@ -185,20 +187,16 @@ export default function Video({product}) {
<LinkBox title="نقد بررسی و توضیحات تکمیلی محصول" path="" /> <LinkBox title="نقد بررسی و توضیحات تکمیلی محصول" path="" />
<LinkBox title="پرسش و پاسخ" path="" /> <LinkBox title="پرسش و پاسخ" path="" />
<View <View
style={tw.style( style={tw(
'flex flex-row-reverse justify-between items-center my-4', 'flex flex-row-reverse justify-between items-center my-6',
)}> )}>
<Text <Text
style={[ style={[
{fontSize: width / 25, color: '#275077'}, {fontSize: width / 36, color: '#275077', fontFamily: 'regular'},
tw.style('semibold'),
]}> ]}>
امتیازات و نظرات امتیازات و نظرات
</Text> </Text>
<Image <Entypo name="chevron-small-left" size={20} color="#196EC0" />
source={arrowMoreIcon}
style={{width: 12, height: 16, marginRight: 10}}
/>
</View> </View>
<Rates rates={product.rates} /> <Rates rates={product.rates} />
<Comments comments={product.comments} /> <Comments comments={product.comments} />

@ -16,7 +16,7 @@ import Navbar from "../../components/Navbar";
function Product({ function Product({
product = { product = {
type: "ویدئوها", type: "کتاب ها",
name: "ریاضی", name: "ریاضی",
price: "145.000 تومان", price: "145.000 تومان",
imageUrl: "https://dnvn.ir/api/v1/file/2105", imageUrl: "https://dnvn.ir/api/v1/file/2105",
@ -38,6 +38,7 @@ function Product({
}, },
comments: [ comments: [
{ {
id: 0,
name: "سورنا عابدی", name: "سورنا عابدی",
imageUrl: userImage, imageUrl: userImage,
vote: 4, vote: 4,
@ -46,6 +47,7 @@ function Product({
"خالد حسینی تو رمان باد بادک باز مینویسه : ﻣﺮﺩ ﺁﻫﺴﺘﻪ ﺩﺭ ﮔﻮﺵ ﻓﺮﺯﻧﺪ ﺗﺎﺯﻩ ﺑﻪ ﺑﻠﻮﻍ ﺭﺳﯿﺪﻩ ﺍﺵ ﺑﺮﺍﯼ ﭘﻨﺪ ﭼﻨﯿﻦ ﻧﺠﻮﺍ ﮐﺮﺩ : ” ﭘﺴﺮﻡ ﺩﺭ ﺯﻧﺪﮔﯽ ﻫﺮﮔﺰ ﺩﺯﺩﯼ ﻧﮑﻦ ” ﭘﺴﺮ ﻣﺘﻌﺠﺐ ﻭ ﻣﺒﻬﻮﺕ ﺑﻪ ﭘﺪﺭ ﻧﮕﺎﻩ ﮐﺮﺩ ﺑﺪﯾﻦ ﻣﻌﻨﺎ ﮐﻪ ﺍﻭ ﻫﺮﮔﺰ ﺩﺳﺖ ﮐﺞ ﻧﺪﺍﺷﺘﻪ ﭘﺪﺭ ﺑﻪ ﻧﮕﺎﻩ ﻣﺘﻌﺠﺐ ﻓﺮﺯﻧﺪ ﻟﺒﺨﻨﺪﯼ ﺯﺩ ﻭ ﺍﺩﺍﻣﻪ ", "خالد حسینی تو رمان باد بادک باز مینویسه : ﻣﺮﺩ ﺁﻫﺴﺘﻪ ﺩﺭ ﮔﻮﺵ ﻓﺮﺯﻧﺪ ﺗﺎﺯﻩ ﺑﻪ ﺑﻠﻮﻍ ﺭﺳﯿﺪﻩ ﺍﺵ ﺑﺮﺍﯼ ﭘﻨﺪ ﭼﻨﯿﻦ ﻧﺠﻮﺍ ﮐﺮﺩ : ” ﭘﺴﺮﻡ ﺩﺭ ﺯﻧﺪﮔﯽ ﻫﺮﮔﺰ ﺩﺯﺩﯼ ﻧﮑﻦ ” ﭘﺴﺮ ﻣﺘﻌﺠﺐ ﻭ ﻣﺒﻬﻮﺕ ﺑﻪ ﭘﺪﺭ ﻧﮕﺎﻩ ﮐﺮﺩ ﺑﺪﯾﻦ ﻣﻌﻨﺎ ﮐﻪ ﺍﻭ ﻫﺮﮔﺰ ﺩﺳﺖ ﮐﺞ ﻧﺪﺍﺷﺘﻪ ﭘﺪﺭ ﺑﻪ ﻧﮕﺎﻩ ﻣﺘﻌﺠﺐ ﻓﺮﺯﻧﺪ ﻟﺒﺨﻨﺪﯼ ﺯﺩ ﻭ ﺍﺩﺍﻣﻪ ",
}, },
{ {
id : 1,
name: "سورنا عابدی", name: "سورنا عابدی",
imageUrl: userImage, imageUrl: userImage,
vote: 4, vote: 4,

@ -1,16 +1,16 @@
import React from 'react'; import React from "react";
import {View, Image, Text, Dimensions, Pressable} from 'react-native'; import { View, Image, Text, Dimensions, Pressable } from "react-native";
import { useNavigation } from '@react-navigation/native'; import { useNavigation } from "@react-navigation/native";
import tw from 'tailwind-react-native-classnames'; import tw from "tailwind-react-native-classnames";
const width = Dimensions.get('window').width; const width = Dimensions.get("window").width;
const height = Dimensions.get('window').height; const height = Dimensions.get("window").height;
function Book({ function Book({
item = { item = {
name: 'ریاضی', name: "ریاضی",
price: '145.000 تومان', price: "145.000 تومان",
grade : '4', grade: "4",
imageUrl: 'https://dnvn.ir/api/v1/file/2105', imageUrl: "https://dnvn.ir/api/v1/file/2105",
}, },
}) { }) {
const navigation = useNavigation(); const navigation = useNavigation();
@ -25,21 +25,37 @@ function Book({
// shadowOpacity : 1, // shadowOpacity : 1,
marginBottom: 15, marginBottom: 15,
borderWidth: 1, borderWidth: 1,
borderColor: '#ddd', borderColor: "#ddd",
}, },
tw.style('flex flex-col items-end p-2 rounded-md'), tw.style("flex flex-col items-end p-2 rounded-md"),
]} ]}
onPress={() => navigation.navigate('Product')} onPress={() => navigation.navigate("Product")}
> >
<Image <Image
source={{uri: item.imageUrl}} source={{ uri: item.imageUrl }}
style={[tw.style('w-full rounded-md'), {height: height / 3.8}]} style={[tw.style("w-full rounded-md"), { height: height / 3.8 }]}
/> />
<Text style={{fontSize: width / 22, marginTop: 5, color: '#05335F'}}> <Text
style={{
fontSize: width / 31,
marginTop: 5,
color: "#05335F",
fontFamily: "bold",
}}
>
{item.name} {item.name}
</Text> </Text>
<Text style={{ color : "#196EC0", fontSize : width / 32, marginTop : 5}}>{'پایه' + ' ' + item.grade }</Text> <Text style={{ color: "#196EC0", fontSize: width / 37, marginTop: 5, fontFamily : 'light' }}>
<Text style={[tw.style('w-full text-center font-semibold'), {marginTop : 10, color : "#132F52"}]}>{item.price}</Text> {"پایه" + " " + item.grade}
</Text>
<Text
style={[
tw.style("w-full text-center"),
{ marginTop: 10, color: "#132F52", fontFamily : 'bold', fontSize: width / 31 },
]}
>
{item.price}
</Text>
</Pressable> </Pressable>
); );
} }

@ -54,11 +54,18 @@ function Video({
source={{ uri: item.imageUrl }} source={{ uri: item.imageUrl }}
style={[ style={[
tw.style("rounded-md h-full absolute left-2 bottom-2 rounded-md"), tw.style("rounded-md h-full absolute left-2 bottom-2 rounded-md"),
{ width: width / 5, height: height / 7 }, { width: 70, height: 100 },
]} ]}
/> />
</View> </View>
<Text style={{ fontSize: width / 22, marginTop: 5, color: "#05335F" }}> <Text
style={{
fontSize: width / 31,
marginTop: 5,
color: "#05335F",
fontFamily: "bold",
}}
>
{item.name} {item.name}
</Text> </Text>
@ -67,13 +74,25 @@ function Video({
> >
<Text <Text
style={[ style={[
tw.style("font-semibold"), tw.style(""),
{ marginTop: 10, color: "#132F52" }, {
marginTop: 10,
color: "#132F52",
fontFamily: "light",
fontSize: width / 37,
},
]} ]}
> >
{item.price} {item.price}
</Text> </Text>
<Text style={{ color: "#196EC0", fontSize: width / 32, marginTop: 5 }}> <Text
style={{
color: "#196EC0",
fontFamily: "light",
fontSize: width / 37,
marginTop: 5,
}}
>
{"پایه" + " " + item.grade} {"پایه" + " " + item.grade}
</Text> </Text>
</View> </View>

@ -15,7 +15,7 @@ export default function Content({data}) {
source={{uri: 'https://dnvn.ir/api/v1/file/2094'}} source={{uri: 'https://dnvn.ir/api/v1/file/2094'}}
style={{width: 80, height: 120}} style={{width: 80, height: 120}}
/> />
<View style={tw.style('flex flex-column items-end')}> <View style={tw.style('flex flex-col items-end')}>
<Text>{data.name}</Text> <Text>{data.name}</Text>
<Text>{data.grade}</Text> <Text>{data.grade}</Text>
<Text>{`شما در حال مشاهده `}</Text> <Text>{`شما در حال مشاهده `}</Text>

@ -48,9 +48,9 @@ function QR({ data }) {
style={[tw.style("rounded"), { width: width / 5, height: 120 }]} style={[tw.style("rounded"), { width: width / 5, height: 120 }]}
/> />
<View <View
style={tw.style("flex flex-column items-end self-end pr-3")} style={tw.style("flex flex-col items-end self-end pr-3")}
> >
<Text style={tw.style("text-md text-green-500 font-semibold")}> <Text style={tw.style("text-sm text-green-500 ")}>
{data.name} {data.name}
</Text> </Text>
<Text <Text

@ -13,22 +13,22 @@ export default function Code({}) {
)}> )}>
<TextInput <TextInput
style={[ style={[
tw.style('border-0 flex-1 text-right pr-4 font-medium'), tw.style('border-0 flex-1 text-right pr-4'),
{fontSize: width / 27}, {fontSize: width / 36, fontFamily: 'light'},
]} ]}
placeholder={'کد تخفیف دارید ؟'} placeholder={'کد تخفیف دارید ؟'}
placeholderTextColor="#707070" placeholderTextColor="#707070"
/> />
<Pressable <Pressable
style={[ style={[
tw.style('py-4 px-5'), tw.style('py-2 px-5'),
{ {
backgroundColor: '#196EC0', backgroundColor: '#196EC0',
borderTopLeftRadius: 5, borderTopLeftRadius: 5,
borderBottomLeftRadius: 5, borderBottomLeftRadius: 5,
}, },
]}> ]}>
<Text style={[tw.style('text-white'), {fontSize: width / 25}]}>ثبت کد</Text> <Text style={[tw.style('text-white'), {fontSize: width / 31, fontFamily: 'regular'}]}>ثبت کد</Text>
</Pressable> </Pressable>
</View> </View>
</View> </View>

@ -1,87 +1,116 @@
import React from 'react'; import React from "react";
import {View, Text, Image, Dimensions, Pressable} from 'react-native'; import { View, Text, Image, Dimensions, Pressable } from "react-native";
import tw from 'tailwind-react-native-classnames'; import { AntDesign } from "@expo/vector-icons";
import bookImage from '../assets/book.png'; import tw from "tailwind-react-native-classnames";
import deleteIcon from '../assets/delete.png'; import bookImage from "../assets/book.png";
import plusIcon from '../assets/+.png'; import deleteIcon from "../assets/delete.png";
import minus from '../assets/_.png';
const width = Dimensions.get('window').width; const width = Dimensions.get("window").width;
const height = Dimensions.get('window').height; const height = Dimensions.get("window").height;
export default function Product({product}) { export default function Product({ product }) {
return ( return (
<View <View
style={[ style={[
tw.style('flex flex-row-reverse justify-between py-5'), tw.style("flex flex-row-reverse justify-between py-2"),
{borderBottomWidth: 1, borderColor: '#7070701a', direction: 'rtl'}, { borderBottomWidth: 1, borderColor: "#7070701a", direction: "rtl" },
]}> ]}
<View style={tw.style('flex flex-row-reverse')}> >
<View style={tw.style("flex flex-row-reverse")}>
<Image <Image
source={bookImage} source={bookImage}
style={[ style={[tw.style("rounded-md"), { width: 60, height: 90 }]}
tw.style('rounded-md'),
{width: 80, height: 120},
]}
/> />
<View style={tw.style('flex flex-col items-end pr-2')}> <View style={tw.style("flex flex-col items-end pr-2")}>
<Text <Text
style={{fontsize: width / 20, color: '#05335F', marginBottom: 5}}> style={{
fontSize: width / 31,
color: "#05335F",
marginBottom: 5,
fontFamily: "bold",
}}
>
علوم اجتماعی علوم اجتماعی
</Text> </Text>
<Text <Text
style={{fontSize: width / 30, color: '#707070', marginBottom: 5}}> style={{
fontSize: width / 36,
color: "#707070",
marginBottom: 5,
fontFamily: "light",
}}
>
پایه دوم پایه دوم
</Text> </Text>
<Text style={{fontSize: width / 30, color: '#707070'}}> <Text
style={{
fontSize: width / 36,
color: "#707070",
fontFamily: "light",
}}
>
نسخه فیزیکی نسخه فیزیکی
</Text> </Text>
</View> </View>
</View> </View>
<View style={tw.style('flex flex-col justify-between items-start')}> <View style={tw.style("flex flex-col justify-between items-start")}>
<Image source={deleteIcon} style={{width: 17, height: 17}} /> <AntDesign name="close" size={20} color="black" />
<View style={tw.style('flex flex-col items-center')}> <View style={tw.style("flex flex-col items-center mt-2")}>
<View style={tw.style('flex flex-row-reverse items-center mb-3')}> <View style={tw.style("flex flex-row-reverse items-center mb-3")}>
<Pressable <Pressable
style={[ style={[
tw.style( tw.style(
'rounded-sm py-1 px-2.5 flex flex-row justify-center items-center border', "rounded-md py-0 px-2 flex flex-row justify-center items-center border"
), ),
{ {
borderColor: '#196EC0', borderColor: "#196EC0",
}, },
]}> ]}
<Text style={{fontSize: width / 20, color: '#196EC0'}}>+</Text> >
<Text
style={{
fontSize: width / 25,
color: "#196EC0",
fontFamily: "light",
}}
>
+
</Text>
</Pressable> </Pressable>
<Text <Text
style={[ style={[
tw.style('mx-2.5 font-semibold'), tw.style("mx-2.5"),
{ {
fontSize: width / 20, fontSize: width / 19,
color: '#196EC0', color: "#196EC0",
fontFamily: "regular",
}, },
]}> ]}
>
1 1
</Text> </Text>
<Pressable <Pressable
style={[ style={[
tw.style( tw.style(
'rounded-sm py-1 px-2.5 flex flex-row justify-center items-center border', "rounded-md py-0 px-2.5 flex flex-row justify-center items-center border"
), ),
{ {
borderColor: '#DBDBDB', borderColor: "#DBDBDB",
}, },
]}> ]}
>
<Text <Text
style={{ style={{
fontSize: width / 18, fontSize: width / 24,
color: '#DBDBDB', color: "#DBDBDB",
}}> fontFamily: "light",
}}
>
- -
</Text> </Text>
</Pressable> </Pressable>
</View> </View>
<Text style={[tw.style('font-bold', {fontSize: width / 20})]}> <Text style={[tw.style("", { fontSize: width / 25, fontFamily: "bold"})]}>
145.000 145.000
</Text> </Text>
</View> </View>

@ -10,12 +10,12 @@ import {
SafeAreaView, SafeAreaView,
StatusBar, StatusBar,
} from "react-native"; } from "react-native";
import { Ionicons } from '@expo/vector-icons';
import Product from "./components/Product"; import Product from "./components/Product";
import Code from "./components/Code"; import Code from "./components/Code";
import CustomPressable from "../../components/Pressable"; import CustomPressable from "../../components/Pressable";
import Navbar from "../../components/Navbar"; import Navbar from "../../components/Navbar";
import tw from "tailwind-react-native-classnames"; import tw from "tailwind-react-native-classnames";
import alertIcon from "./assets/alert.png";
import { connect } from "react-redux"; import { connect } from "react-redux";
@ -26,18 +26,19 @@ const PriceStatus = ({ name, value, type }) => {
<View style={tw.style("w-full flex flex-row-reverse justify-between py-2")}> <View style={tw.style("w-full flex flex-row-reverse justify-between py-2")}>
<Text <Text
style={[ style={[
tw.style("font-light"), tw.style(""),
{ fontSize: width / 27, color: "#132F52" }, { fontSize: width / 31, color: "#132F52", fontFamily: "regular"},
]} ]}
> >
{name} {name}
</Text> </Text>
<Text <Text
style={[ style={[
tw.style("font-normal"), tw.style(""),
{ {
color: type === "error" ? "#F1420D" : "#246E8A", color: type === "error" ? "#F1420D" : "#246E8A",
fontSize: width / 27, fontSize: width / 31,
fontFamily: "bold"
}, },
]} ]}
> >
@ -85,13 +86,13 @@ function ShoppingCart({}) {
"flex flex-row-reverse justify-between items-center w-full py-3" "flex flex-row-reverse justify-between items-center w-full py-3"
)} )}
> >
<Text style={[tw.style("font-medium"), { fontSize: width / 25 }]}> <Text style={[tw.style(""), { fontSize: width / 31, fontFamily: "regular"}]}>
جمع کل سبد خرید جمع کل سبد خرید
</Text> </Text>
<Text <Text
style={[ style={[
tw.style("font-medium"), tw.style(""),
{ fontSize: width / 27, color: "#246E8A" }, { fontSize: width / 31, color: "#246E8A", fontFamily: "bold"},
]} ]}
> >
235.000 تومان 235.000 تومان
@ -100,20 +101,17 @@ function ShoppingCart({}) {
<Pressable <Pressable
style={[ style={[
tw.style( tw.style(
"w-full rounded-md flex flex-row justify-center items-center py-3.5 px-3 my-5" "w-full rounded-md flex flex-row justify-center items-center py-2.5 px-3 my-5"
), ),
{ backgroundColor: "#196EC01a" }, { backgroundColor: "#196EC01a" },
]} ]}
> >
<Text <Text
style={[tw.style(""), { color: "#275077", fontSize: width / 30 }]} style={[tw.style("mr-1"), { color: "#275077", fontSize: width / 36, fontFamily : 'light' }]}
> >
هزینه ارسال کالا پس از تعیین محل آدرس مشخص میشود هزینه ارسال کالا پس از تعیین محل آدرس مشخص میشود
</Text> </Text>
<Image <Ionicons name="alert-circle-outline" size={20} color="#196EC0" />
source={alertIcon}
style={{ width: 18, height: 18, marginLeft: 5 }}
/>
</Pressable> </Pressable>
<CustomPressable <CustomPressable
title={"ادامه فرایند خرید"} title={"ادامه فرایند خرید"}

@ -1,39 +1,44 @@
import React, {useEffect} from 'react' import React, { useEffect } from "react";
import {View, Text, Image, ActivityIndicator, Dimensions} from 'react-native'; import { View, Text, Image, ActivityIndicator, Dimensions } from "react-native";
import {connect} from 'react-redux'; import { connect } from "react-redux";
import Logo from '../../assets/images/logo.png'; import Logo from "../../assets/images/logo.png";
const {width, height} = Dimensions.get('window'); const { width, height } = Dimensions.get("window");
const mapStateToProps = state => { const mapStateToProps = (state) => {
return { return {
profile: state.profile profile: state.profile,
} };
} };
function Splash({navigation, profile}) {
function Splash({ navigation, profile }) {
useEffect(() => { useEffect(() => {
setTimeout(() => { setTimeout(() => {
!profile.accessToken ? navigation.reset({ // !profile.accessToken ? navigation.reset({
index: 0, 1
routes: [{ name: 'Login' }], ? navigation.reset({
}) : navigation.reset({ index: 0,
index: 0, routes: [{ name: "Login" }],
routes: [{ name: 'Home' }], })
}) : navigation.reset({
}, 2000) index: 0,
}, [profile]) routes: [{ name: "Home" }],
});
}, 2000);
}, [profile]);
return ( return (
<View style={{justifyContent: 'center', alignItems: 'center', flex: 1}}> <View style={{ justifyContent: "center", alignItems: "center", flex: 1 }}>
<Image source={Logo} style={{ <Image
width: width * 0.7, source={Logo}
height: width * 0.7 / 2.09, style={{
}} /> width: width * 0.7,
<ActivityIndicator size={'large'} style={{marginTop: 20}}/> height: (width * 0.7) / 2.09,
}}
/>
<ActivityIndicator size={"large"} style={{ marginTop: 20 }} />
</View> </View>
) );
} }
export default connect(mapStateToProps)(Splash); export default connect(mapStateToProps)(Splash);

@ -1,5 +1,5 @@
Arguments: Arguments:
/opt/homebrew/Cellar/node/17.0.1/bin/node /usr/local/bin/yarn add react-native-permisson /opt/homebrew/Cellar/node/17.0.1/bin/node /usr/local/bin/yarn add @react-navigation/draweryarn add react-native-reanimated
PATH: PATH:
/Library/Frameworks/Python.framework/Versions/3.10/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Frameworks/Python.framework/Versions/3.10/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/reza/Library/Android/sdk/emulator:/Users/reza/Library/Android/sdk/tools:/Users/reza/Library/Android/sdk/tools/bin:/Users/reza/Library/Android/sdk/platform-tools:/Users/reza/Library/Android/sdk/emulator:/Users/reza/Library/Android/sdk/tools:/Users/reza/Library/Android/sdk/tools/bin:/Users/reza/Library/Android/sdk/platform-tools /Library/Frameworks/Python.framework/Versions/3.10/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Frameworks/Python.framework/Versions/3.10/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/Users/reza/Library/Android/sdk/emulator:/Users/reza/Library/Android/sdk/tools:/Users/reza/Library/Android/sdk/tools/bin:/Users/reza/Library/Android/sdk/platform-tools:/Users/reza/Library/Android/sdk/emulator:/Users/reza/Library/Android/sdk/tools:/Users/reza/Library/Android/sdk/tools/bin:/Users/reza/Library/Android/sdk/platform-tools
@ -14,7 +14,7 @@ Platform:
darwin arm64 darwin arm64
Trace: Trace:
Error: https://registry.yarnpkg.com/react-native-permisson: Not found Error: https://registry.yarnpkg.com/@react-navigation%2fdraweryarn: Not found
at Request.params.callback [as _callback] (/usr/local/lib/node_modules/yarn/lib/cli.js:67029:18) at Request.params.callback [as _callback] (/usr/local/lib/node_modules/yarn/lib/cli.js:67029:18)
at Request.self.callback (/usr/local/lib/node_modules/yarn/lib/cli.js:140883:22) at Request.self.callback (/usr/local/lib/node_modules/yarn/lib/cli.js:140883:22)
at Request.emit (node:events:390:28) at Request.emit (node:events:390:28)
@ -39,22 +39,27 @@ npm manifest:
"eject": "expo eject" "eject": "expo eject"
}, },
"dependencies": { "dependencies": {
"@expo-google-fonts/noto-sans": "^0.2.0",
"@react-native-async-storage/async-storage": "~1.15.0", "@react-native-async-storage/async-storage": "~1.15.0",
"@react-navigation/bottom-tabs": "^6.0.9", "@react-navigation/bottom-tabs": "^6.0.9",
"@react-navigation/drawer": "^6.1.8",
"@react-navigation/native": "^6.0.6", "@react-navigation/native": "^6.0.6",
"@react-navigation/native-stack": "^6.2.5", "@react-navigation/native-stack": "^6.2.5",
"expo": "~44.0.0", "expo": "^44.0.1",
"expo-app-loading": "~1.3.0",
"expo-barcode-scanner": "~11.2.0",
"expo-camera": "~12.1.0", "expo-camera": "~12.1.0",
"expo-device": "~4.1.0", "expo-device": "~4.1.0",
"expo-font": "^10.0.4",
"expo-status-bar": "~1.2.0", "expo-status-bar": "~1.2.0",
"i18next": "^21.6.3", "i18next": "^21.6.3",
"install": "^0.13.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"react": "17.0.1", "react": "17.0.1",
"react-dom": "17.0.1", "react-dom": "17.0.1",
"react-i18next": "^11.15.1", "react-i18next": "^11.15.1",
"react-native": "0.64.3", "react-native": "0.64.3",
"react-native-awesome-alerts": "^1.5.2", "react-native-awesome-alerts": "^1.5.2",
"react-native-camera": "^4.2.1",
"react-native-qrcode-scanner": "^1.5.4", "react-native-qrcode-scanner": "^1.5.4",
"react-native-restart": "^0.0.22", "react-native-restart": "^0.0.22",
"react-native-safe-area-context": "3.3.2", "react-native-safe-area-context": "3.3.2",
@ -1132,6 +1137,11 @@ Lockfile:
exec-sh "^0.3.2" exec-sh "^0.3.2"
minimist "^1.2.0" minimist "^1.2.0"
"@expo-google-fonts/noto-sans@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@expo-google-fonts/noto-sans/-/noto-sans-0.2.0.tgz#e5bb0d73235e963d318d38b859c3470aa197ab58"
integrity sha512-Qk9goIvIQxAF0FRHSpw63smmp0uGBKmcRdhIqI4SvJNYEomQzH/Xzy5MA5MJanh/UhYx9KnyaidSH6FiJLLXeg==
"@expo/config-plugins@4.0.15", "@expo/config-plugins@^4.0.2": "@expo/config-plugins@4.0.15", "@expo/config-plugins@^4.0.2":
version "4.0.15" version "4.0.15"
resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.0.15.tgz#cc170a0cf890973b6491cf357540e9955296019c" resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.0.15.tgz#cc170a0cf890973b6491cf357540e9955296019c"
@ -1180,15 +1190,15 @@ Lockfile:
resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-43.0.1.tgz#3e047dccb371741a540980eaff26fb0c95039c30" resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-43.0.1.tgz#3e047dccb371741a540980eaff26fb0c95039c30"
integrity sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ== integrity sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==
"@expo/config@6.0.6": "@expo/config@6.0.15", "@expo/config@^6.0.6":
version "6.0.6" version "6.0.15"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52" resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6"
integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w== integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ==
dependencies: dependencies:
"@babel/code-frame" "~7.10.4" "@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.6" "@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1" "@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.33" "@expo/json-file" "8.2.34"
getenv "^1.0.0" getenv "^1.0.0"
glob "7.1.6" glob "7.1.6"
require-from-string "^2.0.2" require-from-string "^2.0.2"
@ -1197,15 +1207,15 @@ Lockfile:
slugify "^1.3.4" slugify "^1.3.4"
sucrase "^3.20.0" sucrase "^3.20.0"
"@expo/config@^6.0.6": "@expo/config@6.0.6":
version "6.0.15" version "6.0.6"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6" resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52"
integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ== integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==
dependencies: dependencies:
"@babel/code-frame" "~7.10.4" "@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.15" "@expo/config-plugins" "4.0.6"
"@expo/config-types" "^43.0.1" "@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.34" "@expo/json-file" "8.2.33"
getenv "^1.0.0" getenv "^1.0.0"
glob "7.1.6" glob "7.1.6"
require-from-string "^2.0.2" require-from-string "^2.0.2"
@ -1214,6 +1224,37 @@ Lockfile:
slugify "^1.3.4" slugify "^1.3.4"
sucrase "^3.20.0" sucrase "^3.20.0"
"@expo/configure-splash-screen@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@expo/configure-splash-screen/-/configure-splash-screen-0.6.0.tgz#07d97ee512fd859fcc09506ba3762fd6263ebc39"
integrity sha512-4DyPoNXJqx9bN4nEwF3HQreo//ECu7gDe1Xor3dnnzFm9P/VDxAKdbEhA0n+R6fgkNfT2onVHWijqvdpTS3Xew==
dependencies:
color-string "^1.5.3"
commander "^5.1.0"
fs-extra "^9.0.0"
glob "^7.1.6"
lodash "^4.17.15"
pngjs "^5.0.0"
xcode "^3.0.0"
xml-js "^1.6.11"
"@expo/image-utils@0.3.18":
version "0.3.18"
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.18.tgz#36a41ab2925974ac5707e02cb0d3694349140497"
integrity sha512-77/ub2aGuf7SYfaFhvCHE54Hs/jRuU5j+pemS5seLfVHNwHbJSse91TMhsTLLNz3GwwqTxFVe3KMycSccJ73nA==
dependencies:
"@expo/spawn-async" "1.5.0"
chalk "^4.0.0"
fs-extra "9.0.0"
getenv "^1.0.0"
jimp-compact "0.16.1"
mime "^2.4.4"
node-fetch "^2.6.0"
parse-png "^2.1.0"
resolve-from "^5.0.0"
semver "7.3.2"
tempy "0.3.0"
"@expo/json-file@8.2.33": "@expo/json-file@8.2.33":
version "8.2.33" version "8.2.33"
resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32" resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32"
@ -1261,11 +1302,35 @@ Lockfile:
base64-js "^1.2.3" base64-js "^1.2.3"
xmlbuilder "^14.0.0" xmlbuilder "^14.0.0"
"@expo/prebuild-config@^3.0.15":
version "3.0.15"
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-3.0.15.tgz#bfc920bdbd01ab4d785cbf64c3a9deb74a6bb6a4"
integrity sha512-fP35AajhPIyUoqexTCxjcfSLZwK4OeedLZbxgUb32+k5kl1b7uSbmdAMtGHfLgnI18Mhk2QprerXOMK4zxo9mQ==
dependencies:
"@expo/config" "6.0.15"
"@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1"
"@expo/image-utils" "0.3.18"
"@expo/json-file" "8.2.34"
debug "^4.3.1"
expo-modules-autolinking "~0.5.1"
fs-extra "^9.0.0"
resolve-from "^5.0.0"
semver "7.3.2"
xml2js "0.4.23"
"@expo/sdk-runtime-versions@^1.0.0": "@expo/sdk-runtime-versions@^1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c"
integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==
"@expo/spawn-async@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.5.0.tgz#799827edd8c10ef07eb1a2ff9dcfe081d596a395"
integrity sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==
dependencies:
cross-spawn "^6.0.5"
"@expo/vector-icons@^12.0.4": "@expo/vector-icons@^12.0.4":
version "12.0.5" version "12.0.5"
resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-12.0.5.tgz#bc508ad05fb7e9a3e008704977cfec6c18aa7728" resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-12.0.5.tgz#bc508ad05fb7e9a3e008704977cfec6c18aa7728"
@ -1507,6 +1572,15 @@ Lockfile:
query-string "^7.0.0" query-string "^7.0.0"
react-is "^16.13.0" react-is "^16.13.0"
"@react-navigation/drawer@^6.1.8":
version "6.1.8"
resolved "https://registry.yarnpkg.com/@react-navigation/drawer/-/drawer-6.1.8.tgz#82e2a06d17166a82dd18233678ebf63ed523aaab"
integrity sha512-kYE2EO5dianUuUcaYmAlYBcgtmvGm2fxWTQ5sn103cgPNidp4KBUR9ClkhF+btfRaHKq+8Ul5M6qvL0mBAv/Lg==
dependencies:
"@react-navigation/elements" "^1.2.1"
color "^3.1.3"
warn-once "^0.1.0"
"@react-navigation/elements@^1.2.1": "@react-navigation/elements@^1.2.1":
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.2.1.tgz#86f19781c6f34a5c9dd25dca99915e0306f477d1" resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.2.1.tgz#86f19781c6f34a5c9dd25dca99915e0306f477d1"
@ -2303,7 +2377,7 @@ Lockfile:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.6.0, color-string@^1.9.0: color-string@^1.5.3, color-string@^1.6.0, color-string@^1.9.0:
version "1.9.0" version "1.9.0"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa"
integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==
@ -2352,6 +2426,11 @@ Lockfile:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
commander@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
commander@^7.2.0: commander@^7.2.0:
version "7.2.0" version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@ -2494,6 +2573,11 @@ Lockfile:
shebang-command "^1.2.0" shebang-command "^1.2.0"
which "^1.2.9" which "^1.2.9"
crypto-random-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
css-color-keywords@^1.0.0: css-color-keywords@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
@ -2814,6 +2898,13 @@ Lockfile:
snapdragon "^0.8.1" snapdragon "^0.8.1"
to-regex "^3.0.1" to-regex "^3.0.1"
expo-app-loading@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/expo-app-loading/-/expo-app-loading-1.3.0.tgz#2023f11e1420d423478474942c0d1c74e1afa335"
integrity sha512-IbMI1w2a79IXw2uH/dgwxWmXW9uR5DNjY/mDKdUCGR0tjMeeliZRq66gGdRLgCkfXS2b2WMIi03gB05l7SiQeg==
dependencies:
expo-splash-screen "~0.14.0"
expo-application@~4.0.1: expo-application@~4.0.1:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.0.1.tgz#d38a1315c06c253b843c951ddc6fbb9a026f05cc" resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.0.1.tgz#d38a1315c06c253b843c951ddc6fbb9a026f05cc"
@ -2830,6 +2921,14 @@ Lockfile:
path-browserify "^1.0.0" path-browserify "^1.0.0"
url-parse "^1.4.4" url-parse "^1.4.4"
expo-barcode-scanner@~11.2.0:
version "11.2.0"
resolved "https://registry.yarnpkg.com/expo-barcode-scanner/-/expo-barcode-scanner-11.2.0.tgz#9d316a36962f74f117f19f7c722de1334a4fd8d2"
integrity sha512-Dmp6KTzkMa9E561gR7kRP8ZXfVdAn9SLUwQ5DdeEGTC7D1NIqEO8WmyfVtWSLUUSArF6QxL+oYOZyzJ+LVjkHA==
dependencies:
"@expo/config-plugins" "^4.0.2"
expo-image-loader "~3.1.0"
expo-camera@~12.1.0: expo-camera@~12.1.0:
version "12.1.0" version "12.1.0"
resolved "https://registry.yarnpkg.com/expo-camera/-/expo-camera-12.1.0.tgz#d968b282d2155956655e217b35bade66ed361ad7" resolved "https://registry.yarnpkg.com/expo-camera/-/expo-camera-12.1.0.tgz#d968b282d2155956655e217b35bade66ed361ad7"
@ -2867,13 +2966,18 @@ Lockfile:
"@expo/config-plugins" "^4.0.2" "@expo/config-plugins" "^4.0.2"
uuid "^3.4.0" uuid "^3.4.0"
expo-font@~10.0.4: expo-font@^10.0.4, expo-font@~10.0.4:
version "10.0.4" version "10.0.4"
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.0.4.tgz#c06ff88079c857ef71c24414a583fd270b3f34e7" resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.0.4.tgz#c06ff88079c857ef71c24414a583fd270b3f34e7"
integrity sha512-ieEsT6tD6yD6qT7WUzzJ5el0UvACr53RqICu0GI9GUiWuwDFPM2Oi5WfWwYFFStCRuaP6kEtpkJDUZ9cjT5F+w== integrity sha512-ieEsT6tD6yD6qT7WUzzJ5el0UvACr53RqICu0GI9GUiWuwDFPM2Oi5WfWwYFFStCRuaP6kEtpkJDUZ9cjT5F+w==
dependencies: dependencies:
fontfaceobserver "^2.1.0" fontfaceobserver "^2.1.0"
expo-image-loader@~3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/expo-image-loader/-/expo-image-loader-3.1.0.tgz#d60d57d6d36d1ea9b07ed2e8bed87574edd2ad1e"
integrity sha512-86oT25SDTO018hWO61HGnoB4l+DEgT9sOoW24rvXX99VBe/MPheGo+DDNKtLNf6k06n/OFL3LgtR0m9YpOCT8Q==
expo-keep-awake@~10.0.1: expo-keep-awake@~10.0.1:
version "10.0.1" version "10.0.1"
resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.0.1.tgz#9f1176216c41eee20843c8232acfdca2bc32d334" resolved "https://registry.yarnpkg.com/expo-keep-awake/-/expo-keep-awake-10.0.1.tgz#9f1176216c41eee20843c8232acfdca2bc32d334"
@ -2890,6 +2994,17 @@ Lockfile:
find-up "^5.0.0" find-up "^5.0.0"
fs-extra "^9.1.0" fs-extra "^9.1.0"
expo-modules-autolinking@~0.5.1:
version "0.5.3"
resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.5.3.tgz#e66d36db9c67dad6247ed72ce050dee4cb50eb64"
integrity sha512-l6jbfApkU7AX8FLr8o+O7/yXamxdaP6a8yZ/mNBudZIV6AVeMI602O0AFErsDj8xTcJSe0puIX2WjK29XlVayg==
dependencies:
chalk "^4.1.0"
commander "^7.2.0"
fast-glob "^3.2.5"
find-up "^5.0.0"
fs-extra "^9.1.0"
expo-modules-core@0.6.3: expo-modules-core@0.6.3:
version "0.6.3" version "0.6.3"
resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.6.3.tgz#e5326169a888144f2691ffd49b7686dfac235227" resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.6.3.tgz#e5326169a888144f2691ffd49b7686dfac235227"
@ -2898,12 +3013,20 @@ Lockfile:
compare-versions "^3.4.0" compare-versions "^3.4.0"
invariant "^2.2.4" invariant "^2.2.4"
expo-splash-screen@~0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.14.1.tgz#7647c8b98c679b8313d24a7c14729402c3c16631"
integrity sha512-Y08wMIVjRuPbBnH2N6KwUfQYYnAiBrZMFAfXjjPPObyMDZ7v5VXTcbAWHqGdnYDcIbXRpat+fiWpTeU2HanBBg==
dependencies:
"@expo/configure-splash-screen" "^0.6.0"
"@expo/prebuild-config" "^3.0.15"
expo-status-bar@~1.2.0: expo-status-bar@~1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.2.0.tgz#16e73205da563f9536f562e439081e30e318a82e" resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.2.0.tgz#16e73205da563f9536f562e439081e30e318a82e"
integrity sha512-pVZZ/kDCXFK79E4dCtRecs3XLC8aiwlciutSd/fFmUPJSQZ1Txia6hlKajPt0GAYft8/YnT0V3URXzWZOBniYQ== integrity sha512-pVZZ/kDCXFK79E4dCtRecs3XLC8aiwlciutSd/fFmUPJSQZ1Txia6hlKajPt0GAYft8/YnT0V3URXzWZOBniYQ==
expo@~44.0.0: expo@^44.0.1:
version "44.0.1" version "44.0.1"
resolved "https://registry.yarnpkg.com/expo/-/expo-44.0.1.tgz#998a29c8e7eeab1c72d4e51d907494e16a49ed1c" resolved "https://registry.yarnpkg.com/expo/-/expo-44.0.1.tgz#998a29c8e7eeab1c72d4e51d907494e16a49ed1c"
integrity sha512-r3UXg8d2ypcK2I8ds5r9WP6luOLKH4tTqtdgOS+rQt3jpMpkF89VRnNB/Ux3GnzxHnxIHcEmTYBmfoI3qA4abg== integrity sha512-r3UXg8d2ypcK2I8ds5r9WP6luOLKH4tTqtdgOS+rQt3jpMpkF89VRnNB/Ux3GnzxHnxIHcEmTYBmfoI3qA4abg==
@ -3165,7 +3288,7 @@ Lockfile:
jsonfile "^4.0.0" jsonfile "^4.0.0"
universalify "^0.1.0" universalify "^0.1.0"
fs-extra@^9.1.0: fs-extra@^9.0.0, fs-extra@^9.1.0:
version "9.1.0" version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@ -3483,6 +3606,11 @@ Lockfile:
dependencies: dependencies:
css-in-js-utils "^2.0.0" css-in-js-utils "^2.0.0"
install@^0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776"
integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==
interpret@^1.0.0: interpret@^1.0.0:
version "1.4.0" version "1.4.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
@ -3784,6 +3912,11 @@ Lockfile:
resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798" resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798"
integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw== integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==
jimp-compact@0.16.1:
version "0.16.1"
resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
joi@^17.2.1: joi@^17.2.1:
version "17.5.0" version "17.5.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011" resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011"
@ -4462,7 +4595,7 @@ Lockfile:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.4.1: mime@^2.4.1, mime@^2.4.4:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
@ -4850,6 +4983,13 @@ Lockfile:
json-parse-even-better-errors "^2.3.0" json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6" lines-and-columns "^1.1.6"
parse-png@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338"
integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==
dependencies:
pngjs "^3.3.0"
parseurl@~1.3.3: parseurl@~1.3.3:
version "1.3.3" version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@ -4937,6 +5077,16 @@ Lockfile:
base64-js "^1.5.1" base64-js "^1.5.1"
xmlbuilder "^9.0.7" xmlbuilder "^9.0.7"
pngjs@^3.3.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
pngjs@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
posix-character-classes@^0.1.0: posix-character-classes@^0.1.0:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@ -5035,7 +5185,7 @@ Lockfile:
kleur "^3.0.3" kleur "^3.0.3"
sisteransi "^1.0.5" sisteransi "^1.0.5"
prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: prop-types@^15.5.10, prop-types@^15.6.0, prop-types@^15.7.2:
version "15.8.0" version "15.8.0"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.0.tgz#d237e624c45a9846e469f5f31117f970017ff588" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.0.tgz#d237e624c45a9846e469f5f31117f970017ff588"
integrity sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g== integrity sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==
@ -5145,13 +5295,6 @@ Lockfile:
dependencies: dependencies:
prop-types "^15.7.2" prop-types "^15.7.2"
react-native-camera@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/react-native-camera/-/react-native-camera-4.2.1.tgz#caf74081f055e89d7e9b0cd5108965d808c60e90"
integrity sha512-+Vkql24PFYQfsPRznJCvPwJQfyzCnjlcww/iZ4Ej80bgivKjL9eU0IMQIXp4yi6XCrKi4voWXxIDPMupQZKeIQ==
dependencies:
prop-types "^15.6.2"
react-native-codegen@^0.0.6: react-native-codegen@^0.0.6:
version "0.0.6" version "0.0.6"
resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.6.tgz#b3173faa879cf71bfade8d030f9c4698388f6909" resolved "https://registry.yarnpkg.com/react-native-codegen/-/react-native-codegen-0.0.6.tgz#b3173faa879cf71bfade8d030f9c4698388f6909"
@ -5592,7 +5735,7 @@ Lockfile:
minimist "^1.1.1" minimist "^1.1.1"
walker "~1.0.5" walker "~1.0.5"
sax@>=0.6.0, sax@^1.2.1: sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@ -6072,6 +6215,11 @@ Lockfile:
resolve "^1.20.0" resolve "^1.20.0"
tmp "^0.2.1" tmp "^0.2.1"
temp-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
temp@0.8.3: temp@0.8.3:
version "0.8.3" version "0.8.3"
resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
@ -6087,6 +6235,15 @@ Lockfile:
dependencies: dependencies:
rimraf "~2.6.2" rimraf "~2.6.2"
tempy@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8"
integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==
dependencies:
temp-dir "^1.0.0"
type-fest "^0.3.1"
unique-string "^1.0.0"
thenify-all@^1.0.0: thenify-all@^1.0.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@ -6193,6 +6350,11 @@ Lockfile:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
type-fest@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
type-fest@^0.6.0: type-fest@^0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@ -6259,6 +6421,13 @@ Lockfile:
is-extendable "^0.1.1" is-extendable "^0.1.1"
set-value "^2.0.1" set-value "^2.0.1"
unique-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
dependencies:
crypto-random-string "^1.0.0"
universalify@^0.1.0: universalify@^0.1.0:
version "0.1.2" version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@ -6462,7 +6631,7 @@ Lockfile:
simple-plist "^1.0.0" simple-plist "^1.0.0"
uuid "^3.3.2" uuid "^3.3.2"
xcode@^3.0.1: xcode@^3.0.0, xcode@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c"
integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==
@ -6470,6 +6639,13 @@ Lockfile:
simple-plist "^1.1.0" simple-plist "^1.1.0"
uuid "^7.0.3" uuid "^7.0.3"
xml-js@^1.6.11:
version "1.6.11"
resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
dependencies:
sax "^1.2.4"
xml2js@0.4.23: xml2js@0.4.23:
version "0.4.23" version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"

@ -1051,6 +1051,11 @@
exec-sh "^0.3.2" exec-sh "^0.3.2"
minimist "^1.2.0" minimist "^1.2.0"
"@expo-google-fonts/noto-sans@^0.2.0":
version "0.2.0"
resolved "https://registry.yarnpkg.com/@expo-google-fonts/noto-sans/-/noto-sans-0.2.0.tgz#e5bb0d73235e963d318d38b859c3470aa197ab58"
integrity sha512-Qk9goIvIQxAF0FRHSpw63smmp0uGBKmcRdhIqI4SvJNYEomQzH/Xzy5MA5MJanh/UhYx9KnyaidSH6FiJLLXeg==
"@expo/config-plugins@4.0.15", "@expo/config-plugins@^4.0.2": "@expo/config-plugins@4.0.15", "@expo/config-plugins@^4.0.2":
version "4.0.15" version "4.0.15"
resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.0.15.tgz#cc170a0cf890973b6491cf357540e9955296019c" resolved "https://registry.yarnpkg.com/@expo/config-plugins/-/config-plugins-4.0.15.tgz#cc170a0cf890973b6491cf357540e9955296019c"
@ -1099,15 +1104,15 @@
resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-43.0.1.tgz#3e047dccb371741a540980eaff26fb0c95039c30" resolved "https://registry.yarnpkg.com/@expo/config-types/-/config-types-43.0.1.tgz#3e047dccb371741a540980eaff26fb0c95039c30"
integrity sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ== integrity sha512-EtllpCGDdB/UdwAIs5YXJwBLpbFQNdlLLrxIvoILA9cXrpQMWkeDCT9lQPJzFRMFcLUaMuGvkzX2tR4tx5EQFQ==
"@expo/config@6.0.6": "@expo/config@6.0.15", "@expo/config@^6.0.6":
version "6.0.6" version "6.0.15"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52" resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6"
integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w== integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ==
dependencies: dependencies:
"@babel/code-frame" "~7.10.4" "@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.6" "@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1" "@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.33" "@expo/json-file" "8.2.34"
getenv "^1.0.0" getenv "^1.0.0"
glob "7.1.6" glob "7.1.6"
require-from-string "^2.0.2" require-from-string "^2.0.2"
@ -1116,15 +1121,15 @@
slugify "^1.3.4" slugify "^1.3.4"
sucrase "^3.20.0" sucrase "^3.20.0"
"@expo/config@^6.0.6": "@expo/config@6.0.6":
version "6.0.15" version "6.0.6"
resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.15.tgz#aa610f8b714e0b1103e13c8210059519479d11d6" resolved "https://registry.yarnpkg.com/@expo/config/-/config-6.0.6.tgz#64b49b93f07cb046f5a8538a1793bef9070d8d52"
integrity sha512-nrG+OUe/2n3ulNSgHRs9V70zXu3lpkuzJ6F0VmCuhjyHqT7UYimkgSCJGqaE3N+AayBTK+YffOT6bTWH17wxjQ== integrity sha512-GPI8EIdMAtZ5VaB4p5GcfuX50xyfGFdpEqLi0QmcfrCfTsGry1/j/Qy28hovHM1oJYHlaZylTcbGy+1ET+AO2w==
dependencies: dependencies:
"@babel/code-frame" "~7.10.4" "@babel/code-frame" "~7.10.4"
"@expo/config-plugins" "4.0.15" "@expo/config-plugins" "4.0.6"
"@expo/config-types" "^43.0.1" "@expo/config-types" "^43.0.1"
"@expo/json-file" "8.2.34" "@expo/json-file" "8.2.33"
getenv "^1.0.0" getenv "^1.0.0"
glob "7.1.6" glob "7.1.6"
require-from-string "^2.0.2" require-from-string "^2.0.2"
@ -1133,6 +1138,37 @@
slugify "^1.3.4" slugify "^1.3.4"
sucrase "^3.20.0" sucrase "^3.20.0"
"@expo/configure-splash-screen@^0.6.0":
version "0.6.0"
resolved "https://registry.yarnpkg.com/@expo/configure-splash-screen/-/configure-splash-screen-0.6.0.tgz#07d97ee512fd859fcc09506ba3762fd6263ebc39"
integrity sha512-4DyPoNXJqx9bN4nEwF3HQreo//ECu7gDe1Xor3dnnzFm9P/VDxAKdbEhA0n+R6fgkNfT2onVHWijqvdpTS3Xew==
dependencies:
color-string "^1.5.3"
commander "^5.1.0"
fs-extra "^9.0.0"
glob "^7.1.6"
lodash "^4.17.15"
pngjs "^5.0.0"
xcode "^3.0.0"
xml-js "^1.6.11"
"@expo/image-utils@0.3.18":
version "0.3.18"
resolved "https://registry.yarnpkg.com/@expo/image-utils/-/image-utils-0.3.18.tgz#36a41ab2925974ac5707e02cb0d3694349140497"
integrity sha512-77/ub2aGuf7SYfaFhvCHE54Hs/jRuU5j+pemS5seLfVHNwHbJSse91TMhsTLLNz3GwwqTxFVe3KMycSccJ73nA==
dependencies:
"@expo/spawn-async" "1.5.0"
chalk "^4.0.0"
fs-extra "9.0.0"
getenv "^1.0.0"
jimp-compact "0.16.1"
mime "^2.4.4"
node-fetch "^2.6.0"
parse-png "^2.1.0"
resolve-from "^5.0.0"
semver "7.3.2"
tempy "0.3.0"
"@expo/json-file@8.2.33": "@expo/json-file@8.2.33":
version "8.2.33" version "8.2.33"
resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32" resolved "https://registry.yarnpkg.com/@expo/json-file/-/json-file-8.2.33.tgz#78f56f33a2cfb807b23c81e00237a33159aa1f32"
@ -1180,11 +1216,35 @@
base64-js "^1.2.3" base64-js "^1.2.3"
xmlbuilder "^14.0.0" xmlbuilder "^14.0.0"
"@expo/prebuild-config@^3.0.15":
version "3.0.15"
resolved "https://registry.yarnpkg.com/@expo/prebuild-config/-/prebuild-config-3.0.15.tgz#bfc920bdbd01ab4d785cbf64c3a9deb74a6bb6a4"
integrity sha512-fP35AajhPIyUoqexTCxjcfSLZwK4OeedLZbxgUb32+k5kl1b7uSbmdAMtGHfLgnI18Mhk2QprerXOMK4zxo9mQ==
dependencies:
"@expo/config" "6.0.15"
"@expo/config-plugins" "4.0.15"
"@expo/config-types" "^43.0.1"
"@expo/image-utils" "0.3.18"
"@expo/json-file" "8.2.34"
debug "^4.3.1"
expo-modules-autolinking "~0.5.1"
fs-extra "^9.0.0"
resolve-from "^5.0.0"
semver "7.3.2"
xml2js "0.4.23"
"@expo/sdk-runtime-versions@^1.0.0": "@expo/sdk-runtime-versions@^1.0.0":
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c" resolved "https://registry.yarnpkg.com/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz#d7ebd21b19f1c6b0395e50d78da4416941c57f7c"
integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ== integrity sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==
"@expo/spawn-async@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@expo/spawn-async/-/spawn-async-1.5.0.tgz#799827edd8c10ef07eb1a2ff9dcfe081d596a395"
integrity sha512-LB7jWkqrHo+5fJHNrLAFdimuSXQ2MQ4lA7SQW5bf/HbsXuV2VrT/jN/M8f/KoWt0uJMGN4k/j7Opx4AvOOxSew==
dependencies:
cross-spawn "^6.0.5"
"@expo/vector-icons@^12.0.4": "@expo/vector-icons@^12.0.4":
version "12.0.5" version "12.0.5"
resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-12.0.5.tgz#bc508ad05fb7e9a3e008704977cfec6c18aa7728" resolved "https://registry.yarnpkg.com/@expo/vector-icons/-/vector-icons-12.0.5.tgz#bc508ad05fb7e9a3e008704977cfec6c18aa7728"
@ -1426,6 +1486,15 @@
query-string "^7.0.0" query-string "^7.0.0"
react-is "^16.13.0" react-is "^16.13.0"
"@react-navigation/drawer@^6.1.8":
version "6.1.8"
resolved "https://registry.yarnpkg.com/@react-navigation/drawer/-/drawer-6.1.8.tgz#82e2a06d17166a82dd18233678ebf63ed523aaab"
integrity sha512-kYE2EO5dianUuUcaYmAlYBcgtmvGm2fxWTQ5sn103cgPNidp4KBUR9ClkhF+btfRaHKq+8Ul5M6qvL0mBAv/Lg==
dependencies:
"@react-navigation/elements" "^1.2.1"
color "^3.1.3"
warn-once "^0.1.0"
"@react-navigation/elements@^1.2.1": "@react-navigation/elements@^1.2.1":
version "1.2.1" version "1.2.1"
resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.2.1.tgz#86f19781c6f34a5c9dd25dca99915e0306f477d1" resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.2.1.tgz#86f19781c6f34a5c9dd25dca99915e0306f477d1"
@ -2222,7 +2291,7 @@ color-name@^1.0.0, color-name@~1.1.4:
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.6.0, color-string@^1.9.0: color-string@^1.5.3, color-string@^1.6.0, color-string@^1.9.0:
version "1.9.0" version "1.9.0"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa" resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.0.tgz#63b6ebd1bec11999d1df3a79a7569451ac2be8aa"
integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ== integrity sha512-9Mrz2AQLefkH1UvASKj6v6hj/7eWgjnT/cVsR8CumieLoT+g900exWeNogqtweI8dxloXN9BDQTYro1oWu/5CQ==
@ -2271,6 +2340,11 @@ commander@^4.0.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
commander@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
commander@^7.2.0: commander@^7.2.0:
version "7.2.0" version "7.2.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
@ -2413,6 +2487,11 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0" shebang-command "^1.2.0"
which "^1.2.9" which "^1.2.9"
crypto-random-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
css-color-keywords@^1.0.0: css-color-keywords@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
@ -2733,6 +2812,13 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1" snapdragon "^0.8.1"
to-regex "^3.0.1" to-regex "^3.0.1"
expo-app-loading@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/expo-app-loading/-/expo-app-loading-1.3.0.tgz#2023f11e1420d423478474942c0d1c74e1afa335"
integrity sha512-IbMI1w2a79IXw2uH/dgwxWmXW9uR5DNjY/mDKdUCGR0tjMeeliZRq66gGdRLgCkfXS2b2WMIi03gB05l7SiQeg==
dependencies:
expo-splash-screen "~0.14.0"
expo-application@~4.0.1: expo-application@~4.0.1:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.0.1.tgz#d38a1315c06c253b843c951ddc6fbb9a026f05cc" resolved "https://registry.yarnpkg.com/expo-application/-/expo-application-4.0.1.tgz#d38a1315c06c253b843c951ddc6fbb9a026f05cc"
@ -2794,7 +2880,7 @@ expo-file-system@~13.1.0:
"@expo/config-plugins" "^4.0.2" "@expo/config-plugins" "^4.0.2"
uuid "^3.4.0" uuid "^3.4.0"
expo-font@~10.0.4: expo-font@^10.0.4, expo-font@~10.0.4:
version "10.0.4" version "10.0.4"
resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.0.4.tgz#c06ff88079c857ef71c24414a583fd270b3f34e7" resolved "https://registry.yarnpkg.com/expo-font/-/expo-font-10.0.4.tgz#c06ff88079c857ef71c24414a583fd270b3f34e7"
integrity sha512-ieEsT6tD6yD6qT7WUzzJ5el0UvACr53RqICu0GI9GUiWuwDFPM2Oi5WfWwYFFStCRuaP6kEtpkJDUZ9cjT5F+w== integrity sha512-ieEsT6tD6yD6qT7WUzzJ5el0UvACr53RqICu0GI9GUiWuwDFPM2Oi5WfWwYFFStCRuaP6kEtpkJDUZ9cjT5F+w==
@ -2822,6 +2908,17 @@ expo-modules-autolinking@0.5.2:
find-up "^5.0.0" find-up "^5.0.0"
fs-extra "^9.1.0" fs-extra "^9.1.0"
expo-modules-autolinking@~0.5.1:
version "0.5.3"
resolved "https://registry.yarnpkg.com/expo-modules-autolinking/-/expo-modules-autolinking-0.5.3.tgz#e66d36db9c67dad6247ed72ce050dee4cb50eb64"
integrity sha512-l6jbfApkU7AX8FLr8o+O7/yXamxdaP6a8yZ/mNBudZIV6AVeMI602O0AFErsDj8xTcJSe0puIX2WjK29XlVayg==
dependencies:
chalk "^4.1.0"
commander "^7.2.0"
fast-glob "^3.2.5"
find-up "^5.0.0"
fs-extra "^9.1.0"
expo-modules-core@0.6.3: expo-modules-core@0.6.3:
version "0.6.3" version "0.6.3"
resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.6.3.tgz#e5326169a888144f2691ffd49b7686dfac235227" resolved "https://registry.yarnpkg.com/expo-modules-core/-/expo-modules-core-0.6.3.tgz#e5326169a888144f2691ffd49b7686dfac235227"
@ -2830,6 +2927,14 @@ expo-modules-core@0.6.3:
compare-versions "^3.4.0" compare-versions "^3.4.0"
invariant "^2.2.4" invariant "^2.2.4"
expo-splash-screen@~0.14.0:
version "0.14.1"
resolved "https://registry.yarnpkg.com/expo-splash-screen/-/expo-splash-screen-0.14.1.tgz#7647c8b98c679b8313d24a7c14729402c3c16631"
integrity sha512-Y08wMIVjRuPbBnH2N6KwUfQYYnAiBrZMFAfXjjPPObyMDZ7v5VXTcbAWHqGdnYDcIbXRpat+fiWpTeU2HanBBg==
dependencies:
"@expo/configure-splash-screen" "^0.6.0"
"@expo/prebuild-config" "^3.0.15"
expo-status-bar@~1.2.0: expo-status-bar@~1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.2.0.tgz#16e73205da563f9536f562e439081e30e318a82e" resolved "https://registry.yarnpkg.com/expo-status-bar/-/expo-status-bar-1.2.0.tgz#16e73205da563f9536f562e439081e30e318a82e"
@ -3097,7 +3202,7 @@ fs-extra@^8.1.0:
jsonfile "^4.0.0" jsonfile "^4.0.0"
universalify "^0.1.0" universalify "^0.1.0"
fs-extra@^9.1.0: fs-extra@^9.0.0, fs-extra@^9.1.0:
version "9.1.0" version "9.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
@ -3721,6 +3826,11 @@ jetifier@^1.6.2:
resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798" resolved "https://registry.yarnpkg.com/jetifier/-/jetifier-1.6.8.tgz#e88068697875cbda98c32472902c4d3756247798"
integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw== integrity sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==
jimp-compact@0.16.1:
version "0.16.1"
resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==
joi@^17.2.1: joi@^17.2.1:
version "17.5.0" version "17.5.0"
resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011" resolved "https://registry.yarnpkg.com/joi/-/joi-17.5.0.tgz#7e66d0004b5045d971cf416a55fb61d33ac6e011"
@ -4399,7 +4509,7 @@ mime@1.6.0:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mime@^2.4.1: mime@^2.4.1, mime@^2.4.4:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
@ -4787,6 +4897,13 @@ parse-json@^5.0.0:
json-parse-even-better-errors "^2.3.0" json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6" lines-and-columns "^1.1.6"
parse-png@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/parse-png/-/parse-png-2.1.0.tgz#2a42ad719fedf90f81c59ebee7ae59b280d6b338"
integrity sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==
dependencies:
pngjs "^3.3.0"
parseurl@~1.3.3: parseurl@~1.3.3:
version "1.3.3" version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@ -4874,6 +4991,16 @@ plist@^3.0.1, plist@^3.0.4:
base64-js "^1.5.1" base64-js "^1.5.1"
xmlbuilder "^9.0.7" xmlbuilder "^9.0.7"
pngjs@^3.3.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f"
integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==
pngjs@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==
posix-character-classes@^0.1.0: posix-character-classes@^0.1.0:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@ -5522,7 +5649,7 @@ sane@^4.0.3:
minimist "^1.1.1" minimist "^1.1.1"
walker "~1.0.5" walker "~1.0.5"
sax@>=0.6.0, sax@^1.2.1: sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4:
version "1.2.4" version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@ -6002,6 +6129,11 @@ tailwindcss@^2.0.0:
resolve "^1.20.0" resolve "^1.20.0"
tmp "^0.2.1" tmp "^0.2.1"
temp-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=
temp@0.8.3: temp@0.8.3:
version "0.8.3" version "0.8.3"
resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59"
@ -6017,6 +6149,15 @@ temp@^0.8.1:
dependencies: dependencies:
rimraf "~2.6.2" rimraf "~2.6.2"
tempy@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.3.0.tgz#6f6c5b295695a16130996ad5ab01a8bd726e8bf8"
integrity sha512-WrH/pui8YCwmeiAoxV+lpRH9HpRtgBhSR2ViBPgpGb/wnYDzp21R4MN45fsCGvLROvY67o3byhJRYRONJyImVQ==
dependencies:
temp-dir "^1.0.0"
type-fest "^0.3.1"
unique-string "^1.0.0"
thenify-all@^1.0.0: thenify-all@^1.0.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@ -6123,6 +6264,11 @@ type-fest@^0.13.1:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
type-fest@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1"
integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==
type-fest@^0.6.0: type-fest@^0.6.0:
version "0.6.0" version "0.6.0"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
@ -6189,6 +6335,13 @@ union-value@^1.0.0:
is-extendable "^0.1.1" is-extendable "^0.1.1"
set-value "^2.0.1" set-value "^2.0.1"
unique-string@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
dependencies:
crypto-random-string "^1.0.0"
universalify@^0.1.0: universalify@^0.1.0:
version "0.1.2" version "0.1.2"
resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
@ -6392,7 +6545,7 @@ xcode@^2.0.0:
simple-plist "^1.0.0" simple-plist "^1.0.0"
uuid "^3.3.2" uuid "^3.3.2"
xcode@^3.0.1: xcode@^3.0.0, xcode@^3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c"
integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA== integrity sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==
@ -6400,6 +6553,13 @@ xcode@^3.0.1:
simple-plist "^1.1.0" simple-plist "^1.1.0"
uuid "^7.0.3" uuid "^7.0.3"
xml-js@^1.6.11:
version "1.6.11"
resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9"
integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==
dependencies:
sax "^1.2.4"
xml2js@0.4.23: xml2js@0.4.23:
version "0.4.23" version "0.4.23"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"

Loading…
Cancel
Save