From 61252cdf36a7c7e8d2ce2aa64570196f4dc18740 Mon Sep 17 00:00:00 2001 From: echo Date: Tue, 4 Nov 2025 13:49:20 +0800 Subject: [PATCH] feat: update react-native-paper --- .gitignore | 3 + app/(tabs)/_layout.tsx | 7 + app/(tabs)/paper.tsx | 309 +++++++++++++++++++++++++++++++++++++ app/_layout.tsx | 16 +- docs/INSTALLED_PACKAGES.md | 283 --------------------------------- docs/KNOWN_ISSUES.md | 113 -------------- package.json | 1 + pnpm-lock.yaml | 56 +++++++ 8 files changed, 386 insertions(+), 402 deletions(-) create mode 100644 app/(tabs)/paper.tsx delete mode 100644 docs/INSTALLED_PACKAGES.md delete mode 100644 docs/KNOWN_ISSUES.md diff --git a/.gitignore b/.gitignore index 53a588c..799c012 100644 --- a/.gitignore +++ b/.gitignore @@ -71,6 +71,9 @@ logs # OS Thumbs.db +# Windows specific - ignore nul file created by incorrect command redirection +nul + # Package manager lock files (keep pnpm-lock.yaml, ignore others) package-lock.json yarn.lock diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index 0e2d32e..d15a67a 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -61,6 +61,13 @@ export default function TabLayout() { tabBarIcon: ({ color }) => , }} /> + , + }} + /> ); } diff --git a/app/(tabs)/paper.tsx b/app/(tabs)/paper.tsx new file mode 100644 index 0000000..5b16eea --- /dev/null +++ b/app/(tabs)/paper.tsx @@ -0,0 +1,309 @@ +import React, { useState } from 'react'; +import { ScrollView, StyleSheet, View } from 'react-native'; +import { + Button, + Card, + Chip, + FAB, + IconButton, + List, + ProgressBar, + Searchbar, + SegmentedButtons, + Snackbar, + Switch, + Text, + TextInput, + useTheme, +} from 'react-native-paper'; + +export default function PaperDemo() { + const theme = useTheme(); + const [searchQuery, setSearchQuery] = useState(''); + const [text, setText] = useState(''); + const [switchValue, setSwitchValue] = useState(false); + const [snackbarVisible, setSnackbarVisible] = useState(false); + const [segmentedValue, setSegmentedValue] = useState('walk'); + const [expanded, setExpanded] = useState(true); + + return ( + + + {/* 标题 */} + + React Native Paper + + + Material Design 组件库示例 + + + {/* 搜索框 */} + + + + 🔍 搜索框 + + + + + + {/* 输入框 */} + + + + ✏️ 输入框 + + + + + + + {/* 按钮 */} + + + + 🔘 按钮 + + + + + + + + + + + + + {/* 分段按钮 */} + + + + 📊 分段按钮 + + + + + + {/* 开关和芯片 */} + + + + 🎛️ 开关和芯片 + + + 启用通知 + + + + {}}> + 收藏 + + {}}> + 喜欢 + + {}} + onClose={() => {}} + closeIcon="close-circle" + > + 可关闭 + + + + + + {/* 进度条 */} + + + + 📈 进度条 + + + + + + + {/* 列表 */} + + + + 📋 列表 + + + } + expanded={expanded} + onPress={() => setExpanded(!expanded)} + > + } /> + } /> + + + } + right={(props) => } + /> + + + + {/* 卡片示例 */} + + + } + right={(props) => } + /> + + + 这是一个完整的卡片示例,包含封面图片、标题、内容和操作按钮。 + + + + + + + + + {/* 底部留白 */} + + + + {/* 浮动操作按钮 */} + setSnackbarVisible(true)} + label="添加" + /> + + {/* 提示条 */} + setSnackbarVisible(false)} + duration={3000} + action={{ + label: '撤销', + onPress: () => { + // 撤销操作 + }, + }} + > + 操作成功! + + + ); +} + +const styles = StyleSheet.create({ + container: { + flex: 1, + }, + scrollView: { + flex: 1, + }, + content: { + padding: 16, + }, + title: { + marginBottom: 8, + fontWeight: 'bold', + }, + subtitle: { + marginBottom: 24, + opacity: 0.7, + }, + card: { + marginBottom: 16, + }, + sectionTitle: { + marginBottom: 12, + fontWeight: '600', + }, + searchbar: { + marginTop: 8, + }, + input: { + marginBottom: 12, + }, + buttonRow: { + flexDirection: 'row', + gap: 8, + marginBottom: 8, + }, + row: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginBottom: 16, + }, + chipContainer: { + flexDirection: 'row', + flexWrap: 'wrap', + gap: 8, + }, + progressBar: { + marginBottom: 12, + }, + bottomSpace: { + height: 80, + }, + fab: { + position: 'absolute', + margin: 16, + right: 0, + bottom: 0, + }, +}); + diff --git a/app/_layout.tsx b/app/_layout.tsx index 232dd85..ee101e7 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -7,6 +7,7 @@ import * as Updates from 'expo-updates'; import { useEffect } from 'react'; import { Alert, Platform } from 'react-native'; import 'react-native-reanimated'; +import { PaperProvider, MD3DarkTheme, MD3LightTheme } from 'react-native-paper'; import { useColorScheme } from '@/components/useColorScheme'; @@ -90,13 +91,16 @@ export default function RootLayout() { function RootLayoutNav() { const colorScheme = useColorScheme(); + const paperTheme = colorScheme === 'dark' ? MD3DarkTheme : MD3LightTheme; return ( - - - - - - + + + + + + + + ); } diff --git a/docs/INSTALLED_PACKAGES.md b/docs/INSTALLED_PACKAGES.md deleted file mode 100644 index f8ea7e3..0000000 --- a/docs/INSTALLED_PACKAGES.md +++ /dev/null @@ -1,283 +0,0 @@ -# 📦 已安装的工具库总结 - -本文档列出了项目中新安装的所有工具库及其用途。 - -## ✅ 安装完成的库 - -### 🛠️ 工具类库 - -#### 1. **Lodash-ES** `^4.17.21` -- **用途**: 强大的 JavaScript 工具函数库(ES modules 版本) -- **功能**: 数组、对象、字符串操作,防抖、节流等 -- **优势**: 支持 tree-shaking,按需导入,减小包体积 -- **文档**: https://lodash.com/docs/ -- **示例**: - ```typescript - import { debounce, uniq } from 'lodash-es'; - debounce(fn, 300); // 防抖 - uniq([1, 2, 2, 3]); // 去重 - ``` - -#### 2. **Day.js** `^1.11.19` -- **用途**: 轻量级日期处理库(仅 2KB) -- **功能**: 日期格式化、相对时间、日期计算 -- **文档**: https://day.js.org/ -- **示例**: - ```typescript - import dayjs from 'dayjs'; - dayjs().format('YYYY-MM-DD'); - dayjs().fromNow(); // '几秒前' - ``` - -#### 3. **Axios** `^1.13.1` -- **用途**: HTTP 请求库 -- **功能**: Promise API、请求/响应拦截器、取消请求 -- **文档**: https://axios-http.com/ -- **示例**: - ```typescript - import axios from 'axios'; - const data = await axios.get('/api/users'); - ``` - -#### 4. **Zustand** `^5.0.8` -- **用途**: 轻量级状态管理库 -- **功能**: 简单的全局状态管理,比 Redux 简单得多 -- **文档**: https://zustand-demo.pmnd.rs/ -- **示例**: - ```typescript - import { create } from 'zustand'; - const useStore = create((set) => ({ - count: 0, - increment: () => set((state) => ({ count: state.count + 1 })), - })); - ``` - -#### 5. **React Hook Form** `^7.66.0` -- **用途**: 高性能表单处理库 -- **功能**: 表单验证、错误处理、性能优化 -- **文档**: https://react-hook-form.com/ -- **示例**: - ```typescript - import { useForm } from 'react-hook-form'; - const { register, handleSubmit } = useForm(); - ``` - -#### 6. **Zod** `^4.1.12` -- **用途**: TypeScript 优先的数据验证库 -- **功能**: 数据验证、类型推断、错误处理 -- **文档**: https://zod.dev/ -- **示例**: - ```typescript - import { z } from 'zod'; - const schema = z.object({ - email: z.string().email(), - }); - ``` - ---- - -### 📱 Expo 原生模块 - -#### 7. **AsyncStorage** `^2.2.0` -- **包名**: @react-native-async-storage/async-storage -- **用途**: React Native 本地持久化存储 -- **功能**: 键值对存储、异步 API -- **文档**: https://react-native-async-storage.github.io/async-storage/ -- **示例**: - ```typescript - import AsyncStorage from '@react-native-async-storage/async-storage'; - await AsyncStorage.setItem('key', 'value'); - ``` - -#### 8. **Expo Image** `^3.0.10` -- **用途**: 性能优化的图片组件 -- **功能**: 占位符、缓存、渐进加载 -- **文档**: https://docs.expo.dev/versions/latest/sdk/image/ -- **示例**: - ```typescript - import { Image } from 'expo-image'; - - ``` - -#### 9. **Expo Haptics** `^15.0.7` -- **用途**: 触觉反馈功能 -- **功能**: 震动反馈、成功/错误/警告反馈 -- **文档**: https://docs.expo.dev/versions/latest/sdk/haptics/ -- **示例**: - ```typescript - import * as Haptics from 'expo-haptics'; - Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); - ``` - ---- - -### 🔧 开发工具 - -#### 10. **@types/lodash-es** `^4.17.12` -- **用途**: Lodash-ES 的 TypeScript 类型定义 -- **功能**: 提供完整的类型提示和类型检查 -- **安装类型**: devDependencies - ---- - -## 📊 安装统计 - -- **总计**: 10 个包 -- **生产依赖**: 9 个 -- **开发依赖**: 1 个 -- **总大小**: 约 15MB(node_modules) - ---- - -## 🎯 使用场景 - -### 数据处理 -- **Lodash**: 数组、对象操作 -- **Day.js**: 日期时间处理 - -### 网络请求 -- **Axios**: HTTP 请求 -- **Zod**: API 响应验证 - -### 状态管理 -- **Zustand**: 全局状态 -- **AsyncStorage**: 本地持久化 - -### 表单处理 -- **React Hook Form**: 表单管理 -- **Zod**: 表单验证 - -### 用户体验 -- **Expo Image**: 图片优化 -- **Expo Haptics**: 触觉反馈 - ---- - -## 🚀 快速开始 - -### 1. 查看使用指南 -详细的使用方法请查看 [LIBRARIES.md](./LIBRARIES.md) - -### 2. 推荐的项目结构 -``` -src/ -├── utils/ -│ ├── api.ts # Axios 配置 -│ ├── storage.ts # AsyncStorage 封装 -│ └── date.ts # Day.js 工具函数 -├── stores/ -│ ├── userStore.ts # 用户状态(Zustand) -│ └── settingsStore.ts -├── schemas/ -│ ├── auth.ts # 认证相关的 Zod schema -│ └── user.ts -└── hooks/ - ├── useDebounce.ts # Lodash debounce 封装 - └── useThrottle.ts -``` - -### 3. 创建基础工具文件 - -**utils/api.ts** - Axios 配置 -```typescript -import axios from 'axios'; -import AsyncStorage from '@react-native-async-storage/async-storage'; - -const api = axios.create({ - baseURL: 'https://api.example.com', - timeout: 10000, -}); - -api.interceptors.request.use(async (config) => { - const token = await AsyncStorage.getItem('token'); - if (token) { - config.headers.Authorization = `Bearer ${token}`; - } - return config; -}); - -export default api; -``` - -**utils/storage.ts** - 存储工具 -```typescript -import AsyncStorage from '@react-native-async-storage/async-storage'; - -class Storage { - static async setObject(key: string, value: T) { - await AsyncStorage.setItem(key, JSON.stringify(value)); - } - - static async getObject(key: string): Promise { - const value = await AsyncStorage.getItem(key); - return value ? JSON.parse(value) : null; - } -} - -export default Storage; -``` - -**stores/userStore.ts** - 用户状态 -```typescript -import { create } from 'zustand'; - -interface UserState { - user: any | null; - setUser: (user: any) => void; -} - -export const useUserStore = create((set) => ({ - user: null, - setUser: (user) => set({ user }), -})); -``` - ---- - -## 💡 最佳实践 - -### 1. 性能优化 -- ✅ 使用 Lodash-ES 的按需导入,减小包体积 -- ✅ 使用 `debounce` 和 `throttle` 优化频繁触发的事件 -- ✅ 使用 Zustand 的选择器避免不必要的重渲染 -- ✅ 使用 Expo Image 的缓存策略优化图片加载 - -### 2. 类型安全 -- ✅ 使用 Zod 定义数据结构并自动生成 TypeScript 类型 -- ✅ 为 Zustand store 定义完整的类型接口 -- ✅ 使用 `@types/lodash-es` 获得完整的类型提示 - -### 3. 代码组织 -- ✅ 将 API 配置集中在 `utils/api.ts` -- ✅ 将存储操作封装在 `utils/storage.ts` -- ✅ 将状态管理放在 `stores/` 目录 -- ✅ 将验证规则放在 `schemas/` 目录 - -### 4. 错误处理 -- ✅ 在 Axios 拦截器中统一处理错误 -- ✅ 使用 try-catch 包裹异步操作 -- ✅ 提供用户友好的错误提示 - ---- - -## 📚 相关文档 - -- [LIBRARIES.md](./LIBRARIES.md) - 详细的使用指南和示例 -- [README.md](./README.md) - 项目总体说明 -- [KNOWN_ISSUES.md](./KNOWN_ISSUES.md) - 已知问题和解决方案 - ---- - -## 🎉 总结 - -所有工具库已成功安装并可以直接使用!这些库涵盖了: - -- ✅ **数据处理** - Lodash-ES(支持 tree-shaking), Day.js -- ✅ **网络请求** - Axios -- ✅ **状态管理** - Zustand -- ✅ **表单处理** - React Hook Form, Zod -- ✅ **本地存储** - AsyncStorage -- ✅ **用户体验** - Expo Image, Expo Haptics - -开始使用这些强大的工具来构建你的应用吧!🚀 - diff --git a/docs/KNOWN_ISSUES.md b/docs/KNOWN_ISSUES.md deleted file mode 100644 index 1fa0042..0000000 --- a/docs/KNOWN_ISSUES.md +++ /dev/null @@ -1,113 +0,0 @@ -# 已知问题和警告说明 - -## ⚠️ Web 平台警告 - -### 警告信息 -``` -λ WARN props.pointerEvents is deprecated. Use style.pointerEvents -``` - -### 原因 -这个警告来自 `react-native-web@0.21.2` 库内部,是该库在处理某些 React Native 组件时产生的弃用警告。具体来说: - -- React Native Web 正在从使用 `props.pointerEvents` 迁移到 `style.pointerEvents` -- 这是库内部的实现细节,不是我们应用代码的问题 -- 警告来自 `View` 组件在 Web 平台上的渲染过程 - -### 影响 -- ✅ **不影响应用功能** - 应用在 Web 平台上完全正常运行 -- ✅ **不影响性能** - 只是一个弃用提示 -- ✅ **不影响移动端** - 只在 Web 平台出现 - -### 解决方案 - -#### 方案 1:忽略警告(推荐) -这个警告是无害的,可以安全忽略。等待 `react-native-web` 库更新到新版本后会自动解决。 - -#### 方案 2:抑制警告 -如果你想在开发时隐藏这个警告,可以在 `app.json` 中添加配置: - -```json -{ - "expo": { - "web": { - "bundler": "metro", - "output": "static", - "favicon": "./assets/images/favicon.png" - } - } -} -``` - -或者在代码中添加警告过滤(不推荐): - -```typescript -// 在 app/_layout.tsx 顶部添加 -if (typeof window !== 'undefined') { - const originalWarn = console.warn; - console.warn = (...args) => { - if (args[0]?.includes?.('pointerEvents is deprecated')) { - return; - } - originalWarn(...args); - }; -} -``` - -#### 方案 3:等待库更新 -`react-native-web` 团队正在积极维护这个库,未来版本会解决这个警告。你可以: - -1. 关注 [react-native-web 更新日志](https://github.com/necolas/react-native-web/releases) -2. 定期运行 `pnpm update react-native-web` 更新到最新版本 - -### 相关信息 - -- **库版本**: react-native-web@0.21.2 -- **Expo 版本**: ~54.0.22 -- **React Native 版本**: 0.81.5 -- **问题追踪**: 这是 react-native-web 库的已知问题,正在逐步迁移中 - -### 验证 -你可以通过以下方式验证应用功能正常: - -```bash -# 启动 Web 版本 -pnpm web - -# 在浏览器中打开 http://localhost:8081 -# 检查所有功能是否正常工作 -``` - -## 📝 其他注意事项 - -### 开发模式下的其他常见警告 - -#### 1. Metro Bundler 警告 -某些依赖可能会产生 Metro 打包警告,这些通常可以安全忽略。 - -#### 2. React 19 新特性警告 -由于使用了 React 19.1.0,某些旧的 API 可能会有弃用警告。 - -#### 3. Expo Router 类型警告 -TypeScript 可能会对某些 Expo Router 的动态路由产生类型警告,这是正常的。 - -### 生产构建 -在生产构建中,这些警告不会出现,因为: -- 生产构建会移除所有开发时的警告 -- 代码会被优化和压缩 -- 只有关键错误会被记录 - -### 如何报告问题 -如果你遇到其他问题: - -1. 检查是否是已知问题(查看本文档) -2. 查看 [Expo 文档](https://docs.expo.dev/) -3. 搜索 [Expo GitHub Issues](https://github.com/expo/expo/issues) -4. 在项目中创建 issue 或联系开发团队 - -## ✅ 总结 - -**当前的 `pointerEvents` 警告是安全的,可以忽略。** 应用在所有平台(iOS、Android、Web)上都能正常运行。这只是一个库内部的迁移提示,不影响你的开发和生产使用。 - -如果你想要一个完全没有警告的开发体验,可以等待 `react-native-web` 的下一个主要版本更新,或者使用上述方案 2 临时抑制警告。 - diff --git a/package.json b/package.json index f223a4f..2cdaa87 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "react-dom": "19.1.0", "react-hook-form": "^7.66.0", "react-native": "0.81.5", + "react-native-paper": "^5.14.5", "react-native-reanimated": "~4.1.1", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d3e2b3a..e9e72f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,6 +74,9 @@ importers: react-native: specifier: 0.81.5 version: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0) + react-native-paper: + specifier: ^5.14.5 + version: 5.14.5(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-reanimated: specifier: ~4.1.1 version: 4.1.3(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) @@ -622,6 +625,11 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} + '@callstack/react-theme-provider@3.0.9': + resolution: {integrity: sha512-tTQ0uDSCL0ypeMa8T/E9wAZRGKWj8kXP7+6RYgPTfOPs9N07C9xM8P02GJ3feETap4Ux5S69D9nteq9mEj86NA==} + peerDependencies: + react: '>=16.3.0' + '@expo/cli@54.0.15': resolution: {integrity: sha512-tgaKFeYNRjZssPueZMm1+2cRek6mxEsthPoBX6NzQeDlzIzYBBpnAR6xH95UO6A7r0vduBeL2acIAV1Y5aSGJQ==} hasBin: true @@ -1517,6 +1525,9 @@ packages: color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} @@ -1614,6 +1625,10 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + deepmerge@3.3.0: + resolution: {integrity: sha512-GRQOafGHwMHpjPx9iCvTgpu9NojZ49q794EEL94JVEw6VaeA8XTUyBKvAkOOjBX9oJNiV6G3P+T+tihFjo2TqA==} + engines: {node: '>=0.10.0'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -2059,6 +2074,9 @@ packages: hermes-parser@0.32.0: resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -2770,6 +2788,9 @@ packages: peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -2782,6 +2803,13 @@ packages: react: '*' react-native: '*' + react-native-paper@5.14.5: + resolution: {integrity: sha512-eaIH5bUQjJ/mYm4AkI6caaiyc7BcHDwX6CqNDi6RIxfxfWxROsHpll1oBuwn/cFvknvA8uEAkqLk/vzVihI3AQ==} + peerDependencies: + react: '*' + react-native: '*' + react-native-safe-area-context: '*' + react-native-reanimated@4.1.3: resolution: {integrity: sha512-GP8wsi1u3nqvC1fMab/m8gfFwFyldawElCcUSBJQgfrXeLmsPPUOpDw44lbLeCpcwUuLa05WTVePdTEwCLTUZg==} peerDependencies: @@ -4069,6 +4097,12 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 + '@callstack/react-theme-provider@3.0.9(react@19.1.0)': + dependencies: + deepmerge: 3.3.0 + hoist-non-react-statics: 3.3.2 + react: 19.1.0 + '@expo/cli@54.0.15(expo-router@6.0.14)(expo@54.0.22)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))': dependencies: '@0no-co/graphql.web': 1.2.0 @@ -5294,6 +5328,11 @@ snapshots: color-name: 1.1.4 simple-swizzle: 0.2.4 + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + color@4.2.3: dependencies: color-convert: 2.0.1 @@ -5382,6 +5421,8 @@ snapshots: deep-extend@0.6.0: {} + deepmerge@3.3.0: {} + deepmerge@4.3.1: {} defaults@1.0.4: @@ -5837,6 +5878,10 @@ snapshots: dependencies: hermes-estree: 0.32.0 + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -6733,6 +6778,8 @@ snapshots: dependencies: react: 19.1.0 + react-is@16.13.1: {} + react-is@18.3.1: {} react-is@19.2.0: {} @@ -6742,6 +6789,15 @@ snapshots: react: 19.1.0 react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0) + react-native-paper@5.14.5(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + dependencies: + '@callstack/react-theme-provider': 3.0.9(react@19.1.0) + color: 3.2.1 + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0) + react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + use-latest-callback: 0.2.6(react@19.1.0) + react-native-reanimated@4.1.3(@babel/core@7.28.5)(react-native-worklets@0.5.1(@babel/core@7.28.5)(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.5)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@babel/core': 7.28.5