Переглянути джерело

Enhance TypeScript verification guidelines and update package dependencies across Expo and Next.js applications to ensure consistency and safety. Added TypeScript safety checks in agents.md and updated React and Next.js versions in package.json files.

Andrey Yasko 10 місяців тому
батько
коміт
9f74ba40b5
47 змінених файлів з 207 додано та 89 видалено
  1. 66 0
      agents.md
  2. 1 0
      apps/expo/app/test/_layout.tsx
  3. 1 0
      apps/expo/app/test/groups/_layout.tsx
  4. 1 0
      apps/expo/app/test/groups/index.tsx
  5. 1 0
      apps/expo/app/test/groups/member.tsx
  6. 1 0
      apps/expo/app/test/groups/non-member.tsx
  7. 1 0
      apps/expo/app/test/groups/unauthenticated.tsx
  8. 1 0
      apps/expo/app/test/index.tsx
  9. 1 0
      apps/expo/app/test/layouts/_layout.tsx
  10. 1 0
      apps/expo/app/test/layouts/app-sidebar.tsx
  11. 1 0
      apps/expo/app/test/layouts/app-topnav.tsx
  12. 1 0
      apps/expo/app/test/layouts/index.tsx
  13. 1 0
      apps/expo/app/test/layouts/site-sidebar.tsx
  14. 1 0
      apps/expo/app/test/layouts/site-topnav.tsx
  15. 1 0
      apps/expo/app/test/ui.tsx
  16. 2 2
      apps/expo/package.json
  17. 1 0
      apps/nativetest/app.json
  18. 1 0
      apps/nativetest/assets/.gitkeep
  19. 1 0
      apps/nativetest/eas.json
  20. 1 0
      apps/nativetest/index.js
  21. 1 0
      apps/nativetest/metro.config.js
  22. 1 1
      apps/nativetest/package.json
  23. 1 0
      apps/nativetest/tsconfig.json
  24. 1 1
      apps/next/app/[...path]/page.js
  25. 1 0
      apps/next/app/test/groups/member/page.js
  26. 1 0
      apps/next/app/test/groups/non-member/page.js
  27. 1 0
      apps/next/app/test/groups/page.js
  28. 1 0
      apps/next/app/test/groups/unauthenticated/page.js
  29. 1 0
      apps/next/app/test/layouts/app-sidebar/layout.js
  30. 1 0
      apps/next/app/test/layouts/app-sidebar/page.js
  31. 1 0
      apps/next/app/test/layouts/app-topnav/layout.js
  32. 1 0
      apps/next/app/test/layouts/app-topnav/page.js
  33. 1 0
      apps/next/app/test/layouts/page.js
  34. 1 0
      apps/next/app/test/layouts/site-sidebar/layout.js
  35. 1 0
      apps/next/app/test/layouts/site-sidebar/page.js
  36. 1 0
      apps/next/app/test/layouts/site-topnav/page.js
  37. 1 0
      apps/next/app/test/ui/page.js
  38. 3 3
      apps/next/package.json
  39. 4 1
      apps/webtest/app/components/tabs/tabs-demo.tsx
  40. 1 0
      apps/webtest/app/streaming/page.tsx
  41. 3 3
      apps/webtest/package.json
  42. 0 0
      apps/webtest/tsconfig.tsbuildinfo
  43. 1 0
      packages/test-components/src/components/button/button.native.tsx
  44. 1 0
      packages/test-components/src/components/button/button.tsx
  45. 1 0
      packages/test-components/src/theme/tokens.ts
  46. 1 0
      packages/test-components/tsconfig.json
  47. 89 78
      yarn.lock

+ 66 - 0
agents.md

@@ -462,6 +462,12 @@ channel.bind('event-name', (data) => {
 
 Before submitting changes, verify:
 
+### TypeScript Verification
+- [ ] Run `npx tsc --noEmit` in the relevant app directory
+- [ ] No "Object is possibly 'undefined'" errors
+- [ ] Array access uses optional chaining (`array[0]?.prop`)
+- [ ] Object property access handles null/undefined cases
+
 ### Project Separation
 - [ ] Changes to test apps don't import from `packages/app`
 - [ ] Changes to main apps don't import from `packages/test-components`
@@ -497,6 +503,66 @@ Before submitting changes, verify:
 - [ ] Heavy components code-split or lazy loaded
 - [ ] No redundant memoization (React Compiler handles it)
 
+### TypeScript Safety (Critical for Production Builds)
+
+**Always run TypeScript check before committing:**
+
+```bash
+# Check specific app
+cd apps/webtest && npx tsc --noEmit
+cd apps/next && npx tsc --noEmit
+cd apps/expo && npx tsc --noEmit
+```
+
+**Common patterns that cause production TypeScript errors:**
+
+1. **Array access without bounds checking:**
+   ```javascript
+   // ❌ WRONG - Object is possibly 'undefined'
+   const firstItem = items[0].id;
+   
+   // ✅ CORRECT - Safe access with fallback
+   const firstItem = items[0]?.id ?? defaultValue;
+   ```
+
+2. **Object property access on potentially undefined:**
+   ```javascript
+   // ❌ WRONG - Object is possibly 'undefined'
+   const name = user.profile.name;
+   
+   // ✅ CORRECT - Optional chaining
+   const name = user?.profile?.name ?? 'Unknown';
+   ```
+
+3. **Function parameters that could be null:**
+   ```javascript
+   // ❌ WRONG - Parameter might be null
+   function process(data) {
+     return data.value;
+   }
+   
+   // ✅ CORRECT - Handle null case
+   function process(data) {
+     if (!data) return null;
+     return data.value;
+   }
+   ```
+
+4. **Map/filter results assumed to exist:**
+   ```javascript
+   // ❌ WRONG - find() can return undefined
+   const item = items.find(i => i.id === id);
+   console.log(item.name);
+   
+   // ✅ CORRECT - Check before use
+   const item = items.find(i => i.id === id);
+   if (item) {
+     console.log(item.name);
+   }
+   ```
+
+**Note:** Development builds may not catch all TypeScript errors that strict production builds will catch. Always verify with `tsc --noEmit` before pushing.
+
 ---
 
 ## Quick Reference

+ 1 - 0
apps/expo/app/test/_layout.tsx

@@ -11,3 +11,4 @@ export default function TestLayout() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/groups/_layout.tsx

@@ -11,3 +11,4 @@ export default function GroupsTestLayout() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/groups/index.tsx

@@ -17,3 +17,4 @@ export default function GroupsTestScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/groups/member.tsx

@@ -17,3 +17,4 @@ export default function GroupMemberScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/groups/non-member.tsx

@@ -17,3 +17,4 @@ export default function GroupNonMemberScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/groups/unauthenticated.tsx

@@ -17,3 +17,4 @@ export default function GroupUnauthenticatedScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/index.tsx

@@ -17,3 +17,4 @@ export default function TestScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/layouts/_layout.tsx

@@ -11,3 +11,4 @@ export default function LayoutsTestLayout() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/layouts/app-sidebar.tsx

@@ -25,3 +25,4 @@ export default function AppSidebarScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/layouts/app-topnav.tsx

@@ -25,3 +25,4 @@ export default function AppTopNavScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/layouts/index.tsx

@@ -17,3 +17,4 @@ export default function LayoutsTestScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/layouts/site-sidebar.tsx

@@ -25,3 +25,4 @@ export default function SiteSidebarScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/layouts/site-topnav.tsx

@@ -26,3 +26,4 @@ export default function SiteTopNavScreen() {
 
 
 
+

+ 1 - 0
apps/expo/app/test/ui.tsx

@@ -17,3 +17,4 @@ export default function TestUIScreen() {
 
 
 
+

+ 2 - 2
apps/expo/package.json

@@ -61,8 +61,8 @@
     "pako": "^2.1.0",
     "phosphor-react-native": "^2.2.1",
     "pusher-js": "^8.3.0",
-    "react": "19.1.0",
-    "react-dom": "19.1.0",
+    "react": "19.2.1",
+    "react-dom": "19.2.1",
     "react-hook-form": "^7.45.2",
     "react-i18next": "^13.2.2",
     "react-native": "0.81.5",

+ 1 - 0
apps/nativetest/app.json

@@ -38,3 +38,4 @@
 
 
 
+

+ 1 - 0
apps/nativetest/assets/.gitkeep

@@ -6,3 +6,4 @@
 
 
 
+

+ 1 - 0
apps/nativetest/eas.json

@@ -31,3 +31,4 @@
 
 
 
+

+ 1 - 0
apps/nativetest/index.js

@@ -11,3 +11,4 @@ registerRootComponent(App)
 
 
 
+

+ 1 - 0
apps/nativetest/metro.config.js

@@ -34,3 +34,4 @@ module.exports = withUniwindConfig(config, {
 
 
 
+

+ 1 - 1
apps/nativetest/package.json

@@ -20,7 +20,7 @@
     "expo-dev-client": "~5.1.0",
     "expo-status-bar": "~3.0.8",
     "lucide-react-native": "^0.476.0",
-    "react": "19.1.0",
+    "react": "19.2.1",
     "react-native": "0.81.5",
     "react-native-reanimated": "~3.17.4",
     "react-native-svg": "^15.0.0",

+ 1 - 0
apps/nativetest/tsconfig.json

@@ -21,3 +21,4 @@
 
 
 
+

+ 1 - 1
apps/next/app/[...path]/page.js

@@ -49,7 +49,7 @@ const getData = cache(async (params, search_params) => {
         },
         cache: 'no-store'
     };
-    let l = UNA_URL + '/api.php' + '?r=system/get_page_by_request/TemplServicePages&params[]=' + path+'&ts='+Date.now();
+    let l = UNA_URL + '/api.php' + '?r=system/get_page_by_request/TemplServicePages&params[]=' + path;
     let searchParams = JSON.parse(JSON.stringify(search_params));
 
     delete searchParams.cookieString;

+ 1 - 0
apps/next/app/test/groups/member/page.js

@@ -13,3 +13,4 @@ export default function TestGroupMemberPage() {
 
 
 
+

+ 1 - 0
apps/next/app/test/groups/non-member/page.js

@@ -13,3 +13,4 @@ export default function TestGroupNonMemberPage() {
 
 
 
+

+ 1 - 0
apps/next/app/test/groups/page.js

@@ -13,3 +13,4 @@ export default function TestGroupsPage() {
 
 
 
+

+ 1 - 0
apps/next/app/test/groups/unauthenticated/page.js

@@ -13,3 +13,4 @@ export default function TestGroupUnauthenticatedPage() {
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/app-sidebar/layout.js

@@ -25,3 +25,4 @@ export const revalidate = 3600
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/app-sidebar/page.js

@@ -16,3 +16,4 @@ export const revalidate = 3600
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/app-topnav/layout.js

@@ -25,3 +25,4 @@ export const revalidate = 3600
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/app-topnav/page.js

@@ -16,3 +16,4 @@ export const revalidate = 3600
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/page.js

@@ -13,3 +13,4 @@ export default function TestLayoutsPage() {
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/site-sidebar/layout.js

@@ -25,3 +25,4 @@ export const revalidate = 3600
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/site-sidebar/page.js

@@ -16,3 +16,4 @@ export const revalidate = 3600
 
 
 
+

+ 1 - 0
apps/next/app/test/layouts/site-topnav/page.js

@@ -21,3 +21,4 @@ export const revalidate = 3600
 
 
 
+

+ 1 - 0
apps/next/app/test/ui/page.js

@@ -13,3 +13,4 @@ export default function TestUIPage() {
 
 
 
+

+ 3 - 3
apps/next/package.json

@@ -24,10 +24,10 @@
     "eslint-config-next": "^15.4.3",
     "google-map-react": "^2.2.1",
     "lucide-react": "^0.525.0",
-    "next": "16.0.6",
+    "next": "16.0.7",
     "raf": "^3.4.1",
-    "react": "19.1.0",
-    "react-dom": "19.1.0",
+    "react": "19.2.1",
+    "react-dom": "19.2.1",
     "react-grid-layout": "^1.4.4",
     "react-map-gl": "^8.1.0",
     "react-moveable": "^0.54.1",

+ 4 - 1
apps/webtest/app/components/tabs/tabs-demo.tsx

@@ -536,6 +536,9 @@ export function RouterIntegrationDemo() {
     { id: '/profile', label: 'Profile' },
   ]
   
+  // Determine selected tab from pathname, fallback to first tab if not found
+  const selectedTab = tabs.find(tab => tab.id === pathname)?.id ?? tabs[0]?.id ?? '/dashboard'
+  
   const handleSelectionChange = (key: React.Key) => {
     // In a real app, this would navigate: router.push(key as string)
     console.log('Navigate to:', key)
@@ -548,7 +551,7 @@ export function RouterIntegrationDemo() {
       </p>
       <Tabs 
         variant="underlined"
-        selectedKey={tabs[0]?.id ?? '/dashboard'}  // In real app: pathname
+        selectedKey={selectedTab}
         onSelectionChange={handleSelectionChange}
       >
         <Tabs.ListContainer>

+ 1 - 0
apps/webtest/app/streaming/page.tsx

@@ -125,3 +125,4 @@ function LoadingSkeleton() {
 
 
 
+

+ 3 - 3
apps/webtest/package.json

@@ -25,9 +25,9 @@
     "@iconify/react": "^6.0.2",
     "@neo/test-components": "*",
     "lucide-react": "^0.555.0",
-    "next": "16.0.6",
-    "react": "^19.2.0",
-    "react-dom": "^19.2.0"
+    "next": "16.0.7",
+    "react": "19.2.1",
+    "react-dom": "19.2.1"
   },
   "devDependencies": {
     "@tailwindcss/postcss": "^4.1.0",

Різницю між файлами не показано, бо вона завелика
+ 0 - 0
apps/webtest/tsconfig.tsbuildinfo


+ 1 - 0
packages/test-components/src/components/button/button.native.tsx

@@ -54,3 +54,4 @@ export function Button({
 
 
 
+

+ 1 - 0
packages/test-components/src/components/button/button.tsx

@@ -9,3 +9,4 @@ export { Button } from './button.web'
 
 
 
+

+ 1 - 0
packages/test-components/src/theme/tokens.ts

@@ -54,3 +54,4 @@ export type ThemeName = 'light' | 'dark'
 
 
 
+

+ 1 - 0
packages/test-components/tsconfig.json

@@ -23,3 +23,4 @@
 
 
 
+

+ 89 - 78
yarn.lock

@@ -2233,10 +2233,10 @@
   dependencies:
     webpack-bundle-analyzer "4.10.1"
 
-"@next/env@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/env/-/env-16.0.6.tgz#2abeacd4de08137719c5fe32b69f6126ae7a42bb"
-  integrity sha512-PFTK/G/vM3UJwK5XDYMFOqt8QW42mmhSgdKDapOlCqBUAOfJN2dyOnASR/xUR/JRrro0pLohh/zOJ77xUQWQAg==
+"@next/env@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/env/-/env-16.0.7.tgz#eda56377a865d890d25122257d2b8a85b81d6d3d"
+  integrity sha512-gpaNgUh5nftFKRkRQGnVi5dpcYSKGcZZkQffZ172OrG/XkrnS7UBTQ648YY+8ME92cC4IojpI2LqTC8sTDhAaw==
 
 "@next/eslint-plugin-next@15.5.6":
   version "15.5.6"
@@ -2252,45 +2252,45 @@
   dependencies:
     fast-glob "3.3.1"
 
-"@next/swc-darwin-arm64@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.6.tgz#e43c59c193a27a10f299c15c7305560226680493"
-  integrity sha512-AGzKiPlDiui+9JcPRHLI4V9WFTTcKukhJTfK9qu3e0tz+Y/88B7vo5yZoO7UaikplJEHORzG3QaBFQfkjhnL0Q==
-
-"@next/swc-darwin-x64@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.6.tgz#083292f12c7fbc31658b5c7a581be1ec1c0bb04e"
-  integrity sha512-LlLLNrK9WCIUkq2GciWDcquXYIf7vLxX8XE49gz7EncssZGL1vlHwgmURiJsUZAvk0HM1a8qb1ABDezsjAE/jw==
-
-"@next/swc-linux-arm64-gnu@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.6.tgz#2495a4dc0d6ff6fba7bd5edfbec72c79b3221c29"
-  integrity sha512-r04NzmLSGGfG8EPXKVK72N5zDNnq9pa9el78LhdtqIC3zqKh74QfKHnk24DoK4PEs6eY7sIK/CnNpt30oc59kg==
-
-"@next/swc-linux-arm64-musl@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.6.tgz#06b6a22512a7f721f4075166177c965902d9a735"
-  integrity sha512-hfB/QV0hA7lbD1OJxp52wVDlpffUMfyxUB5ysZbb/pBC5iuhyLcEKSVQo56PFUUmUQzbMsAtUu6k2Gh9bBtWXA==
-
-"@next/swc-linux-x64-gnu@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.6.tgz#8ffa6574b3c64edae3c01255231c708f2abe21d9"
-  integrity sha512-PZJushBgfvKhJBy01yXMdgL+l5XKr7uSn5jhOQXQXiH3iPT2M9iG64yHpPNGIKitKrHJInwmhPVGogZBAJOCPw==
-
-"@next/swc-linux-x64-musl@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.6.tgz#4d2d912563b8423b304b5ebac091f52aa5b4ba49"
-  integrity sha512-LqY76IojrH9yS5fyATjLzlOIOgwyzBuNRqXwVxcGfZ58DWNQSyfnLGlfF6shAEqjwlDNLh4Z+P0rnOI87Y9jEw==
-
-"@next/swc-win32-arm64-msvc@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.6.tgz#d8f70405b5f0a3fb5037719deb0ae05085c335cd"
-  integrity sha512-eIfSNNqAkj0tqKRf0u7BVjqylJCuabSrxnpSENY3YKApqwDMeAqYPmnOwmVe6DDl3Lvkbe7cJAyP6i9hQ5PmmQ==
-
-"@next/swc-win32-x64-msvc@16.0.6":
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.6.tgz#0db8fe925c4d16bc226eb06030e84d914ec05e06"
-  integrity sha512-QGs18P4OKdK9y2F3Th42+KGnwsc2iaThOe6jxQgP62kslUU4W+g6AzI6bdIn/pslhSfxjAMU5SjakfT5Fyo/xA==
+"@next/swc-darwin-arm64@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.0.7.tgz#ffe8afc902807e409f16a5f585dc4cb683804931"
+  integrity sha512-LlDtCYOEj/rfSnEn/Idi+j1QKHxY9BJFmxx7108A6D8K0SB+bNgfYQATPk/4LqOl4C0Wo3LACg2ie6s7xqMpJg==
+
+"@next/swc-darwin-x64@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-16.0.7.tgz#ec5fd15ae391e1af9f152881f559bffaa24524e7"
+  integrity sha512-rtZ7BhnVvO1ICf3QzfW9H3aPz7GhBrnSIMZyr4Qy6boXF0b5E3QLs+cvJmg3PsTCG2M1PBoC+DANUi4wCOKXpA==
+
+"@next/swc-linux-arm64-gnu@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.0.7.tgz#22be26ee7544f68aa916159b823899b67b09f0a6"
+  integrity sha512-mloD5WcPIeIeeZqAIP5c2kdaTa6StwP4/2EGy1mUw8HiexSHGK/jcM7lFuS3u3i2zn+xH9+wXJs6njO7VrAqww==
+
+"@next/swc-linux-arm64-musl@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.0.7.tgz#1b34103951456e5d6766710e4f16dadbd7745bed"
+  integrity sha512-+ksWNrZrthisXuo9gd1XnjHRowCbMtl/YgMpbRvFeDEqEBd523YHPWpBuDjomod88U8Xliw5DHhekBC3EOOd9g==
+
+"@next/swc-linux-x64-gnu@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.0.7.tgz#b45e1fa7aaf844269e0932c4cde49bb6b0817ce9"
+  integrity sha512-4WtJU5cRDxpEE44Ana2Xro1284hnyVpBb62lIpU5k85D8xXxatT+rXxBgPkc7C1XwkZMWpK5rXLXTh9PFipWsA==
+
+"@next/swc-linux-x64-musl@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.0.7.tgz#c5376fd78ca97a911e2bbfb9b26dc623b54edfab"
+  integrity sha512-HYlhqIP6kBPXalW2dbMTSuB4+8fe+j9juyxwfMwCe9kQPPeiyFn7NMjNfoFOfJ2eXkeQsoUGXg+O2SE3m4Qg2w==
+
+"@next/swc-win32-arm64-msvc@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.0.7.tgz#2cf27e275ddd8d04f89391a9cdf6790cccb3bf09"
+  integrity sha512-EviG+43iOoBRZg9deGauXExjRphhuYmIOJ12b9sAPy0eQ6iwcPxfED2asb/s2/yiLYOdm37kPaiZu8uXSYPs0Q==
+
+"@next/swc-win32-x64-msvc@16.0.7":
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.0.7.tgz#e9e38fcca752902542c25c527e532af71e9ca812"
+  integrity sha512-gniPjy55zp5Eg0896qSrf3yB1dw4F/3s8VK1ephdsZZ129j2n6e1WqCbE2YgcKhW9hPB9TVZENugquWJD5x0ug==
 
 "@nodelib/fs.scandir@2.1.5":
   version "2.1.5"
@@ -10328,25 +10328,25 @@ nested-error-stacks@~2.0.1:
   resolved "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz"
   integrity sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==
 
-next@16.0.6:
-  version "16.0.6"
-  resolved "https://registry.yarnpkg.com/next/-/next-16.0.6.tgz#35cab6cdb58cb1f0013cb48c2ae7184ca8d0c9e0"
-  integrity sha512-2zOZ/4FdaAp5hfCU/RnzARlZzBsjaTZ/XjNQmuyYLluAPM7kcrbIkdeO2SL0Ysd1vnrSgU+GwugfeWX1cUCgCg==
+next@16.0.7:
+  version "16.0.7"
+  resolved "https://registry.yarnpkg.com/next/-/next-16.0.7.tgz#859045df71599a8883fc7049a65d6d468c56db08"
+  integrity sha512-3mBRJyPxT4LOxAJI6IsXeFtKfiJUbjCLgvXO02fV8Wy/lIhPvP94Fe7dGhUgHXcQy4sSuYwQNcOLhIfOm0rL0A==
   dependencies:
-    "@next/env" "16.0.6"
+    "@next/env" "16.0.7"
     "@swc/helpers" "0.5.15"
     caniuse-lite "^1.0.30001579"
     postcss "8.4.31"
     styled-jsx "5.1.6"
   optionalDependencies:
-    "@next/swc-darwin-arm64" "16.0.6"
-    "@next/swc-darwin-x64" "16.0.6"
-    "@next/swc-linux-arm64-gnu" "16.0.6"
-    "@next/swc-linux-arm64-musl" "16.0.6"
-    "@next/swc-linux-x64-gnu" "16.0.6"
-    "@next/swc-linux-x64-musl" "16.0.6"
-    "@next/swc-win32-arm64-msvc" "16.0.6"
-    "@next/swc-win32-x64-msvc" "16.0.6"
+    "@next/swc-darwin-arm64" "16.0.7"
+    "@next/swc-darwin-x64" "16.0.7"
+    "@next/swc-linux-arm64-gnu" "16.0.7"
+    "@next/swc-linux-arm64-musl" "16.0.7"
+    "@next/swc-linux-x64-gnu" "16.0.7"
+    "@next/swc-linux-x64-musl" "16.0.7"
+    "@next/swc-win32-arm64-msvc" "16.0.7"
+    "@next/swc-win32-x64-msvc" "16.0.7"
     sharp "^0.34.4"
 
 nice-try@^1.0.4:
@@ -11384,12 +11384,12 @@ react-devtools-core@^6.1.5:
     shell-quote "^1.6.1"
     ws "^7"
 
-react-dom@19.1.0:
-  version "19.1.0"
-  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.1.0.tgz#133558deca37fa1d682708df8904b25186793623"
-  integrity sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==
+react-dom@19.2.1:
+  version "19.2.1"
+  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.1.tgz#ce3527560bda4f997e47d10dab754825b3061f59"
+  integrity sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==
   dependencies:
-    scheduler "^0.26.0"
+    scheduler "^0.27.0"
 
 react-dom@^18.2.0:
   version "18.3.1"
@@ -11399,13 +11399,6 @@ react-dom@^18.2.0:
     loose-envify "^1.1.0"
     scheduler "^0.23.2"
 
-react-dom@^19.2.0:
-  version "19.2.0"
-  resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.2.0.tgz#00ed1e959c365e9a9d48f8918377465466ec3af8"
-  integrity sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==
-  dependencies:
-    scheduler "^0.27.0"
-
 react-draggable@^4.0.3, react-draggable@^4.4.6:
   version "4.5.0"
   resolved "https://registry.npmjs.org/react-draggable/-/react-draggable-4.5.0.tgz"
@@ -11574,6 +11567,11 @@ react-native-ios-context-menu@^1.15.3:
   dependencies:
     "@dominicstop/ts-event-emitter" "^1.1.0"
 
+react-native-is-edge-to-edge@1.1.7:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.7.tgz#28947688f9fafd584e73a4f935ea9603bd9b1939"
+  integrity sha512-EH6i7E8epJGIcu7KpfXYXiV2JFIYITtq+rVS8uEb+92naMRBdxhTuS8Wn2Q7j9sqyO0B+Xbaaf9VdipIAmGW4w==
+
 react-native-is-edge-to-edge@^1.1.6, react-native-is-edge-to-edge@^1.2.1:
   version "1.2.1"
   resolved "https://registry.npmjs.org/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.2.1.tgz"
@@ -11603,6 +11601,24 @@ react-native-pager-view@6.9.1:
   resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-6.9.1.tgz#a9e6d9323935cc2ae1d46d7816b66f76dc3eff8e"
   integrity sha512-uUT0MMMbNtoSbxe9pRvdJJKEi9snjuJ3fXlZhG8F2vVMOBJVt/AFtqMPUHu9yMflmqOr08PewKzj9EPl/Yj+Gw==
 
+react-native-reanimated@~3.17.4:
+  version "3.17.5"
+  resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.17.5.tgz#09ebe3c9e3379c5c0c588b7ab30c131ea29b60f0"
+  integrity sha512-SxBK7wQfJ4UoWoJqQnmIC7ZjuNgVb9rcY5Xc67upXAFKftWg0rnkknTw6vgwnjRcvYThrjzUVti66XoZdDJGtw==
+  dependencies:
+    "@babel/plugin-transform-arrow-functions" "^7.0.0-0"
+    "@babel/plugin-transform-class-properties" "^7.0.0-0"
+    "@babel/plugin-transform-classes" "^7.0.0-0"
+    "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0"
+    "@babel/plugin-transform-optional-chaining" "^7.0.0-0"
+    "@babel/plugin-transform-shorthand-properties" "^7.0.0-0"
+    "@babel/plugin-transform-template-literals" "^7.0.0-0"
+    "@babel/plugin-transform-unicode-regex" "^7.0.0-0"
+    "@babel/preset-typescript" "^7.16.7"
+    convert-source-map "^2.0.0"
+    invariant "^2.2.4"
+    react-native-is-edge-to-edge "1.1.7"
+
 react-native-reanimated@~4.1.1:
   version "4.1.3"
   resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-4.1.3.tgz#de29587b8ff7febada32497793803215faeac636"
@@ -11907,15 +11923,10 @@ react-youtube@^10.1.0:
     prop-types "15.8.1"
     youtube-player "5.5.2"
 
-react@19.1.0:
-  version "19.1.0"
-  resolved "https://registry.yarnpkg.com/react/-/react-19.1.0.tgz#926864b6c48da7627f004795d6cce50e90793b75"
-  integrity sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==
-
-react@^19.2.0:
-  version "19.2.0"
-  resolved "https://registry.yarnpkg.com/react/-/react-19.2.0.tgz#d33dd1721698f4376ae57a54098cb47fc75d93a5"
-  integrity sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==
+react@19.2.1:
+  version "19.2.1"
+  resolved "https://registry.yarnpkg.com/react/-/react-19.2.1.tgz#8600fa205e58e2e807f6ef431c9f6492591a2700"
+  integrity sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==
 
 read-cache@^1.0.0:
   version "1.0.0"
@@ -12253,7 +12264,7 @@ sax@>=0.6.0:
   resolved "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz"
   integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
 
-scheduler@0.26.0, scheduler@^0.26.0:
+scheduler@0.26.0:
   version "0.26.0"
   resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.26.0.tgz#4ce8a8c2a2095f13ea11bf9a445be50c555d6337"
   integrity sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==

Деякі файли не було показано, через те що забагато файлів було змінено