diff --git a/GETTING_STARTED.md b/GETTING_STARTED.md index 9b6da56..83abb56 100644 --- a/GETTING_STARTED.md +++ b/GETTING_STARTED.md @@ -373,4 +373,4 @@ If you encounter any issues during setup: 4. Try running `pnpm install` again from the root directory 5. Review the error messages carefully - they often contain helpful debugging information -For project-specific questions, refer to [CLAUDE.md](CLAUDE.md) or open an issue on GitHub. \ No newline at end of file +For project-specific questions, refer to [CLAUDE.md](CLAUDE.md) or open an issue on GitHub. diff --git a/apps/landing/next.config.ts b/apps/landing/next.config.ts index 7329063..eb90e14 100644 --- a/apps/landing/next.config.ts +++ b/apps/landing/next.config.ts @@ -1,7 +1,44 @@ import type { NextConfig } from 'next' const nextConfig: NextConfig = { - /* config options here */ + async headers() { + return [ + { + source: '/:path*', + headers: [ + { + key: 'X-DNS-Prefetch-Control', + value: 'on', + }, + { + key: 'Strict-Transport-Security', + value: 'max-age=63072000; includeSubDomains; preload', + }, + { + key: 'X-Content-Type-Options', + value: 'nosniff', + }, + { + key: 'X-Frame-Options', + value: 'DENY', + }, + { + key: 'Content-Security-Policy', + value: + "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; font-src 'self' fonts.gstatic.com data:; img-src 'self' data: https:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';", + }, + { + key: 'Referrer-Policy', + value: 'strict-origin-when-cross-origin', + }, + { + key: 'Permissions-Policy', + value: 'camera=(), microphone=(), geolocation=()', + }, + ], + }, + ] + }, } export default nextConfig diff --git a/apps/landing/src/app/globals.css b/apps/landing/src/app/globals.css index 0390a2f..7bf057b 100644 --- a/apps/landing/src/app/globals.css +++ b/apps/landing/src/app/globals.css @@ -1,21 +1,22 @@ @import 'tailwindcss'; -@import '@superpool/design/tokens.css'; @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&family=Geist:wght@300;400;500;600;700&display=swap'); -@theme inline { +@custom-variant dark (&:where(.dark, .dark *)); + +@theme { /* SuperPool Design System Colors */ --color-primary: #2563eb; - --color-secondary: #0f172a; --color-accent: #06b6d4; --color-success: #10b981; --color-warning: #f59e0b; --color-error: #ef4444; - /* Background Colors */ + /* Background/Foreground colors */ --color-background: #ffffff; - --color-background-dark: #0f172a; + --color-secondary: #f8f9fa; --color-foreground: #0f172a; --color-foreground-muted: #64748b; + --color-inverted: #0f172a; /* Typography - SuperPool Contemporary Tech */ --font-primary: 'Plus Jakarta Sans', system-ui, -apple-system, sans-serif; @@ -34,12 +35,17 @@ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); } -@media (prefers-color-scheme: dark) { - @theme inline { - --color-background: var(--color-background-dark); - --color-foreground: #ffffff; - --color-foreground-muted: #94a3b8; - } +/* Dark theme */ +.dark { + --color-background: #0f172a; + --color-secondary: #1e293b; + --color-foreground: #ffffff; + --color-foreground-muted: #94a3b8; + --color-inverted: #ffffff; +} + +html { + scroll-behavior: smooth; } body { diff --git a/apps/landing/src/app/layout.tsx b/apps/landing/src/app/layout.tsx index 9533389..4197f10 100644 --- a/apps/landing/src/app/layout.tsx +++ b/apps/landing/src/app/layout.tsx @@ -1,6 +1,7 @@ import type { Metadata } from 'next' import { Geist, Geist_Mono } from 'next/font/google' import './globals.css' +import { ThemeProvider } from '@/contexts/ThemeContext' const geistSans = Geist({ variable: '--font-geist-sans', @@ -24,7 +25,9 @@ export default function RootLayout({ }>) { return ( - {children} + + {children} + ) } diff --git a/apps/landing/src/app/page.tsx b/apps/landing/src/app/page.tsx index 50fee74..7ffc3c4 100644 --- a/apps/landing/src/app/page.tsx +++ b/apps/landing/src/app/page.tsx @@ -1,189 +1,19 @@ -import { Button } from '@superpool/ui' -import Image from 'next/image' +'use client' -const features = [ - { - icon: '🔐', - title: 'Secure Wallet Authentication', - description: - 'Connect with 100+ wallets including MetaMask, WalletConnect, and Coinbase. Secure signature-based login with no passwords required.', - image: '/images/illustrations/feature_1.png', - }, - { - icon: '🏊', - title: 'Create & Join Lending Pools', - description: - 'Start your own micro-lending community or join existing pools. Each pool has its own members and lending parameters managed by administrators.', - image: '/images/illustrations/feature_2.png', - }, - { - icon: '💰', - title: 'Contribute & Borrow Funds', - description: - 'Pool members can contribute POL to provide liquidity and request loans from their trusted community with AI-assisted approval.', - image: '/images/illustrations/feature_3.png', - }, - { - icon: '🛡️', - title: 'Multi-Sig Security', - description: - 'Enhanced security through multi-signature wallet controls for all critical protocol actions, ensuring decentralized governance and protection.', - image: '/images/illustrations/feature_4.png', - }, -] +import { Navigation } from '@/components/Navigation' +import { HeroSection } from '@/components/HeroSection' +import { FeaturesSection } from '@/components/FeaturesSection' +import { CTASection } from '@/components/CTASection' +import { Footer } from '@/components/Footer' export default function Home() { return ( -
- {/* Navigation */} - - - {/* Hero Section */} -
-
-

- Decentralized - Micro-Lending -
- on Polygon -

-

- Create trusted lending pools with your community. Secure, transparent, and governed by multi-signature wallets for maximum - security. -

-
- - -
-
-
- - {/* Features Section */} -
-
-
-

How SuperPool Works

-

Four simple steps to decentralized lending

-
- -
- {features.map((feature, index) => ( -
-
-
{feature.icon}
-

{feature.title}

-

{feature.description}

-
-
-
-
- {feature.title} -
-
-
-
- ))} -
-
-
- - {/* CTA Section */} -
-
-

Ready to Start Lending?

-

Join the decentralized lending revolution on Polygon

- -
-
- - {/* Footer */} - +
+ + + + +
) } diff --git a/apps/landing/src/components/CTASection.tsx b/apps/landing/src/components/CTASection.tsx new file mode 100644 index 0000000..78f7749 --- /dev/null +++ b/apps/landing/src/components/CTASection.tsx @@ -0,0 +1,17 @@ +import { Button } from '@superpool/ui' + +export function CTASection() { + return ( +
+
+

Ready to Start Lending?

+

Join the multi-chain lending revolution

+ + + +
+
+ ) +} diff --git a/apps/landing/src/components/FeaturesSection.tsx b/apps/landing/src/components/FeaturesSection.tsx new file mode 100644 index 0000000..36859c2 --- /dev/null +++ b/apps/landing/src/components/FeaturesSection.tsx @@ -0,0 +1,61 @@ +import Image from 'next/image' + +const features = [ + { + title: 'Secure Wallet Authentication', + description: + 'Secure signature-based login system supporting 500+ wallet providers through WalletConnect protocol. No passwords required.', + image: '/images/illustrations/feature_1.png', + }, + { + title: 'Create & Join Lending Pools', + description: + 'Start your own micro-lending community or join existing pools. Each pool has its own members and lending parameters managed by administrators.', + image: '/images/illustrations/feature_2.png', + }, + { + title: 'Contribute & Borrow Funds', + description: 'Pool members can contribute liquidity and request loans from their trusted community with AI-assisted approval.', + image: '/images/illustrations/feature_3.png', + }, + { + title: 'Multi-Sig Security', + description: + 'Enhanced security through multi-signature wallet controls for all critical protocol actions, ensuring decentralized governance and protection.', + image: '/images/illustrations/feature_4.png', + }, +] + +export function FeaturesSection() { + return ( +
+
+
+

+ Decentralized micro-lending for your community +

+

+ SuperPool empowers communities to create trusted lending pools on the blockchain. Secure, transparent, and governed by + multi-signature wallets for maximum security. +

+
+ +
+ {features.map((feature, index) => ( +
+
+
+ {feature.title} +
+
+

{feature.title}

+

{feature.description}

+
+
+
+ ))} +
+
+
+ ) +} diff --git a/apps/landing/src/components/Footer.tsx b/apps/landing/src/components/Footer.tsx new file mode 100644 index 0000000..d03ccb1 --- /dev/null +++ b/apps/landing/src/components/Footer.tsx @@ -0,0 +1,42 @@ +import Image from 'next/image' + +export function Footer() { + return ( + + ) +} diff --git a/apps/landing/src/components/HeroSection.tsx b/apps/landing/src/components/HeroSection.tsx new file mode 100644 index 0000000..6533d08 --- /dev/null +++ b/apps/landing/src/components/HeroSection.tsx @@ -0,0 +1,30 @@ +import { Button } from '@superpool/ui' + +export function HeroSection() { + return ( +
+
+

+ Decentralized + Micro-Lending +
+ Multi-Chain +

+

+ Create trusted lending pools with your community. Secure, transparent, and governed by multi-signature wallets for maximum + security. +

+
+ + + +
+
+
+ ) +} diff --git a/apps/landing/src/components/Navigation.tsx b/apps/landing/src/components/Navigation.tsx new file mode 100644 index 0000000..0e80bbd --- /dev/null +++ b/apps/landing/src/components/Navigation.tsx @@ -0,0 +1,26 @@ +import { ThemeToggle } from '@/components/ThemeToggle' +import Image from 'next/image' + +export function Navigation() { + return ( + + ) +} diff --git a/apps/landing/src/components/ThemeToggle.tsx b/apps/landing/src/components/ThemeToggle.tsx new file mode 100644 index 0000000..a40676c --- /dev/null +++ b/apps/landing/src/components/ThemeToggle.tsx @@ -0,0 +1,40 @@ +'use client' + +import { useTheme } from '@/contexts/ThemeContext' + +export function ThemeToggle() { + const { theme, setTheme } = useTheme() + + return ( +
+ + +
+ ) +} diff --git a/apps/landing/src/contexts/ThemeContext.tsx b/apps/landing/src/contexts/ThemeContext.tsx new file mode 100644 index 0000000..0022af9 --- /dev/null +++ b/apps/landing/src/contexts/ThemeContext.tsx @@ -0,0 +1,54 @@ +'use client' + +import React, { createContext, useContext, useEffect, useState } from 'react' + +type Theme = 'light' | 'dark' + +interface ThemeContextType { + theme: Theme + toggleTheme: () => void + setTheme: (theme: Theme) => void +} + +const ThemeContext = createContext(undefined) + +export function ThemeProvider({ children }: { children: React.ReactNode }) { + const [theme, setTheme] = useState(() => { + // Lazy initialization to prevent flash + if (typeof window !== 'undefined') { + const savedTheme = window.localStorage.getItem('theme') + // Validate savedTheme before using it + if (savedTheme === 'light' || savedTheme === 'dark') { + return savedTheme + } + + // Fallback to system preference + const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches + return prefersDark ? 'dark' : 'light' + } + return 'dark' // SSR fallback + }) + + useEffect(() => { + if (typeof window !== 'undefined') { + // Update document class and localStorage + window.document.documentElement.classList.remove('light', 'dark') + window.document.documentElement.classList.add(theme) + window.localStorage.setItem('theme', theme) + } + }, [theme]) + + const toggleTheme = () => { + setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light')) + } + + return {children} +} + +export function useTheme() { + const context = useContext(ThemeContext) + if (context === undefined) { + throw new Error('useTheme must be used within a ThemeProvider') + } + return context +} diff --git a/apps/mobile/package.json b/apps/mobile/package.json index c7e3e7a..45da886 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -59,4 +59,4 @@ "typescript": "~5.9.2" }, "private": true -} +} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs index 1b728d1..0b5e92e 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -84,6 +84,7 @@ export default [ }, globals: { ...globals.node, + ...globals.browser, ...globals.es2022, __DEV__: 'readonly', NodeJS: 'readonly', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dae31c1..03449dd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -152,7 +152,7 @@ importers: version: 4.1.0(mobx@6.13.7)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0) nativewind: specifier: ^4.2.0 - version: 4.2.0(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))) + version: 4.2.1(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))) react: specifier: 19.1.0 version: 19.1.0 @@ -7980,8 +7980,8 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true - nativewind@4.2.0: - resolution: {integrity: sha512-FjH4mu474tdEQRGfE5PwhPLmM3ldp5XLAEQN7yciOMF2ZEMHw6Qm3gmRwzRbhpOOefxAnjkZ5c9NY3ZWvKFx5w==} + nativewind@4.2.1: + resolution: {integrity: sha512-10uUB2Dlli3MH3NDL5nMHqJHz1A3e/E6mzjTj6cl7hHECClJ7HpE6v+xZL+GXdbwQSnWE+UWMIMsNz7yOQkAJQ==} engines: {node: '>=16'} peerDependencies: tailwindcss: '>3.3.0' @@ -8784,8 +8784,8 @@ packages: react-native-animatable@1.4.0: resolution: {integrity: sha512-DZwaDVWm2NBvBxf7I0wXKXLKb/TxDnkV53sWhCvei1pRyTX3MVFpkvdYBknNBqPrxYuAIlPxEp7gJOidIauUkw==} - react-native-css-interop@0.2.0: - resolution: {integrity: sha512-16eCBhbUwgux5hk0Awm2A6GaMkiIBO+ynh+Yqfoy9a/huNJTfEMSCeg409mNiD4oYqC2CVaOjg5t6lbKPEPaUw==} + react-native-css-interop@0.2.1: + resolution: {integrity: sha512-B88f5rIymJXmy1sNC/MhTkb3xxBej1KkuAt7TiT9iM7oXz3RM8Bn+7GUrfR02TvSgKm4cg2XiSuLEKYfKwNsjA==} engines: {node: '>=18'} peerDependencies: react: '>=18' @@ -21408,11 +21408,11 @@ snapshots: napi-postinstall@0.3.3: {} - nativewind@4.2.0(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))): + nativewind@4.2.1(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))): dependencies: comment-json: 4.2.5 debug: 4.4.3(supports-color@8.1.1) - react-native-css-interop: 0.2.0(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))) + react-native-css-interop: 0.2.1(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))) tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2)) transitivePeerDependencies: - react @@ -22228,7 +22228,7 @@ snapshots: dependencies: prop-types: 15.8.1 - react-native-css-interop@0.2.0(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))): + react-native-css-interop@0.2.1(react-native-reanimated@4.1.2(@babel/core@7.28.4)(react-native-worklets@0.5.1(@babel/core@7.28.4)(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-safe-area-context@5.6.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native-svg@15.12.1(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0))(react-native@0.81.4(@babel/core@7.28.4)(@types/react@19.1.13)(bufferutil@4.0.9)(react@19.1.0)(utf-8-validate@5.0.10))(react@19.1.0)(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@22.18.3)(typescript@5.9.2))): dependencies: '@babel/helper-module-imports': 7.27.1 '@babel/traverse': 7.28.4