Compare commits

..

4 Commits

Author SHA1 Message Date
zdl
112fbbd42d Merge branch 'feature' into develop 2025-10-17 15:01:54 +08:00
zdl
3a4dade8ec Merge branch 'main' into develop 2025-10-15 21:01:59 +08:00
zdl
6f81259f8c feat: 解决导航跳转失效的问题 2025-10-15 11:57:28 +08:00
zdl
864844a52b feat: 10.10线上最新代码提交 2025-10-15 11:56:34 +08:00
2489 changed files with 678128 additions and 323553 deletions

View File

@@ -0,0 +1,13 @@
{
"permissions": {
"allow": [
"Bash(npm test:*)",
"Bash(xargs ls:*)",
"Bash(awk:*)",
"Bash(npm start)",
"Bash(python3:*)"
],
"deny": [],
"ask": []
}
}

View File

@@ -1,63 +0,0 @@
# 部署配置文件
# 首次使用请复制此文件为 .env.deploy 并填写真实配置
# ==================== 服务器配置 ====================
# 服务器 IP 或域名
SERVER_HOST=your-server-ip-or-domain
# SSH 用户名
SERVER_USER=ubuntu
# SSH 端口
SERVER_PORT=22
# SSH 密钥路径(留空使用默认 ~/.ssh/id_rsa
SSH_KEY_PATH=
# ==================== 路径配置 ====================
# 服务器上的 Git 仓库路径
REMOTE_PROJECT_PATH=/home/ubuntu/vf_react
# 生产环境部署路径
PRODUCTION_PATH=/var/www/valuefrontier.cn
# 部署备份目录
BACKUP_DIR=/home/ubuntu/deployments
# 部署日志目录
LOG_DIR=/home/ubuntu/deploy-logs
# ==================== Git 配置 ====================
# 部署分支
DEPLOY_BRANCH=feature
# ==================== 备份配置 ====================
# 保留备份数量
KEEP_BACKUPS=5
# ==================== 企业微信通知配置 ====================
# 是否启用企业微信通知 (true/false)
ENABLE_WECHAT_NOTIFY=false
# 企业微信机器人 Webhook URL
WECHAT_WEBHOOK_URL=
# 通知提及的用户(@all 或 手机号/userid
WECHAT_MENTIONED_LIST=
# ==================== 部署配置 ====================
# 是否在部署前运行 npm install (true/false)
RUN_NPM_INSTALL=true
# 是否在部署前运行 npm test (true/false)
RUN_NPM_TEST=false
# 构建命令
BUILD_COMMAND=npm run build
# ==================== 高级配置 ====================
# SSH 连接超时时间(秒)
SSH_TIMEOUT=30
# 部署超时时间(秒)
DEPLOY_TIMEOUT=600

View File

@@ -1,25 +0,0 @@
# 开发环境配置(连接真实后端)
# 使用方式: npm run start:dev
# React 构建优化配置
GENERATE_SOURCEMAP=false
SKIP_PREFLIGHT_CHECK=true
DISABLE_ESLINT_PLUGIN=true
TSC_COMPILE_ON_ERROR=true
IMAGE_INLINE_SIZE_LIMIT=10000
NODE_OPTIONS=--max_old_space_size=4096
# API 配置
# 后端 API 地址(开发环境会代理到这个地址)
REACT_APP_API_URL=http://49.232.185.254:5001
# 禁用 Mock 数据使用真实API
REACT_APP_ENABLE_MOCK=false
# 开发环境标识
REACT_APP_ENV=development
# 性能监控配置
REACT_APP_ENABLE_PERFORMANCE_MONITOR=true
REACT_APP_ENABLE_PERFORMANCE_PANEL=true
REACT_APP_REPORT_TO_POSTHOG=false

View File

@@ -1,41 +0,0 @@
# ========================================
# Mock 测试环境配置
# ========================================
# 使用方式: npm run start:mock
#
# 工作原理:
# 1. 通过 env-cmd 加载此配置文件
# 2. REACT_APP_ENABLE_MOCK=true 会在 src/index.js 中启动 MSW (Mock Service Worker)
# 3. MSW 在浏览器层面拦截所有 HTTP 请求
# 4. 根据 src/mocks/handlers/* 中定义的规则返回 mock 数据
# 5. 未定义 mock 的接口会继续请求真实后端
#
# 适用场景:
# - 前端独立开发,无需后端支持
# - 测试特定接口的 UI 表现
# - 后端接口未就绪时的快速原型开发
# ========================================
# React 构建优化配置
GENERATE_SOURCEMAP=false
SKIP_PREFLIGHT_CHECK=true
DISABLE_ESLINT_PLUGIN=true
TSC_COMPILE_ON_ERROR=true
IMAGE_INLINE_SIZE_LIMIT=10000
NODE_OPTIONS=--max_old_space_size=4096
# API 配置
# Mock 模式下使用空字符串,让请求使用相对路径
# MSW 会在浏览器层拦截这些请求,不需要真实的后端地址
REACT_APP_API_URL=
# Socket.IO 连接地址Mock 模式下连接生产环境)
# 注意WebSocket 不被 MSW 拦截,可以独立配置
REACT_APP_SOCKET_URL=https://valuefrontier.cn
# 启用 Mock 数据(核心配置)
# 此配置会触发 src/index.js 中的 MSW 初始化
REACT_APP_ENABLE_MOCK=true
# Mock 环境标识
REACT_APP_ENV=mock

View File

@@ -1,48 +0,0 @@
# ========================================
# 生产环境配置
# ========================================
# 环境标识
REACT_APP_ENV=production
NODE_ENV=production
# Mock 配置(生产环境禁用 Mock
REACT_APP_ENABLE_MOCK=false
# 🔧 调试模式(生产环境临时调试用)
# 开启后会在全局暴露 window.__DEBUG__
REACT_APP_ENABLE_DEBUG=false
# 后端 API 地址(生产环境)
# 使用单独的 API 域名,静态资源走 CDNAPI 走专用域名
REACT_APP_API_URL=https://api.valuefrontier.cn
# PostHog 分析配置(生产环境)
# PostHog API Key从 PostHog 项目设置中获取)
REACT_APP_POSTHOG_KEY=phc_xKlRyG69Bx7hgOdFeCeLUvQWvSjw18ZKFgCwCeYezWF
# PostHog API Host使用 PostHog Cloud
REACT_APP_POSTHOG_HOST=https://app.posthog.com
# 启用会话录制Session Recording用于回放用户操作、排查问题
REACT_APP_ENABLE_SESSION_RECORDING=true
# React 构建优化配置
# 禁用 source map 生成(生产环境不需要,提升打包速度和安全性)
GENERATE_SOURCEMAP=false
# 跳过预检查(加快启动速度)
SKIP_PREFLIGHT_CHECK=true
# 禁用 ESLint 检查(生产构建时不需要)
DISABLE_ESLINT_PLUGIN=true
# TypeScript 编译错误时继续
TSC_COMPILE_ON_ERROR=true
# 图片内联大小限制
IMAGE_INLINE_SIZE_LIMIT=10000
# Node.js 内存限制(适用于大型项目)
NODE_OPTIONS=--max_old_space_size=4096
# 性能监控配置(生产环境)
# 启用性能监控
REACT_APP_ENABLE_PERFORMANCE_MONITOR=true
# 禁用性能面板(仅开发环境)
REACT_APP_ENABLE_PERFORMANCE_PANEL=false
# 启用 PostHog 性能数据上报
REACT_APP_REPORT_TO_POSTHOG=true

View File

@@ -1,42 +0,0 @@
# ========================================
# 本地测试环境(前后端都在本地)
# ========================================
# 使用方式: npm run start:test
#
# 工作原理:
# 1. concurrently 同时启动前端和后端
# 2. 前端: localhost:3000
# 3. 后端: localhost:5001 (python app_2.py)
# 4. 数据: 本地数据库
#
# 适用场景:
# - 调试后端代码
# - 性能测试
# - 离线开发
# - 数据库调试
# ========================================
# 环境标识
REACT_APP_ENV=test
NODE_ENV=development
# Mock 配置(关闭 MSW
REACT_APP_ENABLE_MOCK=false
# 后端 API 地址(本地后端)
REACT_APP_API_URL=http://localhost:5001
# PostHog 配置(测试环境)
# 留空 = 仅控制台 debug
# 填入 Key = 控制台 + PostHog Cloud 双模式
REACT_APP_POSTHOG_KEY=
REACT_APP_POSTHOG_HOST=https://app.posthog.com
REACT_APP_ENABLE_SESSION_RECORDING=false
# React 构建优化配置
GENERATE_SOURCEMAP=true # 测试环境保留 sourcemap 便于调试
SKIP_PREFLIGHT_CHECK=true
DISABLE_ESLINT_PLUGIN=false # 测试环境开启 ESLint
TSC_COMPILE_ON_ERROR=true
IMAGE_INLINE_SIZE_LIMIT=10000
NODE_OPTIONS=--max_old_space_size=4096

View File

@@ -1,94 +0,0 @@
module.exports = {
root: true,
/* 环境配置 */
env: {
browser: true,
es2021: true,
node: true,
},
/* 扩展配置 */
extends: [
'react-app', // Create React App 默认规则
'react-app/jest', // Jest 测试规则
'eslint:recommended', // ESLint 推荐规则
'plugin:react/recommended', // React 推荐规则
'plugin:react-hooks/recommended', // React Hooks 规则
'plugin:prettier/recommended', // Prettier 集成
],
/* 解析器选项 */
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
ecmaFeatures: {
jsx: true,
},
},
/* 插件 */
plugins: ['react', 'react-hooks', 'prettier'],
/* 规则配置 */
rules: {
// React
'react/react-in-jsx-scope': 'off', // React 17+ 不需要导入 React
'react/prop-types': 'off', // 使用 TypeScript 类型检查,不需要 PropTypes
'react/display-name': 'off', // 允许匿名组件
// 通用
'no-console': ['warn', { allow: ['warn', 'error'] }], // 仅警告 console.log
'no-unused-vars': ['warn', {
argsIgnorePattern: '^_', // 忽略以 _ 开头的未使用参数
varsIgnorePattern: '^_', // 忽略以 _ 开头的未使用变量
}],
'prettier/prettier': ['warn', {}, { usePrettierrc: true }], // 使用项目的 Prettier 配置
},
/* 设置 */
settings: {
react: {
version: 'detect', // 自动检测 React 版本
},
},
/* TypeScript 文件特殊配置 */
// 注意react-app 已包含完整的 @typescript-eslint 配置
// 此处仅覆盖特定规则,不重复加载插件
overrides: [
{
files: ['**/*.ts', '**/*.tsx'],
rules: {
// TypeScript 特定规则覆盖
'@typescript-eslint/no-explicit-any': 'warn',
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-unused-vars': ['warn', {
argsIgnorePattern: '^_',
varsIgnorePattern: '^_',
}],
'@typescript-eslint/no-non-null-assertion': 'warn',
'no-unused-vars': 'off',
},
},
// Company 视图主题硬编码检测
{
files: ['src/views/Company/**/*.{ts,tsx,js,jsx}'],
excludedFiles: ['**/theme/**', '**/*.test.*', '**/*.spec.*'],
plugins: ['local-rules'],
rules: {
// warning 级别:提醒开发者但不阻塞构建
'local-rules/no-hardcoded-fui-colors': 'warn',
},
},
],
/* 忽略文件(与 .eslintignore 等效)*/
ignorePatterns: [
'node_modules/',
'build/',
'dist/',
'*.config.js',
'public/mockServiceWorker.js',
],
};

25
.gitignore vendored
View File

@@ -22,10 +22,6 @@ node_modules/
.env.test.local
.env.production.local
# 部署配置(包含密钥,不提交)
.env.cos
.env.deploy
# 日志
npm-debug.log*
yarn-debug.log*
@@ -39,27 +35,8 @@ pnpm-debug.log*
*.swo
*~
# Claude Code 配置
.claude/settings.local.json
# macOS
.DS_Store
# Windows
Thumbs.db
# Documentation
*.md
!README.md
!CLAUDE.md
# 忽略 docs 目录(开发文档不提交到 Git
docs/
src/assets/img/original-backup/
# 涨停分析静态数据(由 export_zt_data.py 生成,不提交到 Git
public/data/zt/
# 概念涨跌幅静态数据(由 export_concept_data.py 生成,不提交到 Git
public/data/concept/
Thumbs.dbsrc/assets/img/original-backup/

255
CLAUDE.md
View File

@@ -1,208 +1,91 @@
# CLAUDE.md
> **🌐 语言偏好**: 请始终使用中文与用户交流,包括所有解释、分析、文档编写和代码注释。
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
本文件为 Claude Code 提供在此代码库中工作的指导说明。
## Project Overview
---
This is a hybrid React dashboard application with a Flask/Python backend. The project is built on the Argon Dashboard Chakra PRO template and includes financial/trading analysis features.
## 项目概览
### Frontend (React + Chakra UI)
- **Framework**: React 18.3.1 with Chakra UI 2.8.2
- **Styling**: Tailwind CSS + custom Chakra theme
- **Build Tool**: React Scripts with custom Gulp tasks
- **Charts**: ApexCharts, ECharts, and custom visualization components
混合式 React 仪表板,用于金融/交易分析,采用 Flask 后端。基于 Argon Dashboard Chakra PRO 模板构建。
### Backend (Flask/Python)
- **Framework**: Flask with SQLAlchemy ORM
- **Database**: ClickHouse for analytics + MySQL/PostgreSQL
- **Features**: Real-time data processing, trading analysis, user authentication
- **Task Queue**: Celery for background processing
### 技术栈
**前端**
- **核心**: React 18.3.1 + TypeScript 5.9.3(渐进式迁移中)
- **UI**: Chakra UI 2.10.9(主要)+ Ant Design 5.27.4(表格/表单)+ HeroUI 3.0.0-betaAgentChat
- **状态**: Redux Toolkit 2.9.2
- **路由**: React Router v6.30.1 + React.lazy() 代码分割
- **构建**: CRACO 7.1.0 + webpack 5 优化
- **图表**: ECharts 5.6.0、ApexCharts、Recharts、D3、Visx
- **其他**: Framer Motion、FullCalendar、Socket.IO Client、MSW、PostHog
**后端**
- Flask + SQLAlchemy ORM
- ClickHouse分析型+ MySQL事务型+ Redis缓存
- Flask-SocketIOWebSocket+ Celery后台任务
---
## 开发命令
## Development Commands
### Frontend Development
```bash
# 前端开发
npm start # Mock 模式启动(默认)
npm run start:real # 真实后端
npm run build # 生产构建
npm run lint:check # ESLint 检查
npm run type-check # TypeScript 类型检查
# 后端开发
python app.py # Flask 服务器
python simulation_background_processor.py # Celery 后台处理
# 部署
npm run deploy # 部署到生产环境
npm start # Start development server (port 3000, proxies to localhost:5001)
npm run build # Production build with license headers
npm test # Run React test suite
npm run lint:check # Check ESLint rules
npm run lint:fix # Auto-fix ESLint issues
npm run install:clean # Clean install (removes node_modules and package-lock)
```
---
## 架构
### 应用入口流程
```
src/index.js → App.js
├── AppProviders (Redux → Chakra → Ant ConfigProvider → Notification → Auth)
├── AppRoutes (src/routes/index.js)
└── GlobalComponents
```
### 路由保护模式
- `PUBLIC` - 无需认证
- `MODAL` - 未登录显示认证模态框
- `REDIRECT` - 未登录重定向到登录页
### 目录结构速查
| 目录 | 用途 |
|------|------|
| `src/views/` | 页面组件(按功能模块组织) |
| `src/components/` | 可复用 UI 组件 |
| `src/services/` | API 服务层 |
| `src/store/slices/` | Redux 状态 |
| `src/hooks/` | 自定义 Hooks |
| `src/contexts/` | React Context |
| `src/utils/` | 工具函数 |
| `src/constants/` | 常量定义 |
| `src/types/` | TypeScript 类型 |
| `src/theme/` | Chakra UI 主题 |
| `src/routes/` | 路由配置 |
| `src/mocks/` | MSW Mock 数据 |
| `src/layouts/` | 页面布局模板 |
### 路径别名
```
@/ → src/
@components/ → src/components/
@views/ → src/views/
@services/ → src/services/
@store/ → src/store/
@hooks/ → src/hooks/
@utils/ → src/utils/
@types/ → src/types/
@constants/ → src/constants/
```
---
## 开发工作流
### 添加新路由
1. `src/routes/lazy-components.js` - 添加 lazy import
2. `src/routes/routeConfig.js` - 配置路由path、component、protection、layout
### 添加新 API
1. `src/services/` - 创建服务函数
2. `src/mocks/handlers/` - 添加 MSW handlerMock 模式)
### 添加新 Redux Slice
1. `src/store/slices/yourSlice.ts` - 创建 slice
2. `src/store/index.js` - 导入并添加到 store
### 组件组织
- **原子设计**: Atoms → Molecules → Organisms
- **页面专属组件**: 放在 `views/{PageName}/components/`
- **可复用组件**: 放在 `src/components/`
---
## 配置
### 环境文件
- `.env.mock` - Mock 模式默认REACT_APP_ENABLE_MOCK=true
- `.env.development` - 开发模式
- `.env.production` - 生产环境
### MSW Mock
- 激活: `REACT_APP_ENABLE_MOCK=true`
- Handlers: `src/mocks/handlers/`
- 数据: `src/mocks/data/`
---
## TypeScript 接入
**状态**: 渐进式迁移中,支持 JS/TS 混合开发
**类型定义位置**: `src/types/`
- `api.ts` - ApiResponse、PaginatedResponse、ApiError
- `stock.ts` - StockInfo、StockQuote、KLineData
- `user.ts` - UserInfo、AuthInfo
**开发规范**:
- 新代码必须使用 TypeScript
- 避免使用 `any`
- 组件 Props 使用 `interface` 定义
**命令**:
### Backend Development
```bash
npm run type-check # 类型检查
npm run type-check:watch # 监听模式
python app_2.py # Start Flask server (main backend)
python simulation_background_processor.py # Background data processor
```
详细指南参考: [TYPESCRIPT_MIGRATION.md](./TYPESCRIPT_MIGRATION.md)
---
## 后端架构
### 核心文件
- `app.py` - Flask 主应用API + WebSocket
- `simulation_background_processor.py` - Celery 后台任务
- `concept_api.py` - 概念分析独立服务
### 数据库
| 数据库 | 用途 |
|--------|------|
| ClickHouse | 时序数据(股票日线、分钟线) |
| MySQL | 事务数据(用户、订单、持仓) |
| Redis | 缓存 + Celery 消息队列 |
### API 规范
```python
# RESTful 风格
GET /api/stocks # 获取列表
GET /api/stocks/:id # 获取单个
POST /api/stocks # 创建
PUT /api/stocks/:id # 更新
DELETE /api/stocks/:id # 删除
# 统一响应格式
{ "code": 200, "message": "success", "data": {...} }
### Python Dependencies
Install from requirements.txt:
```bash
pip install -r requirements.txt
```
---
## Architecture
## 代码规范
### Frontend Structure
- `src/layouts/` - Main layout components (Admin, Auth, Home)
- `src/views/` - Page components organized by feature (Dashboard, Company, Community, etc.)
- `src/components/` - Reusable UI components (Charts, Cards, Buttons, etc.)
- `src/theme/` - Chakra UI theme customization
- `src/routes.js` - Application routing configuration
- `src/contexts/` - React context providers
- `src/services/` - API service layer
### 命名约定
- 组件/目录: PascalCase (`EventCard`)
- 文件/函数: camelCase (`formatPrice.js`)
- 常量: SCREAMING_SNAKE_CASE (`API_BASE_URL`)
- 路由路径: kebab-case (`/trading-simulation`)
### Backend Structure
- `app_2.py` - Main Flask application with routes and business logic
- `simulation_background_processor.py` - Background data processing service
- `wechat_pay.py` / `wechat_pay_config.py` - Payment integration
- `tdays.csv` - Trading days data
### 最佳实践
- 组件不直接调用 axios通过 service 层
- 使用 `getApiBase()` 获取 API 基础 URL
- 页面超过 500 行考虑拆分
- 复用组件需在 2+ 个页面使用
### Key Integrations
- ClickHouse for high-performance analytics queries
- Celery + Redis for background task processing
- Flask-SocketIO for real-time data updates
- Tencent Cloud services (SMS, etc.)
- WeChat Pay integration
---
## Configuration
## 更新本文档
### Proxy Setup
The React dev server proxies API calls to `http://localhost:5001` (see package.json).
在以下情况下更新此文档:
- 添加新的架构模式
- 做出重要技术决策
- 进行重要代码重构
### Environment Files
- `.env` - Environment variables for both frontend and backend
### Build Process
The build process includes custom Gulp tasks that add Creative Tim license headers to JS, CSS, and HTML files.
### Styling Architecture
- Tailwind CSS for utility classes
- Custom Chakra UI theme with extended color palette
- Component-specific SCSS files in `src/assets/scss/`
## Testing
- React Testing Library setup for frontend components
- Test command: `npm test`
## Deployment
- Build: `npm run build`
- Deploy: `npm run deploy` (builds the project)

13
ISSUE_TEMPLATE.md Normal file
View File

@@ -0,0 +1,13 @@
<!--
IMPORTANT: Please use the following link to create a new issue:
https://www.creative-tim.com/new-issue/argon-dashboard-chakra-pro
**If your issue was not created using the app above, it will be closed immediately.**
-->
<!--
Love Creative Tim? Do you need Angular, React, Vuejs or HTML? You can visit:
👉 https://www.creative-tim.com/bundles
👉 https://www.creative-tim.com
-->

View File

@@ -1 +0,0 @@
17Fo4JhapMw6vtNa

9
MeAgent/.gitignore vendored
View File

@@ -1,9 +0,0 @@
node_modules/**/*
.expo/*
npm-debug.*
package-lock.json
yarn.lock
*.jks
*.p12
*.key
*.mobileprovision

View File

@@ -1 +0,0 @@
{}

View File

@@ -1,101 +0,0 @@
import React, { useCallback, useEffect, useState } from "react";
import * as SplashScreen from "expo-splash-screen";
import * as Font from "expo-font";
import { Asset } from "expo-asset";
import { Block, GalioProvider } from "galio-framework";
import { NavigationContainer } from "@react-navigation/native";
import { Image } from "react-native";
import { Provider } from "react-redux";
import { NativeBaseProvider } from "native-base";
// Keep the splash screen visible while we fetch resources
SplashScreen.preventAutoHideAsync();
// Before rendering any navigation stack
import { enableScreens } from "react-native-screens";
enableScreens();
import Screens from "./navigation/Screens";
import { Images, articles, argonTheme } from "./constants";
import store from "./src/store";
import nativeBaseTheme from "./src/theme";
import { AuthProvider } from "./src/contexts/AuthContext";
// cache app images
const assetImages = [
Images.Onboarding,
Images.LogoOnboarding,
Images.Logo,
Images.Pro,
Images.ArgonLogo,
Images.iOSLogo,
Images.androidLogo,
];
// cache product images
articles.map((article) => assetImages.push(article.image));
function cacheImages(images) {
return images.map((image) => {
if (typeof image === "string") {
return Image.prefetch(image);
} else {
return Asset.fromModule(image).downloadAsync();
}
});
}
export default function App() {
const [appIsReady, setAppIsReady] = useState(false);
useEffect(() => {
async function prepare() {
try {
//Load Resources
await _loadResourcesAsync();
// Pre-load fonts, make any API calls you need to do here
await Font.loadAsync({
"open-sans-regular": require("./assets/font/OpenSans-Regular.ttf"),
"open-sans-light": require("./assets/font/OpenSans-Light.ttf"),
"open-sans-bold": require("./assets/font/OpenSans-Bold.ttf"),
});
} catch (e) {
console.warn(e);
} finally {
// Tell the application to render
setAppIsReady(true);
}
}
prepare();
}, []);
const _loadResourcesAsync = async () => {
return Promise.all([...cacheImages(assetImages)]);
};
const onLayoutRootView = useCallback(async () => {
if (appIsReady) {
await SplashScreen.hideAsync();
}
}, [appIsReady]);
if (!appIsReady) {
return null;
}
return (
<Provider store={store}>
<NativeBaseProvider theme={nativeBaseTheme}>
<AuthProvider>
<NavigationContainer onReady={onLayoutRootView}>
<GalioProvider theme={argonTheme}>
<Block flex>
<Screens />
</Block>
</GalioProvider>
</NavigationContainer>
</AuthProvider>
</NativeBaseProvider>
</Provider>
);
}

View File

@@ -1,6 +0,0 @@
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgLshiAgsJoiJegXNC
55cF2MHBnQCi2AaObrf/qgEavcmgCgYIKoZIzj0DAQehRANCAAQoIgTclBUyCDU2
gFaphqK1I4n1VAkEad144GMKxrdjwfAXbOenkDkUis/6LBEMoOI8tBTcwP1qlY7s
V7zdIhb4
-----END PRIVATE KEY-----

View File

@@ -1,220 +0,0 @@
# [Argon PRO React Native](https://creativetimofficial.github.io/argon-pro-react-native/docs/#) [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social&logo=twitter)](https://twitter.com/intent/tweet?text=Start%20Your%20Development%20With%20A%20Badass%20React%20Native%20app%20inspired%20by%20Argon%20Design%20System.%0Ahttps%3A//demos.creative-tim.com/argon-pro-react-native/)
![version](https://img.shields.io/badge/version-1.6.0-blue.svg) [![GitHub issues open](https://img.shields.io/github/issues/creativetimofficial/ct-argon-pro-react-native.svg?style=flat)](https://github.com/creativetimofficial/ct-argon-pro-react-native/issues?q=is%3Aopen+is%3Aissue) [![GitHub issues closed](https://img.shields.io/github/issues-closed-raw/creativetimofficial/ct-argon-pro-react-native.svg?maxAge=2592000)](https://github.com/creativetimofficial/ct-argon-pro-react-native/issues?q=is%3Aissue+is%3Aclosed)
![Product Gif](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-pro-react-native/argp-rn-thumbnail.jpg)
Argon PRO React Native is a fully coded app template built over [Galio.io](https://galio.io/?ref=creativetim), [React Native](https://facebook.github.io/react-native/?ref=creativetim) and [Expo](https://expo.io/?ref=creativetim) to allow you to create powerful and beautiful e-commerce mobile applications. We have redesigned all the usual components in Galio to make it look like Argon's Design System, minimalistic and easy to use.
Start your development with a badass Design System for React Native inspired by Argon Design System. If you like Argon's Design System, you will love this react native app template! It features a huge number of components and screens built to fit together and look amazing.
### FULLY CODED COMPONENTS
Argon PRO React Native features over 200 variations of components like buttons, inputs, cards, navigations etc, giving you the freedom of choosing and combining. All components can take variations in colour, that you can easily modify inside our theme file.
You will save a lot of time going from prototyping to full-functional code, because all elements are implemented. We wanted the design process to be seamless, so switching from image to the real page is very easy to do.
### Components & Cards
Argon PRO React Native comes packed with a large number of components and cards. Putting together a mobile app has never been easier than matching together different components. From the profile screen to a settings screen, you can easily customise and build your screens. We have created multiple options for you to put together and customise into pixel perfect screens.
View [ all components/cards here](https://demos.creative-tim.com/argon-pro-react-native/index.html#cards).
### Example Screens
If you want to get inspiration or just show something directly to your clients, you can jump start your development with our pre-built example screens. From onboarding screens to profile or discover screens, you will be able to quickly set up the basic structure for your React Native mobile project.
View [all screens here](https://demos.creative-tim.com/argon-pro-react-native/index.html#screens).
Let us know your thoughts below. And good luck with development!
## Table of Contents
* [Versions](#versions)
* [Demo](#demo)
* [Quick Start](#quick-start)
* [Documentation](#documentation)
* [File Structure](#file-structure)
* [OS Support](#os-support)
* [Resources](#resources)
* [Reporting Issues](#reporting-issues)
* [Technical Support or Questions](#technical-support-or-questions)
* [Licensing](#licensing)
* [Useful Links](#useful-links)
## Versions
[<img src="https://github.com/creativetimofficial/public-assets/blob/master/logos/html-logo.jpg?raw=true" width="60" height="60" />](https://www.creative-tim.com/product/argon-design-system)[<img src="https://github.com/creativetimofficial/public-assets/blob/master/logos/vue-logo.jpg?raw=true" width="60" height="60" />](https://www.creative-tim.com/product/vue-argon-design-system)[<img src="https://github.com/creativetimofficial/public-assets/blob/master/logos/react-logo.jpg?raw=true" width="60" height="60" />](https://www.creative-tim.com/product/argon-design-system-react)[<img src="https://github.com/creativetimofficial/public-assets/blob/master/logos/react-native-logo.jpg?raw=true" width="60" height="60" />](https://www.creative-tim.com/product/argon-pro-react-native)[<img src="https://github.com/creativetimofficial/public-assets/blob/master/logos/angular-logo.jpg?raw=true" width="60" height="60" />](https://www.creative-tim.com/product/argon-dashboard-angular)
| HTML | React | Angular |
| --- | --- | --- |
| [![Argon Design System](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-design-system/argon-design-system.jpg)](https://www.creative-tim.com/product/argon-design-system) | [![Argon Design System React](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-design-system-react/argon-design-system-react.jpg)](https://www.creative-tim.com/product/argon-design-system-react) | [![Argon Design System Angular](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-design-system-angular/argon-design-system-angular.jpg)](https://www.creative-tim.com/product/argon-design-system-angular)
## Demo
| Home Screen | Profile Screen | Onboarding Screen | Register Screen |
| --- | --- | --- | --- |
| [![Home Screen](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-react-native/home-screen.png)](https://demos.creative-tim.com/argon-pro-react-native/) | [![Profile Screen](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-react-native/profile-screen.png)](https://demos.creative-tim.com/argon-pro-react-native/) | [![Onboarding Screen](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-pro-react-native/onboarding_screen.PNG)](https://demos.creative-tim.com/argon-pro-react-native/) | [![Register Screen](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-react-native/register-screen.png)](https://demos.creative-tim.com/argon-pro-react-native/) |
- [Start page](https://demos.creative-tim.com/argon-pro-react-native)
- [How to install our product](https://demos.creative-tim.com/argon-pro-react-native/docs/#/install)
[View more](https://demos.creative-tim.com/argon-pro-react-native)
## Quick start
- Buy from [Creative Tim](https://www.creative-tim.com/product/argon-pro-react-native)
## Documentation
The documentation for the Argon PRO React Native is hosted at our [website](https://demos.creative-tim.com/argon-pro-react-native/docs/).
## File Structure
Within the download you'll find the following directories and files:
```
argon-pro-react-native/
├── App.js
├── CHANGELOG.md
├── ISSUE_TEMPLATE.md
├── LICENSE.md
├── README.md
├── app.json
├── assets
│ ├── font
│ ├── imgs
│ └── nucleo\ icons
├── babel.config.js
├── components
│ ├── Button.js
│ ├── Card.js
│ ├── DrawerItem.js
│ ├── Header.js
│ ├── Icon.js
│ ├── Input.js
│ ├── Notification.js
│ ├── Select.js
│ ├── Switch.js
│ ├── Tabs.js
│ └── index.js
├── constants
│ ├── Images.js
│ ├── Theme.js
│ ├── articles.js
│ ├── cart.js
│ ├── categories.js
│ ├── deals.js
│ ├── index.js
│ ├── tabs.js
│ └── utils.js
├── navigation
│ ├── Menu.js
│ └── Screens.js
├── package.json
└── screens
├── About.js
├── Agreement.js
├── Articles.js
├── Beauty.js
├── Cart.js
├── Category.js
├── Chat.js
├── Elements.js
├── Fashion.js
├── Gallery.js
├── Home.js
├── Notifications.js
├── Onboarding.js
├── PersonalNotifications.js
├── Privacy.js
├── Pro.js
├── Product.js
├── Profile.js
├── Register.js
├── Search.js
├── Settings.js
└── SystemNotifications.js
```
## OS Support
At present, we officially aim to support the last two versions of the following operating systems:
[<img src="https://raw.githubusercontent.com/creativetimofficial/ct-material-kit-pro-react-native/master/assets/android-logo.png" width="60" height="60" />](https://www.creative-tim.com/product/material-kit-pro-react-native)[<img src="https://raw.githubusercontent.com/creativetimofficial/ct-material-kit-pro-react-native/master/assets/apple-logo.png" width="60" height="60" />](https://www.creative-tim.com/product/material-kit-pro-react-native)
## Resources
- Demo: <https://demos.creative-tim.com/argon-pro-react-native>
- Download Page: <https://www.creative-tim.com/product/argon-pro-react-native>
- Documentation: <https://demos.creative-tim.com/argon-pro-react-native/docs>
- License Agreement: <https://www.creative-tim.com/license>
- Support: <https://www.creative-tim.com/contact-us>
- Issues: [Github Issues Page](https://github.com/creativetimofficial/ct-argon-pro-react-native/issues)
- [Argon Design System](https://www.creative-tim.com/product/argon-design-system?ref=argonrn-readme) - For Front End Development
- **Dashboards:**
| HTML | React | Vue |
| --- | --- | --- |
| [![Argon HTML](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-dashboard-pro/argon-dashboard-pro.jpg)](https://www.creative-tim.com/product/argon-dashboard-pro) | [![Argon Dashboard React](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-dashboard-pro-react/argon-dashboard-pro-react.jpg)](https://www.creative-tim.com/product/argon-dashboard-pro-react) | [![Argon Dashboard Vue](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/vue-argon-dashboard-pro/vue-argon-dashboard-pro.jpg)](https://www.creative-tim.com/product/vue-argon-dashboard-pro)
| Node.js | Nuxt | Laravel |
| --- | --- | --- |
| [![Argon Dashboard PRO NodeJS](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-dashboard-pro-nodejs/argon-dashboard-pro-nodejs.jpg)](https://www.creative-tim.com/product/argon-dashboard-pro-nodejs) | [![Argon Dashboard PRO Nuxt](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/nuxt-argon-dashboard-pro/nuxt-argon-dashboard-pro.jpg)](https://www.creative-tim.com/product/nuxt-argon-dashboard-pro) | [![Argon Dashboard PRO Laravel](https://raw.githubusercontent.com/creativetimofficial/public-assets/master/argon-dashboard-pro-laravel/argon-dashboard-pro-laravel.jpg)](https://www.creative-tim.com/product/argon-dashboard-pro-laravel)
## Reporting Issues
We use GitHub Issues as the official bug tracker for the Argon PRO React Native. Here are some advices for our users that want to report an issue:
1. Make sure that you are using the latest version of the Argon PRO React Native.
2. Providing us reproducible steps for the issue will shorten the time it takes for it to be fixed.
3. Some issues may be platform specific, so specifying on what platform you encountered the issue might help.
### Technical Support or Questions
If you have questions or need help integrating the product please [contact us](https://www.creative-tim.com/contact-us) instead of opening an issue.
## Licensing
- Copyright 2019 Creative Tim (https://www.creative-tim.com/)
- Creative Tim [license](https://creative-tim.com/license)
## Useful Links
- [Tutorials](https://www.youtube.com/channel/UCVyTG4sCw-rOvB9oHkzZD1w)
- [Affiliate Program](https://www.creative-tim.com/affiliates/new) (earn money)
- [Blog Creative Tim](http://blog.creative-tim.com/)
- [Free Products](https://www.creative-tim.com/bootstrap-themes/free) from Creative Tim
- [Premium Products](https://www.creative-tim.com/bootstrap-themes/premium) from Creative Tim
- [React Products](https://www.creative-tim.com/bootstrap-themes/react-themes) from Creative Tim
- [Angular Products](https://www.creative-tim.com/bootstrap-themes/angular-themes) from Creative Tim
- [VueJS Products](https://www.creative-tim.com/bootstrap-themes/vuejs-themes) from Creative Tim
- [More products](https://www.creative-tim.com/bootstrap-themes) from Creative Tim
- Check our Bundles [here](https://www.creative-tim.com/bundles?ref="argon-github-readme")
### Social Media
Twitter: <https://twitter.com/CreativeTim>
Facebook: <https://www.facebook.com/CreativeTim>
Dribbble: <https://dribbble.com/creativetim>
Google+: <https://plus.google.com/+CreativetimPage>
Instagram: <https://www.instagram.com/CreativeTimOfficial>

View File

@@ -1,51 +0,0 @@
{
"expo": {
"name": "价值前沿",
"slug": "valuefrontier",
"privacy": "public",
"platforms": [
"ios",
"android"
],
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/logo.jpg",
"splash": {
"image": "./assets/logo.jpg",
"resizeMode": "contain",
"backgroundColor": "#000000"
},
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": [
"**/*"
],
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.valuefrontier.meagent",
"deploymentTarget": "15.1",
"infoPlist": {
"UIBackgroundModes": ["remote-notification"]
}
},
"android": {
"package": "com.valuefrontier.meagent",
"adaptiveIcon": {
"foregroundImage": "./assets/logo.jpg",
"backgroundColor": "#000000"
}
},
"plugins": [
[
"expo-notifications",
{
"icon": "./assets/logo.jpg",
"color": "#D4AF37",
"sounds": []
}
]
],
"description": "价值前沿 - 智能投资助手"
}
}

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 778 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M20,0H4C2.3,0,1,1.3,1,3v20c0,0.6,0.4,1,1,1h20c0.6,0,1-0.4,1-1V3C23,1.3,21.7,0,20,0z M12,16 c-3.3,0-6-2.7-6-6c0-0.6,0.4-1,1-1s1,0.4,1,1c0,2.2,1.8,4,4,4s4-1.8,4-4c0-0.6,0.4-1,1-1s1,0.4,1,1C18,13.3,15.3,16,12,16z M20,4H4 C3.4,4,3,3.6,3,3s0.4-1,1-1h16c0.6,0,1,0.4,1,1S20.6,4,20,4z"/></g></svg>

Before

Width:  |  Height:  |  Size: 497 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><path d="M1,10.5A1.5,1.5,0,0,0,2.5,12h7A1.5,1.5,0,0,0,11,10.5V7H1Z" fill="#444444"/> <path d="M9.838,4,8.171.665a.75.75,0,0,0-1.342.67L8.162,4H3.838L5.171,1.335A.75.75,0,0,0,3.829.665L2.162,4H0V6H12V4Z" fill="#444444" data-color="color-2"/></g></svg>

Before

Width:  |  Height:  |  Size: 434 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path d="M20,10V8A8,8,0,0,0,4,8v2a4.441,4.441,0,0,1-1.547,3.193A4.183,4.183,0,0,0,1,16c0,2.5,4.112,4,11,4s11-1.5,11-4a4.183,4.183,0,0,0-1.453-2.807A4.441,4.441,0,0,1,20,10Z" fill="#444444"/> <path data-color="color-2" d="M9.145,21.9a2.992,2.992,0,0,0,5.71,0c-.894.066-1.844.1-2.855.1S10.039,21.968,9.145,21.9Z" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 521 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><rect data-color="color-2" x="4" y="10" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="10" y="10" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="4" y="15" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="10" y="15" width="4" height="3" fill="#444444"/> <rect data-color="color-2" x="16" y="10" width="4" height="3" fill="#444444"/> <path d="M23,3H18V1a1,1,0,0,0-2,0V3H8V1A1,1,0,0,0,6,1V3H1A1,1,0,0,0,0,4V22a1,1,0,0,0,1,1H23a1,1,0,0,0,1-1V4A1,1,0,0,0,23,3ZM22,21H2V7H22Z" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 742 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path data-color="color-2" fill="#444444" d="M13,11h10.949C23.466,5.181,18.819,0.534,13,0.051V11z"/> <path fill="#444444" d="M12.414,13l-8.155,8.155C6.351,22.926,9.051,24,12,24c6.279,0,11.438-4.851,11.949-11H12.414z"/> <path fill="#444444" d="M11,11.586V0.051C4.851,0.562,0,5.721,0,12c0,2.949,1.074,5.649,2.845,7.741L11,11.586z"/></g></svg>

Before

Width:  |  Height:  |  Size: 524 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M18.768,1.36C18.578,1.132,18.297,1,18,1H6C5.703,1,5.422,1.132,5.232,1.36l-5,6 c-0.294,0.353-0.31,0.861-0.039,1.231l11,15C11.382,23.848,11.682,24,12,24s0.618-0.152,0.807-0.409l11-15 c0.271-0.371,0.256-0.878-0.039-1.231L18.768,1.36z M19,9H5V7h14V9z"/></g></svg>

Before

Width:  |  Height:  |  Size: 467 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path d="M8,15A7,7,0,0,1,3.333,2.783l1.334,1.49a5,5,0,1,0,6.666,0l1.333-1.49A7,7,0,0,1,8,15Z" fill="#444444"/> <rect x="7" width="2" height="7" fill="#444444" data-color="color-2"/></g></svg>

Before

Width:  |  Height:  |  Size: 375 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M16,3.6L15.2,2C8.3,4,4.8,8.4,4.8,8.4L1.6,6L0,7.6L4.8,14C8.5,7.1,16,3.6,16,3.6z"/></g></svg>

Before

Width:  |  Height:  |  Size: 299 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><rect x="22" y="11" fill="#444444" width="2" height="6"/> <path data-color="color-2" fill="#444444" d="M13.241,15.73C12.847,15.91,12.43,16,12,16s-0.847-0.09-1.24-0.269L4,12.658V18 c0,2.626,4.024,4,8,4s8-1.374,8-4v-5.341L13.241,15.73z"/> <path fill="#444444" d="M23.414,7.09l-11-5c-0.263-0.119-0.564-0.119-0.827,0l-11,5C0.229,7.252,0,7.607,0,8s0.229,0.748,0.586,0.91 l11,5C11.718,13.97,11.859,14,12,14s0.282-0.03,0.414-0.09l11-5C23.771,8.748,24,8.393,24,8S23.771,7.252,23.414,7.09z"/></g></svg>

Before

Width:  |  Height:  |  Size: 677 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" viewBox="0 0 48 48">
<g class="nc-icon-wrapper" fill="#444444">
<path d="M20 24c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-8-8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 16c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm24-16c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-8 16c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm8-8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-8-8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-8-8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4z"></path>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 639 B

View File

@@ -1,5 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<g class="nc-icon-wrapper" fill="#444444">
<path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 276 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><polygon fill="#444444" points="17,1.382 13,3.382 13,22.618 17,20.618 "/> <polygon data-color="color-2" fill="#444444" points="11,3.382 7,1.382 7,20.618 11,22.618 "/> <path fill="#444444" d="M5,1.434L0.485,4.143C0.185,4.323,0,4.648,0,5v19l5-3.234V1.434z"/> <path data-color="color-2" fill="#444444" d="M23.515,4.143L19,1.434v19.332L24,24V5C24,4.648,23.815,4.323,23.515,4.143z"/></g></svg>

Before

Width:  |  Height:  |  Size: 572 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><path d="M11,9H1a1,1,0,0,0,0,2H11a1,1,0,0,0,0-2Z" fill="#444444"/> <path d="M11,1H1A1,1,0,0,0,1,3H11a1,1,0,0,0,0-2Z" fill="#444444"/> <path d="M11,5H1A1,1,0,0,0,1,7H11a1,1,0,0,0,0-2Z" fill="#444444" data-color="color-2"/></g></svg>

Before

Width:  |  Height:  |  Size: 415 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><polygon points="6 5.882 2.148 2.03 0.074 4.104 6 10.03 11.926 4.104 9.852 2.03 6 5.882" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 299 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><polygon points="7.92 0 1.92 6 7.92 12 10.02 9.9 6.12 6 10.02 2.1 7.92 0" fill="#444444"></polygon></g></svg>

Before

Width:  |  Height:  |  Size: 293 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 12 12" width="12" height="12"><g class="nc-icon-wrapper" fill="#444444"><polygon points="1.98 2.1 5.88 6 1.98 9.9 4.08 12 10.08 6 4.08 0 1.98 2.1" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 285 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M8,2c0.6,0,1.1,0.2,1.5,0.7l0.7,0.7l1.5-1.3L11,1.3C10.2,0.5,9.1,0,8,0C5.8,0,4,1.8,4,4v1.5 C2.8,6.6,2,8.2,2,10c0,3.3,2.7,6,6,6s6-2.7,6-6s-2.7-6-6-6C7.3,4,6.6,4.1,6,4.4V4C6,2.9,6.9,2,8,2z M8,7c1.1,0,2,0.9,2,2 c0,0.7-0.4,1.4-1,1.7V13H7v-2.3c-0.6-0.3-1-1-1-1.7C6,7.9,6.9,7,8,7z"/></g></svg>

Before

Width:  |  Height:  |  Size: 493 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M20.4,6.1c-1.1-0.5-2.2-0.8-3.4-0.8c-1.6,0-3,0.5-4.3,0.9c-0.8,0.3-1.6,0.5-2.2,0.5c-0.4,0-0.6-0.1-0.7-0.3 c0-0.1,0.1-0.6,0.2-0.9c0.3-0.9,0.6-2-0.2-3.1c-0.5-0.6-1.3-1-2.2-1c-0.9,0-1.7,0.3-2.5,0.8C1.9,4.4,0,8.1,0,12c0,6.6,5.4,12,12,12 c5.3,0,10.1-3.6,11.6-8.8C23.7,14.6,25.1,8.4,20.4,6.1z M3,12c0-1.1,0.9-2,2-2s2,0.9,2,2s-0.9,2-2,2S3,13.1,3,12z M7.5,19 c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S8.6,19,7.5,19z M13,21c-1.1,0-2-0.9-2-2s0.9-2,2-2s2,0.9,2,2S14.1,21,13,21z M17,15 c-1.7,0-3-1.3-3-3s1.3-3,3-3s3,1.3,3,3S18.7,15,17,15z"/></g></svg>

Before

Width:  |  Height:  |  Size: 741 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path data-color="color-2" fill="#444444" d="M10,8H8v2H6V8H4V6h2V4h2v2h2V8z"/> <path fill="#444444" d="M7,14c-3.86,0-7-3.14-7-7s3.14-7,7-7s7,3.14,7,7S10.86,14,7,14z M7,2C4.243,2,2,4.243,2,7s2.243,5,5,5 s5-2.243,5-5S9.757,2,7,2z"/> <path data-color="color-2" fill="#444444" d="M15.707,14.293L13.314,11.9c-0.411,0.529-0.885,1.003-1.414,1.414l2.393,2.393 C14.488,15.902,14.744,16,15,16s0.512-0.098,0.707-0.293C16.098,15.316,16.098,14.684,15.707,14.293z"/> </g></svg>

Before

Width:  |  Height:  |  Size: 647 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M13.9,0.5C13.7,0.2,13.4,0,13,0H3C2.6,0,2.3,0.2,2.1,0.5C0,4.5,0,4.7,0,5c0,1.1,0.9,2,2,2v8c0,0.6,0.4,1,1,1 h10c0.6,0,1-0.4,1-1V7c1.1,0,2-0.9,2-2C16,4.7,16,4.5,13.9,0.5z M10,14v-4H6v4H4V6.7C4.3,6.9,4.6,7,5,7c0.6,0,1.1-0.3,1.5-0.7 C6.9,6.7,7.4,7,8,7s1.1-0.3,1.5-0.7C9.9,6.7,10.4,7,11,7c0.4,0,0.7-0.1,1-0.3V14H10z"></path></g></svg>

Before

Width:  |  Height:  |  Size: 535 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path d="M23.58.424A1,1,0,0,0,22.819.13C8.791.862,3.609,13.358,3.559,13.484a1,1,0,0,0,.22,1.08l5.657,5.657a1,1,0,0,0,1.085.218c.125-.051,12.554-5.291,13.348-19.253A1,1,0,0,0,23.58.424Zm-8.166,10.99a2,2,0,1,1,0-2.828A2,2,0,0,1,15.414,11.414Z" fill="#444444"/> <path data-color="color-2" d="M1.113,18.844a2.844,2.844,0,1,1,4.022,4.022C4.024,23.977,0,24,0,24S0,19.954,1.113,18.844Z" fill="#444444"/> <path id="color-2" d="M10.357,2.341A8.911,8.911,0,0,0,2.522,4.825a9.084,9.084,0,0,0-1.384,1.8,1,1,0,0,0,.155,1.215l1.989,1.99A26.623,26.623,0,0,1,10.357,2.341Z" fill="#444444"/> <path id="color-3" d="M21.659,13.643a8.911,8.911,0,0,1-2.484,7.835,9.084,9.084,0,0,1-1.8,1.384,1,1,0,0,1-1.215-.155l-1.99-1.989A26.623,26.623,0,0,0,21.659,13.643Z" fill="#444444"/></g></svg>

Before

Width:  |  Height:  |  Size: 949 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M8,0C3.6,0,0,3.6,0,8c0,4.4,3.6,8,8,8s8-3.6,8-8C16,3.6,12.4,0,8,0z M8,10c-1.1,0-2-0.9-2-2c0-1.1,0.9-2,2-2 s2,0.9,2,2C10,9.1,9.1,10,8,10z M8,2c0.9,0,1.8,0.2,2.6,0.6L9.044,4.156c-0.761-0.207-1.327-0.207-2.089,0L5.4,2.6 C6.2,2.2,7.1,2,8,2z M2,8c0-0.9,0.2-1.8,0.6-2.6l1.556,1.556c-0.207,0.761-0.207,1.327,0,2.089L2.6,10.6C2.2,9.8,2,8.9,2,8z M8,14 c-0.9,0-1.8-0.2-2.6-0.6l1.556-1.556c0.761,0.207,1.327,0.207,2.089,0L10.6,13.4C9.8,13.8,8.9,14,8,14z M13.4,10.6l-1.556-1.556 c0.207-0.761,0.207-1.327,0-2.089L13.4,5.4C13.8,6.2,14,7.1,14,8C14,8.9,13.8,9.8,13.4,10.6z"/></g></svg>

Before

Width:  |  Height:  |  Size: 776 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 24 24" width="24" height="24"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M6.5,11h11c3,0,5.5-2.5,5.5-5.5S20.5,0,17.5,0h-11C3.5,0,1,2.5,1,5.5S3.5,11,6.5,11z M6.5,2 C8.4,2,10,3.6,10,5.5S8.4,9,6.5,9S3,7.4,3,5.5S4.6,2,6.5,2z"></path> <path data-color="color-2" fill="#444444" d="M17.5,13h-11c-3,0-5.5,2.5-5.5,5.5S3.5,24,6.5,24h11c3,0,5.5-2.5,5.5-5.5S20.5,13,17.5,13z M17.5,22c-1.9,0-3.5-1.6-3.5-3.5s1.6-3.5,3.5-3.5s3.5,1.6,3.5,3.5S19.4,22,17.5,22z"></path></g></svg>

Before

Width:  |  Height:  |  Size: 596 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 16" width="16" height="16"><g class="nc-icon-wrapper" fill="#444444"><path fill="#444444" d="M11,12H1c-0.553,0-1-0.447-1-1V1c0-0.552,0.447-1,1-1h10c0.553,0,1,0.448,1,1v10C12,11.553,11.553,12,11,12z "></path> <path data-color="color-2" fill="#444444" d="M15,16H4v-2h10V4h2v11C16,15.553,15.553,16,15,16z"></path></g></svg>

Before

Width:  |  Height:  |  Size: 435 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

View File

@@ -1,15 +0,0 @@
module.exports = function (api) {
api.cache(true);
return {
presets: ["babel-preset-expo"],
plugins: [
[
"module-resolver",
{
extensions: [".tsx", ".ts", ".js", ".json"],
},
],
"react-native-reanimated/plugin",
],
};
};

View File

@@ -1,57 +0,0 @@
import React from "react";
import { StyleSheet } from "react-native";
import PropTypes from 'prop-types';
import { Button } from "galio-framework";
import argonTheme from "../constants/Theme";
class ArButton extends React.Component {
render() {
const { small, shadowless, children, color, style, fontSize, ...props } = this.props;
const colorStyle = color && argonTheme.COLORS[color.toUpperCase()];
const buttonStyles = [
small && styles.smallButton,
color && { backgroundColor: colorStyle },
!shadowless && styles.shadow,
{...style}
];
return (
<Button
style={buttonStyles}
shadowless
textStyle={{ fontSize: fontSize || 12, fontWeight: '700' }}
{...props}
>
{children}
</Button>
);
}
}
ArButton.propTypes = {
small: PropTypes.bool,
shadowless: PropTypes.bool,
color: PropTypes.oneOfType([
PropTypes.string,
PropTypes.oneOf(['default', 'primary', 'secondary', 'info', 'error', 'success', 'warning'])
])
}
const styles = StyleSheet.create({
smallButton: {
width: 75,
height: 28
},
shadow: {
shadowColor: 'black',
shadowOffset: { width: 0, height: 4 },
shadowRadius: 4,
shadowOpacity: 0.1,
elevation: 2,
},
});
export default ArButton;

View File

@@ -1,141 +0,0 @@
import React from "react";
import { useNavigation } from '@react-navigation/native';
import PropTypes from "prop-types";
import {
StyleSheet,
Image,
TouchableWithoutFeedback
} from "react-native";
import { Block, Text, theme } from "galio-framework";
import { argonTheme } from "../constants";
const Card = ({
item,
horizontal,
full,
style,
ctaColor,
imageStyle,
ctaRight
}) => {
const navigation = useNavigation();
const imageStyles = [
full ? styles.fullImage : styles.horizontalImage,
imageStyle
];
const cardContainer = [styles.card, styles.shadow, style];
const imgContainer = [
styles.imageContainer,
horizontal ? styles.horizontalStyles : styles.verticalStyles,
styles.shadow
];
return (
<Block row={horizontal} card flex style={cardContainer}>
<TouchableWithoutFeedback
onPress={() => navigation.navigate("Product", { product: item })}
>
<Block flex style={imgContainer}>
<Image source={{ uri: item.image }} style={imageStyles} />
</Block>
</TouchableWithoutFeedback>
<TouchableWithoutFeedback
onPress={() => navigation.navigate("Product", { product: item })}
>
<Block flex space="between" style={styles.cardDescription}>
<Block flex>
<Text
style={{ fontFamily: 'open-sans-regular' }}
size={14}
style={styles.cardTitle}
color={argonTheme.COLORS.TEXT}
>
{item.title}
</Text>
{item.body ? (
<Block flex left>
<Text style={{ fontFamily: 'open-sans-regular' }} size={12} color={argonTheme.COLORS.TEXT}>
{item.body}
</Text>
</Block>
) : (
<Block />
)}
</Block>
<Block right={ctaRight ? true : false}>
<Text
style={{ fontFamily: 'open-sans-bold' }}
size={12}
muted={!ctaColor}
color={ctaColor || argonTheme.COLORS.ACTIVE}
bold
>
{item.cta}
</Text>
</Block>
</Block>
</TouchableWithoutFeedback>
</Block>
);
};
Card.propTypes = {
item: PropTypes.object,
horizontal: PropTypes.bool,
full: PropTypes.bool,
ctaColor: PropTypes.string,
imageStyle: PropTypes.any,
ctaRight: PropTypes.bool
};
const styles = StyleSheet.create({
card: {
backgroundColor: theme.COLORS.WHITE,
marginVertical: theme.SIZES.BASE,
borderWidth: 0,
minHeight: 114,
marginBottom: 4,
},
cardTitle: {
// flex: 1,
// flexWrap: "wrap",
paddingBottom: 6
},
cardDescription: {
padding: theme.SIZES.BASE / 2
},
imageContainer: {
borderRadius: 3,
elevation: 1,
overflow: "hidden"
},
image: {
// borderRadius: 3,
},
horizontalImage: {
height: 122,
width: "auto"
},
horizontalStyles: {
borderTopRightRadius: 0,
borderBottomRightRadius: 0
},
verticalStyles: {
borderBottomRightRadius: 0,
borderBottomLeftRadius: 0
},
fullImage: {
height: 215
},
shadow: {
shadowColor: "#8898AA",
shadowOffset: { width: 0, height: 1 },
shadowRadius: 6,
shadowOpacity: 0.1,
elevation: 2
}
});
export default Card;

View File

@@ -1,143 +0,0 @@
import React from "react";
import { StyleSheet, TouchableOpacity, Linking } from "react-native";
import { Block, Text, theme } from "galio-framework";
import Icon from "./Icon";
import argonTheme from "../constants/Theme";
class DrawerItem extends React.Component {
renderIcon = () => {
const { title, focused } = this.props;
switch (title) {
case "Home":
return (
<Icon
name="shop"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.PRIMARY}
/>
);
case "Elements":
return (
<Icon
name="map-big"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.ERROR}
/>
);
case "Articles":
return (
<Icon
name="spaceship"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.PRIMARY}
/>
);
case "Profile":
return (
<Icon
name="chart-pie-35"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.WARNING}
/>
);
case "Account":
return (
<Icon
name="calendar-date"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.INFO}
/>
);
case "Settings":
return (
<Icon
name="calendar-date"
family="ArgonExtra"
size={14}
color={focused ? "white" : argonTheme.COLORS.DEFAULT}
/>
);
case "Getting Started":
return (
<Icon
name="spaceship"
family="ArgonExtra"
size={14}
color={focused ? "white" : "rgba(0,0,0,0.5)"}
/>
);
case "Log out":
return <Icon />;
default:
return null;
}
};
render() {
const { focused, title, navigation, navigateTo } = this.props;
const containerStyles = [
styles.defaultStyle,
focused ? [styles.activeStyle, styles.shadow] : null,
];
return (
<TouchableOpacity
style={{ height: 60 }}
onPress={() =>
title == "Getting Started"
? Linking.openURL(
"https://demos.creative-tim.com/argon-pro-react-native/docs/"
).catch((err) => console.error("An error occurred", err))
: navigation.navigate(navigateTo)
}
>
<Block flex row style={containerStyles}>
<Block middle flex={0.1} style={{ marginRight: 5 }}>
{this.renderIcon()}
</Block>
<Block row center flex={0.9}>
<Text
style={{ fontFamily: "open-sans-regular" }}
size={15}
bold={focused ? true : false}
color={focused ? "white" : "rgba(0,0,0,0.5)"}
>
{title}
</Text>
</Block>
</Block>
</TouchableOpacity>
);
}
}
const styles = StyleSheet.create({
defaultStyle: {
paddingVertical: 16,
paddingHorizontal: 16,
marginBottom: 2,
},
activeStyle: {
backgroundColor: argonTheme.COLORS.ACTIVE,
borderRadius: 4,
},
shadow: {
shadowColor: theme.COLORS.BLACK,
shadowOffset: {
width: 0,
height: 2,
},
shadowRadius: 8,
shadowOpacity: 0.1,
},
});
export default DrawerItem;

View File

@@ -1,255 +0,0 @@
import React from 'react';
import { TouchableOpacity, StyleSheet, Platform, Dimensions, Keyboard } from 'react-native';
import { Button, Block, NavBar, Text, theme } from 'galio-framework';
import { CommonActions } from '@react-navigation/native';
import Icon from './Icon';
import Input from './Input';
import Tabs from './Tabs';
import argonTheme from '../constants/Theme';
const { height, width } = Dimensions.get('window');
const iPhoneX = () => Platform.OS === 'ios' && (height === 812 || width === 812 || height === 896 || width === 896);
const BellButton = ({isWhite, style, navigation}) => (
<TouchableOpacity style={[styles.button, style]} onPress={() => navigation.navigate('Notifications')}>
<Icon
family="ArgonExtra"
size={16}
name="bell"
color={argonTheme.COLORS[isWhite ? 'WHITE' : 'ICON']}
/>
<Block middle style={styles.notify} />
</TouchableOpacity>
);
const BasketButton = ({isWhite, style, navigation}) => (
<TouchableOpacity style={[styles.button, style]} onPress={() => navigation.navigate('Cart')}>
<Icon
family="ArgonExtra"
size={16}
name="basket"
color={argonTheme.COLORS[isWhite ? 'WHITE' : 'ICON']}
/>
</TouchableOpacity>
);
const SearchButton = ({isWhite, style, navigation}) => (
<TouchableOpacity style={[styles.button, style]} onPress={() => navigation.navigate('Search')}>
<Icon
size={16}
family="Galio"
name="search-zoom-in"
color={theme.COLORS[isWhite ? 'WHITE' : 'ICON']}
/>
</TouchableOpacity>
);
class Header extends React.Component {
handleLeftPress = () => {
const { back, navigation, scene } = this.props;
return (back ? navigation.dispatch(CommonActions.goBack()) : navigation.openDrawer());
}
renderRight = () => {
const { white, title, navigation } = this.props;
// const { routeName } = navigation.state;
if (title === 'Title') {
return [
<BellButton key='chat-title' navigation={navigation} isWhite={white} />,
<BasketButton key='basket-title' navigation={navigation} isWhite={white} />
]
}
switch (title) {
case 'Home':
case 'Deals':
case 'Categories':
case 'Category':
case 'Profile':
case 'Product':
case 'Search':
case 'Settings':
return ([
<BellButton key='chat-categories' navigation={navigation} isWhite={white}/>,
<BasketButton key='basket-categories' navigation={navigation} isWhite={white}/>
]);
default:
break;
}
}
renderSearch = () => {
const { navigation } = this.props;
return (
<Input
right
color="black"
style={styles.search}
placeholder="What are you looking for?"
placeholderTextColor={'#8898AA'}
onFocus={() => {Keyboard.dismiss(); navigation.navigate('Search');}}
iconContent={<Icon size={16} color={theme.COLORS.MUTED} name="search-zoom-in" family="ArgonExtra" />}
/>
);
}
renderOptions = () => {
const { navigation, optionLeft, optionRight } = this.props;
return (
<Block row style={styles.options}>
<Button shadowless style={[styles.tab, styles.divider]} onPress={() => navigation.navigate('Beauty')}>
<Block row middle>
<Icon name="diamond" family="ArgonExtra" style={{ paddingRight: 8 }} color={argonTheme.COLORS.ICON} />
<Text style={{ fontFamily: 'open-sans-regular' }} size={16} style={styles.tabTitle}>{optionLeft || 'Beauty'}</Text>
</Block>
</Button>
<Button shadowless style={styles.tab} onPress={() => navigation.navigate('Fashion')}>
<Block row middle>
<Icon size={16} name="bag-17" family="ArgonExtra" style={{ paddingRight: 8 }} color={argonTheme.COLORS.ICON}/>
<Text style={{ fontFamily: 'open-sans-regular' }} size={16} style={styles.tabTitle}>{optionRight || 'Fashion'}</Text>
</Block>
</Button>
</Block>
);
}
renderTabs = () => {
const { tabs, tabIndex, navigation } = this.props;
const defaultTab = tabs && tabs[0] && tabs[0].id;
if (!tabs) return null;
return (
<Tabs
data={tabs || []}
initialIndex={tabIndex || defaultTab}
onChange={id => navigation.setParams({ tabId: id })} />
)
}
renderHeader = () => {
const { search, options, tabs } = this.props;
if (search || tabs || options) {
return (
<Block center>
{search ? this.renderSearch() : null}
{options ? this.renderOptions() : null}
{tabs ? this.renderTabs() : null}
</Block>
);
}
}
render() {
const { back, title, white, transparent, bgColor, iconColor, titleColor, navigation, ...props } = this.props;
// const { routeName } = navigation.state;
const noShadow = ['Search', 'Categories', 'Deals', 'Pro', 'Profile'].includes(title);
const headerStyles = [
!noShadow ? styles.shadow : null,
transparent ? { backgroundColor: 'rgba(0,0,0,0)' } : null,
];
const navbarStyles = [
styles.navbar,
bgColor && { backgroundColor: bgColor }
];
return (
<Block style={headerStyles}>
<NavBar
back={false}
title={title}
style={navbarStyles}
transparent={transparent}
right={this.renderRight()}
rightStyle={{ alignItems: 'center' }}
onLeftPress={this.handleLeftPress}
left={
<Icon
name={back ? 'chevron-left' : "menu"} family="entypo"
// name={back ? 'nav-left' : "menu-8"} family="ArgonExtra"
size={back ? 20 : 20} onPress={this.handleLeftPress}
color={iconColor || (white ? argonTheme.COLORS.WHITE : argonTheme.COLORS.ICON)}
style={{ marginTop: 2 }}
/>
}
leftStyle={{ paddingVertical: 12, flex: 0.2 }}
titleStyle={[
styles.title,
{ color: argonTheme.COLORS[white ? 'WHITE' : 'HEADER'] },
titleColor && { color: titleColor }
]}
{...props}
/>
{this.renderHeader()}
</Block>
);
}
}
const styles = StyleSheet.create({
button: {
padding: 12,
position: 'relative',
},
title: {
width: '100%',
fontSize: 16,
fontWeight: 'bold',
},
navbar: {
paddingVertical: 0,
paddingBottom: theme.SIZES.BASE * 1.5,
paddingTop: iPhoneX ? theme.SIZES.BASE * 4 : theme.SIZES.BASE,
zIndex: 5,
},
shadow: {
backgroundColor: theme.COLORS.WHITE,
shadowColor: 'black',
shadowOffset: { width: 0, height: 2 },
shadowRadius: 6,
shadowOpacity: 0.2,
elevation: 3,
},
notify: {
backgroundColor: argonTheme.COLORS.LABEL,
borderRadius: 4,
height: theme.SIZES.BASE / 2,
width: theme.SIZES.BASE / 2,
position: 'absolute',
top: 9,
right: 12,
},
header: {
backgroundColor: theme.COLORS.WHITE,
},
divider: {
borderRightWidth: 0.3,
borderRightColor: theme.COLORS.ICON,
},
search: {
height: 48,
width: width - 32,
marginHorizontal: 16,
borderWidth: 1,
borderRadius: 3,
borderColor: argonTheme.COLORS.BORDER
},
options: {
marginBottom: 24,
marginTop: 10,
elevation: 4,
},
tab: {
backgroundColor: theme.COLORS.TRANSPARENT,
width: width * 0.35,
borderRadius: 0,
borderWidth: 0,
height: 24,
elevation: 0,
},
tabTitle: {
lineHeight: 19,
fontWeight: '400',
color: argonTheme.COLORS.HEADER
},
});
export default Header;

View File

@@ -1,34 +0,0 @@
import React from 'react';
import * as Font from 'expo-font';
import { createIconSetFromIcoMoon } from '@expo/vector-icons';
import { Icon } from 'galio-framework';
import argonConfig from '../assets/config/argon.json';
const ArgonExtra = require('../assets/font/argon.ttf');
const IconArgonExtra = createIconSetFromIcoMoon(argonConfig, 'ArgonExtra');
class IconExtra extends React.Component {
state = {
fontLoaded: false,
}
async componentDidMount() {
await Font.loadAsync({ ArgonExtra: ArgonExtra });
this.setState({ fontLoaded: true });
}
render() {
const { name, family, ...rest } = this.props;
if (name && family && this.state.fontLoaded) {
if (family === 'ArgonExtra') {
return <IconArgonExtra name={name} family={family} {...rest} />;
}
return <Icon name={name} family={family} {...rest} />;
}
return null;
}
}
export default IconExtra;

View File

@@ -1,76 +0,0 @@
import React from "react";
import { StyleSheet } from "react-native";
import PropTypes from 'prop-types';
import { Input } from "galio-framework";
import Icon from './Icon';
import { argonTheme } from "../constants";
class ArInput extends React.Component {
render() {
const { shadowless, success, error } = this.props;
const inputStyles = [
styles.input,
!shadowless && styles.shadow,
success && styles.success,
error && styles.error,
{...this.props.style}
];
return (
<Input
placeholder="write something here"
placeholderTextColor={argonTheme.COLORS.MUTED}
style={inputStyles}
color={argonTheme.COLORS.HEADER}
iconContent={
<Icon
size={14}
color={argonTheme.COLORS.ICON}
name="link"
family="AntDesign"
/>
}
{...this.props}
/>
);
}
}
ArInput.defaultProps = {
shadowless: false,
success: false,
error: false
};
ArInput.propTypes = {
shadowless: PropTypes.bool,
success: PropTypes.bool,
error: PropTypes.bool
}
const styles = StyleSheet.create({
input: {
borderRadius: 4,
borderColor: argonTheme.COLORS.BORDER,
height: 44,
backgroundColor: '#FFFFFF'
},
success: {
borderColor: argonTheme.COLORS.INPUT_SUCCESS,
},
error: {
borderColor: argonTheme.COLORS.INPUT_ERROR,
},
shadow: {
shadowColor: argonTheme.COLORS.BLACK,
shadowOffset: { width: 0, height: 0.5 },
shadowRadius: 1,
shadowOpacity: 0.13,
elevation: 2,
}
});
export default ArInput;

View File

@@ -1,157 +0,0 @@
import React from "react";
import { StyleSheet, TouchableWithoutFeedback } from "react-native";
import PropTypes from "prop-types";
import { Block, Text } from "galio-framework";
import Icon from "./Icon";
import { argonTheme } from "../constants";
export default class Notification extends React.Component {
render() {
const {
body,
color,
iconColor,
iconFamily,
iconName,
iconSize,
onPress,
style,
system,
time,
title,
transparent
} = this.props;
const iconContainer = [
styles.iconContainer,
{ backgroundColor: color || argonTheme.COLORS.PRIMARY },
system && { width: 34, height: 34 },
!system && styles.iconShadow
];
const container = [
styles.card,
!transparent && { backgroundColor: argonTheme.COLORS.WHITE },
!transparent && styles.cardShadow,
system && { height: 78 },
style
];
return (
<Block style={container} middle>
<TouchableWithoutFeedback onPress={onPress}>
<Block row style={{ width: "95%" }}>
<Block top flex={system ? 0.12 : 0.2} middle>
<Block middle style={iconContainer}>
<Icon
name={iconName}
family={iconFamily}
size={iconSize || system ? 16 : 22}
color={
iconColor || system ? argonTheme.COLORS.DEFAULT : argonTheme.COLORS.WHITE
}
/>
</Block>
</Block>
<Block flex style={{ paddingRight: 3, paddingLeft: 12 }}>
{system && (
<Block row space="between" style={{ height: 18 }}>
<Text color={argonTheme.COLORS.MUTED} style={{ fontFamily: 'open-sans-bold' }} size={13}>{title}</Text>
<Block row style={{ marginTop: 3 }}>
<Icon
family="material-community"
name="clock"
size={12}
color={argonTheme.COLORS.MUTED}
/>
<Text
color={argonTheme.COLORS.MUTED}
style={{
fontFamily: "open-sans-regular",
marginLeft: 3,
marginTop: -3
}}
size={12}
>
{time}
</Text>
</Block>
</Block>
)}
<Text
color={argonTheme.COLORS.TEXT}
size={system ? 13 : 14}
style={{ fontFamily: system ? "open-sans-bold" : "open-sans-regular" }}
>
{body}
</Text>
</Block>
{!system && (
<Block row flex={0.2} style={{ marginTop: 3 }}>
<Icon
family="material-community"
name="clock"
size={12}
color={argonTheme.COLORS.MUTED}
/>
<Text
color={argonTheme.COLORS.MUTED}
style={{
fontFamily: "open-sans-regular",
marginLeft: 3,
marginTop: -2
}}
size={12}
>
{time}
</Text>
</Block>
)}
</Block>
</TouchableWithoutFeedback>
</Block>
);
}
}
Notification.propTypes = {
body: PropTypes.string,
color: PropTypes.string,
iconColor: PropTypes.string,
iconFamily: PropTypes.string,
iconName: PropTypes.string,
iconSize: PropTypes.number,
onPress: PropTypes.func,
style: PropTypes.object,
system: PropTypes.bool,
time: PropTypes.string,
title: PropTypes.string,
transparent: PropTypes.bool,
};
const styles = StyleSheet.create({
iconContainer: {
width: 46,
height: 46,
borderRadius: 23,
marginTop: 2
},
iconShadow: {
shadowColor: "black",
shadowOffset: { width: 0, height: 4 },
shadowRadius: 4,
shadowOpacity: 0.1,
elevation: 2
},
card: {
zIndex: 2,
height: 127,
borderRadius: 6
},
cardShadow: {
shadowColor: argonTheme.COLORS.BLACK,
shadowOffset: { width: 0, height: 2 },
shadowRadius: 4,
shadowOpacity: 0.1,
elevation: 2
}
});

View File

@@ -1,85 +0,0 @@
import React from 'react';
import { StyleSheet } from 'react-native';
import PropTypes from 'prop-types';
import ModalDropdown from 'react-native-modal-dropdown';
import { Block, Text } from 'galio-framework';
import Icon from './Icon';
import { argonTheme } from '../constants';
class DropDown extends React.Component {
state = {
value: 1,
}
handleOnSelect = (index, value) => {
const { onSelect } = this.props;
this.setState({ value: value });
onSelect && onSelect(index, value);
}
render() {
const { onSelect, iconName, iconFamily, iconSize, iconColor, color, textStyle, style, ...props } = this.props;
const modalStyles = [
styles.qty,
color && { backgroundColor: color },
style
];
const textStyles = [
styles.text,
textStyle
];
return (
<ModalDropdown
style={modalStyles}
onSelect={this.handleOnSelect}
dropdownStyle={styles.dropdown}
dropdownTextStyle={{paddingLeft:16, fontSize:12}}
{...props}>
<Block flex row middle space="between">
<Text size={12} style={textStyles}>{this.state.value}</Text>
<Icon name={iconName || "nav-down"} family={iconFamily || "ArgonExtra"} size={iconSize || 10} color={iconColor || argonTheme.COLORS.WHITE} />
</Block>
</ModalDropdown>
)
}
}
DropDown.propTypes = {
onSelect: PropTypes.func,
iconName: PropTypes.string,
iconFamily: PropTypes.string,
iconSize: PropTypes.number,
color: PropTypes.string,
textStyle: PropTypes.any,
};
const styles = StyleSheet.create({
qty: {
width: 100,
backgroundColor: argonTheme.COLORS.DEFAULT,
paddingHorizontal: 16,
paddingTop: 10,
paddingBottom:9.5,
borderRadius: 4,
shadowColor: "rgba(0, 0, 0, 0.1)",
shadowOffset: { width: 0, height: 2 },
shadowRadius: 4,
shadowOpacity: 1,
},
text: {
color: argonTheme.COLORS.WHITE,
fontWeight: '600'
},
dropdown: {
marginTop: 8,
marginLeft: -16,
width: 100,
},
});
export default DropDown;

View File

@@ -1,24 +0,0 @@
import React from 'react';
import { Switch, Platform } from 'react-native';
import argonTheme from '../constants/Theme';
class MkSwitch extends React.Component {
render() {
const { value, ...props } = this.props;
const thumbColor = Platform.OS === 'ios' ? null :
Platform.OS === 'android' && value ? argonTheme.COLORS.SWITCH_ON : argonTheme.COLORS.SWITCH_OFF;
return (
<Switch
value={value}
thumbColor={thumbColor}
ios_backgroundColor={argonTheme.COLORS.SWITCH_OFF}
trackColor={{ false: argonTheme.COLORS.SWITCH_ON, true: argonTheme.COLORS.SWITCH_ON }}
{...props}
/>
);
}
}
export default MkSwitch;

View File

@@ -1,162 +0,0 @@
import React from 'react';
import { StyleSheet, Dimensions, FlatList, Animated } from 'react-native';
import { Block, theme } from 'galio-framework';
const { width } = Dimensions.get('screen');
import argonTheme from '../constants/Theme';
const defaultMenu = [
{ id: 'music', title: 'Music', },
{ id: 'beauty', title: 'Beauty', },
{ id: 'fashion', title: 'Fashion', },
{ id: 'motocycles', title: 'Motocycles', },
];
export default class Tabs extends React.Component {
static defaultProps = {
data: defaultMenu,
initialIndex: null,
}
state = {
active: null,
}
componentDidMount() {
const { initialIndex } = this.props;
initialIndex && this.selectMenu(initialIndex);
}
animatedValue = new Animated.Value(1);
animate() {
this.animatedValue.setValue(0);
Animated.timing(this.animatedValue, {
toValue: 1,
duration: 300,
useNativeDriver: false, // color not supported
}).start()
}
menuRef = React.createRef();
onScrollToIndexFailed = () => {
this.menuRef.current.scrollToIndex({
index: 0,
viewPosition: 0.5
});
}
selectMenu = (id) => {
this.setState({ active: id });
this.menuRef.current.scrollToIndex({
index: this.props.data.findIndex(item => item.id === id),
viewPosition: 0.5
});
this.animate();
this.props.onChange && this.props.onChange(id);
}
renderItem = (item) => {
const isActive = this.state.active === item.id;
const textColor = this.animatedValue.interpolate({
inputRange: [0, 1],
outputRange: [argonTheme.COLORS.TEXT, isActive ? argonTheme.COLORS.WHITE : argonTheme.COLORS.TEXT],
extrapolate: 'clamp',
});
const containerStyles = [
styles.titleContainer,
!isActive && { backgroundColor: argonTheme.COLORS.SECONDARY },
isActive && styles.containerShadow
];
return (
<Block style={containerStyles}>
<Animated.Text
style={[
styles.menuTitle,
{ color: textColor },
{ fontFamily: 'open-sans-bold' },
]}
onPress={() => this.selectMenu(item.id)}>
{item.title}
</Animated.Text>
</Block>
)
}
renderMenu = () => {
const { data, ...props } = this.props;
return (
<FlatList
{...props}
data={data}
horizontal={true}
ref={this.menuRef}
extraData={this.state}
keyExtractor={(item) => item.id}
showsHorizontalScrollIndicator={false}
onScrollToIndexFailed={this.onScrollToIndexFailed}
renderItem={({ item }) => this.renderItem(item)}
contentContainerStyle={styles.menu}
/>
)
}
render() {
return (
<Block style={styles.container}>
{this.renderMenu()}
</Block>
)
}
}
const styles = StyleSheet.create({
container: {
width: width,
backgroundColor: theme.COLORS.WHITE,
zIndex: 2,
},
shadow: {
shadowColor: theme.COLORS.BLACK,
shadowOffset: { width: 0, height: 2 },
shadowRadius: 8,
shadowOpacity: 0.2,
elevation: 4,
},
menu: {
paddingHorizontal: theme.SIZES.BASE * 2.5,
paddingTop: 8,
paddingBottom: 16,
},
titleContainer: {
alignItems: 'center',
backgroundColor: argonTheme.COLORS.ACTIVE,
borderRadius: 4,
marginRight: 9,
paddingHorizontal: 10,
paddingVertical: 3,
},
containerShadow: {
shadowColor: 'black',
shadowOffset: { width: 0, height: 2 },
shadowRadius: 4,
shadowOpacity: 0.1,
elevation: 1,
},
menuTitle: {
fontWeight: '600',
fontSize: 14,
// lineHeight: 28,
paddingVertical: 8,
paddingHorizontal: 12,
color: argonTheme.COLORS.MUTED
},
});

View File

@@ -1,21 +0,0 @@
import Button from './Button';
import Card from './Card';
import DrawerItem from './DrawerItem';
import Icon from './Icon';
import Header from './Header';
import Input from './Input';
import Switch from './Switch';
import Select from './Select';
import Notification from './Notification';
export {
Button,
Card,
DrawerItem,
Icon,
Input,
Header,
Switch,
Select,
Notification
};

View File

@@ -1,63 +0,0 @@
// local imgs
const Onboarding = require("../assets/imgs/bg.png");
const Logo = require("../assets/logo.jpg"); // 价值前沿 Logo
const LogoOnboarding = require("../assets/logo.jpg"); // 价值前沿 Logo
const ProfileBackground = require("../assets/imgs/profile-screen-bg.png");
const RegisterBackground = require("../assets/imgs/register-bg.png");
const Pro = require("../assets/imgs/getPro-bg.png");
const ArgonLogo = require("../assets/logo.jpg"); // 价值前沿 Logo
const iOSLogo = require("../assets/imgs/ios.png");
const androidLogo = require("../assets/imgs/android.png");
const ProfilePicture = require("../assets/imgs/profile-img.jpg")
// internet imgs
const ProfileChat = 'https://images.unsplash.com/photo-1500522144261-ea64433bbe27?fit=crop&w=1051&q=80'
const Viewed = [
'https://images.unsplash.com/photo-1501601983405-7c7cabaa1581?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1543747579-795b9c2c3ada?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1551798507-629020c81463?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1470225620780-dba8ba36b745?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1503642551022-c011aafb3c88?fit=crop&w=240&q=80',
'https://images.unsplash.com/photo-1482686115713-0fbcaced6e28?fit=crop&w=240&q=80',
];
const Beauty = [
'https://images.unsplash.com/photo-1501601983405-7c7cabaa1581?fit=crop&w=240&q=80'
];
const Music = {
'Artists': 'https://images.unsplash.com/photo-1466150036782-869a824aeb25?fit=crop&w=1350&q=80',
'Concerts': 'https://images.unsplash.com/photo-1464375117522-1311d6a5b81f?fit=crop&w=1050&q=80',
'DJs': 'https://images.unsplash.com/photo-1485120750507-a3bf477acd63?fit=crop&w=1050&q=80',
'Hands': 'https://images.unsplash.com/photo-1556229162-5c63ed9c4efb?fit=crop&w=1534&q=80',
'Body': 'https://images.unsplash.com/photo-1556229010-6c3f2c9ca5f8?fit=crop&w=634&q=80',
'Face': 'https://images.unsplash.com/photo-1487412912498-0447578fcca8?fit=crop&w=1350&q=80',
'Trends': 'https://images.unsplash.com/photo-1524835005923-56700046e4a8?fit=crop&w=1052&q=80',
'Clothes': 'https://images.unsplash.com/photo-1487222477894-8943e31ef7b2?fit=crop&w=726&q=80',
'Accessory': 'https://images.unsplash.com/photo-1542779632-539b861ee8f9?fit=crop&w=634&q=80',
'Fashion': 'https://images.unsplash.com/photo-1479064555552-3ef4979f8908?fit=crop&w=1350&q=80',
'Garage_sale': 'https://images.unsplash.com/photo-1484502249930-e1da807099a5?fit=crop&w=1267&q=80',
'Wedding_dress': 'https://images.unsplash.com/photo-1519657337289-077653f724ed?fit=crop&w=1350&q=80'
}
const Products = {
'View article': 'https://images.unsplash.com/photo-1501601983405-7c7cabaa1581?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=840&q=840',
};
export default {
Onboarding,
Logo,
LogoOnboarding,
ProfileBackground,
ProfilePicture,
RegisterBackground,
Viewed,
Products,
Pro,
ArgonLogo,
iOSLogo,
androidLogo,
Beauty,
Music,
ProfileChat
};

View File

@@ -1,35 +0,0 @@
export default {
COLORS: {
DEFAULT: '#172B4D',
PRIMARY: '#5E72E4',
SECONDARY: '#F7FAFC',
LABEL: '#FE2472',
INFO: '#11CDEF',
ERROR: '#F5365C',
SUCCESS: '#2DCE89',
WARNING: '#FB6340',
TEXT: '#32325D',
MUTED: '#8898AA',
INPUT: '#DCDCDC',
INPUT_SUCCESS: '#7BDEB2',
INPUT_ERROR: '#FCB3A4',
ACTIVE: '#5E72E4', //same as primary
BUTTON_COLOR: '#9C26B0', //wtf
PLACEHOLDER: '#9FA5AA',
SWITCH_ON: '#5E72E4',
SWITCH_OFF: '#D4D9DD',
GRADIENT_START: '#6B24AA',
GRADIENT_END: '#AC2688',
PRICE_COLOR: '#EAD5FB',
BORDER_COLOR: '#E7E7E7',
BLOCK: '#E7E7E7',
ICON: '#172B4D',
HEADER: '#525F7F',
BORDER: '#CAD1D7',
WHITE: '#FFFFFF',
BLACK: '#000000',
TWITTER: '#1DA1F2',
FACEBOOK: '#3B5999',
DRIBBBLE: '#EA4C89'
}
};

View File

@@ -1,29 +0,0 @@
export default [
{
title: 'Ice cream is made with carrageenan …',
image: 'https://images.unsplash.com/photo-1516559828984-fb3b99548b21?ixlib=rb-1.2.1&auto=format&fit=crop&w=2100&q=80',
cta: 'View article',
horizontal: true
},
{
title: 'Is makeup one of your daily esse …',
image: 'https://images.unsplash.com/photo-1519368358672-25b03afee3bf?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2004&q=80',
cta: 'View article'
},
{
title: 'Coffee is more than just a drink: Its …',
image: 'https://images.unsplash.com/photo-1500522144261-ea64433bbe27?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2102&q=80',
cta: 'View article'
},
{
title: 'Fashion is a popular style, especially in …',
image: 'https://images.unsplash.com/photo-1487222477894-8943e31ef7b2?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1326&q=80',
cta: 'View article'
},
{
title: 'Argon is a great free UI packag …',
image: 'https://images.unsplash.com/photo-1482686115713-0fbcaced6e28?fit=crop&w=1947&q=80',
cta: 'View article',
horizontal: true
},
];

View File

@@ -1,86 +0,0 @@
export default {
products: [
{
id: 1,
title: 'Discover What\'s New In Beauty And Rec ...',
image: 'https://images.unsplash.com/photo-1500839941678-aae14dbfae9a?fit=crop&w=1120&q=80',
price: 180,
stock: true,
qty: 1,
horizontal: true,
},
{
id: 2,
title: 'Carry the charm of New Orleans with you ...',
image: 'https://images.unsplash.com/photo-1517857399767-a9dc28f5a734?fit=crop&w=1050&q=80',
price: 230,
stock: true,
qty: 1,
},
{
id: 3,
title: "Blue Nile is the world\'s leading diamond je ...",
image: 'https://images.unsplash.com/photo-1532947974358-a218d18d8d14?fit=crop&w=1050&q=80',
price: 90,
stock: true,
qty: 1,
},
{
id: 4,
title: 'The perfect diamond engagement ring ...',
image: 'https://images.unsplash.com/photo-1522312346375-d1a52e2b99b3?fit=crop&w=640&q=80',
price: 300,
stock: true,
qty: 1,
horizontal: true,
},
{
id: 5,
title: 'Make the most of what you wear.',
image: 'https://images.unsplash.com/photo-1490367532201-b9bc1dc483f6?fit=crop&w=840&q=80',
price: 97,
stock: true,
qty: 1,
full: true,
},
],
suggestions: [
{
title: "We'll start with the basics and go...",
// image: 'https://source.unsplash.com/pIs_JZT49lo/840x840',
image: 'https://images.unsplash.com/photo-1529504426707-d1d7a0dc458a?crop=entropy&w=840&h=840&fit=crop',
price: 180,
horizontal: true,
},
{
title: 'Harley-Davidson Motorcycle has a lot of...',
// image: 'https://source.unsplash.com/4ab-uGbwnGE/840x840',
image: 'https://images.unsplash.com/photo-1524591652733-73fa1ae7b5ee?crop=entropy&w=840&h=840&fit=crop',
price: 220,
},
{
title: "Whether youre tearing up the track...",
// image: 'https://source.unsplash.com/dyjCKPEba8A/840x840',
image: 'https://images.unsplash.com/photo-1539149398640-bdc7531102dd?crop=entropy&w=840&h=840&fit=crop',
price: 40,
},
{
title: 'Personal style is in the details of the...',
// image: 'https://source.unsplash.com/_oX1UvvHrOY/840x840',
image: 'https://images.unsplash.com/photo-1512749491228-caef5a7831d7?crop=entropy&w=840&h=840&fit=crop',
price: 188,
horizontal: true,
},
{
title: 'Whats so special about Le Mans, you ask?',
image: 'https://images.unsplash.com/photo-1535970793482-07de93762dc4?crop=entropy&w=840&h=840&fit=crop',
price: 180,
},
{
title: 'The BMW 6 Series Gran Turismo, Gran...',
// image: 'https://source.unsplash.com/X8siGp-Ie00/840x840',
image: 'https://images.unsplash.com/photo-1536364127590-1594e3161294?crop=entropy&w=840&h=840&fit=crop',
price: 180,
},
]
}

View File

@@ -1,453 +0,0 @@
export default {
hands: {
images: [
{
title: "Tisson Watch",
description:
"Discover all Tissot® novelties with watches for men and women on the Official Tissot Website.",
image:
"https://images.unsplash.com/photo-1522312346375-d1a52e2b99b3?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Apple Watch",
description:
"Apple Watch Series 4 features its largest display yet, a re-engineered digital crown, cellular to make calls.",
image:
"https://images.unsplash.com/photo-1530518119128-ca0bd1a0643b?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Fossil Watch",
description:
"We have the latest styles & trends of Fossil watches, wallets, bags and accessories. FREE Shipping & Returns.",
image:
"https://images.unsplash.com/photo-1539874754764-5a96559165b0?crop=entropy&fit=crop&w=840&q=80"
}
],
suggestions: [
{
title: "Looking for Men's watches ?",
price: 298,
// image: 'https://source.unsplash.com/YHbcum51JB0/840x840',
image:
"https://images.unsplash.com/photo-1490367532201-b9bc1dc483f6?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Adjust your watch to your outfit.",
price: 712,
// image: 'https://source.unsplash.com/Ws4wd-vJ9M0/840x840',
image:
"https://images.unsplash.com/photo-1491336477066-31156b5e4f35?crop=entropy&w=840&h=840&fit=crop"
}
]
},
face: {
images: [
{
title: "Brushes",
description:
"12 Makeup Brushes You Actually Need and Exactly How to Use Them. Foundation Brush. Use it to smooth.",
image:
"https://images.unsplash.com/photo-1522338242992-e1a54906a8da?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Pink Lipstick",
description:
"Lipstick is a cosmetic product containing pigments, waxes, and emollients that apply color, and protection to the lips.",
image:
"https://images.unsplash.com/photo-1498842812179-c81beecf902c?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Skin Care",
description:
"Get all the information you need on skin care routines, how-tos and anti-aging to find the best solutions for your skin.",
image:
"https://images.unsplash.com/photo-1525286116112-b59af11adad1?crop=entropy&fit=crop&w=840&q=80"
}
],
suggestions: [
{
title: "Curious Blossom Skin Care Kit.",
price: 29,
// image: 'https://source.unsplash.com/I7BSOoPa5hM/840x840',
image:
"https://images.unsplash.com/photo-1536303006682-2ee36ba49592?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Buy the best skin care products.",
price: 12,
// image: 'https://source.unsplash.com/1g4YwpKr3ow/840x840',
image:
"https://images.unsplash.com/photo-1501719539451-126fddec9024?crop=entropy&w=840&h=840&fit=crop"
}
]
},
accessory: {
images: [
{
title: "Mens Accessories",
description:
"Explore Urban Outfitters collection of men's accessories, featuring the season's newest arrivals. You'll find everything.",
image:
"https://images.unsplash.com/photo-1509112756314-34a0badb29d4?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Bow Ties",
description:
"With the largest selection of bow ties, you'll find exactly what you're looking for. Free shipping and returns...",
image:
"https://images.unsplash.com/photo-1495681796091-d84e65e2ad51?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "A Mens Kit",
description:
"Versatile accessories for men to pull your look together. Complete the look with the best in men's accessories.",
image:
"https://images.unsplash.com/photo-1479064555552-3ef4979f8908?crop=entropy&fit=crop&w=840&q=80"
}
],
suggestions: [
{
title: "Looking good has never been so easy.",
price: 29,
// image: 'https://source.unsplash.com/ZLLhx5Yg0Mc/840x840',
image:
"https://images.unsplash.com/photo-1485373650022-3ed53f62b8f3?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Make the most of what you wear.",
price: 12,
// image: 'https://source.unsplash.com/YHbcum51JB0/840x840',
image:
"https://images.unsplash.com/photo-1490367532201-b9bc1dc483f6?crop=entropy&w=840&h=840&fit=crop"
}
]
},
body: {
images: [
{
title: "Eau de Parfum",
description:
"Discover our range of eau de parfum and eau de toilette inc Dior, Marc Jacobs and YSL collections.",
image:
"https://images.unsplash.com/photo-1512777576244-b846ac3d816f?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Valentino",
description:
"Valentino Eau de Parfum by Valentino is a floral aldehyde fragrance for women. Valentino Eau de Parfum is a new.",
image:
"https://images.unsplash.com/photo-1512303500391-74e5b8c3c07f?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Skin Care",
description:
"Shop skincare products. Find top-rated products from leading skincare brands to help target specific skin concerns.",
// image: 'https://source.unsplash.com/oha7AANDiL8/840x840',
image:
"https://images.unsplash.com/photo-1526758097130-bab247274f58?crop=entropy&fit=crop&w=840&q=80"
}
],
suggestions: [
{
title: "Rose Skin Care A leading clinical...",
price: 29,
// image: 'https://source.unsplash.com/e9geJhWBC5I/840x840',
image:
"https://images.unsplash.com/photo-1517391882955-e1b20cafee7f?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Give your skincare routine a boost...",
price: 12,
// image: 'https://source.unsplash.com/Xuks25qlxeg/840x840',
image:
"https://images.unsplash.com/photo-1512303452027-750531d7cb7f?crop=entropy&w=840&h=840&fit=crop"
}
]
},
clothes: {
images: [
{
title: "Dream Car",
description:
"Delve into the fascinating world of BMW. Read inspiring stories and interviews, watch exciting videos.",
image:
"https://images.unsplash.com/photo-1518987048-93e29699e79a?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Smart Mobility",
description:
"The idea of Tuber originated at the BMW Group 2018 rad°hub gathering in Rotterdam.",
image:
"https://images.unsplash.com/photo-1529225596519-1262d0bfc242?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Need for Speed",
description:
"The current version of the ultimate racing game experience puts the player behind the wheel.",
image:
"https://images.unsplash.com/photo-1517153295259-74eb0b416cee?crop=entropy&fit=crop&w=840&q=80"
}
],
suggestions: [
{
title: "The gaming version of an action movie...",
price: 29,
image:
"https://images.unsplash.com/photo-1535970793482-07de93762dc4?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Whats so special about Le Mans?",
price: 12,
image:
"https://images.unsplash.com/photo-1536364127590-1594e3161294?crop=entropy&w=840&h=840&fit=crop"
}
]
},
trends: {
images: [
{
title: "Ford Mustang",
description:
"The 2019 Mustang classic performance car just got better. Learn about the most advanced Mustang ever.",
image:
"https://images.unsplash.com/photo-1533106418989-88406c7cc8ca?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Muscle Car",
description:
"The 2019 Mustang is designed to custom-fit the way you drive, down to the last detail.",
image:
"https://images.unsplash.com/photo-1496437792604-55ca7c5c3f6f?crop=entropy&fit=crop&w=840&q=80"
},
{
title: "Customised View",
description:
"Optional on the EcoBoost® Premium and GT Premium, this 12-inch all-digital LCD cluster lets you personalise.",
image:
"https://images.unsplash.com/photo-1506361590224-e2586b4ad877?crop=entropy&fit=crop&w=840&q=80"
}
],
suggestions: [
{
title: "Whether youre tearing up the track...",
price: 29,
image:
"https://images.unsplash.com/photo-1539149398640-bdc7531102dd?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Personal style is in the details...",
price: 12,
image:
"https://images.unsplash.com/photo-1512749491228-caef5a7831d7?crop=entropy&w=840&h=840&fit=crop"
}
]
},
artists: {
images: [
{
title: "Painting Studio",
description:
"You need a creative space ready for your art? We got that covered.",
image:
"https://images.unsplash.com/photo-1501084817091-a4f3d1d19e07?fit=crop&w=2700&q=80"
},
{
title: "Art Gallery",
description:
"Don't forget to visit one of the coolest art galleries in town.",
image:
"https://images.unsplash.com/photo-1500628550463-c8881a54d4d4?fit=crop&w=2698&q=80"
},
{
title: "Video Services",
description:
"Some of the best music video services someone could have for the lowest prices.",
image:
"https://images.unsplash.com/photo-1496680392913-a0417ec1a0ad?fit=crop&w=2700&q=80"
}
],
suggestions: [
{
title: "Music studio for real...",
price: 1800,
image:
"https://images.unsplash.com/photo-1511379938547-c1f69419868d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2700&q=80"
},
{
title: "Music equipment to borrow...",
price: 300,
image:
"https://images.unsplash.com/photo-1477233534935-f5e6fe7c1159?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2700&q=80"
}
]
},
concerts: {
images: [
{
title: "Metal Concert",
description:
"Ready for the hardest metal concert you've ever seen? Check out this Progressive Metal concert!",
image:
"https://images.unsplash.com/photo-1470229722913-7c0e2dbbafd3?fit=crop&w=2700&q=80"
},
{
title: "Classical Music Concert",
description:
"Cello, viola, bassoons and awesome calm sound vibrations. Welcome to one of the most expected classical concerts in Europe.",
image:
"https://images.unsplash.com/photo-1458639817867-2c9d4c5dcad4?fit=crop&w=2700&q=80"
},
{
title: "Beethoven Tribute Concert",
description:
"Ludwig van Beethoven was a German composer and pianist. One of the greatest to ever step on Earth.",
image:
"https://images.unsplash.com/photo-1532089006065-de61ca171e56?fit=crop&w=2700&q=80"
}
],
suggestions: [
{
title: "A night out with your friends...",
price: 500,
image:
"https://images.unsplash.com/photo-1438557068880-c5f474830377?fit=crop&w=2706&q=80"
},
{
title: "One cool festival for...",
price: 470,
image:
"https://images.unsplash.com/photo-1469488865564-c2de10f69f96?fit=crop&w=2700&q=80"
}
]
},
DJs: {
images: [
{
title: 'Tech-House Party',
description: 'Get ready for an awesome party in the backyard of one of the greatest Tech-House DJs in the world.',
image: 'https://images.unsplash.com/photo-1542851041-0a2a651561a3?fit=crop&w=2706&q=80',
},
{
title: 'Dubstep Party',
description: 'We\'re sure you\'re going to enjoy this party full of fast drums and crazy rhythms.',
image: 'https://images.unsplash.com/photo-1530521877972-491c628bbb31?fit=crop&w=2614&q=80',
},
{
title: 'Hip-Hop Party',
description: 'Fat 808s, hype music and a whole different Urban vibe. These Hip-Hop DJs are going to spin the best songs you\'ve ever listened to.',
image: 'https://images.unsplash.com/photo-1544616326-a041e9e3b348?fit=crop&w=3889&q=80',
},
],
suggestions: [
{
title: 'Ableton Push 2',
price: 500,
image: 'https://images.unsplash.com/photo-1523297313810-5c8718fee854?fit=crop&w=2700&q=80',
},
{
title: 'Pocket Operator Office',
price: 89,
image: 'https://images.unsplash.com/photo-1553010214-b15a4029d601?fit=crop&w=2900&q=80',
},
]
},
fashion: {
images: [
{
title: 'Jackets',
description: 'Best fashionable denim jackets you could find on the internet.',
image: 'https://images.unsplash.com/photo-1523979858672-687c4d4621a0?fit=crop&w=1333&q=80',
},
{
title: 'Shirts',
description: 'We all like looking good while enjoying our coffee.',
image: 'https://images.unsplash.com/photo-1559526323-cb2f2fe2591b?fit=crop&w=1350&q=80',
},
{
title: 'Dresses',
description: 'Be the queen you want to be.',
image: 'https://images.unsplash.com/photo-1530883374727-29c498f224c0?fit=crop&w=634&q=80',
},
],
suggestions: [
{
title: "Rose Skin Care A leading clinical...",
price: 29,
image:
"https://images.unsplash.com/photo-1517391882955-e1b20cafee7f?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Give your skincare routine a boost...",
price: 12,
image:
"https://images.unsplash.com/photo-1512303452027-750531d7cb7f?crop=entropy&w=840&h=840&fit=crop"
}
]
},
garagesale: {
images: [
{
title: 'General clothes',
description: 'The opening of this new local store came with a great impact on our community.',
image: 'https://images.unsplash.com/photo-1490481651871-ab68de25d43d?fit=crop&w=1350&q=80',
},
{
title: 'Jeans',
description: 'Not really certain about kind of jeans do you want?',
image: 'https://images.unsplash.com/photo-1540221652346-e5dd6b50f3e7?fit=crop&w=1349&q=80',
},
{
title: 'Scarfs',
description: 'Any colour, any material, any brand. We got them all.',
image: 'https://images.unsplash.com/photo-1465199549974-7d82de6e2830?fit=crop&w=1189&q=80',
},
],
suggestions: [
{
title: "Rose Skin Care A leading clinical...",
price: 29,
image:
"https://images.unsplash.com/photo-1517391882955-e1b20cafee7f?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Give your skincare routine a boost...",
price: 12,
image:
"https://images.unsplash.com/photo-1512303452027-750531d7cb7f?crop=entropy&w=840&h=840&fit=crop"
}
]
},
weddingdress: {
images: [
{
title: 'Designer dress',
description: 'Best dresses from the most popular designers.',
image: 'https://images.unsplash.com/photo-1546804784-896d0dca3805?fit=crop&w=1350&q=80',
},
{
title: 'Wedding services',
description: 'We could help you out with your wedding planning, give us a try!',
image: 'https://images.unsplash.com/photo-1546193430-c2d207739ed7?fit=crop&w=689&q=80',
},
{
title: 'Wedding preparations',
description: 'Count on us for the best wedding preparations of this year.',
image: 'https://images.unsplash.com/photo-1541250848049-b4f7141dca3f?fit=crop&w=634&q=80',
},
],
suggestions: [
{
title: "Rose Skin Care A leading clinical...",
price: 29,
image:
"https://images.unsplash.com/photo-1517391882955-e1b20cafee7f?crop=entropy&w=840&h=840&fit=crop"
},
{
title: "Give your skincare routine a boost...",
price: 12,
image:
"https://images.unsplash.com/photo-1512303452027-750531d7cb7f?crop=entropy&w=840&h=840&fit=crop"
}
]
},
};

View File

@@ -1,119 +0,0 @@
export default {
shoes: [
{
title: "Nike Air Max",
body: "Air Max shoes are the best line of shoes created by Nike.",
image: 'https://images.unsplash.com/photo-1511556670410-f6989d6b0766?fit=crop&w=1234&q=80',
cta: "View article",
horizontal: true,
},
{
title: 'Blue Adidas',
cta: "View article",
image: 'https://images.unsplash.com/photo-1520256788229-d4640c632e4b?fit=crop&w=1350&q=80',
},
{
title: 'Perfect Shoes',
cta: "View article",
image: 'https://images.unsplash.com/photo-1525092029632-cb75fe5dd776?fit=crop&w=1350&q=80',
},
{
title: 'Fashion Shoes',
body: "Fashion is a popular aesthetic expression in a certain time and context.",
cta: "View article",
image: 'https://images.unsplash.com/photo-1523191665038-d75548b1a52a?fit=crop&w=1350&q=80',
},
{
title: 'Orange Sneakers',
cta: "View article",
image: 'https://images.unsplash.com/photo-1521774971864-62e842046145?fit=crop&w=1350&q=80',
},
],
beauty: [
{
title: 'Makeup Kit',
body: "Best Makeup kits available online today!",
image: 'https://images.unsplash.com/photo-1527633412983-d80af308e660?fit=crop&w=634&q=80',
cta: "View article",
},
{
title: 'Lipstick Kit',
image: 'https://images.unsplash.com/photo-1530863138121-03aea5f46fd4?fit=crop&w=1350&q=80',
cta: "View article",
},
{
title: 'Premium Brushes',
image: 'https://images.unsplash.com/photo-1519368358672-25b03afee3bf?fit=crop&w=1002&q=80',
cta: "View article",
},
{
title: 'Fashion Colors',
body: "What's going on this summer?",
image: 'https://images.unsplash.com/photo-1515688594390-b649af70d282?fit=crop&w=995&q=80',
cta: "View article",
},
{
title: 'Pink Glitter',
image: 'https://images.unsplash.com/photo-1526336686748-bd7bb2f1df84?fit=crop&w=1350&q=80',
cta: "View article",
},
],
fashion: [
{
title: 'Colorful Hearts',
body: "Best gift for your special someone. Show them some love!",
image: 'https://images.unsplash.com/photo-1541329164087-0283eda68eda?fit=crop&w=634&q=80',
cta: "View article",
},
{
title: 'Get purple inspiration',
image: 'https://images.unsplash.com/photo-1551895889-f1469e75acaa?fit=crop&w=1189&q=80',
cta: "View article",
},
{
title: 'Favorite high heels',
image: 'https://images.unsplash.com/photo-1491897554428-130a60dd4757?fit=crop&w=1400&q=80',
cta: "View article",
},
{
title: 'Pastel Hearts Sunglasses',
body: "Everybody needs a special pair of sunglasses",
image: 'https://images.unsplash.com/photo-1530832805884-45f17d57a3d8?fit=crop&w=634&q=80',
cta: "View article",
},
{
title: 'Awesome destination',
image: 'https://images.unsplash.com/photo-1513149739851-50f01dfcbd9a?fit=crop&w=1350&q=80',
cta: "View article",
},
],
places: [
{
title: 'A literary journal published by the Black Earth.',
body: "Find out more about these articles.",
image: 'https://images.unsplash.com/photo-1551814038-046d8e76f44f?fit=crop&w=1489&q=80',
cta: "View article",
},
{
title: 'By submitting, you guarantee.',
image: 'https://images.unsplash.com/photo-1487029413235-e3f7a0e8e140?fit=crop&w=1050&q=80',
cta: "View article",
},
{
title: 'All About Lights is located in Boie.',
image: 'https://images.unsplash.com/photo-1516437124483-bb0f86708932?fit=crop&w=800&q=80',
cta: "View article",
},
{
title: 'Meet our about play staff: click on any.',
body: "Find out more about our staff by reading this article.",
image: 'https://images.unsplash.com/photo-1502048962539-e47cf2fcc9ce?fit=crop&w=1053&q=80',
cta: "View article",
},
{
title: 'Whether it comes from the Sun.',
image: 'https://images.unsplash.com/photo-1485001564903-56e6a54d46ef?fit=crop&w=1050&q=80',
cta: "View article",
},
],
};

View File

@@ -1,19 +0,0 @@
import argonTheme from './Theme';
import articles from './articles';
import Images from './Images';
import tabs from './tabs';
import categories from './categories';
import deals from './deals';
import utils from './utils';
import cart from './cart';
export {
articles,
argonTheme,
Images,
tabs,
categories,
deals,
utils,
cart
};

View File

@@ -1,14 +0,0 @@
export default tabs = {
beauty: [
{ id: 'music', title: 'Music' },
{ id: 'beauty', title: 'Beauty' },
{ id: 'fashion', title: 'Fashion' },
{ id: 'clothes', title: 'Clothes'}
],
fashion: [
{ id: 'shoes', title: 'Shoes', },
{ id: 'beauty', title: 'Beauty', },
{ id: 'fashion', title: 'Fashion', },
{ id: 'places', title: 'Places', }
],
}

View File

@@ -1,6 +0,0 @@
import { Platform, StatusBar } from 'react-native';
import { theme } from 'galio-framework';
export const StatusHeight = StatusBar.currentHeight;
export const HeaderHeight = (theme.SIZES.BASE * 3.5 + (StatusHeight || 0));
export const iPhoneX = () => Platform.OS === 'ios' && (height === 812 || width === 812);

View File

@@ -1,28 +0,0 @@
{
"cli": {
"version": ">= 12.0.0"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": {
"simulator": false
}
},
"preview": {
"distribution": "internal",
"ios": {
"buildConfiguration": "Release"
}
},
"production": {
"ios": {
"buildConfiguration": "Release"
}
}
},
"submit": {
"production": {}
}
}

View File

@@ -1,5 +0,0 @@
import { registerRootComponent } from "expo";
import App from "./App";
registerRootComponent(App);

View File

@@ -1,30 +0,0 @@
# OSX
#
.DS_Store
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
.xcode.env.local
# Bundle artifacts
*.jsbundle
# CocoaPods
/Pods/

View File

@@ -1,11 +0,0 @@
# This `.xcode.env` file is versioned and is used to source the environment
# used when running script phases inside Xcode.
# To customize your local environment, you can create an `.xcode.env.local`
# file that is not versioned.
# NODE_BINARY variable contains the PATH to the node executable.
#
# Customize the NODE_BINARY variable here.
# For example, to use nvm with brew, add the following line
# . "$(brew --prefix nvm)/nvm.sh" --no-use
export NODE_BINARY=$(command -v node)

View File

@@ -1,87 +0,0 @@
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
require 'json'
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}
ENV['RCT_NEW_ARCH_ENABLED'] = podfile_properties['newArchEnabled'] == 'true' ? '1' : '0'
ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
use_autolinking_method_symbol = ('use' + '_native' + '_modules!').to_sym
origin_autolinking_method = self.method(use_autolinking_method_symbol)
self.define_singleton_method(use_autolinking_method_symbol) do |*args|
if ENV['EXPO_UNSTABLE_CORE_AUTOLINKING'] == '1'
Pod::UI.puts('Using expo-modules-autolinking as core autolinking source'.green)
config_command = [
'node',
'--no-warnings',
'--eval',
'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))',
'react-native-config',
'--json',
'--platform',
'ios'
]
origin_autolinking_method.call(config_command)
else
origin_autolinking_method.call()
end
end
platform :ios, podfile_properties['ios.deploymentTarget'] || '13.4'
install! 'cocoapods',
:deterministic_uuids => false
prepare_react_native_project!
target 'app' do
use_expo_modules!
config = use_native_modules!
use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']
use_react_native!(
:path => config[:reactNativePath],
:hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
# An absolute path to your application root.
:app_path => "#{Pod::Config.instance.installation_root}/..",
:privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',
)
post_install do |installer|
react_native_post_install(
installer,
config[:reactNativePath],
:mac_catalyst_enabled => false,
:ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',
)
# This is necessary for Xcode 14, because it signs resource bundles by default
# when building for devices.
installer.target_installation_results.pod_target_installation_results
.each do |pod_name, target_installation_result|
target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
resource_bundle_target.build_configurations.each do |config|
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
end
end
end
# 抑制第三方库的警告并统一部署目标
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = 'YES'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.1'
end
end
end
post_integrate do |installer|
begin
expo_patch_react_imports!(installer)
rescue => e
Pod::UI.warn e
end
end
end

Some files were not shown because too many files have changed in this diff Show More