diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..6562ef77 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,5 @@ +{ + "enabledPlugins": { + "react-native-best-practices@callstack-agent-skills": true + } +} diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..b67ad418 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,133 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Package Manager + +This project uses **pnpm@9.15.3**. Node.js 22+ is required. Ensure both are on PATH before running any commands: + +```bash +export PATH="/opt/homebrew/opt/ruby/bin:$PATH" # required for pod commands on macOS +``` + +## Common Commands + +```bash +# Install all workspace dependencies +pnpm install + +# Start all dev servers (host + all mini apps) via mprocs +pnpm start + +# Run on iOS / Android +pnpm run:host:ios +pnpm run:host:android + +# Install iOS CocoaPods (run after adding native dependencies) +pnpm pods + +# Run across all packages +pnpm lint +pnpm test +pnpm typecheck + +# Run for a single package +pnpm --filter host test +pnpm --filter trading lint +``` + +## Architecture + +This is a **React Native Fintech Super App** using [Re.Pack](https://re-pack.dev) and **Module Federation V2** (Rspack-based) to load mini apps at runtime as separate JS bundles. + +### Workspace packages + +| Package | Role | +|---|---| +| `packages/host` | Native shell — owns the native binary, all native dependencies, top-level navigation, and MF remote wiring | +| `packages/auth` | Auth mini app — exposes `AuthProvider`, `SignInScreen`, `AccountScreen` | +| `packages/sdk` | Shared library — `KrakenWebSocketService`, `PriceProvider`, hooks, utilities, types, `getSharedDependencies()` for MF | +| `packages/trading` | Trading mini app — live asset list, Skia chart with OHLC history, trade bottom sheet | +| `packages/wallet` | Wallet mini app — real-time portfolio balance using live prices | + +### Module Federation pattern + +- **Host** loads remotes eagerly (`eager: true`) and is the only app that runs natively. +- **Mini apps** set `eager: false`, expose only `./App` (their `MainNavigator`), and consume `auth` as a remote. +- All shared deps (react, react-native, navigation libs, sdk) are declared as singletons via `getSharedDependencies()` from `sdk`. +- Each mini app's bundler output `uniqueName` must be unique (e.g. `sas-host`, `sas-trading`). +- TypeScript declarations for all federated imports live in `packages/host/src/declarations.d.ts`. + +### How host loads a mini app + +```tsx +// In host — lazy load a remote module via React.lazy + Suspense +const TradingApp = React.lazy(() => + randomDelay().then(() => import('trading/App')) +); + + + }> + + + +``` + +The `randomDelay()` (250–350ms) is intentional for demo purposes — it makes the loading state visible. Remove it for production. + +### Native dependencies + +**All native deps live in `host`** — mini apps declare them as `peerDependencies` only. When adding a new native dep: +1. Add it to `host/package.json` dependencies +2. Add it to `sdk/lib/dependencies.json` if it should be a MF shared singleton +3. Add it as `peerDependency` in each mini app that uses it +4. Add a `paths` entry in the mini app's `tsconfig.json` pointing to `../host/node_modules/` +5. Run `pnpm pods` to reinstall iOS pods + +### SDK exports + +`packages/sdk` is a shared singleton federated across all mini apps. It exports: +- `KrakenWebSocketService` — singleton WebSocket to Kraken, shared across Trading and Wallet +- `PriceProvider` / `PriceContext` — React context wrapping the WS service +- `usePrices()` / `useAssetPrice(symbol)` — price subscription hooks (updates wrapped in `useTransition`) +- `useHistoricalPrices(krakenPair)` — fetches OHLC history from Kraken REST API +- `useFlashAnimation(value)` — Reanimated hook for green/red flash on value change +- `useConnectionStatus()` — WebSocket connection status hook +- `ConnectionBanner` — UI component showing reconnecting/disconnected state +- `ASSETS`, `ASSET_MAP`, `colors`, `formatPrice`, `formatValue`, `getAssetIconUri` + +### Auth flow + +`AuthProvider` (from `auth` remote) uses a render-prop pattern — it calls `children` with `{ isLoading, isSignout }`. Host's `App.tsx` gates the navigation container behind auth state. Initial state is `isLoading: true` to prevent an unauthenticated shell flash before token restore completes. + +### Performance patterns + +- **Leaf components**: `PriceCell` (trading) and `ValueCell` (wallet) isolate `useAssetPrice` subscriptions so only the price node re-renders on ticks. The outer row (`AssetRow`, `HoldingRow`) owns Reanimated shared values for the flash animation and never re-renders on price ticks. +- **useTransition**: All price state updates in `usePrices` are wrapped in `startTransition` — price ticks are non-priority and won't block user interactions. +- **startTransition on chart**: `setChartData` in `AssetDetailsScreen` is wrapped in `React.startTransition` to defer chart rebuilds. +- **React Compiler**: `babel-plugin-react-compiler` is enabled across all packages for automatic memoization. + +### Dev server ports + +| App | Port | +|---|---| +| host | 8081 | +| auth | 9003 | +| trading | 9001 | +| wallet | 9002 | + +### Mocks for standalone development + +Each mini app has a `mocks/` folder with local stubs for federated modules (e.g. `auth/AuthProvider`). These are used when running a mini app standalone without the host. + +### Rspack / Re.Pack config + +Each package has an `rspack.config.ts`. The loader used is `@callstack/repack/babel-swc-loader`. Asset transforms use `getAssetTransformRules()` — mini apps use `{inline: true}`. + +### Testing + +Host has a Jest test suite (`pnpm --filter host test`). Key mocks in `packages/host/jest.setup.js`: +- `react-native-gesture-handler/jestSetup` +- `@bottom-tabs/react-navigation` — mocked (native-only, can't run in Jest) +- `react-native-bootsplash` — mocked +- `@callstack/repack/client` — mocked with `auth`, `trading`, `wallet` container stubs \ No newline at end of file diff --git a/README.md b/README.md index 98a43daf..cc204fc1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ - Super App Showcase + Fintech Super App -

Super Apps in React Native with Re.Pack

+

Fintech Super App — React Native with Re.Pack & Module Federation

[![mit licence][license-badge]][license] @@ -10,130 +10,141 @@
-Bring micro-frontend architecture to your mobile [React Native](https://reactnative.dev) app with [Re.Pack](https://re-pack.dev) and make it a Super App. [Learn more.](https://www.callstack.com/services/super-app-development?utm_campaign=super_apps&utm_source=github&utm_content=super_app_showcase) - ## The problem -As small apps grow, offering multiple services (payments, messaging, social network, gaming, news, etc.), maintaining them becomes challenging. The codebase can become cluttered, and the app size may deter users who only need a few services. Today, teams dealing with such a challenge can either use monorepo to help draw the boundaries between functionalities, or leverage publishing and consuming packages from npm. However, both approaches have their drawbacks. At the same time, web teams have acccess to micro-frontend architecture, which allows them to split the app into smaller, more manageable parts downloadable on demand. +As fintech products grow, they need to offer multiple services — trading, portfolio management, account settings — while maintaining independent release cycles and team ownership. A classic monorepo helps draw boundaries but still ships everything together: one team's change can block another's deployment, and every user downloads the entire app regardless of which services they actually use. + +At the same time, web teams have had micro-frontend architecture for years. Mobile hasn't had an equivalent — until now. ## The solution -This showcase demonstrates how to achieve a proper micro-frontend architecture for mobile apps with [Module Federation](https://module-federation.io). It simplifies setup and maintenance, allowing independent apps to be deployed separately or as part of a super app. Micro-frontends can be moved to separate repositories, enabling independent team work or external contributions. Unlike classic monorepos, this setup uses runtime dependencies, so updating a micro-frontend automatically updates all apps using it without redeployment. +This showcase demonstrates a **production-grade micro-frontend architecture for React Native** using [Re.Pack](https://re-pack.dev) and [Module Federation](https://module-federation.io). Each mini app (Trading, Wallet, Auth) is an independent JavaScript bundle, loaded at runtime by the host shell. Teams can develop, test, and deploy their mini app independently. Users only download the bundles they need. -## The Super App +Key properties of this architecture: +- **Runtime dependencies** — updating a mini app takes effect immediately without a host app release +- **Independent deployability** — each mini app has its own dev server, bundle, and release pipeline +- **Shared singletons** — native libraries (`react-native`, `react-native-reanimated`, etc.) and the live price feed (`KrakenWebSocketService`) are shared across all mini apps at runtime, keeping bundle sizes small and behaviour consistent + +## The App - - - + + + - - - + + +
Host AppMini Apps InteractionBooking Standalone AppTrading AppWallet AppAuth App
host-main-screenhostbookingtrading-appwallet-appauth-app
-## Structure +A dark-themed Fintech Super App with three tabs: - +| Tab | Mini App | Description | +|---|---|---| +| Trading | `packages/trading` | Live crypto asset list, Skia price chart, trade bottom sheet | +| Wallet | `packages/wallet` | Real-time portfolio balance, per-asset holdings | +| Account | `packages/auth` | Demo user profile, sign-out | -The super app contains 4 apps: +Authentication is handled by a shared `AuthProvider` federated from `packages/auth`, gating the tab bar until the user signs in. -- `host` - the main app, which is a super app. It contains all the micro-frontends and provides a way to navigate between them. -- `booking` - micro-frontend for booking service. - Booking exposes `UpcomingAppointments` screen and `MainNavigator`. `MainNavigator` is Booking app itself. `UpcomingAppointments` screen is a screen, which is used in the super app in its own navigation. -- `shopping` - micro-frontend for shopping service. - Shopping exposes `MainNavigator`. `MainNavigator` is Shopping app itself. -- `news` - micro-frontend for news service. - News exposes `MainNavigator`. `MainNavigator` is News app itself. News mini app stored in separate repository https://github.com/callstack/news-mini-app-showcase to provide the example of using remote container outside of the monorepo. -- `dashboard` - micro-frontend for dashboard service. - Dashboard exposes `MainNavigator`. `MainNavigator` is Dashboard app itself. -- `auth` - module that is used by other modules to provide authentication and authorization flow and UI. +## Architecture -Each of the mini apps could be deployed and run as a standalone app. +![Architecture diagram](images/diagram.png) -## How to use +**Key design decisions:** -### Requirements +- All native dependencies live in `host`. Mini apps declare them as `peerDependencies` and consume them as Module Federation shared singletons — no duplicate native modules, no double-initialisation crashes. +- `sdk` is a shared singleton: its `PriceContext` and `KrakenWebSocketService` instance are the same object across host and all mini apps, providing a single WebSocket connection shared by Trading and Wallet. +- Each mini app's `rspack.config.ts` points `resolve.modules` at `../host/node_modules` so the bundler can locate peer deps during compilation without duplicating them. +- `useTransition` wraps all price state updates, marking them as non-priority so live ticks never block user interactions. -⚠️ **Important:** This project requires: +## Stack -- Node.js version 22 or higher -- pnpm as package manager +| | | +|---|---| +| React Native | 0.84 | +| React | 19 | +| Re.Pack | 5.2 (Rspack-based) | +| Module Federation | V2 | +| Animations | react-native-reanimated 4 + react-native-worklets | +| Charts | victory-native 41 (Skia-based) | +| Lists | @legendapp/list 2 | +| Bottom sheet | @gorhom/bottom-sheet 5 | +| Navigation | @react-navigation/native 7 + react-native-bottom-tabs | +| React Compiler | babel-plugin-react-compiler 1.0 | -Please refer to the official [pnpm installation guide](https://pnpm.io/installation) for detailed setup instructions. +## Structure + +| Package | Role | +|---|---| +| `packages/host` | Native shell — owns binary, all native deps, top-level navigation, MF remote wiring | +| `packages/auth` | Auth mini app — `AuthProvider`, `SignInScreen`, `AccountScreen` | +| `packages/trading` | Trading mini app — live asset list, Skia chart, trade bottom sheet | +| `packages/wallet` | Wallet mini app — real-time portfolio balance and holdings | +| `packages/sdk` | Shared library — `KrakenWebSocketService`, `PriceProvider`, hooks, utils, types | -After installation, it's recommended to align your pnpm version with the project: +## Requirements + +- Node.js 22+ +- pnpm 9.15.3 ```bash -pnpm self-update +npm install -g pnpm@9.15.3 ``` -### Setup - -Install dependencies for all apps: +On macOS, Homebrew Ruby is required for pod install: -``` -pnpm install +```bash +export PATH="/opt/homebrew/opt/ruby/bin:$PATH" ``` -#### iOS +## Setup -In case automatic pods installation doesn't work when running iOS project, you can install manually: +Install dependencies for all packages: -``` -pnpm pods +```bash +pnpm install +pnpm pods # iOS only — install CocoaPods ``` -### Running the Super App +## Running -Start DevServer for Host and Mini apps: +Start all dev servers (host + all mini apps) via mprocs: -``` +```bash pnpm start ``` -Run Super App on iOS or Android (ios | android): +Run on device/simulator: +```bash +pnpm run:host:ios +pnpm run:host:android ``` -pnpm run:host: -``` - -### Running the Mini App as a standalone app - -> **💡 NOTE** -> -> The "booking" and "shopping" mini-apps can't be run in standalone mode (i.e. without the host running). This is a deliberate decision of this repository to showcase the possibility and to reduce the amount of work to keep the mini-apps dependencies up-to-date. -> -> It's up to you to decide on what kind of developer experience your super app has. -Start DevServer for a Dashboard Mini App as a standalone app: +### Dev server ports -``` -pnpm start:dashboard -``` +| App | Port | +|---|---| +| host | 8081 | +| trading | 9001 | +| wallet | 9002 | +| auth | 9003 | -### Code Quality Scripts +## Code quality -Run tests for all apps: - -``` -pnpm test -``` - -Run linter for all apps: - -``` -pnpm lint +```bash +pnpm test # run all tests +pnpm lint # ESLint across all packages +pnpm typecheck # TypeScript across all packages ``` -Run type check for all apps: +## Demo guide -``` -pnpm typecheck -``` +Looking to run this in a client demo or build a business case? Read the [Module Federation Demo Guide](docs/MODULE_FEDERATION_DEMO_GUIDE.md) — it covers the architecture, a step-by-step demo script, and a business case template with bundle size and CI time tables. ## Contributing @@ -141,7 +152,7 @@ Read the [contribution guidelines](/CONTRIBUTING.md) before contributing. ## Made with ❤️ at Callstack -Super App showcase is an open source project and will always remain free to use. If you think it's cool, please star it 🌟. [Callstack][callstack-readme-with-love] is a group of React and React Native geeks, contact us at [hello@callstack.com](mailto:hello@callstack.com) if you need any help with these or just want to say hi! +Fintech Super App is an open source project and will always remain free to use. If you think it's cool, please star it 🌟. [Callstack][callstack-readme-with-love] is a group of React and React Native geeks, contact us at [hello@callstack.com](mailto:hello@callstack.com) if you need any help with these or just want to say hi! @@ -151,4 +162,4 @@ Super App showcase is an open source project and will always remain free to use. [prs-welcome-badge]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge [prs-welcome]: ./CONTRIBUTING.md [chat-badge]: https://img.shields.io/discord/426714625279524876.svg?style=for-the-badge -[chat]: https://discord.gg/Q4yr2rTWYF +[chat]: https://discord.gg/Q4yr2rTWYF \ No newline at end of file diff --git a/docs/MODULE_FEDERATION_DEMO_GUIDE.md b/docs/MODULE_FEDERATION_DEMO_GUIDE.md new file mode 100644 index 00000000..0fabc80e --- /dev/null +++ b/docs/MODULE_FEDERATION_DEMO_GUIDE.md @@ -0,0 +1,341 @@ +# Micro-Frontends for React Native: A Fintech Case Study + +> How Re.Pack and Module Federation bring web-style micro-frontend architecture to mobile — and why fintech teams should care. + +--- + +## The Problem + +Fintech products grow fast. A trading app becomes a trading app with a wallet. The wallet adds a crypto exchange. The exchange needs KYC. Before long, a single codebase is owned by four teams who have never met, a change to the auth module blocks the trading release, and every user downloads the full app regardless of which services they actually use. + +Web teams solved this years ago with micro-frontends: independently deployable UI slices, each owned by one team, composed at runtime. Mobile hasn't had an equivalent — until now. + +--- + +## The Solution: Module Federation for React Native + +[Re.Pack](https://re-pack.dev) is a Webpack/Rspack-based bundler for React Native. Its Module Federation V2 plugin lets you do something React Native was never designed to support: **load a JavaScript bundle from a remote URL at runtime, after the app has shipped**. + +Each mini app is: +- A separate bundle, hosted on your CDN +- Independently deployable — no App Store release required +- Developed and tested by its own team in isolation +- Downloaded only when (and if) the user navigates to it + +This showcase makes that concrete with a production-grade Fintech app: a trading screen with live crypto prices, a wallet showing real-time portfolio value, and a shared auth layer — all running as independent bundles inside a single native shell. + +--- + +## Architecture + +![Architecture diagram](../images/diagram.png) + +### Packages + +| Package | Role | +|---|---| +| `packages/host` | Native shell — owns the binary, all native deps, top-level navigation, MF remote wiring | +| `packages/trading` | Trading mini app — live asset list, Skia chart, trade bottom sheet | +| `packages/wallet` | Wallet mini app — real-time portfolio balance and holdings | +| `packages/auth` | Auth mini app — `AuthProvider`, `SignInScreen`, `AccountScreen` | +| `packages/sdk` | Shared library — `KrakenWebSocketService`, `PriceProvider`, hooks, types, utilities | + +### Key design decisions + +**All native dependencies live in `host`.** Mini apps declare them as `peerDependencies` and consume them as Module Federation shared singletons — no duplicate native modules, no double-initialisation crashes, no native code in mini app bundles. + +**`sdk` is a shared singleton.** Its `PriceContext` and `KrakenWebSocketService` instance are the same object in memory across host and all mini apps. Trading and Wallet share one WebSocket connection, not two. + +**Independent deployability is real.** Each mini app has its own rspack config, dev server, and bundle output. Updating the trading screen is a CDN deploy — no App Store review, no host release. + +--- + +## How Module Federation Is Configured + +### Host: consuming remotes + +```ts +// packages/host/rspack.config.ts +new Repack.plugins.ModuleFederationPluginV2({ + name: 'host', + remotes: { + auth: `auth@https://cdn.example.com/${platform}/mf-manifest.json`, + trading: `trading@https://cdn.example.com/${platform}/mf-manifest.json`, + wallet: `wallet@https://cdn.example.com/${platform}/mf-manifest.json`, + }, + shared: getSharedDependencies({eager: true}), +}), +``` + +The host loads remotes eagerly (`eager: true`) and is the only package that actually runs natively. It provides all shared singletons to the mini apps. + +### Mini app: exposing a surface + +```ts +// packages/trading/rspack.config.ts +new Repack.plugins.ModuleFederationPluginV2({ + name: 'trading', + exposes: { + './App': './src/navigation/MainNavigator', + }, + shared: getSharedDependencies({eager: false}), +}), +``` + +Each mini app exposes a single entry point — its navigator. It consumes shared deps lazily (`eager: false`), deferring to whatever version the host has already loaded. + +### Loading a mini app in the host + +```tsx +// packages/host/src/navigation/TabsNavigator.tsx +const TradingApp = React.lazy(() => + randomDelay().then(() => import('trading/App')) +); + +}> + + +``` + +`React.lazy` + `Suspense` gives you code splitting and loading states for free. The `randomDelay()` in this showcase makes the loading state visible during demos — in production you'd remove it. + +--- + +## Performance Patterns + +The showcase is also a reference implementation of several React Native performance patterns that matter especially in high-frequency UIs like trading dashboards. + +### 1. Leaf-component isolation for live data + +Subscribing to a live price feed at the row level re-renders the entire row — icon, name, symbol, and price — on every tick. Instead, subscribe in a tiny leaf component that renders only the price text: + +```tsx +// PriceCell only re-renders when its price changes +const PriceCell = React.memo(({symbol, flashProgress, flashIsUp}: Props) => { + const price = useAssetPrice(symbol); + // updates shared values → triggers UI-thread animation on outer Animated.View + // does NOT re-render the row + return {formatPrice(price)}; +}); + +// AssetRow never re-renders on price ticks +const AssetRow = React.memo(({asset, onPress}: AssetRowProps) => { + const flashProgress = useSharedValue(0); + const flashIsUp = useSharedValue(true); + const rowStyle = useAnimatedStyle(() => ({ ... })); + + return ( + + + {asset.name} + + + ); +}); +``` + +The flash animation (green/red row highlight on price change) runs on the UI thread via Reanimated shared values — it doesn't cause any React re-renders. + +### 2. useTransition for non-priority state + +Price ticks should never compete with user interactions like scrolling or opening a bottom sheet: + +```tsx +// sdk/src/hooks/usePrices.ts +const [prices, setPrices] = React.useState({}); +const [, startTransition] = React.useTransition(); + +service.subscribe(symbol, price => { + startTransition(() => setPrices(prev => ({...prev, [symbol]: price}))); +}); +``` + +React treats state updates inside `startTransition` as interruptible — if a user taps or scrolls, React finishes the interaction first and applies the price update after. + +### 3. startTransition for chart rebuilds + +The same principle applies to the 60-tick chart buffer. Rebuilding chart data synchronously on every tick blocks the JS thread: + +```tsx +React.useEffect(() => { + bufferRef.current = [...bufferRef.current, price].slice(-MAX_TICKS); + React.startTransition(() => { + setChartData(bufferRef.current.map((p, i) => ({index: i, price: p}))); + }); +}, [price]); +``` + +### 4. Historical data seeding + +The chart is pre-populated with the last 60 1-minute OHLC candles from the Kraken REST API, so it shows meaningful data immediately rather than waiting for 60 live ticks to accumulate: + +```tsx +const historicalPrices = useHistoricalPrices(asset.krakenPair); + +React.useEffect(() => { + if (historicalPrices.length === 0 || seededRef.current) return; + seededRef.current = true; + bufferRef.current = historicalPrices; + setChartData(historicalPrices.map((p, i) => ({index: i, price: p}))); +}, [historicalPrices]); +``` + +### 5. React Compiler + +`babel-plugin-react-compiler` is configured across all packages. It automatically inserts memoization for components and hooks that would otherwise re-render unnecessarily — no manual `useMemo`/`useCallback` required for the common cases. + +--- + +## The Live Price Feed: One Connection, Many Consumers + +This is one of the most important demos in the app. Open the Trading tab and the Wallet tab on the same device. Both show live prices — but there is only one WebSocket connection to Kraken, shared via the Module Federation singleton: + +```ts +// KrakenWebSocketService is a singleton +class KrakenWebSocketService { + private static _instance: KrakenWebSocketService; + + static get shared(): KrakenWebSocketService { + if (!KrakenWebSocketService._instance) { + KrakenWebSocketService._instance = new KrakenWebSocketService(); + } + return KrakenWebSocketService._instance; + } +} +``` + +Because `sdk` is declared as a shared singleton in the MF config, `KrakenWebSocketService._instance` is the same object in the host process regardless of which mini app accesses it. Trading subscribes to BTC and ETH. Wallet also subscribes to BTC and ETH. They share the same listeners on the same connection. + +In a production app this matters for: battery life, data usage, connection limits, and consistent prices across screens. + +--- + +## Running the Demo + +### Setup + +```bash +npm install -g pnpm@9.15.3 +pnpm install +pnpm pods # iOS only +``` + +### Start everything + +```bash +pnpm start # starts host + all mini apps via mprocs +pnpm run:host:ios # or run:host:android +``` + +### Demo script + +**Step 1 — Authentication gate** +> "The host shell owns authentication. The sign-in screen is a federated module from the `auth` package — the host doesn't ship auth UI code, it loads it at runtime." + +Sign in as Demo User. The tab bar appears. + +**Step 2 — Live trading list** +> "Every price on this list is a real WebSocket tick from Kraken. Watch the green and red flashes — that's Reanimated running on the UI thread, not the JS thread. The list itself is LegendList, a high-performance alternative to FlatList." + +Scroll the list while prices are updating. No jank. + +**Step 3 — Asset details and chart** +> "The chart is pre-populated with 60 minutes of real OHLC history. As new ticks arrive, the chart extends — but we wrap those updates in `startTransition`, so opening the trade sheet is always instant." + +Tap an asset. Open the trade sheet while prices are updating. + +**Step 4 — Trade flow** +> "The trade sheet is `@gorhom/bottom-sheet`. Entering an amount uses an uncontrolled input — no re-render per keystroke. Confirm navigates to a modal success screen." + +Complete a trade. + +**Step 5 — Wallet with shared price feed** +> "Switch to Wallet. The portfolio balance is updating in real time — same prices as Trading, because both mini apps share the same singleton WebSocket connection via Module Federation. No second connection, no duplication." + +Switch to Wallet. Watch the total balance update. + +**Step 6 — Independent deployment (the key point)** +> "Now here's the business case argument: if I push a fix to the Trading mini app, I deploy a new bundle to the CDN. The host app on your device gets the update on the next launch — no App Store submission, no waiting for review, no forcing users to update." + +--- + +## Building the Business Case + +### Deployment independence + +| Scenario | Without MF | With MF | +|---|---|---| +| Trading bug fix ships to users | Next App Store release (~1–7 days review) | CDN deploy, available on next app launch | +| Wallet team adds a new feature | Full app release, all teams coordinate | Wallet deploys independently | +| Rollback a bad trading release | Re-submit previous version to store | Swap CDN manifest to previous bundle | + +### Bundle sizes + +_Run `pnpm build` for each package and fill in actuals:_ + +| Bundle | Size (gzip) | +|---|---| +| host (shell only, no mini apps) | _TBD_ | +| trading | _TBD_ | +| wallet | _TBD_ | +| auth | _TBD_ | +| **Total download for new user** | _TBD_ | +| **If user never opens Wallet** | host + trading + auth only | + +A user who only uses the trading feature never downloads the wallet bundle. At scale, across millions of installs, this is meaningful bandwidth and storage savings. + +### CI build times + +_Run per-package builds in CI and fill in actuals:_ + +| Build scope | Time | +|---|---| +| Full monorepo build | _TBD_ | +| Trading only (`pnpm --filter trading build`) | _TBD_ | +| Wallet only (`pnpm --filter wallet build`) | _TBD_ | +| Auth only (`pnpm --filter auth build`) | _TBD_ | + +Teams building their mini app independently skip the host build entirely. If the full build takes N minutes, a team working only on Trading runs only the Trading build. + +### Team independence + +Each mini app has its own: +- Dev server (separate port, separate terminal) +- Bundle pipeline +- Release cadence +- Mock implementations for other remotes (in `mocks/` folder) + +The Trading team can develop, test, and deploy the trading feature without ever touching the host or wallet repos. + +--- + +## Objections and Answers + +**"We already use code splitting in Metro."** +Metro's code splitting is static — you split at build time and can't update the split points without a new release. Module Federation splits at runtime and makes each split independently deployable. + +**"What about native modules? Can mini apps add them?"** +No — and that's by design. All native code lives in the host binary. Mini apps are JS-only bundles. This is the correct constraint: native code requires a store release anyway, so centralising it in the host is the right model. + +**"What about security? We can't load arbitrary JS."** +Re.Pack's `CodeSigningPlugin` lets you sign bundles and verify signatures at load time — only bundles signed with your key will execute. The `auth` remote in this showcase is signed; the same can be applied to all remotes. + +**"Doesn't this add operational complexity?"** +Yes, there is a CDN to manage and bundle versioning to think about. The trade-off is: operational complexity in your deploy pipeline, in exchange for deployment independence and smaller user-facing bundles. For teams at scale, this is the right trade. + +--- + +## Stack Reference + +| | | +|---|---| +| React Native | 0.84 | +| React | 19 | +| Re.Pack | 5.2 (Rspack-based) | +| Module Federation | V2 | +| Animations | react-native-reanimated 4 + react-native-worklets | +| Charts | victory-native 41 (Skia-based) | +| Lists | @legendapp/list 2 | +| Bottom sheet | @gorhom/bottom-sheet 5 | +| Navigation | @react-navigation/native 7 + react-native-bottom-tabs | +| React Compiler | babel-plugin-react-compiler 1.0 | \ No newline at end of file diff --git a/images/auth-app.png b/images/auth-app.png new file mode 100644 index 00000000..13357527 Binary files /dev/null and b/images/auth-app.png differ diff --git a/images/booking.gif b/images/booking.gif deleted file mode 100644 index 5ea35500..00000000 Binary files a/images/booking.gif and /dev/null differ diff --git a/images/diagram.png b/images/diagram.png new file mode 100644 index 00000000..5c0699ba Binary files /dev/null and b/images/diagram.png differ diff --git a/images/host-main-screen.png b/images/host-main-screen.png deleted file mode 100644 index 18bd799a..00000000 Binary files a/images/host-main-screen.png and /dev/null differ diff --git a/images/host.gif b/images/host.gif deleted file mode 100644 index af698414..00000000 Binary files a/images/host.gif and /dev/null differ diff --git a/images/trading-app.gif b/images/trading-app.gif new file mode 100644 index 00000000..193fe828 Binary files /dev/null and b/images/trading-app.gif differ diff --git a/images/wallet-app.png b/images/wallet-app.png new file mode 100644 index 00000000..7a739d21 Binary files /dev/null and b/images/wallet-app.png differ diff --git a/mprocs/host-android.yaml b/mprocs/host-android.yaml index abc50c0f..b3f1184d 100644 --- a/mprocs/host-android.yaml +++ b/mprocs/host-android.yaml @@ -5,12 +5,9 @@ procs: Auth: shell: pnpm --filter auth start --platform android stop: SIGKILL - Booking: - shell: pnpm --filter booking start --platform android - stop: SIGKILL - Dashboard: - shell: pnpm --filter dashboard start --platform android - stop: SIGKILL - Shopping: - shell: pnpm --filter shopping start --platform android + Trading: + shell: pnpm --filter trading start --platform android stop: SIGKILL + Wallet: + shell: pnpm --filter wallet start --platform android + stop: SIGKILL \ No newline at end of file diff --git a/mprocs/host-ios.yaml b/mprocs/host-ios.yaml index 16d76d03..055421bd 100644 --- a/mprocs/host-ios.yaml +++ b/mprocs/host-ios.yaml @@ -5,12 +5,9 @@ procs: Auth: shell: pnpm --filter auth start --platform ios stop: SIGKILL - Booking: - shell: pnpm --filter booking start --platform ios - stop: SIGKILL - Dashboard: - shell: pnpm --filter dashboard start --platform ios - stop: SIGKILL - Shopping: - shell: pnpm --filter shopping start --platform ios + Trading: + shell: pnpm --filter trading start --platform ios stop: SIGKILL + Wallet: + shell: pnpm --filter wallet start --platform ios + stop: SIGKILL \ No newline at end of file diff --git a/mprocs/host.yaml b/mprocs/host.yaml index b2cc39de..36968087 100644 --- a/mprocs/host.yaml +++ b/mprocs/host.yaml @@ -5,12 +5,9 @@ procs: Auth: shell: pnpm --filter auth start stop: SIGKILL - Booking: - shell: pnpm --filter booking start - stop: SIGKILL - Dashboard: - shell: pnpm --filter dashboard start - stop: SIGKILL - Shopping: - shell: pnpm --filter shopping start + Trading: + shell: pnpm --filter trading start stop: SIGKILL + Wallet: + shell: pnpm --filter wallet start + stop: SIGKILL \ No newline at end of file diff --git a/package.json b/package.json index d7d92230..e26e19e0 100644 --- a/package.json +++ b/package.json @@ -11,10 +11,7 @@ "scripts": { "run:host:ios": "pnpm --filter host ios", "run:host:android": "pnpm --filter host android", - "run:dashboard:ios": "pnpm --filter dashboard ios", - "run:dashboard:android": "pnpm --filter dashboard android", "start": "mprocs -c mprocs/host.yaml", - "start:dashboard": "mprocs -c mprocs/dashboard.yaml", "pods": "pnpm -r pods", "pods:update": "pnpm -r pods:update", "lint": "pnpm -r lint", @@ -24,6 +21,7 @@ "check-deps": "pnpm -r check-deps" }, "dependencies": { + "babel-plugin-react-compiler": "^1.0.0", "mprocs": "^0.7.1" }, "pnpm": { diff --git a/packages/auth/src/providers/AuthProvider.tsx b/packages/auth/src/providers/AuthProvider.tsx index c67a5d24..8852c180 100644 --- a/packages/auth/src/providers/AuthProvider.tsx +++ b/packages/auth/src/providers/AuthProvider.tsx @@ -8,10 +8,10 @@ enum ActionTypes { SIGN_OUT = 'SIGN_OUT', } -type Action = { - type: ActionTypes; - payload?: any; -}; +type Action = + | {type: ActionTypes.RESTORE_TOKEN; payload: boolean} + | {type: ActionTypes.SIGN_IN} + | {type: ActionTypes.SIGN_OUT}; type State = { isLoading: boolean; @@ -47,7 +47,7 @@ const AuthProvider = ({ children: (data: State) => React.ReactNode; }) => { const [state, dispatch] = React.useReducer(reducer, { - isLoading: false, + isLoading: true, isSignout: false, }); @@ -56,29 +56,24 @@ const AuthProvider = ({ signIn: async () => { try { await AuthService.shared.setCredentials('dummy-auth-token'); - } catch (e) { - // Handle error + dispatch({type: ActionTypes.SIGN_IN}); + } catch { + // credentials failed to persist — remain signed out } - - dispatch({type: ActionTypes.SIGN_IN}); }, signOut: async () => { try { await AuthService.shared.removeCredentials(); - } catch (e) { - // Handle error - } - + } catch {} dispatch({type: ActionTypes.SIGN_OUT}); }, signUp: async () => { try { await AuthService.shared.setCredentials('dummy-auth-token'); - } catch (e) { - // Handle error + dispatch({type: ActionTypes.SIGN_IN}); + } catch { + // credentials failed to persist — remain signed out } - - dispatch({type: ActionTypes.SIGN_IN}); }, }), [], diff --git a/packages/auth/src/screens/AccountScreen.tsx b/packages/auth/src/screens/AccountScreen.tsx index 64bca521..632aaba3 100644 --- a/packages/auth/src/screens/AccountScreen.tsx +++ b/packages/auth/src/screens/AccountScreen.tsx @@ -1,32 +1,93 @@ import React from 'react'; -import {Pressable, StyleSheet, View} from 'react-native'; -import {MD3Colors, Text} from 'react-native-paper'; +import {Pressable, ScrollView, StyleSheet, Text, View} from 'react-native'; +import {useBottomTabBarHeight} from 'react-native-bottom-tabs'; import {useAuth} from '../contexts/AuthContext'; +const colors = { + background: '#0A0E1A', + surface: '#131929', + surfaceVariant: '#1C2438', + primary: '#4F8EF7', + onPrimary: '#FFFFFF', + secondary: '#A0AEC0', + onSurface: '#E2E8F0', + onBackground: '#E2E8F0', + border: '#2D3748', +}; + const AccountScreen = () => { const {signOut} = useAuth(); + const tabBarHeight = useBottomTabBarHeight(); return ( - - Logout - + + + Demo User + demo@fintechapp.com + + + + + [styles.button, pressed && styles.buttonPressed]} + onPress={signOut}> + Sign Out + + ); }; const styles = StyleSheet.create({ container: { - backgroundColor: '#fff', flex: 1, - justifyContent: 'center', - alignItems: 'center', + backgroundColor: colors.background, }, - button: { - backgroundColor: MD3Colors.primary90, + scroll: { + flex: 1, + }, + scrollContent: { padding: 16, + }, + card: { + backgroundColor: colors.surface, borderRadius: 16, + padding: 24, + gap: 6, + }, + title: { + color: colors.onSurface, + fontSize: 20, + fontWeight: '700', + }, + subtitle: { + color: colors.secondary, + fontSize: 14, + }, + footer: { + padding: 16, + backgroundColor: colors.background, + borderTopWidth: StyleSheet.hairlineWidth, + borderTopColor: colors.border, + }, + button: { + backgroundColor: colors.primary, + paddingVertical: 16, + borderRadius: 12, + alignItems: 'center', + }, + buttonPressed: { + opacity: 0.8, + }, + buttonText: { + color: colors.onPrimary, + fontSize: 16, + fontWeight: '600', }, }); -export default AccountScreen; +export default AccountScreen; \ No newline at end of file diff --git a/packages/auth/src/screens/SignInScreen.tsx b/packages/auth/src/screens/SignInScreen.tsx index a969f526..571c1aa8 100644 --- a/packages/auth/src/screens/SignInScreen.tsx +++ b/packages/auth/src/screens/SignInScreen.tsx @@ -1,6 +1,6 @@ import React from 'react'; import {Pressable, StyleSheet, View} from 'react-native'; -import {MD3Colors, Text} from 'react-native-paper'; +import {Text} from 'react-native-paper'; import {useAuth} from '../contexts/AuthContext'; const SignInScreen = () => { @@ -8,39 +8,79 @@ const SignInScreen = () => { return ( - - Welcome! - - - This is a dummy login screen. Just press the button and have a look - around this super app 🚀 - - - Login - + + + + Fintech Super App + + + Trading & Portfolio Management + + + + + [styles.button, pressed && styles.buttonPressed]} + onPress={signIn}> + + Sign In as Demo User + + + + Demo mode — no real credentials required + + ); }; const styles = StyleSheet.create({ container: { - backgroundColor: '#fff', + backgroundColor: '#0A0E1A', flex: 1, - justifyContent: 'center', + justifyContent: 'space-between', + padding: 32, + paddingTop: 120, + paddingBottom: 64, + }, + header: { alignItems: 'center', + gap: 12, + }, + logo: { + fontSize: 64, + color: '#4F8EF7', }, - welcomeHeadline: { - color: MD3Colors.primary20, + appName: { + color: '#E2E8F0', + fontWeight: '700', + textAlign: 'center', }, - welcomeText: { - padding: 16, - paddingBottom: 32, + tagline: { + color: '#A0AEC0', + textAlign: 'center', + }, + footer: { + gap: 16, + alignItems: 'center', }, button: { - backgroundColor: MD3Colors.primary90, - padding: 16, - borderRadius: 16, + backgroundColor: '#4F8EF7', + paddingVertical: 16, + paddingHorizontal: 32, + borderRadius: 12, + width: '100%', + alignItems: 'center', + }, + buttonPressed: { + opacity: 0.8, + }, + buttonText: { + color: '#FFFFFF', + }, + disclaimer: { + color: '#A0AEC0', }, }); -export default SignInScreen; +export default SignInScreen; \ No newline at end of file diff --git a/packages/auth/src/services/AuthService.ts b/packages/auth/src/services/AuthService.ts index 39d20a9c..8752dd44 100644 --- a/packages/auth/src/services/AuthService.ts +++ b/packages/auth/src/services/AuthService.ts @@ -1,7 +1,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; class AuthService { - TOKEN_KEY = 'token'; + private readonly TOKEN_KEY = 'token'; getCredentials(): Promise { return AsyncStorage.getItem(this.TOKEN_KEY); diff --git a/packages/booking/.eslintrc.js b/packages/booking/.eslintrc.js deleted file mode 100644 index 2406aa68..00000000 --- a/packages/booking/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - root: true, - extends: '@react-native', - parser: '@typescript-eslint/parser', - plugins: ['@typescript-eslint'], - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - '@typescript-eslint/no-shadow': ['error'], - 'no-shadow': 'off', - 'no-undef': 'off', - }, - }, - { - files: ['jest.setup.js'], - env: { - jest: true, - }, - }, - ], -}; diff --git a/packages/booking/.gitignore b/packages/booking/.gitignore deleted file mode 100644 index 370d7737..00000000 --- a/packages/booking/.gitignore +++ /dev/null @@ -1,69 +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 -**/.xcode.env.local - - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# BUCK -buck-out/ -\.buckd/ -*.keystore -!debug.keystore -.kotlin/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -**/Pods/ -/vendor/bundle/ - -# dist dir -dist/ diff --git a/packages/booking/.prettierrc.js b/packages/booking/.prettierrc.js deleted file mode 100644 index 2b540746..00000000 --- a/packages/booking/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - arrowParens: 'avoid', - bracketSameLine: true, - bracketSpacing: false, - singleQuote: true, - trailingComma: 'all', -}; diff --git a/packages/booking/.watchmanconfig b/packages/booking/.watchmanconfig deleted file mode 100644 index 9e26dfee..00000000 --- a/packages/booking/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/packages/booking/README.md b/packages/booking/README.md deleted file mode 100644 index c46c2d4c..00000000 --- a/packages/booking/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Booking Application - -This is mini app for booking service. Booking exposes `UpcomingAppointments` screen and `MainNavigator`. `MainNavigator` is Booking app itself. `UpcomingAppointments` screen is a screen, which is used in the super app in its own navigation. Booking app uses auth logic and UI (`SignInScreen`, `AccountScreen`) from Auth remote module, so we suggest to run Auth dev server to prevent issues with Booking app. If Auth dev server will no be run, Booking app will not work as standalone app. - -## Setup - -Install dependencies for all apps in root directory of this monorepo: - -``` -pnpm install -``` - -### Run - -Start dev server for all apps in root directory of this monorepo if you need to work as a part of host app. Booking app server will run on 9000 port: - -``` -pnpm start -``` - -Or start dev server for Booking app as a standalone app: - -``` -pnpm start:standalone:booking -``` - -Run iOS or Android app (ios | android): - -``` -pnpm run:booking: -``` diff --git a/packages/booking/app.json b/packages/booking/app.json deleted file mode 100644 index 20e4665a..00000000 --- a/packages/booking/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "booking", - "displayName": "booking" -} \ No newline at end of file diff --git a/packages/booking/babel.config.js b/packages/booking/babel.config.js deleted file mode 100644 index f7b3da3b..00000000 --- a/packages/booking/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], -}; diff --git a/packages/booking/jest.config.js b/packages/booking/jest.config.js deleted file mode 100644 index 9480dd5b..00000000 --- a/packages/booking/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - preset: 'react-native', - fakeTimers: { - enableGlobally: true, - }, - setupFiles: ['./jest.setup.js'], - transformIgnorePatterns: [ - 'node_modules/(?!(?:.pnpm/)?((jest-)?react-native|@react-native(-community)?|react-navigation|@react-navigation|react-native-svg))', - ], -}; diff --git a/packages/booking/jest.setup.js b/packages/booking/jest.setup.js deleted file mode 100644 index 307ed9b5..00000000 --- a/packages/booking/jest.setup.js +++ /dev/null @@ -1,10 +0,0 @@ -jest.mock('@callstack/repack/client', () => ({ - Federated: { - importModule: jest.fn((container, module) => { - if (container === 'auth') { - const authMock = require('../auth/mocks/federated'); - return Promise.resolve(authMock.default(module)); - } - }), - }, -})); diff --git a/packages/booking/mocks/App.tsx b/packages/booking/mocks/App.tsx deleted file mode 100644 index 3d1c7bfb..00000000 --- a/packages/booking/mocks/App.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export const AppMock = () => <>; diff --git a/packages/booking/mocks/federated.ts b/packages/booking/mocks/federated.ts deleted file mode 100644 index 72e16fe1..00000000 --- a/packages/booking/mocks/federated.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {AppMock} from './App'; - -export default (module: string) => { - switch (module) { - case './App': - return AppMock; - default: - throw new Error(`BookingMock: unknown module: ${module}`); - } -}; diff --git a/packages/booking/package.json b/packages/booking/package.json deleted file mode 100644 index 38e03029..00000000 --- a/packages/booking/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "booking", - "version": "0.0.1", - "private": true, - "scripts": { - "start": "react-native start --port 9000", - "test": "jest", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx", - "typecheck": "tsc", - "bundle": "pnpm bundle:ios && pnpm bundle:android", - "bundle:ios": "react-native bundle --platform ios --entry-file index.js --dev false", - "bundle:android": "react-native bundle --platform android --entry-file index.js --dev false", - "align-deps": "rnx-align-deps --write", - "check-deps": "rnx-align-deps" - }, - "dependencies": { - "@bottom-tabs/react-navigation": "1.1.0", - "@module-federation/enhanced": "2.3.1", - "@react-native-async-storage/async-storage": "3.0.2", - "@react-navigation/native": "7.2.2", - "@react-navigation/native-stack": "7.14.10", - "react": "19.2.3", - "react-native": "0.84.1", - "react-native-bottom-tabs": "1.1.0", - "react-native-calendars": "1.1291.1", - "react-native-edge-to-edge": "1.8.1", - "react-native-paper": "5.15.0", - "react-native-safe-area-context": "5.7.0", - "react-native-screens": "4.24.0", - "react-native-vector-icons": "10.3.0" - }, - "devDependencies": { - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.3", - "@babel/runtime": "^7.25.0", - "@callstack/repack": "5.2.5", - "@react-native-community/cli": "20.1.0", - "@react-native/babel-preset": "0.84.1", - "@react-native/eslint-config": "0.84.1", - "@react-native/typescript-config": "0.84.1", - "@rnx-kit/align-deps": "^3.4.3", - "@rspack/core": "1.7.11", - "@swc/helpers": "^0.5.20", - "@types/jest": "^29.5.14", - "@types/react": "^19.2.0", - "@types/react-native-vector-icons": "^6.4.18", - "@types/react-test-renderer": "^19.1.0", - "@typescript-eslint/eslint-plugin": "^8.12.2", - "@typescript-eslint/parser": "^8.12.2", - "eslint": "^8.57.0", - "jest": "^29.6.3", - "prettier": "^2.8.8", - "react-test-renderer": "^19.2.3", - "super-app-showcase-sdk": "0.0.2", - "typescript": "^5.8.3" - }, - "rnx-kit": { - "kitType": "app", - "alignDeps": { - "presets": [ - "./node_modules/super-app-showcase-sdk/preset" - ], - "requirements": [ - "super-app-showcase-sdk@0.0.2" - ], - "capabilities": [ - "super-app" - ] - } - } -} diff --git a/packages/booking/src/App.tsx b/packages/booking/src/App.tsx deleted file mode 100644 index b1b88d43..00000000 --- a/packages/booking/src/App.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import {NavigationContainer} from '@react-navigation/native'; -import MainNavigator from './navigation/MainNavigator'; -import SplashScreen from './components/SplashScreen'; -import ErrorBoundary from './components/ErrorBoundary'; - -const AuthProvider = React.lazy(() => import('auth/AuthProvider')); -const SignInScreen = React.lazy(() => import('auth/SignInScreen')); - -const App = () => { - return ( - - }> - - {(authData: {isSignout: boolean; isLoading: boolean}) => { - if (authData.isLoading) { - return ; - } - - if (authData.isSignout) { - return ( - }> - - - ); - } - - return ( - - - - ); - }} - - - - ); -}; - -export default App; diff --git a/packages/booking/src/__tests__/App-test.tsx b/packages/booking/src/__tests__/App-test.tsx deleted file mode 100644 index 085b231a..00000000 --- a/packages/booking/src/__tests__/App-test.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; - -import App from '../App'; - -it('renders correctly', () => { - renderer.create(); -}); diff --git a/packages/booking/src/components/ErrorBoundary.tsx b/packages/booking/src/components/ErrorBoundary.tsx deleted file mode 100644 index 359cdb67..00000000 --- a/packages/booking/src/components/ErrorBoundary.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react'; -import {StyleSheet, Text, SafeAreaView} from 'react-native'; -import {MD3Colors} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -type Props = { - children: React.ReactNode; - name: string; -}; - -type State = { - hasError: boolean; -}; - -class ErrorBoundary extends React.Component { - name: string; - - constructor(props: Props) { - super(props); - this.name = props.name; - this.state = {hasError: false}; - } - - static getDerivedStateFromError() { - return {hasError: true}; - } - - componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { - console.log(error, errorInfo); - } - - render() { - if (this.state.hasError) { - return ( - - - {`Failed to load ${this.name}`} - - ); - } - - return this.props.children; - } -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - text: { - fontSize: 24, - color: MD3Colors.primary20, - textAlign: 'center', - }, -}); - -export default ErrorBoundary; diff --git a/packages/booking/src/components/NavBar.tsx b/packages/booking/src/components/NavBar.tsx deleted file mode 100644 index 2d77508b..00000000 --- a/packages/booking/src/components/NavBar.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import {NativeStackHeaderProps} from '@react-navigation/native-stack'; -import {Appbar, MD3Colors} from 'react-native-paper'; - -const NavBar = ({navigation, back, route, options}: NativeStackHeaderProps) => { - return ( - - {back ? : null} - - - ); -}; - -export default NavBar; diff --git a/packages/booking/src/components/Placeholder.tsx b/packages/booking/src/components/Placeholder.tsx deleted file mode 100644 index d63ab4f0..00000000 --- a/packages/booking/src/components/Placeholder.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React, {FC} from 'react'; -import {SafeAreaView, StyleSheet, Text} from 'react-native'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {MD3Colors} from 'react-native-paper'; - -type Props = { - label: string; - icon: string; -}; - -const Placeholder: FC = ({label, icon}) => { - return ( - - - {label} - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - text: { - fontSize: 24, - color: MD3Colors.primary20, - }, -}); - -export default Placeholder; diff --git a/packages/booking/src/components/SplashScreen.tsx b/packages/booking/src/components/SplashScreen.tsx deleted file mode 100644 index ba3e9fcd..00000000 --- a/packages/booking/src/components/SplashScreen.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import {StyleSheet, SafeAreaView} from 'react-native'; -import {MD3Colors, ProgressBar, Text} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -const SplashScreen = () => { - return ( - - - - Booking application is loading. Please wait... - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - }, - icon: { - textAlign: 'center', - }, - text: { - paddingVertical: 16, - paddingHorizontal: 32, - fontSize: 24, - color: MD3Colors.primary20, - textAlign: 'center', - }, - progress: { - marginVertical: 16, - marginHorizontal: 32, - }, -}); - -export default SplashScreen; diff --git a/packages/booking/src/data/featuredServices.json b/packages/booking/src/data/featuredServices.json deleted file mode 100644 index 9579eeb2..00000000 --- a/packages/booking/src/data/featuredServices.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "data": [ - { - "id": "1", - "type": "haircut", - "title": "Haircut", - "place": "Barbershop", - "address": "123 Main St", - "image": "https://picsum.photos/700?a" - }, - { - "id": "2", - "type": "nails", - "title": "Nails", - "place": "Beauty salon", - "address": "456 Main St", - "image": "https://picsum.photos/700" - }, - { - "id": "3", - "type": "hair coloring", - "title": "Hair coloring", - "place": "Beauty salon", - "address": "789 Main St", - "image": "https://picsum.photos/700" - }, - { - "id": "4", - "type": "haircut", - "title": "Haircut", - "place": "Barbershop", - "address": "123 Main St", - "image": "https://picsum.photos/700" - } - ] -} \ No newline at end of file diff --git a/packages/booking/src/data/recentBookings.json b/packages/booking/src/data/recentBookings.json deleted file mode 100644 index 32815456..00000000 --- a/packages/booking/src/data/recentBookings.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "data": [ - { - "id": "1", - "title": "Haircut", - "provider": "John Doe", - "date": "01.01.2018", - "time": "10:00" - }, - { - "id": "2", - "title": "Coloring", - "provider": "John Doe", - "date": "02.01.2018", - "time": "09:00" - }, - { - "id": "3", - "title": "Beard trim", - "provider": "John Doe", - "date": "03.01.2018", - "time": "12:00" - }, - { - "id": "4", - "title": "Beard shave", - "provider": "John Doe", - "date": "04.01.2018", - "time": "12:00" - }, - { - "id": "5", - "title": "Haircut", - "provider": "John Doe", - "date": "05.01.2018", - "time": "12:00" - }, - { - "id": "6", - "title": "Haircut", - "provider": "John Doe", - "date": "06.01.2018", - "time": "12:00" - }, - { - "id": "7", - "title": "Nail polish", - "provider": "John Doe", - "date": "07.01.2018", - "time": "12:00" - }, - { - "id": "8", - "title": "Head massage", - "provider": "John Doe", - "date": "08.01.2018", - "time": "12:00" - } - ] -} \ No newline at end of file diff --git a/packages/booking/src/data/upcomingBookings.json b/packages/booking/src/data/upcomingBookings.json deleted file mode 100644 index 32815456..00000000 --- a/packages/booking/src/data/upcomingBookings.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "data": [ - { - "id": "1", - "title": "Haircut", - "provider": "John Doe", - "date": "01.01.2018", - "time": "10:00" - }, - { - "id": "2", - "title": "Coloring", - "provider": "John Doe", - "date": "02.01.2018", - "time": "09:00" - }, - { - "id": "3", - "title": "Beard trim", - "provider": "John Doe", - "date": "03.01.2018", - "time": "12:00" - }, - { - "id": "4", - "title": "Beard shave", - "provider": "John Doe", - "date": "04.01.2018", - "time": "12:00" - }, - { - "id": "5", - "title": "Haircut", - "provider": "John Doe", - "date": "05.01.2018", - "time": "12:00" - }, - { - "id": "6", - "title": "Haircut", - "provider": "John Doe", - "date": "06.01.2018", - "time": "12:00" - }, - { - "id": "7", - "title": "Nail polish", - "provider": "John Doe", - "date": "07.01.2018", - "time": "12:00" - }, - { - "id": "8", - "title": "Head massage", - "provider": "John Doe", - "date": "08.01.2018", - "time": "12:00" - } - ] -} \ No newline at end of file diff --git a/packages/booking/src/navigation/AccountNavigator.tsx b/packages/booking/src/navigation/AccountNavigator.tsx deleted file mode 100644 index 98fd781a..00000000 --- a/packages/booking/src/navigation/AccountNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import AccountScreen from '../screens/AccountScreen'; - -export type AccountStackParamList = { - Account: undefined; -}; - -const Account = createNativeStackNavigator(); - -const AccountNavigator = () => { - return ( - - - - ); -}; - -export default AccountNavigator; diff --git a/packages/booking/src/navigation/CalendarNavigator.tsx b/packages/booking/src/navigation/CalendarNavigator.tsx deleted file mode 100644 index f6387f49..00000000 --- a/packages/booking/src/navigation/CalendarNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import CalendarScreen from '../screens/CalendarScreen'; - -export type CalendarStackParamList = { - Calendar: undefined; -}; - -const Calendar = createNativeStackNavigator(); - -const CalendarNavigator = () => { - return ( - - - - ); -}; - -export default CalendarNavigator; diff --git a/packages/booking/src/navigation/HomeNavigator.tsx b/packages/booking/src/navigation/HomeNavigator.tsx deleted file mode 100644 index de1348b5..00000000 --- a/packages/booking/src/navigation/HomeNavigator.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import HomeScreen from '../screens/HomeScreen'; -import NavBar from '../components/NavBar'; -import UpcomingScreen from '../screens/UpcomingScreen'; - -export type HomeStackParamList = { - Home: undefined; - Upcoming: undefined; -}; - -const Home = createNativeStackNavigator(); - -const HomeNavigator = () => { - return ( - - - - - ); -}; - -export default HomeNavigator; diff --git a/packages/booking/src/navigation/MainNavigator.tsx b/packages/booking/src/navigation/MainNavigator.tsx deleted file mode 100644 index 879e9e29..00000000 --- a/packages/booking/src/navigation/MainNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import TabsNavigator from './TabsNavigator'; - -export type MainStackParamList = { - Tabs: undefined; - Booking: undefined; -}; - -const Main = createNativeStackNavigator(); - -const MainNavigator = () => { - return ( - - - - ); -}; - -export default MainNavigator; diff --git a/packages/booking/src/navigation/TabsNavigator.tsx b/packages/booking/src/navigation/TabsNavigator.tsx deleted file mode 100644 index 74a62db5..00000000 --- a/packages/booking/src/navigation/TabsNavigator.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import React from 'react'; -import {createNativeBottomTabNavigator} from '@bottom-tabs/react-navigation'; -import {MD3Colors} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import HomeNavigator from './HomeNavigator'; -import CalendarNavigator from './CalendarNavigator'; -import AccountNavigator from './AccountNavigator'; - -export type TabsParamList = { - HomeNavigator: undefined; - CalendarNavigator: undefined; - AccountNavigator: undefined; -}; - -const homeIcon = Icon.getImageSourceSync('home', 24); -const calendarIcon = Icon.getImageSourceSync('calendar', 24); -const accountIcon = Icon.getImageSourceSync('account', 24); - -const Tabs = createNativeBottomTabNavigator(); - -const TabsNavigator = () => { - return ( - - homeIcon, - }} - /> - calendarIcon, - }} - /> - accountIcon, - }} - /> - - ); -}; - -export default TabsNavigator; diff --git a/packages/booking/src/screens/AccountScreen.tsx b/packages/booking/src/screens/AccountScreen.tsx deleted file mode 100644 index 6d952d5e..00000000 --- a/packages/booking/src/screens/AccountScreen.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Account = React.lazy(() => import('auth/AccountScreen')); - -const AccountScreen = () => { - return ( - - }> - - - - ); -}; - -export default AccountScreen; diff --git a/packages/booking/src/screens/CalendarScreen.tsx b/packages/booking/src/screens/CalendarScreen.tsx deleted file mode 100644 index 49ccea1a..00000000 --- a/packages/booking/src/screens/CalendarScreen.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, {useCallback, useMemo, useState} from 'react'; -import {FlatList, StyleSheet, View} from 'react-native'; -import {CalendarList, CalendarUtils, DateData} from 'react-native-calendars'; -import {FAB, List, MD3Colors} from 'react-native-paper'; -import recentBookings from '../data/recentBookings.json'; - -const INITIAL_DATE = CalendarUtils.getCalendarDateString(new Date()); - -const renderAppointment = ({item}: any) => ( - } - /> -); - -const CalendarScreen = () => { - const [selected, setSelected] = useState(INITIAL_DATE); - - const marked = useMemo(() => { - return { - [selected]: { - selected: true, - disableTouchEvent: true, - }, - [INITIAL_DATE]: { - selected: true, - selectedColor: MD3Colors.primary50, - }, - }; - }, [selected]); - - const onDayPress = useCallback((day: DateData) => { - setSelected(day.dateString); - }, []); - - return ( - - - - {}} - /> - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - }, - fab: { - position: 'absolute', - right: 0, - margin: 16, - bottom: 0, - }, -}); - -export default CalendarScreen; diff --git a/packages/booking/src/screens/HomeScreen.tsx b/packages/booking/src/screens/HomeScreen.tsx deleted file mode 100644 index d278b452..00000000 --- a/packages/booking/src/screens/HomeScreen.tsx +++ /dev/null @@ -1,147 +0,0 @@ -import React from 'react'; -import { - Alert, - FlatList, - ListRenderItem, - ScrollView, - StyleSheet, - View, -} from 'react-native'; -import {CompositeScreenProps} from '@react-navigation/native'; -import {NativeStackScreenProps} from '@react-navigation/native-stack'; -import {NativeBottomTabScreenProps} from '@bottom-tabs/react-navigation'; -import {Avatar, Card, Button, Divider, Text} from 'react-native-paper'; -import {TabsParamList} from '../navigation/TabsNavigator'; -import {HomeStackParamList} from '../navigation/HomeNavigator'; -import upcomingBookings from '../data/upcomingBookings.json'; -import recentBookings from '../data/recentBookings.json'; -import featuredServices from '../data/featuredServices.json'; - -type Props = CompositeScreenProps< - NativeStackScreenProps, - NativeBottomTabScreenProps ->; - -const renderAppointment = ({item}: any) => ( - - } - /> - - - - - -); - -const renderService: ListRenderItem = ({item, index}) => ( - - - - -); - -const renderDivider = () => ; - -const HomeScreen = ({navigation}: Props) => { - return ( - - - - Featured Services - - - - - - - Upcoming Appointments - - - - - - - Recent Appointments - - - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - }, - contentContainer: { - paddingHorizontal: 16, - }, - divider: { - backgroundColor: 'transparent', - width: 16, - }, - header: { - padding: 16, - flexDirection: 'row', - alignItems: 'center', - }, - headerTitle: { - flex: 1, - }, - cardWidth: { - width: 270, - }, -}); - -export default HomeScreen; diff --git a/packages/booking/src/screens/UpcomingScreen.tsx b/packages/booking/src/screens/UpcomingScreen.tsx deleted file mode 100644 index 65e10749..00000000 --- a/packages/booking/src/screens/UpcomingScreen.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import {FlatList, StyleSheet} from 'react-native'; -import {Avatar, Button, Card, Divider} from 'react-native-paper'; -import upcomingBookings from '../data/upcomingBookings.json'; - -const renderItem = ({item}: any) => ( - - } - /> - - - - - -); - -const renderDivider = () => ; - -const UpcomingScreen = () => { - return ( - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - }, - contentContainer: { - padding: 16, - }, - divider: { - backgroundColor: 'transparent', - height: 8, - }, -}); - -export default UpcomingScreen; diff --git a/packages/booking/tsconfig.json b/packages/booking/tsconfig.json deleted file mode 100644 index 511c11be..00000000 --- a/packages/booking/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@react-native/typescript-config", - "compilerOptions": { - "types": ["jest"], - "module": "es2020", - "paths": { - "*": ["./@mf-types/*"] - } - }, - "include": ["**/*.ts", "**/*.tsx", "./@mf-types/*"], - "exclude": ["**/node_modules", "**/Pods"] -} diff --git a/packages/dashboard/.bundle/config b/packages/dashboard/.bundle/config deleted file mode 100644 index 848943bb..00000000 --- a/packages/dashboard/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/packages/dashboard/.gitignore b/packages/dashboard/.gitignore deleted file mode 100644 index 728a0eb2..00000000 --- a/packages/dashboard/.gitignore +++ /dev/null @@ -1,68 +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 -**/.xcode.env.local - - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ -*.keystore -!debug.keystore -.kotlin/ - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -**/Pods/ -/vendor/bundle/ - -# Temporary files created by Metro to check the health of the file watcher -.metro-health-check* - -# dist dir -dist/ \ No newline at end of file diff --git a/packages/dashboard/.prettierrc.js b/packages/dashboard/.prettierrc.js deleted file mode 100644 index 2b540746..00000000 --- a/packages/dashboard/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - arrowParens: 'avoid', - bracketSameLine: true, - bracketSpacing: false, - singleQuote: true, - trailingComma: 'all', -}; diff --git a/packages/dashboard/.watchmanconfig b/packages/dashboard/.watchmanconfig deleted file mode 100644 index 9e26dfee..00000000 --- a/packages/dashboard/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/packages/dashboard/Gemfile b/packages/dashboard/Gemfile deleted file mode 100644 index 6a4c5f17..00000000 --- a/packages/dashboard/Gemfile +++ /dev/null @@ -1,16 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby ">= 2.6.10" - -# Exclude problematic versions of cocoapods and activesupport that causes build failures. -gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' -gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' -gem 'xcodeproj', '< 1.26.0' -gem 'concurrent-ruby', '< 1.3.4' - -# Ruby 3.4.0 has removed some libraries from the standard library. -gem 'bigdecimal' -gem 'logger' -gem 'benchmark' -gem 'mutex_m' diff --git a/packages/dashboard/Gemfile.lock b/packages/dashboard/Gemfile.lock deleted file mode 100644 index a89b6684..00000000 --- a/packages/dashboard/Gemfile.lock +++ /dev/null @@ -1,120 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.7) - base64 - nkf - rexml - activesupport (7.1.4.2) - base64 - bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) - connection_pool (>= 2.2.5) - drb - i18n (>= 1.6, < 2) - minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - base64 (0.2.0) - benchmark (0.5.0) - bigdecimal (3.1.8) - claide (1.1.0) - cocoapods (1.15.2) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.15.2) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.1, < 3.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.15.2) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.3.3) - connection_pool (2.4.1) - drb (2.2.1) - escape (0.0.4) - ethon (0.16.0) - ffi (>= 1.15.0) - ffi (1.17.0) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.8.3) - i18n (1.14.6) - concurrent-ruby (~> 1.0) - json (2.7.4) - logger (1.7.0) - minitest (5.25.1) - molinillo (0.8.0) - mutex_m (0.2.0) - nanaimo (0.3.0) - nap (1.1.0) - netrc (0.11.0) - nkf (0.2.0) - public_suffix (4.0.7) - rexml (3.3.9) - ruby-macho (2.5.1) - typhoeus (1.4.1) - ethon (>= 0.9.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - xcodeproj (1.25.1) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.3.0) - rexml (>= 3.3.6, < 4.0) - -PLATFORMS - ruby - -DEPENDENCIES - activesupport (>= 6.1.7.5, != 7.1.0) - benchmark - bigdecimal - cocoapods (>= 1.13, != 1.15.1, != 1.15.0) - concurrent-ruby (< 1.3.4) - logger - mutex_m - xcodeproj (< 1.26.0) - -RUBY VERSION - ruby 2.7.6p219 - -BUNDLED WITH - 2.4.20 diff --git a/packages/dashboard/README.md b/packages/dashboard/README.md deleted file mode 100644 index 1a8ad981..00000000 --- a/packages/dashboard/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Dashboard Application - -This is mini app for handling business management flow. Dashboard exposes `MainNavigator`. `MainNavigator` is Dashboard app itself. Dashboard app uses auth logic and UI (`SignInScreen`, `AccountScreen`) from Auth remote module, so we suggest to run Auth dev server to prevent issues with Dashboard app. If Auth dev server will no be run, Dashboard app will not work as standalone app. - -## Setup - -Install dependencies for all apps in root directory of this monorepo: - -``` -pnpm install -``` - -Install pods: - -``` -pnpm pods -``` - -Pods might sometimes be outdated, and they might fail to install, in that case you can update them by running: - -``` -pnpm pods:update -``` - -### Run - -Start dev server for all apps in root directory of this monorepo if you need to work as a part of host app. Dashboard app server will run on 9002 port: - -``` -pnpm start -``` diff --git a/packages/dashboard/android/app/build.gradle b/packages/dashboard/android/app/build.gradle deleted file mode 100644 index cb0dde11..00000000 --- a/packages/dashboard/android/app/build.gradle +++ /dev/null @@ -1,131 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" - -// [super-app-showcase change] -// pnpm compliant way to resolve node modules path -apply from: "../../node_modules/super-app-showcase-sdk/android/resolveNodePackage.gradle" - -def reactNativePath = resolveNodePackage('react-native', rootDir) -def codegenPath = resolveNodePackage('@react-native/codegen', reactNativePath) - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '../..' - // root = file("../../") - // The folder where the react-native NPM package is. Default is ../../node_modules/react-native - // reactNativeDir = file("../../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../../node_modules/react-native-codegen - codegenDir = codegenPath - // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js - // cliFile = file("../../node_modules/react-native/cli.js") - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. Default is "debug", "debugOptimized". - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "liteDebugOptimized", "prodDebug", "prodDebugOptimized"] - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - // - // The command to run when bundling. By default is 'bundle' - bundleCommand = "bundle" - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] - /* Autolinking */ - autolinkLibrariesWithApp() -} - -project.ext.vectoricons = [ - iconFontsDir: "../../node_modules/react-native-vector-icons/Fonts", -] - -apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * For example, to use the international variant, you can use: - * `def jscFlavor = io.github.react-native-community:jsc-android-intl:2026004.+` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' - - -android { - ndkVersion rootProject.ext.ndkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace "com.dashboard" - defaultConfig { - applicationId "com.dashboard" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - } - - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } - -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } -} diff --git a/packages/dashboard/android/app/debug.keystore b/packages/dashboard/android/app/debug.keystore deleted file mode 100644 index 364e105e..00000000 Binary files a/packages/dashboard/android/app/debug.keystore and /dev/null differ diff --git a/packages/dashboard/android/app/proguard-rules.pro b/packages/dashboard/android/app/proguard-rules.pro deleted file mode 100644 index 11b02572..00000000 --- a/packages/dashboard/android/app/proguard-rules.pro +++ /dev/null @@ -1,10 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: diff --git a/packages/dashboard/android/app/src/main/AndroidManifest.xml b/packages/dashboard/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 78b53512..00000000 --- a/packages/dashboard/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - diff --git a/packages/dashboard/android/app/src/main/java/com/dashboard/MainActivity.kt b/packages/dashboard/android/app/src/main/java/com/dashboard/MainActivity.kt deleted file mode 100644 index 3bc721b9..00000000 --- a/packages/dashboard/android/app/src/main/java/com/dashboard/MainActivity.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.dashboard - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -class MainActivity : ReactActivity() { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "dashboard" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) -} \ No newline at end of file diff --git a/packages/dashboard/android/app/src/main/java/com/dashboard/MainApplication.kt b/packages/dashboard/android/app/src/main/java/com/dashboard/MainApplication.kt deleted file mode 100644 index c9a742c3..00000000 --- a/packages/dashboard/android/app/src/main/java/com/dashboard/MainApplication.kt +++ /dev/null @@ -1,27 +0,0 @@ -package com.dashboard - -import android.app.Application -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost - -class MainApplication : Application(), ReactApplication { - - override val reactHost: ReactHost by lazy { - getDefaultReactHost( - context = applicationContext, - packageList = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - }, - ) - } - - override fun onCreate() { - super.onCreate() - loadReactNative(this) - } -} diff --git a/packages/dashboard/android/app/src/main/res/drawable/rn_edit_text_material.xml b/packages/dashboard/android/app/src/main/res/drawable/rn_edit_text_material.xml deleted file mode 100644 index 58336319..00000000 --- a/packages/dashboard/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/packages/dashboard/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/dashboard/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f59082..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/packages/dashboard/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 1b523998..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/dashboard/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ff10afd6..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/packages/dashboard/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 115a4c76..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/dashboard/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index dcd3cd80..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/packages/dashboard/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca609..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/dashboard/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe0..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/packages/dashboard/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b410..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/dashboard/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b824ebdd..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/packages/dashboard/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13c..00000000 Binary files a/packages/dashboard/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/packages/dashboard/android/app/src/main/res/values/strings.xml b/packages/dashboard/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 5df95f13..00000000 --- a/packages/dashboard/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - dashboard - diff --git a/packages/dashboard/android/app/src/main/res/values/styles.xml b/packages/dashboard/android/app/src/main/res/values/styles.xml deleted file mode 100644 index dfb77a82..00000000 --- a/packages/dashboard/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - diff --git a/packages/dashboard/android/build.gradle b/packages/dashboard/android/build.gradle deleted file mode 100644 index f192211f..00000000 --- a/packages/dashboard/android/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -buildscript { - ext { - buildToolsVersion = "36.0.0" - minSdkVersion = 24 - compileSdkVersion = 36 - targetSdkVersion = 36 - ndkVersion = "27.1.12297006" - kotlinVersion = "2.1.20" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") - } -} - -allprojects { - repositories { - maven { - url = uri(project(":react-native-async-storage_async-storage").file("local_repo")) - } - } -} - -apply plugin: "com.facebook.react.rootproject" diff --git a/packages/dashboard/android/gradle.properties b/packages/dashboard/android/gradle.properties deleted file mode 100644 index 9afe6159..00000000 --- a/packages/dashboard/android/gradle.properties +++ /dev/null @@ -1,44 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true - -# Use this property to specify which architecture you want to build. -# You can also override it from the CLI using -# ./gradlew -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -newArchEnabled=true - -# Use this property to enable or disable the Hermes JS engine. -# If set to false, you will be using JSC instead. -hermesEnabled=true - -# Use this property to enable edge-to-edge display support. -# This allows your app to draw behind system bars for an immersive UI. -# Note: Only works with ReactActivity and should not be used with custom Activity. -edgeToEdgeEnabled=false diff --git a/packages/dashboard/android/gradle/wrapper/gradle-wrapper.jar b/packages/dashboard/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 8bdaf60c..00000000 Binary files a/packages/dashboard/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/packages/dashboard/android/gradle/wrapper/gradle-wrapper.properties b/packages/dashboard/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 2a84e188..00000000 --- a/packages/dashboard/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/packages/dashboard/android/gradlew b/packages/dashboard/android/gradlew deleted file mode 100755 index ef07e016..00000000 --- a/packages/dashboard/android/gradlew +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH="\\\"\\\"" - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/packages/dashboard/android/gradlew.bat b/packages/dashboard/android/gradlew.bat deleted file mode 100644 index 11bf1829..00000000 --- a/packages/dashboard/android/gradlew.bat +++ /dev/null @@ -1,99 +0,0 @@ -@REM Copyright (c) Meta Platforms, Inc. and affiliates. -@REM -@REM This source code is licensed under the MIT license found in the -@REM LICENSE file in the root directory of this source tree. - -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/packages/dashboard/android/settings.gradle b/packages/dashboard/android/settings.gradle deleted file mode 100644 index 3a796300..00000000 --- a/packages/dashboard/android/settings.gradle +++ /dev/null @@ -1,18 +0,0 @@ -pluginManagement { - apply from: "../node_modules/super-app-showcase-sdk/android/resolveNodePackage.gradle" - // [super-app-showcase change] - // resolve react-native-gradle-plugin & CLI dynamically - def reactNativePath = resolveNodePackage('react-native', rootDir) - def gradlePluginPath = resolveNodePackage('@react-native/gradle-plugin', reactNativePath) - // expose gradlePluginPath outside of pluginManagement block - settings.ext.gradlePluginPath = gradlePluginPath.path - includeBuild(gradlePluginPath.path) -} - -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension) { ex -> ex.autolinkLibrariesFromCommand() } - -rootProject.name = 'dashboard' - -include ':app' -includeBuild(ext.gradlePluginPath) diff --git a/packages/dashboard/app.json b/packages/dashboard/app.json deleted file mode 100644 index 47e86da0..00000000 --- a/packages/dashboard/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "dashboard", - "displayName": "dashboard" -} \ No newline at end of file diff --git a/packages/dashboard/babel.config.js b/packages/dashboard/babel.config.js deleted file mode 100644 index f7b3da3b..00000000 --- a/packages/dashboard/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], -}; diff --git a/packages/dashboard/index.js b/packages/dashboard/index.js deleted file mode 100644 index 16e2dbb0..00000000 --- a/packages/dashboard/index.js +++ /dev/null @@ -1,13 +0,0 @@ -import {ScriptManager} from '@callstack/repack/client'; -import {AppRegistry} from 'react-native'; -import App from './src/App'; -import {name as appName} from './app.json'; -import AsyncStorage from '@react-native-async-storage/async-storage'; - -// Only set storage caching in production -// @todo: fix this to be reliable in both dev and prod -if (!__DEV__) { - ScriptManager.shared.setStorage(AsyncStorage); -} - -AppRegistry.registerComponent(appName, () => App); diff --git a/packages/dashboard/ios/.xcode.env b/packages/dashboard/ios/.xcode.env deleted file mode 100644 index 3d5782c7..00000000 --- a/packages/dashboard/ios/.xcode.env +++ /dev/null @@ -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) diff --git a/packages/dashboard/ios/AppDelegate.swift b/packages/dashboard/ios/AppDelegate.swift deleted file mode 100644 index 87d3dd0f..00000000 --- a/packages/dashboard/ios/AppDelegate.swift +++ /dev/null @@ -1,48 +0,0 @@ -import React -import ReactAppDependencyProvider -import React_RCTAppDelegate -import UIKit - -@main -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - var reactNativeDelegate: ReactNativeDelegate? - var reactNativeFactory: RCTReactNativeFactory? - - func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil - ) -> Bool { - let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) - delegate.dependencyProvider = RCTAppDependencyProvider() - - reactNativeDelegate = delegate - reactNativeFactory = factory - - window = UIWindow(frame: UIScreen.main.bounds) - - factory.startReactNative( - withModuleName: "dashboard", - in: window, - launchOptions: launchOptions - ) - - return true - } -} - -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { - override func sourceURL(for bridge: RCTBridge) -> URL? { - self.bundleURL() - } - - override func bundleURL() -> URL? { - #if DEBUG - RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") - #else - Bundle.main.url(forResource: "main", withExtension: "jsbundle") - #endif - } -} diff --git a/packages/dashboard/ios/Podfile b/packages/dashboard/ios/Podfile deleted file mode 100644 index 4962766c..00000000 --- a/packages/dashboard/ios/Podfile +++ /dev/null @@ -1,36 +0,0 @@ -# require_relative '../node_modules/super-app-showcase-sdk/ios/react_native_setup.rb' -require Pod::Executable.execute_command('node', ['-p', - 'require.resolve( - "react-native/scripts/react_native_pods.rb", - {paths: [process.argv[1]]}, - )', __dir__]).strip - -platform :ios, min_ios_version_supported -prepare_react_native_project! - -linkage = ENV['USE_FRAMEWORKS'] -if linkage != nil - Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green - use_frameworks! :linkage => linkage.to_sym -end - -target 'dashboard' do - config = use_native_modules! - - use_react_native!( - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." - ) - - pod 'SDWebImage', :modular_headers => true - pod 'SDWebImageSVGCoder', :modular_headers => true - - post_install do |installer| - react_native_post_install( - installer, - config[:reactNativePath], - :mac_catalyst_enabled => false, - # :ccache_enabled => true - ) - end -end diff --git a/packages/dashboard/ios/Podfile.lock b/packages/dashboard/ios/Podfile.lock deleted file mode 100644 index cf675a4e..00000000 --- a/packages/dashboard/ios/Podfile.lock +++ /dev/null @@ -1,2372 +0,0 @@ -PODS: - - AsyncStorage (3.0.2): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - callstack-repack (5.2.5): - - hermes-engine - - JWTDecode (~> 3.0.0) - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - SwiftyRSA (~> 1.7) - - Yoga - - FBLazyVector (0.84.1) - - hermes-engine (250829098.0.9): - - hermes-engine/Pre-built (= 250829098.0.9) - - hermes-engine/Pre-built (250829098.0.9) - - JWTDecode (3.0.1) - - RCTDeprecation (0.84.1) - - RCTRequired (0.84.1) - - RCTSwiftUI (0.84.1) - - RCTSwiftUIWrapper (0.84.1): - - RCTSwiftUI - - RCTTypeSafety (0.84.1): - - FBLazyVector (= 0.84.1) - - RCTRequired (= 0.84.1) - - React-Core (= 0.84.1) - - React (0.84.1): - - React-Core (= 0.84.1) - - React-Core/DevSupport (= 0.84.1) - - React-Core/RCTWebSocket (= 0.84.1) - - React-RCTActionSheet (= 0.84.1) - - React-RCTAnimation (= 0.84.1) - - React-RCTBlob (= 0.84.1) - - React-RCTImage (= 0.84.1) - - React-RCTLinking (= 0.84.1) - - React-RCTNetwork (= 0.84.1) - - React-RCTSettings (= 0.84.1) - - React-RCTText (= 0.84.1) - - React-RCTVibration (= 0.84.1) - - React-callinvoker (0.84.1) - - React-Core (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default (= 0.84.1) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core-prebuilt (0.84.1): - - ReactNativeDependencies - - React-Core/CoreModulesHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/Default (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/DevSupport (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default (= 0.84.1) - - React-Core/RCTWebSocket (= 0.84.1) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTActionSheetHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTAnimationHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTBlobHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTImageHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTLinkingHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTNetworkHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTSettingsHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTTextHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTVibrationHeaders (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-Core/RCTWebSocket (0.84.1): - - hermes-engine - - RCTDeprecation - - React-Core-prebuilt - - React-Core/Default (= 0.84.1) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-CoreModules (0.84.1): - - RCTTypeSafety (= 0.84.1) - - React-Core-prebuilt - - React-Core/CoreModulesHeaders (= 0.84.1) - - React-debug - - React-jsi (= 0.84.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-NativeModulesApple - - React-RCTBlob - - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.84.1) - - React-runtimeexecutor - - React-utils - - ReactCommon - - ReactNativeDependencies - - React-cxxreact (0.84.1): - - hermes-engine - - React-callinvoker (= 0.84.1) - - React-Core-prebuilt - - React-debug (= 0.84.1) - - React-jsi (= 0.84.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-logger (= 0.84.1) - - React-perflogger (= 0.84.1) - - React-runtimeexecutor - - React-timing (= 0.84.1) - - React-utils - - ReactNativeDependencies - - React-debug (0.84.1) - - React-defaultsnativemodule (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-domnativemodule - - React-featureflags - - React-featureflagsnativemodule - - React-idlecallbacksnativemodule - - React-intersectionobservernativemodule - - React-jsi - - React-jsiexecutor - - React-microtasksnativemodule - - React-RCTFBReactNativeSpec - - React-webperformancenativemodule - - ReactNativeDependencies - - Yoga - - React-domnativemodule (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-Fabric - - React-Fabric/bridging - - React-FabricComponents - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-Fabric (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/animated (= 0.84.1) - - React-Fabric/animationbackend (= 0.84.1) - - React-Fabric/animations (= 0.84.1) - - React-Fabric/attributedstring (= 0.84.1) - - React-Fabric/bridging (= 0.84.1) - - React-Fabric/componentregistry (= 0.84.1) - - React-Fabric/componentregistrynative (= 0.84.1) - - React-Fabric/components (= 0.84.1) - - React-Fabric/consistency (= 0.84.1) - - React-Fabric/core (= 0.84.1) - - React-Fabric/dom (= 0.84.1) - - React-Fabric/imagemanager (= 0.84.1) - - React-Fabric/leakchecker (= 0.84.1) - - React-Fabric/mounting (= 0.84.1) - - React-Fabric/observers (= 0.84.1) - - React-Fabric/scheduler (= 0.84.1) - - React-Fabric/telemetry (= 0.84.1) - - React-Fabric/templateprocessor (= 0.84.1) - - React-Fabric/uimanager (= 0.84.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animated (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animationbackend (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/animations (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/attributedstring (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/bridging (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistry (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/componentregistrynative (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.84.1) - - React-Fabric/components/root (= 0.84.1) - - React-Fabric/components/scrollview (= 0.84.1) - - React-Fabric/components/view (= 0.84.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/legacyviewmanagerinterop (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/root (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/scrollview (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/components/view (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-Fabric/consistency (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/core (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/dom (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/imagemanager (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/leakchecker (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/mounting (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/observers/events (= 0.84.1) - - React-Fabric/observers/intersection (= 0.84.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/events (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/observers/intersection (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/scheduler (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/observers/events - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-performancecdpmetrics - - React-performancetimeline - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/telemetry (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/templateprocessor (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric/uimanager/consistency (= 0.84.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-Fabric/uimanager/consistency (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-FabricComponents (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.84.1) - - React-FabricComponents/textlayoutmanager (= 0.84.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.84.1) - - React-FabricComponents/components/iostextinput (= 0.84.1) - - React-FabricComponents/components/modal (= 0.84.1) - - React-FabricComponents/components/rncore (= 0.84.1) - - React-FabricComponents/components/safeareaview (= 0.84.1) - - React-FabricComponents/components/scrollview (= 0.84.1) - - React-FabricComponents/components/switch (= 0.84.1) - - React-FabricComponents/components/text (= 0.84.1) - - React-FabricComponents/components/textinput (= 0.84.1) - - React-FabricComponents/components/unimplementedview (= 0.84.1) - - React-FabricComponents/components/virtualview (= 0.84.1) - - React-FabricComponents/components/virtualviewexperimental (= 0.84.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/inputaccessory (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/iostextinput (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/modal (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/rncore (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/safeareaview (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/scrollview (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/switch (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/text (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/textinput (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/unimplementedview (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/virtualview (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/components/virtualviewexperimental (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricComponents/textlayoutmanager (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-FabricImage (0.84.1): - - hermes-engine - - RCTRequired (= 0.84.1) - - RCTTypeSafety (= 0.84.1) - - React-Core-prebuilt - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.84.1) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - ReactNativeDependencies - - Yoga - - React-featureflags (0.84.1): - - React-Core-prebuilt - - ReactNativeDependencies - - React-featureflagsnativemodule (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-graphics (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-jsiexecutor - - React-utils - - ReactNativeDependencies - - React-hermes (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact (= 0.84.1) - - React-jsi - - React-jsiexecutor (= 0.84.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-oscompat - - React-perflogger (= 0.84.1) - - React-runtimeexecutor - - ReactNativeDependencies - - React-idlecallbacksnativemodule (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-ImageManager (0.84.1): - - React-Core-prebuilt - - React-Core/Default - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - ReactNativeDependencies - - React-intersectionobservernativemodule (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-Fabric - - React-Fabric/bridging - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-jserrorhandler (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - ReactCommon/turbomodule/bridging - - ReactNativeDependencies - - React-jsi (0.84.1): - - hermes-engine - - React-Core-prebuilt - - ReactNativeDependencies - - React-jsiexecutor (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-jserrorhandler - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsinspector (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-oscompat - - React-perflogger (= 0.84.1) - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsinspectorcdp (0.84.1): - - React-Core-prebuilt - - ReactNativeDependencies - - React-jsinspectornetwork (0.84.1): - - React-Core-prebuilt - - React-jsinspectorcdp - - ReactNativeDependencies - - React-jsinspectortracing (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-jsinspectornetwork - - React-oscompat - - React-timing - - ReactNativeDependencies - - React-jsitooling (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact (= 0.84.1) - - React-debug - - React-jsi (= 0.84.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-jsitracing (0.84.1): - - React-jsi - - React-logger (0.84.1): - - React-Core-prebuilt - - ReactNativeDependencies - - React-Mapbuffer (0.84.1): - - React-Core-prebuilt - - React-debug - - ReactNativeDependencies - - React-microtasksnativemodule (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - react-native-bottom-tabs (1.1.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-bottom-tabs/common (= 1.1.0) - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - SwiftUIIntrospect (~> 1.0) - - Yoga - - react-native-bottom-tabs/common (1.1.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - SwiftUIIntrospect (~> 1.0) - - Yoga - - react-native-safe-area-context (5.7.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common (= 5.7.0) - - react-native-safe-area-context/fabric (= 5.7.0) - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context/common (5.7.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - react-native-safe-area-context/fabric (5.7.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - React-NativeModulesApple (0.84.1): - - hermes-engine - - React-callinvoker - - React-Core - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - React-networking (0.84.1): - - React-Core-prebuilt - - React-jsinspectornetwork - - React-jsinspectortracing - - React-performancetimeline - - React-timing - - ReactNativeDependencies - - React-oscompat (0.84.1) - - React-perflogger (0.84.1): - - React-Core-prebuilt - - ReactNativeDependencies - - React-performancecdpmetrics (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-jsi - - React-performancetimeline - - React-runtimeexecutor - - React-timing - - ReactNativeDependencies - - React-performancetimeline (0.84.1): - - React-Core-prebuilt - - React-featureflags - - React-jsinspector - - React-jsinspectortracing - - React-perflogger - - React-timing - - ReactNativeDependencies - - React-RCTActionSheet (0.84.1): - - React-Core/RCTActionSheetHeaders (= 0.84.1) - - React-RCTAnimation (0.84.1): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTAnimationHeaders - - React-debug - - React-featureflags - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTAppDelegate (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-CoreModules - - React-debug - - React-defaultsnativemodule - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsitooling - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTNetwork - - React-RCTRuntime - - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon - - ReactNativeDependencies - - React-RCTBlob (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - ReactNativeDependencies - - React-RCTFabric (0.84.1): - - hermes-engine - - RCTSwiftUIWrapper - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-FabricComponents - - React-FabricImage - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-networking - - React-performancecdpmetrics - - React-performancetimeline - - React-RCTAnimation - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTText - - React-rendererconsistency - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - Yoga - - React-RCTFBReactNativeSpec (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.84.1) - - ReactCommon - - ReactNativeDependencies - - React-RCTFBReactNativeSpec/components (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-NativeModulesApple - - React-rendererdebug - - React-utils - - ReactCommon - - ReactNativeDependencies - - Yoga - - React-RCTImage (0.84.1): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - ReactNativeDependencies - - React-RCTLinking (0.84.1): - - React-Core/RCTLinkingHeaders (= 0.84.1) - - React-jsi (= 0.84.1) - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactCommon/turbomodule/core (= 0.84.1) - - React-RCTNetwork (0.84.1): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTNetworkHeaders - - React-debug - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-NativeModulesApple - - React-networking - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTRuntime (0.84.1): - - hermes-engine - - React-Core - - React-Core-prebuilt - - React-debug - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-utils - - ReactNativeDependencies - - React-RCTSettings (0.84.1): - - RCTTypeSafety - - React-Core-prebuilt - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-RCTText (0.84.1): - - React-Core/RCTTextHeaders (= 0.84.1) - - Yoga - - React-RCTVibration (0.84.1): - - React-Core-prebuilt - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactNativeDependencies - - React-rendererconsistency (0.84.1) - - React-renderercss (0.84.1): - - React-debug - - React-utils - - React-rendererdebug (0.84.1): - - React-Core-prebuilt - - React-debug - - ReactNativeDependencies - - React-RuntimeApple (0.84.1): - - hermes-engine - - React-callinvoker - - React-Core-prebuilt - - React-Core/Default - - React-CoreModules - - React-cxxreact - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-Mapbuffer - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - React-RuntimeCore (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-Fabric - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-performancetimeline - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactNativeDependencies - - React-runtimeexecutor (0.84.1): - - React-Core-prebuilt - - React-debug - - React-featureflags - - React-jsi (= 0.84.1) - - React-utils - - ReactNativeDependencies - - React-RuntimeHermes (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-jsitracing - - React-RuntimeCore - - React-runtimeexecutor - - React-utils - - ReactNativeDependencies - - React-runtimescheduler (0.84.1): - - hermes-engine - - React-callinvoker - - React-Core-prebuilt - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-jsinspectortracing - - React-performancetimeline - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-timing - - React-utils - - ReactNativeDependencies - - React-timing (0.84.1): - - React-debug - - React-utils (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-debug - - React-jsi (= 0.84.1) - - ReactNativeDependencies - - React-webperformancenativemodule (0.84.1): - - hermes-engine - - React-Core-prebuilt - - React-cxxreact - - React-jsi - - React-jsiexecutor - - React-performancetimeline - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - ReactAppDependencyProvider (0.84.1): - - ReactCodegen - - ReactCodegen (0.84.1): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-FabricImage - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - React-RCTAppDelegate - - React-rendererdebug - - React-utils - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - ReactCommon (0.84.1): - - React-Core-prebuilt - - ReactCommon/turbomodule (= 0.84.1) - - ReactNativeDependencies - - ReactCommon/turbomodule (0.84.1): - - hermes-engine - - React-callinvoker (= 0.84.1) - - React-Core-prebuilt - - React-cxxreact (= 0.84.1) - - React-jsi (= 0.84.1) - - React-logger (= 0.84.1) - - React-perflogger (= 0.84.1) - - ReactCommon/turbomodule/bridging (= 0.84.1) - - ReactCommon/turbomodule/core (= 0.84.1) - - ReactNativeDependencies - - ReactCommon/turbomodule/bridging (0.84.1): - - hermes-engine - - React-callinvoker (= 0.84.1) - - React-Core-prebuilt - - React-cxxreact (= 0.84.1) - - React-jsi (= 0.84.1) - - React-logger (= 0.84.1) - - React-perflogger (= 0.84.1) - - ReactNativeDependencies - - ReactCommon/turbomodule/core (0.84.1): - - hermes-engine - - React-callinvoker (= 0.84.1) - - React-Core-prebuilt - - React-cxxreact (= 0.84.1) - - React-debug (= 0.84.1) - - React-featureflags (= 0.84.1) - - React-jsi (= 0.84.1) - - React-logger (= 0.84.1) - - React-perflogger (= 0.84.1) - - React-utils (= 0.84.1) - - ReactNativeDependencies - - ReactNativeDependencies (0.84.1) - - RNScreens (4.24.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - RNScreens/common (= 4.24.0) - - Yoga - - RNScreens/common (4.24.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-RCTImage - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - RNVectorIcons (10.3.0): - - hermes-engine - - RCTRequired - - RCTTypeSafety - - React-Core - - React-Core-prebuilt - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - ReactNativeDependencies - - Yoga - - SDWebImage (5.21.6): - - SDWebImage/Core (= 5.21.6) - - SDWebImage/Core (5.21.6) - - SDWebImageSVGCoder (1.8.0): - - SDWebImage/Core (~> 5.6) - - SwiftUIIntrospect (1.3.0) - - SwiftyRSA (1.7.0): - - SwiftyRSA/ObjC (= 1.7.0) - - SwiftyRSA/ObjC (1.7.0) - - Yoga (0.0.0) - -DEPENDENCIES: - - "AsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - - "callstack-repack (from `../node_modules/@callstack/repack`)" - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - - RCTSwiftUI (from `../node_modules/react-native/ReactApple/RCTSwiftUI`) - - RCTSwiftUIWrapper (from `../node_modules/react-native/ReactApple/RCTSwiftUIWrapper`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `../node_modules/react-native/`) - - React-Core-prebuilt (from `../node_modules/react-native/React-Core-prebuilt.podspec`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) - - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) - - React-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-intersectionobservernativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - - React-jsinspectorcdp (from `../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) - - React-jsinspectornetwork (from `../node_modules/react-native/ReactCommon/jsinspector-modern/network`) - - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) - - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) - - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - - react-native-bottom-tabs (from `../node_modules/react-native-bottom-tabs`) - - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-networking (from `../node_modules/react-native/ReactCommon/react/networking`) - - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancecdpmetrics (from `../node_modules/react-native/ReactCommon/react/performance/cdpmetrics`) - - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTFabric (from `../node_modules/react-native/React`) - - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) - - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) - - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) - - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - - React-webperformancenativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/webperformance`) - - ReactAppDependencyProvider (from `build/generated/ios/ReactAppDependencyProvider`) - - ReactCodegen (from `build/generated/ios/ReactCodegen`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - ReactNativeDependencies (from `../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - - RNScreens (from `../node_modules/react-native-screens`) - - RNVectorIcons (from `../node_modules/react-native-vector-icons`) - - SDWebImage - - SDWebImageSVGCoder - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - JWTDecode - - SDWebImage - - SDWebImageSVGCoder - - SwiftUIIntrospect - - SwiftyRSA - -EXTERNAL SOURCES: - AsyncStorage: - :path: "../node_modules/@react-native-async-storage/async-storage" - callstack-repack: - :path: "../node_modules/@callstack/repack" - FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-v250829098.0.9 - RCTDeprecation: - :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" - RCTRequired: - :path: "../node_modules/react-native/Libraries/Required" - RCTSwiftUI: - :path: "../node_modules/react-native/ReactApple/RCTSwiftUI" - RCTSwiftUIWrapper: - :path: "../node_modules/react-native/ReactApple/RCTSwiftUIWrapper" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Core: - :path: "../node_modules/react-native/" - React-Core-prebuilt: - :podspec: "../node_modules/react-native/React-Core-prebuilt.podspec" - React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-debug: - :path: "../node_modules/react-native/ReactCommon/react/debug" - React-defaultsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" - React-domnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" - React-Fabric: - :path: "../node_modules/react-native/ReactCommon" - React-FabricComponents: - :path: "../node_modules/react-native/ReactCommon" - React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" - React-featureflags: - :path: "../node_modules/react-native/ReactCommon/react/featureflags" - React-featureflagsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" - React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-idlecallbacksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" - React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" - React-intersectionobservernativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/intersectionobserver" - React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" - React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" - React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" - React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" - React-jsinspectorcdp: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" - React-jsinspectornetwork: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/network" - React-jsinspectortracing: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" - React-jsitooling: - :path: "../node_modules/react-native/ReactCommon/jsitooling" - React-jsitracing: - :path: "../node_modules/react-native/ReactCommon/hermes/executor/" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" - React-microtasksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" - react-native-bottom-tabs: - :path: "../node_modules/react-native-bottom-tabs" - react-native-safe-area-context: - :path: "../node_modules/react-native-safe-area-context" - React-NativeModulesApple: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" - React-networking: - :path: "../node_modules/react-native/ReactCommon/react/networking" - React-oscompat: - :path: "../node_modules/react-native/ReactCommon/oscompat" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - React-performancecdpmetrics: - :path: "../node_modules/react-native/ReactCommon/react/performance/cdpmetrics" - React-performancetimeline: - :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" - React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" - React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" - React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" - React-RCTFabric: - :path: "../node_modules/react-native/React" - React-RCTFBReactNativeSpec: - :path: "../node_modules/react-native/React" - React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" - React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" - React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" - React-RCTRuntime: - :path: "../node_modules/react-native/React/Runtime" - React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" - React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" - React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" - React-rendererconsistency: - :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" - React-renderercss: - :path: "../node_modules/react-native/ReactCommon/react/renderer/css" - React-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" - React-RuntimeApple: - :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" - React-RuntimeCore: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - React-RuntimeHermes: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimescheduler: - :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" - React-timing: - :path: "../node_modules/react-native/ReactCommon/react/timing" - React-utils: - :path: "../node_modules/react-native/ReactCommon/react/utils" - React-webperformancenativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/webperformance" - ReactAppDependencyProvider: - :path: build/generated/ios/ReactAppDependencyProvider - ReactCodegen: - :path: build/generated/ios/ReactCodegen - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - ReactNativeDependencies: - :podspec: "../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" - RNScreens: - :path: "../node_modules/react-native-screens" - RNVectorIcons: - :path: "../node_modules/react-native-vector-icons" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - AsyncStorage: b9dbc3eecddb3ec3c5254c8eb57e9018724912d8 - callstack-repack: ac761bfc09e2d4c5946bcbe5d1ee7518aae8ac58 - FBLazyVector: e97c19a5a442429d1988f182a1940fb08df514da - hermes-engine: 09800667f08d1bf10b4661e100bf5320637da57d - JWTDecode: 2eed97c2fa46ccaf3049a787004eedf0be474a87 - RCTDeprecation: af44b104091a34482596cd9bd7e8d90c4e9b4bd7 - RCTRequired: bb77b070f75f53398ce43c0aaaa58337cebe2bf6 - RCTSwiftUI: afc0a0a635860da1040a0b894bfd529da06d7810 - RCTSwiftUIWrapper: cbb32eb90f09bd42ea9ed1eecd51fef3294da673 - RCTTypeSafety: d13e192a37f151ce354641184bf4239844a3be17 - React: 1ba7d364ade7d883a1ec055bfc3606f35fdee17b - React-callinvoker: bc2a26f8d84fb01f003fc6de6c9337b64715f95b - React-Core: bdaa87b276ca31877632a982ecf7c36f8c826414 - React-Core-prebuilt: 47f5d8d31e9dad5227dee69c6c9b5ea4846aa1ff - React-CoreModules: b24989f62d56390ae08ca4f65e6f38fe6802de42 - React-cxxreact: 1a2dfcbc18a6b610664dba152adf327f063a0d12 - React-debug: 755200a6e7f5e6e0a40ff8d215493d43cce285fc - React-defaultsnativemodule: 027cad46a2847719b5d3d20dd915463b06a5d4d1 - React-domnativemodule: 5ddfc6b3b73b48a31dfa12f52d6b62527f6f260c - React-Fabric: 6ffcc768e2378e84ed428069c7e2d270ee78f2bf - React-FabricComponents: ee6614287222dd4f04fdb1263d1ae6eb7fe952c6 - React-FabricImage: ab05740a08ad9e23e4e1701e9c354e9a9b048063 - React-featureflags: a8b0c8d9a93b5903f7620408659de160d95e4efe - React-featureflagsnativemodule: 0f0fe1a044829f31d7565a4bdfded376fbcfdfc1 - React-graphics: c497dd295c88729525a4752d524d2d783aa205d4 - React-hermes: c2bde95033e6df1599b5c1b6d7e45736a8aa5cba - React-idlecallbacksnativemodule: 6ceacabe93be052bbe822fb018602f63a8e280e2 - React-ImageManager: 820fe1d55add59ec053099a0c5abe830ecd6c699 - React-intersectionobservernativemodule: f84958aaf662f95f837dc4d26cbb5e7dcc4b8f09 - React-jserrorhandler: 390c6c46e2f639b5ba104385d7fba848396347e8 - React-jsi: 382de7964299bbf878458006a14f52cb66a36cfc - React-jsiexecutor: b781400a9becfb24e36ac063dccb42a52dcb44ca - React-jsinspector: 0644f32cc9b09eae2bc845ceb58d03420ae70821 - React-jsinspectorcdp: 96677569865afe25c737889e02d635db26131d9f - React-jsinspectornetwork: 28c7cac2e92b1739561dcffd07f5554e54050a85 - React-jsinspectortracing: 58ee96f9580a143011f8b914ad6927b5116461a7 - React-jsitooling: bc79639489d610c35731dd26e8e54c37e078996d - React-jsitracing: 1bb9fae4f2ccf891255a419cdfc13372d07ef4a5 - React-logger: 517377b1d2ba7ac722d47fb2183b98de86632063 - React-Mapbuffer: 45e088dfb58dc326ae20cca1814d3726553c4cad - React-microtasksnativemodule: ab9d1a05fe1f58ea44a97d307ef1b53463f45a3f - react-native-bottom-tabs: 484fe90c49d4d7d547d15ae78f4de75492a395fa - react-native-safe-area-context: 29044d05d61f2c60d0828c373bd0ebe17eed58d0 - React-NativeModulesApple: b94faa2dce6d8c0a9d722ed7ee27b996d28b62d1 - React-networking: e409d8fb062162da6293e98b77f8d80cf4430e07 - React-oscompat: ff26abf0ae3e3fdbe47b44224571e3fc7226a573 - React-perflogger: 757c8c725cc20e94eba406885047f03cf83044fb - React-performancecdpmetrics: fec7e28b711c95ccb6fc7e3bb16572d88bcf27ae - React-performancetimeline: 4c6102f19df01db35c37a3e63a058cfbf1a056d9 - React-RCTActionSheet: fc1d5d419856868e7f8c13c14591ed63dadef43a - React-RCTAnimation: 1ce166ec15ab1f8eca8ebaae7f8f709d9be6958c - React-RCTAppDelegate: c752d93f597168a9a4d5678e9354bbb8d84df6d1 - React-RCTBlob: 147d41ee9f80cf27fe9b2f7adc1d6d24f68ec3fc - React-RCTFabric: 712c4ad749a43712609011d178234c90a17cde12 - React-RCTFBReactNativeSpec: 032ea8783dc27290ec6b9af9d8df5351847539a2 - React-RCTImage: fd39f1c478f1e43357bc72c2dbdc2454aafe4035 - React-RCTLinking: 02ca1c83536dab08130f5db4852f293c53885dd6 - React-RCTNetwork: 85dc64c530e4b0be7436f9a15b03caba24e9a3a1 - React-RCTRuntime: c75950caa80e6884cbf0417d8738992256890508 - React-RCTSettings: df5da31865cc1bab7ef5314e65ca18f6b538d71d - React-RCTText: 41587e426883c9a83fd8eb0c57fe328aad4ed57a - React-RCTVibration: 8ca2f9839c53416dffb584adb94501431ba7f96e - React-rendererconsistency: e91aba4bb482dac127ad955dba6333a8af629c5b - React-renderercss: 1f15a79f3cc3c9416902b8f70266408116d93bd0 - React-rendererdebug: 77dcf1490ee5c0ce141d2b1eaceed02aa0996826 - React-RuntimeApple: 1074835708500a69770b713f718400137f30ce7a - React-RuntimeCore: 148db945742d7ce2985cc35b8ddc61edfdb46e6d - React-runtimeexecutor: 5742146dac0f8de9c21f5f703993df249c046d0d - React-RuntimeHermes: a5bb378bea92d526341a65afa945a38c9bc787b2 - React-runtimescheduler: 91838dd32460920ed1b4da68590a2684b784aacc - React-timing: 9c0e2b1532317148fa0487bbc3833c1f348981a0 - React-utils: 2f8dd43fed5c6d881ac5971666bbb34cc4a03fa1 - React-webperformancenativemodule: afbee7a9fd0b5bf92f6765eb41767f865b293bcc - ReactAppDependencyProvider: 26bbf1e26768d08dd965a2b5e372e53f67b21fee - ReactCodegen: cac18d8d019ac167415438d199aa944954b1b874 - ReactCommon: 309419492d417c4cbb87af06f67735afa40ecb9d - ReactNativeDependencies: 3b93836d3ce58094a3b2514dc2af3aaaeccec499 - RNScreens: 088d923c4327c63c9f8c942cae17a9d038f47d97 - RNVectorIcons: af977c18ed27deba54ed038b439fca2911a08cfc - SDWebImage: 1bb6a1b84b6fe87b972a102bdc77dd589df33477 - SDWebImageSVGCoder: 8e10c8f6cc879c7dfb317b284e13dd589379f01c - SwiftUIIntrospect: fee9aa07293ee280373a591e1824e8ddc869ba5d - SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6 - Yoga: c0b3f2c7e8d3e327e450223a2414ca3fa296b9a2 - -PODFILE CHECKSUM: c2fbbcb541e61a9ce35d29ec587f557734da3bfe - -COCOAPODS: 1.15.2 diff --git a/packages/dashboard/ios/PrivacyInfo.xcprivacy b/packages/dashboard/ios/PrivacyInfo.xcprivacy deleted file mode 100644 index 41b8317f..00000000 --- a/packages/dashboard/ios/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,37 +0,0 @@ - - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults - NSPrivacyAccessedAPITypeReasons - - CA92.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - NSPrivacyCollectedDataTypes - - NSPrivacyTracking - - - diff --git a/packages/dashboard/ios/dashboard.xcodeproj/project.pbxproj b/packages/dashboard/ios/dashboard.xcodeproj/project.pbxproj deleted file mode 100644 index 5cd02da0..00000000 --- a/packages/dashboard/ios/dashboard.xcodeproj/project.pbxproj +++ /dev/null @@ -1,509 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 0C80B921A6F3F58F76C31292 /* libPods-dashboard.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-dashboard.a */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - B39E15AA2D9BCE5900326657 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B39E15A92D9BCE5900326657 /* AppDelegate.swift */; }; - C04BDCF4CE0CF54A9C593911 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 22A7F12A7700F42CC890B316 /* PrivacyInfo.xcprivacy */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 13B07F961A680F5B00A75B9A /* dashboard.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dashboard.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = dashboard/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = dashboard/Info.plist; sourceTree = ""; }; - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-dashboard-dashboardTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dashboard-dashboardTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 22A7F12A7700F42CC890B316 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = dashboard/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 3B4392A12AC88292D35C810B /* Pods-dashboard.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashboard.debug.xcconfig"; path = "Target Support Files/Pods-dashboard/Pods-dashboard.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-dashboard.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashboard.release.xcconfig"; path = "Target Support Files/Pods-dashboard/Pods-dashboard.release.xcconfig"; sourceTree = ""; }; - 5B7EB9410499542E8C5724F5 /* Pods-dashboard-dashboardTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashboard-dashboardTests.debug.xcconfig"; path = "Target Support Files/Pods-dashboard-dashboardTests/Pods-dashboard-dashboardTests.debug.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-dashboard.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-dashboard.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = dashboard/LaunchScreen.storyboard; sourceTree = ""; }; - 89C6BE57DB24E9ADA2F236DE /* Pods-dashboard-dashboardTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dashboard-dashboardTests.release.xcconfig"; path = "Target Support Files/Pods-dashboard-dashboardTests/Pods-dashboard-dashboardTests.release.xcconfig"; sourceTree = ""; }; - B39E15A92D9BCE5900326657 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; - ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0C80B921A6F3F58F76C31292 /* libPods-dashboard.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 13B07FAE1A68108700A75B9A /* dashboard */ = { - isa = PBXGroup; - children = ( - B39E15A92D9BCE5900326657 /* AppDelegate.swift */, - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, - 22A7F12A7700F42CC890B316 /* PrivacyInfo.xcprivacy */, - ); - name = dashboard; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-dashboard.a */, - 19F6CBCC0A4E27FBF8BF4A61 /* libPods-dashboard-dashboardTests.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* dashboard */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* dashboard.app */, - ); - name = Products; - sourceTree = ""; - }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { - isa = PBXGroup; - children = ( - 3B4392A12AC88292D35C810B /* Pods-dashboard.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-dashboard.release.xcconfig */, - 5B7EB9410499542E8C5724F5 /* Pods-dashboard-dashboardTests.debug.xcconfig */, - 89C6BE57DB24E9ADA2F236DE /* Pods-dashboard-dashboardTests.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 13B07F861A680F5B00A75B9A /* dashboard */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "dashboard" */; - buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = dashboard; - productName = dashboard; - productReference = 13B07F961A680F5B00A75B9A /* dashboard.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - TargetAttributes = { - 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1620; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "dashboard" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* dashboard */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - C04BDCF4CE0CF54A9C593911 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/.xcode.env", - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\nexport BUNDLE_COMMAND=bundle\n\n/bin/sh -c \"\\\"$WITH_ENVIRONMENT\\\" \\\"$REACT_NATIVE_XCODE\\\"\"\n"; - }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-dashboard/Pods-dashboard-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-dashboard/Pods-dashboard-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-dashboard/Pods-dashboard-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-dashboard-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-dashboard/Pods-dashboard-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-dashboard/Pods-dashboard-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-dashboard/Pods-dashboard-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B39E15AA2D9BCE5900326657 /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-dashboard.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = dashboard/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = dashboard; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-dashboard.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - INFOPLIST_FILE = dashboard/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = dashboard; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - 83CBBA201A601CBA00E9B192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION, - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CFLAGS = ( - "$(inherited)", - "-DRCT_REMOVE_LEGACY_ARCH=1", - ); - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - "-DRCT_REMOVE_LEGACY_ARCH=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - SWIFT_ENABLE_EXPLICIT_MODULES = NO; - USE_HERMES = true; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "$(inherited)", - _LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION, - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CFLAGS = ( - "$(inherited)", - "-DRCT_REMOVE_LEGACY_ARCH=1", - ); - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - "-DRCT_REMOVE_LEGACY_ARCH=1", - ); - OTHER_LDFLAGS = ( - "$(inherited)", - " ", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - SWIFT_ENABLE_EXPLICIT_MODULES = NO; - USE_HERMES = true; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "dashboard" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "dashboard" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/packages/dashboard/ios/dashboard.xcodeproj/xcshareddata/xcschemes/dashboard.xcscheme b/packages/dashboard/ios/dashboard.xcodeproj/xcshareddata/xcschemes/dashboard.xcscheme deleted file mode 100644 index 071b5fab..00000000 --- a/packages/dashboard/ios/dashboard.xcodeproj/xcshareddata/xcschemes/dashboard.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/dashboard/ios/dashboard.xcworkspace/contents.xcworkspacedata b/packages/dashboard/ios/dashboard.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 8527a14e..00000000 --- a/packages/dashboard/ios/dashboard.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/packages/dashboard/ios/dashboard.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/dashboard/ios/dashboard.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d98100..00000000 --- a/packages/dashboard/ios/dashboard.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEDidComputeMac32BitWarning - - - diff --git a/packages/dashboard/ios/dashboard/Images.xcassets/AppIcon.appiconset/Contents.json b/packages/dashboard/ios/dashboard/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 81213230..00000000 --- a/packages/dashboard/ios/dashboard/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/packages/dashboard/ios/dashboard/Images.xcassets/Contents.json b/packages/dashboard/ios/dashboard/Images.xcassets/Contents.json deleted file mode 100644 index 2d92bd53..00000000 --- a/packages/dashboard/ios/dashboard/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/packages/dashboard/ios/dashboard/Info.plist b/packages/dashboard/ios/dashboard/Info.plist deleted file mode 100644 index 31eb8e3c..00000000 --- a/packages/dashboard/ios/dashboard/Info.plist +++ /dev/null @@ -1,79 +0,0 @@ - - - - - CADisableMinimumFrameDurationOnPhone - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - dashboard - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - - NSLocationWhenInUseUsageDescription - - RCTNewArchEnabled - - UIAppFonts - - AntDesign.ttf - Entypo.ttf - EvilIcons.ttf - Feather.ttf - FontAwesome.ttf - FontAwesome5_Brands.ttf - FontAwesome5_Regular.ttf - FontAwesome5_Solid.ttf - Foundation.ttf - Ionicons.ttf - MaterialIcons.ttf - MaterialCommunityIcons.ttf - SimpleLineIcons.ttf - Octicons.ttf - Zocial.ttf - Fontisto.ttf - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - arm64 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/packages/dashboard/ios/dashboard/LaunchScreen.storyboard b/packages/dashboard/ios/dashboard/LaunchScreen.storyboard deleted file mode 100644 index e5d1e741..00000000 --- a/packages/dashboard/ios/dashboard/LaunchScreen.storyboard +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/dashboard/ios/dashboard/PrivacyInfo.xcprivacy b/packages/dashboard/ios/dashboard/PrivacyInfo.xcprivacy deleted file mode 100644 index 41b8317f..00000000 --- a/packages/dashboard/ios/dashboard/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,37 +0,0 @@ - - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults - NSPrivacyAccessedAPITypeReasons - - CA92.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - NSPrivacyCollectedDataTypes - - NSPrivacyTracking - - - diff --git a/packages/dashboard/jest.config.js b/packages/dashboard/jest.config.js deleted file mode 100644 index 9480dd5b..00000000 --- a/packages/dashboard/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - preset: 'react-native', - fakeTimers: { - enableGlobally: true, - }, - setupFiles: ['./jest.setup.js'], - transformIgnorePatterns: [ - 'node_modules/(?!(?:.pnpm/)?((jest-)?react-native|@react-native(-community)?|react-navigation|@react-navigation|react-native-svg))', - ], -}; diff --git a/packages/dashboard/jest.setup.js b/packages/dashboard/jest.setup.js deleted file mode 100644 index 307ed9b5..00000000 --- a/packages/dashboard/jest.setup.js +++ /dev/null @@ -1,10 +0,0 @@ -jest.mock('@callstack/repack/client', () => ({ - Federated: { - importModule: jest.fn((container, module) => { - if (container === 'auth') { - const authMock = require('../auth/mocks/federated'); - return Promise.resolve(authMock.default(module)); - } - }), - }, -})); diff --git a/packages/dashboard/mocks/App.tsx b/packages/dashboard/mocks/App.tsx deleted file mode 100644 index 3d1c7bfb..00000000 --- a/packages/dashboard/mocks/App.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export const AppMock = () => <>; diff --git a/packages/dashboard/mocks/federated.ts b/packages/dashboard/mocks/federated.ts deleted file mode 100644 index e44c098d..00000000 --- a/packages/dashboard/mocks/federated.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {AppMock} from './App'; - -export default (module: string) => { - switch (module) { - case './App': - return AppMock; - default: - throw new Error(`DashboardMock: unknown module: ${module}`); - } -}; diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json deleted file mode 100644 index dae89be3..00000000 --- a/packages/dashboard/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "dashboard", - "version": "0.0.1", - "private": true, - "scripts": { - "android": "react-native run-android", - "ios": "react-native run-ios", - "start": "react-native start --port 9002", - "start:standalone": "STANDALONE=1 react-native start --port 8081", - "test": "jest", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx", - "typecheck": "tsc", - "bundle": "pnpm bundle:ios && pnpm bundle:android", - "bundle:ios": "react-native bundle --platform ios --entry-file index.js --dev false", - "bundle:android": "react-native bundle --platform android --entry-file index.js --dev false", - "pods": "(cd ios && bundle install && bundle exec pod install)", - "pods:update": "(cd ios && bundle exec pod update)", - "align-deps": "rnx-align-deps --write", - "check-deps": "rnx-align-deps" - }, - "dependencies": { - "@bottom-tabs/react-navigation": "1.1.0", - "@module-federation/enhanced": "2.3.1", - "@react-native-async-storage/async-storage": "3.0.2", - "@react-navigation/native": "7.2.2", - "@react-navigation/native-stack": "7.14.10", - "react": "19.2.3", - "react-native": "0.84.1", - "react-native-bottom-tabs": "1.1.0", - "react-native-calendars": "1.1291.1", - "react-native-edge-to-edge": "1.8.1", - "react-native-paper": "5.15.0", - "react-native-safe-area-context": "5.7.0", - "react-native-screens": "4.24.0", - "react-native-vector-icons": "10.3.0" - }, - "devDependencies": { - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.3", - "@babel/runtime": "^7.25.0", - "@callstack/repack": "5.2.5", - "@react-native-community/cli": "20.1.0", - "@react-native-community/cli-platform-android": "20.1.0", - "@react-native-community/cli-platform-ios": "20.1.0", - "@react-native/babel-preset": "0.84.1", - "@react-native/eslint-config": "0.84.1", - "@react-native/typescript-config": "0.84.1", - "@rnx-kit/align-deps": "^3.4.3", - "@rspack/core": "1.7.11", - "@swc/helpers": "^0.5.20", - "@types/jest": "^29.5.14", - "@types/react": "^19.2.0", - "@types/react-native-vector-icons": "^6.4.18", - "@types/react-test-renderer": "^19.1.0", - "@typescript-eslint/eslint-plugin": "^8.12.2", - "@typescript-eslint/parser": "^8.12.2", - "eslint": "^8.57.0", - "jest": "^29.6.3", - "prettier": "^2.8.8", - "react-test-renderer": "^19.2.3", - "super-app-showcase-sdk": "0.0.2", - "typescript": "^5.8.3" - }, - "rnx-kit": { - "kitType": "app", - "alignDeps": { - "presets": [ - "./node_modules/super-app-showcase-sdk/preset" - ], - "requirements": [ - "super-app-showcase-sdk@0.0.2" - ], - "capabilities": [ - "super-app" - ] - } - } -} diff --git a/packages/dashboard/react-native.config.js b/packages/dashboard/react-native.config.js deleted file mode 100644 index cd91bac2..00000000 --- a/packages/dashboard/react-native.config.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - commands: require('@callstack/repack/commands/rspack'), - project: { - ios: { - automaticPodsInstallation: true, - }, - }, -}; diff --git a/packages/dashboard/rspack.config.ts b/packages/dashboard/rspack.config.ts deleted file mode 100644 index 46b5e401..00000000 --- a/packages/dashboard/rspack.config.ts +++ /dev/null @@ -1,68 +0,0 @@ -import path from 'node:path'; -import {fileURLToPath} from 'node:url'; -import * as Repack from '@callstack/repack'; -import rspack from '@rspack/core'; -import {getSharedDependencies} from 'super-app-showcase-sdk'; - -const __filename = fileURLToPath(import.meta.url); -const __dirname = path.dirname(__filename); - -const STANDALONE = Boolean(process.env.STANDALONE); - -/** - * Rspack configuration enhanced with Re.Pack defaults for React Native. - * - * Learn about Rspack configuration: https://rspack.dev/config/ - * Learn about Re.Pack configuration: https://re-pack.dev/docs/guides/configuration - */ - -export default Repack.defineRspackConfig(({mode, platform}) => { - return { - mode, - context: __dirname, - entry: './index.js', - resolve: { - ...Repack.getResolveOptions({enablePackageExports: true}), - }, - output: { - uniqueName: 'sas-dashboard', - }, - module: { - rules: [ - { - test: /\.[cm]?[jt]sx?$/, - use: { - loader: '@callstack/repack/babel-swc-loader', - parallel: true, - options: {}, - }, - type: 'javascript/auto', - }, - ...Repack.getAssetTransformRules({inline: !STANDALONE}), - ], - }, - plugins: [ - new Repack.RepackPlugin(), - new Repack.plugins.ModuleFederationPluginV2({ - name: 'dashboard', - filename: 'dashboard.container.js.bundle', - dts: false, - exposes: STANDALONE - ? undefined - : {'./App': './src/navigation/MainNavigator'}, - remotes: { - auth: `auth@http://localhost:9003/${platform}/mf-manifest.json`, - }, - shared: getSharedDependencies({eager: STANDALONE}), - }), - new Repack.plugins.CodeSigningPlugin({ - enabled: mode === 'production', - privateKeyPath: path.join('..', '..', 'code-signing.pem'), - }), - // silence missing @react-native-masked-view optionally required by @react-navigation/elements - new rspack.IgnorePlugin({ - resourceRegExp: /^@react-native-masked-view/, - }), - ], - }; -}); diff --git a/packages/dashboard/src/App.tsx b/packages/dashboard/src/App.tsx deleted file mode 100644 index b1b88d43..00000000 --- a/packages/dashboard/src/App.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import {NavigationContainer} from '@react-navigation/native'; -import MainNavigator from './navigation/MainNavigator'; -import SplashScreen from './components/SplashScreen'; -import ErrorBoundary from './components/ErrorBoundary'; - -const AuthProvider = React.lazy(() => import('auth/AuthProvider')); -const SignInScreen = React.lazy(() => import('auth/SignInScreen')); - -const App = () => { - return ( - - }> - - {(authData: {isSignout: boolean; isLoading: boolean}) => { - if (authData.isLoading) { - return ; - } - - if (authData.isSignout) { - return ( - }> - - - ); - } - - return ( - - - - ); - }} - - - - ); -}; - -export default App; diff --git a/packages/dashboard/src/__tests__/App-test.tsx b/packages/dashboard/src/__tests__/App-test.tsx deleted file mode 100644 index 085b231a..00000000 --- a/packages/dashboard/src/__tests__/App-test.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; - -import App from '../App'; - -it('renders correctly', () => { - renderer.create(); -}); diff --git a/packages/dashboard/src/components/ErrorBoundary.tsx b/packages/dashboard/src/components/ErrorBoundary.tsx deleted file mode 100644 index 359cdb67..00000000 --- a/packages/dashboard/src/components/ErrorBoundary.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react'; -import {StyleSheet, Text, SafeAreaView} from 'react-native'; -import {MD3Colors} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -type Props = { - children: React.ReactNode; - name: string; -}; - -type State = { - hasError: boolean; -}; - -class ErrorBoundary extends React.Component { - name: string; - - constructor(props: Props) { - super(props); - this.name = props.name; - this.state = {hasError: false}; - } - - static getDerivedStateFromError() { - return {hasError: true}; - } - - componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { - console.log(error, errorInfo); - } - - render() { - if (this.state.hasError) { - return ( - - - {`Failed to load ${this.name}`} - - ); - } - - return this.props.children; - } -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - text: { - fontSize: 24, - color: MD3Colors.primary20, - textAlign: 'center', - }, -}); - -export default ErrorBoundary; diff --git a/packages/dashboard/src/components/NavBar.tsx b/packages/dashboard/src/components/NavBar.tsx deleted file mode 100644 index 2d77508b..00000000 --- a/packages/dashboard/src/components/NavBar.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import {NativeStackHeaderProps} from '@react-navigation/native-stack'; -import {Appbar, MD3Colors} from 'react-native-paper'; - -const NavBar = ({navigation, back, route, options}: NativeStackHeaderProps) => { - return ( - - {back ? : null} - - - ); -}; - -export default NavBar; diff --git a/packages/dashboard/src/components/Placeholder.tsx b/packages/dashboard/src/components/Placeholder.tsx deleted file mode 100644 index d63ab4f0..00000000 --- a/packages/dashboard/src/components/Placeholder.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React, {FC} from 'react'; -import {SafeAreaView, StyleSheet, Text} from 'react-native'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {MD3Colors} from 'react-native-paper'; - -type Props = { - label: string; - icon: string; -}; - -const Placeholder: FC = ({label, icon}) => { - return ( - - - {label} - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - text: { - fontSize: 24, - color: MD3Colors.primary20, - }, -}); - -export default Placeholder; diff --git a/packages/dashboard/src/components/ScreenPlaceholder.tsx b/packages/dashboard/src/components/ScreenPlaceholder.tsx deleted file mode 100644 index 9e2630dc..00000000 --- a/packages/dashboard/src/components/ScreenPlaceholder.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import {Text} from 'react-native-paper'; - -const ScreenPlaceholder = () => { - return ( - - Not implemented yet - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - title: { - fontSize: 24, - }, -}); - -export default ScreenPlaceholder; diff --git a/packages/dashboard/src/components/SplashScreen.tsx b/packages/dashboard/src/components/SplashScreen.tsx deleted file mode 100644 index 65e97f9f..00000000 --- a/packages/dashboard/src/components/SplashScreen.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import {StyleSheet, SafeAreaView} from 'react-native'; -import {MD3Colors, ProgressBar, Text} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -const SplashScreen = () => { - return ( - - - - Dashboard application is loading. Please wait... - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - }, - icon: { - textAlign: 'center', - }, - text: { - paddingVertical: 16, - paddingHorizontal: 32, - fontSize: 24, - color: MD3Colors.primary20, - textAlign: 'center', - }, - progress: { - marginVertical: 16, - marginHorizontal: 32, - }, -}); - -export default SplashScreen; diff --git a/packages/dashboard/src/data/articles.json b/packages/dashboard/src/data/articles.json deleted file mode 100644 index f373a003..00000000 --- a/packages/dashboard/src/data/articles.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "data": [ - { - "id": "1", - "title": "Article 1", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - }, - { - "id": "2", - "title": "Article 2", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - }, - { - "id": "3", - "title": "Article 3", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - }, - { - "id": "4", - "title": "Article 4", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - } - ] -} \ No newline at end of file diff --git a/packages/dashboard/src/data/bookings.json b/packages/dashboard/src/data/bookings.json deleted file mode 100644 index 32815456..00000000 --- a/packages/dashboard/src/data/bookings.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "data": [ - { - "id": "1", - "title": "Haircut", - "provider": "John Doe", - "date": "01.01.2018", - "time": "10:00" - }, - { - "id": "2", - "title": "Coloring", - "provider": "John Doe", - "date": "02.01.2018", - "time": "09:00" - }, - { - "id": "3", - "title": "Beard trim", - "provider": "John Doe", - "date": "03.01.2018", - "time": "12:00" - }, - { - "id": "4", - "title": "Beard shave", - "provider": "John Doe", - "date": "04.01.2018", - "time": "12:00" - }, - { - "id": "5", - "title": "Haircut", - "provider": "John Doe", - "date": "05.01.2018", - "time": "12:00" - }, - { - "id": "6", - "title": "Haircut", - "provider": "John Doe", - "date": "06.01.2018", - "time": "12:00" - }, - { - "id": "7", - "title": "Nail polish", - "provider": "John Doe", - "date": "07.01.2018", - "time": "12:00" - }, - { - "id": "8", - "title": "Head massage", - "provider": "John Doe", - "date": "08.01.2018", - "time": "12:00" - } - ] -} \ No newline at end of file diff --git a/packages/dashboard/src/data/news.json b/packages/dashboard/src/data/news.json deleted file mode 100644 index 400a498a..00000000 --- a/packages/dashboard/src/data/news.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "data": [ - { - "id": "1", - "title": "News 1", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - }, - { - "id": "2", - "title": "News 2", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - }, - { - "id": "3", - "title": "News 3", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - }, - { - "id": "4", - "title": "News 4", - "image": "https://picsum.photos/700", - "content": "Lorem ipsum dolor sit amet consectetur adipiscing elit in taciti suscipit gravida, felis congue ad tincidunt nec habitasse erat massa potenti purus, morbi ut iaculis eget sodales quis etiam condimentum nullam vulputate. Netus penatibus etiam ultrices neque nostra augue class tincidunt dapibus libero cum odio tempor habitant, eu praesent ligula lacinia egestas eros turpis donec luctus nullam aliquet nibh orci. Hendrerit euismod massa blandit sagittis aptent mi imperdiet dictumst dui curabitur, nascetur nunc potenti vestibulum diam luctus class purus felis, phasellus primis porta per quam penatibus fringilla magnis metus." - } - ] -} \ No newline at end of file diff --git a/packages/dashboard/src/data/products.json b/packages/dashboard/src/data/products.json deleted file mode 100644 index 1a697ffb..00000000 --- a/packages/dashboard/src/data/products.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "data": [ - { - "id": "1", - "price": "100", - "name": "Shampoo", - "description": "Shampoo for hair", - "image": "https://picsum.photos/700" - }, - { - "id": "2", - "price": "200", - "name": "Conditioner", - "description": "Conditioner for hair and scalp", - "image": "https://picsum.photos/700" - }, - { - "id": "3", - "price": "300", - "name": "Hair Oil", - "description": "Hair Oil for hair growth", - "image": "https://picsum.photos/700" - }, - { - "id": "4", - "price": "400", - "name": "Hair Gel", - "description": "Hair Gel for hair styling", - "image": "https://picsum.photos/700" - } - ] -} \ No newline at end of file diff --git a/packages/dashboard/src/navigation/AccountNavigator.tsx b/packages/dashboard/src/navigation/AccountNavigator.tsx deleted file mode 100644 index 98fd781a..00000000 --- a/packages/dashboard/src/navigation/AccountNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import AccountScreen from '../screens/AccountScreen'; - -export type AccountStackParamList = { - Account: undefined; -}; - -const Account = createNativeStackNavigator(); - -const AccountNavigator = () => { - return ( - - - - ); -}; - -export default AccountNavigator; diff --git a/packages/dashboard/src/navigation/CalendarNavigator.tsx b/packages/dashboard/src/navigation/CalendarNavigator.tsx deleted file mode 100644 index f6387f49..00000000 --- a/packages/dashboard/src/navigation/CalendarNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import CalendarScreen from '../screens/CalendarScreen'; - -export type CalendarStackParamList = { - Calendar: undefined; -}; - -const Calendar = createNativeStackNavigator(); - -const CalendarNavigator = () => { - return ( - - - - ); -}; - -export default CalendarNavigator; diff --git a/packages/dashboard/src/navigation/HomeNavigator.tsx b/packages/dashboard/src/navigation/HomeNavigator.tsx deleted file mode 100644 index 8d165000..00000000 --- a/packages/dashboard/src/navigation/HomeNavigator.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import HomeScreen from '../screens/HomeScreen'; -import NavBar from '../components/NavBar'; - -export type HomeStackParamList = { - Home: undefined; - Upcoming: undefined; -}; - -const Home = createNativeStackNavigator(); - -const HomeNavigator = () => { - return ( - - - - ); -}; - -export default HomeNavigator; diff --git a/packages/dashboard/src/navigation/MainNavigator.tsx b/packages/dashboard/src/navigation/MainNavigator.tsx deleted file mode 100644 index 0c4ca8e6..00000000 --- a/packages/dashboard/src/navigation/MainNavigator.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import TabsNavigator from './TabsNavigator'; - -export type MainStackParamList = { - Tabs: undefined; -}; - -const Main = createNativeStackNavigator(); - -const MainNavigator = () => { - return ( - - - - ); -}; - -export default MainNavigator; diff --git a/packages/dashboard/src/navigation/StatisticsNavigator.tsx b/packages/dashboard/src/navigation/StatisticsNavigator.tsx deleted file mode 100644 index a774c4f3..00000000 --- a/packages/dashboard/src/navigation/StatisticsNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import StatisticsScreen from '../screens/StatisticsScreen'; - -export type StatisticsStackParamList = { - Statistics: undefined; -}; - -const Statistics = createNativeStackNavigator(); - -const StatisticsNavigator = () => { - return ( - - - - ); -}; - -export default StatisticsNavigator; diff --git a/packages/dashboard/src/navigation/TabsNavigator.tsx b/packages/dashboard/src/navigation/TabsNavigator.tsx deleted file mode 100644 index 3839a09d..00000000 --- a/packages/dashboard/src/navigation/TabsNavigator.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react'; -import {createNativeBottomTabNavigator} from '@bottom-tabs/react-navigation'; -import {MD3Colors} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import HomeNavigator from './HomeNavigator'; -import CalendarNavigator from './CalendarNavigator'; -import StatisticsNavigator from './StatisticsNavigator'; -import AccountNavigator from './AccountNavigator'; - -export type TabsParamList = { - HomeNavigator: undefined; - CalendarNavigator: undefined; - StatisticsNavigator: undefined; - AccountNavigator: undefined; -}; - -const homeIcon = Icon.getImageSourceSync('home', 24); -const calendarIcon = Icon.getImageSourceSync('calendar', 24); -const chartBoxIcon = Icon.getImageSourceSync('chart-box', 24); -const accountIcon = Icon.getImageSourceSync('account', 24); - -const Tabs = createNativeBottomTabNavigator(); - -const TabsNavigator = () => { - return ( - - homeIcon, - }} - /> - calendarIcon, - }} - /> - chartBoxIcon, - }} - /> - accountIcon, - }} - /> - - ); -}; - -export default TabsNavigator; diff --git a/packages/dashboard/src/screens/AccountScreen.tsx b/packages/dashboard/src/screens/AccountScreen.tsx deleted file mode 100644 index 6d952d5e..00000000 --- a/packages/dashboard/src/screens/AccountScreen.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Account = React.lazy(() => import('auth/AccountScreen')); - -const AccountScreen = () => { - return ( - - }> - - - - ); -}; - -export default AccountScreen; diff --git a/packages/dashboard/src/screens/CalendarScreen.tsx b/packages/dashboard/src/screens/CalendarScreen.tsx deleted file mode 100644 index 549d3830..00000000 --- a/packages/dashboard/src/screens/CalendarScreen.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React, {useCallback, useMemo, useState} from 'react'; -import {FlatList, StyleSheet, View} from 'react-native'; -import {CalendarList, CalendarUtils, DateData} from 'react-native-calendars'; -import {FAB, List, MD3Colors} from 'react-native-paper'; -import bookings from '../data/bookings.json'; - -const INITIAL_DATE = CalendarUtils.getCalendarDateString(new Date()); - -const renderAppointment = ({item}: any) => ( - } - /> -); - -const CalendarScreen = () => { - const [selected, setSelected] = useState(INITIAL_DATE); - - const marked = useMemo(() => { - return { - [selected]: { - selected: true, - disableTouchEvent: true, - }, - [INITIAL_DATE]: { - selected: true, - selectedColor: MD3Colors.primary50, - }, - }; - }, [selected]); - - const onDayPress = useCallback((day: DateData) => { - setSelected(day.dateString); - }, []); - - return ( - - - - {}} - /> - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - }, - fab: { - position: 'absolute', - right: 0, - margin: 16, - bottom: 0, - }, -}); - -export default CalendarScreen; diff --git a/packages/dashboard/src/screens/HomeScreen.tsx b/packages/dashboard/src/screens/HomeScreen.tsx deleted file mode 100644 index 2d3274fc..00000000 --- a/packages/dashboard/src/screens/HomeScreen.tsx +++ /dev/null @@ -1,174 +0,0 @@ -import React from 'react'; -import { - Alert, - FlatList, - ListRenderItem, - ScrollView, - StyleSheet, - View, -} from 'react-native'; -import { - Avatar, - Card, - Button, - Divider, - Text, - Title, - Paragraph, -} from 'react-native-paper'; -import bookings from '../data/bookings.json'; -import products from '../data/products.json'; -import news from '../data/news.json'; -import articles from '../data/articles.json'; - -const showNotImplementedAlert = () => Alert.alert('Not implemented yet'); - -const renderUpcoming = ({item}: any) => ( - - } - /> - - - - - -); - -const renderProduct: ListRenderItem = ({item, index}) => ( - - - - {`${item.name} • $${item.price}`} - {item.description} - - - - - - -); - -const renderArticle: ListRenderItem = ({item, index}) => ( - - - - {item.title} - {item.content} - - - - - - -); - -const renderDivider = () => ; - -const HomeScreen = () => { - return ( - - - - My Appointments - - - - - - - My Products - - - - - - - My News - - - - - - - My Articles - - - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - }, - contentContainer: { - paddingHorizontal: 16, - }, - divider: { - backgroundColor: 'transparent', - width: 16, - }, - header: { - padding: 16, - flexDirection: 'row', - alignItems: 'center', - }, - headerTitle: { - flex: 1, - }, - cardWidth: { - width: 270, - }, -}); - -export default HomeScreen; diff --git a/packages/dashboard/src/screens/StatisticsScreen.tsx b/packages/dashboard/src/screens/StatisticsScreen.tsx deleted file mode 100644 index c6058abb..00000000 --- a/packages/dashboard/src/screens/StatisticsScreen.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import ScreenPlaceholder from '../components/ScreenPlaceholder'; - -const StatisticsScreen = () => { - return ; -}; - -export default StatisticsScreen; diff --git a/packages/dashboard/tsconfig.json b/packages/dashboard/tsconfig.json deleted file mode 100644 index 511c11be..00000000 --- a/packages/dashboard/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@react-native/typescript-config", - "compilerOptions": { - "types": ["jest"], - "module": "es2020", - "paths": { - "*": ["./@mf-types/*"] - } - }, - "include": ["**/*.ts", "**/*.tsx", "./@mf-types/*"], - "exclude": ["**/node_modules", "**/Pods"] -} diff --git a/packages/host/Gemfile.lock b/packages/host/Gemfile.lock index 15509322..d89c2c13 100644 --- a/packages/host/Gemfile.lock +++ b/packages/host/Gemfile.lock @@ -78,13 +78,16 @@ GEM concurrent-ruby (~> 1.0) json (2.7.4) logger (1.4.2) - minitest (5.25.1) + minitest (6.0.5) + drb (~> 2.0) + prism (~> 1.5) molinillo (0.8.0) mutex_m (0.2.0) nanaimo (0.3.0) nap (1.1.0) netrc (0.11.0) nkf (0.2.0) + prism (1.9.0) public_suffix (4.0.7) rexml (3.3.9) ruby-macho (2.5.1) diff --git a/packages/host/android/app/build.gradle b/packages/host/android/app/build.gradle index 28e0a62a..c9015fc1 100644 --- a/packages/host/android/app/build.gradle +++ b/packages/host/android/app/build.gradle @@ -66,7 +66,7 @@ apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" /** * Set this to true to Run Proguard on Release builds to minify the Java bytecode. */ -def enableProguardInReleaseBuilds = false +def enableProguardInReleaseBuilds = true /** * The preferred build flavor of JavaScriptCore (JSC) diff --git a/packages/host/android/app/src/main/res/values/strings.xml b/packages/host/android/app/src/main/res/values/strings.xml index 7e07c958..d6e1700b 100644 --- a/packages/host/android/app/src/main/res/values/strings.xml +++ b/packages/host/android/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - Super App Showcase + Fintech Super App -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvR2JseYMjDTie9MYo/Tw diff --git a/packages/host/babel.config.js b/packages/host/babel.config.js index 1fcfb75b..dcff0419 100644 --- a/packages/host/babel.config.js +++ b/packages/host/babel.config.js @@ -1,4 +1,8 @@ module.exports = { presets: ['module:@react-native/babel-preset'], - plugins: ['transform-inline-environment-variables'], + plugins: [ + 'babel-plugin-react-compiler', + 'transform-inline-environment-variables', + 'react-native-worklets/plugin', + ], }; diff --git a/packages/host/ios/Podfile.lock b/packages/host/ios/Podfile.lock index 67fc3e22..92f2a28a 100644 --- a/packages/host/ios/Podfile.lock +++ b/packages/host/ios/Podfile.lock @@ -1563,6 +1563,30 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga + - react-native-skia (2.6.2): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React + - React-callinvoker + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga - React-NativeModulesApple (0.84.1): - hermes-engine - React-callinvoker @@ -1970,6 +1994,102 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga + - RNGestureHandler (2.31.1): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - RNReanimated (4.3.0): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - RNReanimated/apple (= 4.3.0) + - RNReanimated/common (= 4.3.0) + - RNWorklets + - Yoga + - RNReanimated/apple (4.3.0): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - RNWorklets + - Yoga + - RNReanimated/common (4.3.0): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - RNWorklets + - Yoga - RNScreens (4.24.0): - hermes-engine - RCTRequired @@ -2039,6 +2159,77 @@ PODS: - ReactCommon/turbomodule/core - ReactNativeDependencies - Yoga + - RNWorklets (0.8.1): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - RNWorklets/apple (= 0.8.1) + - RNWorklets/common (= 0.8.1) + - Yoga + - RNWorklets/apple (0.8.1): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga + - RNWorklets/common (0.8.1): + - hermes-engine + - RCTRequired + - RCTTypeSafety + - React-Core + - React-Core-prebuilt + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - ReactNativeDependencies + - Yoga - SDWebImage (5.21.0): - SDWebImage/Core (= 5.21.0) - SDWebImage/Core (5.21.0) @@ -2094,6 +2285,7 @@ DEPENDENCIES: - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - react-native-bottom-tabs (from `../node_modules/react-native-bottom-tabs`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - "react-native-skia (from `../node_modules/@shopify/react-native-skia`)" - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - React-networking (from `../node_modules/react-native/ReactCommon/react/networking`) - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) @@ -2129,8 +2321,11 @@ DEPENDENCIES: - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - ReactNativeDependencies (from `../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec`) - RNBootSplash (from `../node_modules/react-native-bootsplash`) + - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) + - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) - RNVectorIcons (from `../node_modules/react-native-vector-icons`) + - RNWorklets (from `../node_modules/react-native-worklets`) - SDWebImage - SDWebImageSVGCoder - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -2229,6 +2424,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-bottom-tabs" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" + react-native-skia: + :path: "../node_modules/@shopify/react-native-skia" React-NativeModulesApple: :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" React-networking: @@ -2299,10 +2496,16 @@ EXTERNAL SOURCES: :podspec: "../node_modules/react-native/third-party-podspecs/ReactNativeDependencies.podspec" RNBootSplash: :path: "../node_modules/react-native-bootsplash" + RNGestureHandler: + :path: "../node_modules/react-native-gesture-handler" + RNReanimated: + :path: "../node_modules/react-native-reanimated" RNScreens: :path: "../node_modules/react-native-screens" RNVectorIcons: :path: "../node_modules/react-native-vector-icons" + RNWorklets: + :path: "../node_modules/react-native-worklets" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -2310,7 +2513,7 @@ SPEC CHECKSUMS: AsyncStorage: b9dbc3eecddb3ec3c5254c8eb57e9018724912d8 callstack-repack: ac761bfc09e2d4c5946bcbe5d1ee7518aae8ac58 FBLazyVector: e97c19a5a442429d1988f182a1940fb08df514da - hermes-engine: 09800667f08d1bf10b4661e100bf5320637da57d + hermes-engine: 4ba7c66be07d1549a6e5a9a7727eee77ac24035c JWTDecode: 2eed97c2fa46ccaf3049a787004eedf0be474a87 RCTDeprecation: af44b104091a34482596cd9bd7e8d90c4e9b4bd7 RCTRequired: bb77b070f75f53398ce43c0aaaa58337cebe2bf6 @@ -2320,7 +2523,7 @@ SPEC CHECKSUMS: React: 1ba7d364ade7d883a1ec055bfc3606f35fdee17b React-callinvoker: bc2a26f8d84fb01f003fc6de6c9337b64715f95b React-Core: bdaa87b276ca31877632a982ecf7c36f8c826414 - React-Core-prebuilt: caaf2954c9c1b8c7bd210b197eaa8f1c23ce8231 + React-Core-prebuilt: d9c87fdbf9767648783ae17c37432552b7f34a83 React-CoreModules: b24989f62d56390ae08ca4f65e6f38fe6802de42 React-cxxreact: 1a2dfcbc18a6b610664dba152adf327f063a0d12 React-debug: 755200a6e7f5e6e0a40ff8d215493d43cce285fc @@ -2350,6 +2553,7 @@ SPEC CHECKSUMS: React-microtasksnativemodule: ab9d1a05fe1f58ea44a97d307ef1b53463f45a3f react-native-bottom-tabs: 484fe90c49d4d7d547d15ae78f4de75492a395fa react-native-safe-area-context: 29044d05d61f2c60d0828c373bd0ebe17eed58d0 + react-native-skia: 474a33d4da66b68a0c2f53e7ee142b3e991449e2 React-NativeModulesApple: b94faa2dce6d8c0a9d722ed7ee27b996d28b62d1 React-networking: e409d8fb062162da6293e98b77f8d80cf4430e07 React-oscompat: ff26abf0ae3e3fdbe47b44224571e3fc7226a573 @@ -2383,15 +2587,18 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 26bbf1e26768d08dd965a2b5e372e53f67b21fee ReactCodegen: cac18d8d019ac167415438d199aa944954b1b874 ReactCommon: 309419492d417c4cbb87af06f67735afa40ecb9d - ReactNativeDependencies: 69a154f5efab1091661811a15131521a293b1d87 + ReactNativeDependencies: f63a20ef8b926344e77506cc9de14081d1f3c65c RNBootSplash: 7adde79e6fbb9e8ccff6b8eccbcda6856b1f816e + RNGestureHandler: eb2f4f545ed5e6b597d60b6515e193cf63a2c1ba + RNReanimated: ea02d79937f48a3f353527633150e7f4e13f05d2 RNScreens: 088d923c4327c63c9f8c942cae17a9d038f47d97 RNVectorIcons: af977c18ed27deba54ed038b439fca2911a08cfc + RNWorklets: 2544cd45df728091473f905f3a805bc66595e198 SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 SDWebImageSVGCoder: 8e10c8f6cc879c7dfb317b284e13dd589379f01c SwiftUIIntrospect: fee9aa07293ee280373a591e1824e8ddc869ba5d SwiftyRSA: 8c6dd1ea7db1b8dc4fb517a202f88bb1354bc2c6 - Yoga: 7c1c3b93e408ac46c7ed64b5641ca7161747378d + Yoga: c0b3f2c7e8d3e327e450223a2414ca3fa296b9a2 PODFILE CHECKSUM: 57649a0176502afe3243eedb7d7d166d4177e6f9 diff --git a/packages/host/ios/host/Info.plist b/packages/host/ios/host/Info.plist index 2b683149..8ad8158b 100644 --- a/packages/host/ios/host/Info.plist +++ b/packages/host/ios/host/Info.plist @@ -7,7 +7,7 @@ CFBundleDevelopmentRegion en CFBundleDisplayName - Super App Showcase + Fintech Super App CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/packages/host/jest.setup.js b/packages/host/jest.setup.js index 10a650e3..7d9cfef3 100644 --- a/packages/host/jest.setup.js +++ b/packages/host/jest.setup.js @@ -1,4 +1,14 @@ -import React from 'react'; +import 'react-native-gesture-handler/jestSetup'; + +jest.mock('@bottom-tabs/react-navigation', () => { + const React = require('react'); + const {View} = require('react-native'); + const createNativeBottomTabNavigator = () => ({ + Navigator: ({children}) => React.createElement(View, null, children), + Screen: ({component: Component}) => React.createElement(Component), + }); + return {createNativeBottomTabNavigator}; +}); jest.mock('react-native-bootsplash', () => { return { @@ -19,27 +29,23 @@ jest.mock('@callstack/repack/client', () => ({ const authMock = require('../auth/mocks/federated'); return Promise.resolve(authMock.default(module)); } - if (container === 'booking') { - const bookingMock = require('../booking/mocks/federated'); - return Promise.resolve(bookingMock.default(module)); - } - if (container === 'dashboard') { - const dashboardMock = require('../booking/mocks/federated'); - return Promise.resolve(dashboardMock.default(module)); - } - if (container === 'shopping') { - const shoppingMock = require('../booking/mocks/federated'); - return Promise.resolve(shoppingMock.default(module)); + if (container === 'trading') { + switch (module) { + case './App': + return Promise.resolve({default: () => null}); + default: + throw new Error(`TradingMock: unknown module: ${module}`); + } } - if (container === 'news') { + if (container === 'wallet') { switch (module) { case './App': - return Promise.resolve({default: () => <>}); + return Promise.resolve({default: () => null}); default: - throw new Error(`NewsMock: unknown module: ${module}`); + throw new Error(`WalletMock: unknown module: ${module}`); } } throw new Error('jest.setup.js: unknown container: ' + container); }), }, -})); +})); \ No newline at end of file diff --git a/packages/host/package.json b/packages/host/package.json index 7e070b60..5d603d87 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -18,20 +18,27 @@ }, "dependencies": { "@bottom-tabs/react-navigation": "1.1.0", + "@gorhom/bottom-sheet": "^5.2.10", + "@legendapp/list": "^2.0.19", "@module-federation/enhanced": "2.3.1", "@module-federation/error-codes": "2.3.1", "@react-native-async-storage/async-storage": "3.0.2", "@react-navigation/native": "7.2.2", "@react-navigation/native-stack": "7.14.10", + "@shopify/react-native-skia": "^2.6.2", "react": "19.2.3", "react-native": "0.84.1", "react-native-bootsplash": "7.2.0", "react-native-bottom-tabs": "1.1.0", "react-native-edge-to-edge": "1.8.1", + "react-native-gesture-handler": "^2.31.1", "react-native-paper": "5.15.0", + "react-native-reanimated": "^4.3.0", "react-native-safe-area-context": "5.7.0", "react-native-screens": "4.24.0", - "react-native-vector-icons": "10.3.0" + "react-native-vector-icons": "10.3.0", + "react-native-worklets": "^0.8.1", + "victory-native": "^41.20.2" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/packages/host/rspack.config.ts b/packages/host/rspack.config.ts index 70221bf3..abb76c0d 100644 --- a/packages/host/rspack.config.ts +++ b/packages/host/rspack.config.ts @@ -45,11 +45,9 @@ export default Repack.defineRspackConfig(({mode, platform}) => { name: 'host', dts: false, remotes: { - booking: `booking@http://localhost:9000/${platform}/mf-manifest.json`, - shopping: `shopping@http://localhost:9001/${platform}/mf-manifest.json`, - dashboard: `dashboard@http://localhost:9002/${platform}/mf-manifest.json`, auth: `auth@http://localhost:9003/${platform}/mf-manifest.json`, - news: `news@http://localhost:9004/${platform}/mf-manifest.json`, + trading: `trading@http://localhost:9001/${platform}/mf-manifest.json`, + wallet: `wallet@http://localhost:9002/${platform}/mf-manifest.json`, }, shared: getSharedDependencies({eager: true}), }), diff --git a/packages/host/src/App.tsx b/packages/host/src/App.tsx index 324c80f9..d61f3103 100644 --- a/packages/host/src/App.tsx +++ b/packages/host/src/App.tsx @@ -1,41 +1,51 @@ import React from 'react'; import RNBootSplash from 'react-native-bootsplash'; import {NavigationContainer} from '@react-navigation/native'; +import {Provider as PaperProvider} from 'react-native-paper'; +import {GestureHandlerRootView} from 'react-native-gesture-handler'; +import {PriceProvider} from 'super-app-showcase-sdk'; import MainNavigator from './navigation/MainNavigator'; import SplashScreen from './components/SplashScreen'; import ErrorBoundary from './components/ErrorBoundary'; +import {theme} from './theme'; const AuthProvider = React.lazy(() => import('auth/AuthProvider')); const SignInScreen = React.lazy(() => import('auth/SignInScreen')); const App = () => { return ( - - }> - - {(authData: {isSignout: boolean; isLoading: boolean}) => { - if (authData.isLoading) { - return ; - } + + + + + }> + + {(authData: {isSignout: boolean; isLoading: boolean}) => { + if (authData.isLoading) { + return ; + } - if (authData.isSignout) { - return ( - }> - - - ); - } + if (authData.isSignout) { + return ( + }> + + + ); + } - return ( - RNBootSplash.hide({fade: true})}> - - - ); - }} - - - + return ( + RNBootSplash.hide({fade: true})}> + + + ); + }} + + + + + + ); }; diff --git a/packages/host/src/components/Placeholder.tsx b/packages/host/src/components/Placeholder.tsx index d63ab4f0..27122af4 100644 --- a/packages/host/src/components/Placeholder.tsx +++ b/packages/host/src/components/Placeholder.tsx @@ -1,19 +1,18 @@ import React, {FC} from 'react'; -import {SafeAreaView, StyleSheet, Text} from 'react-native'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {MD3Colors} from 'react-native-paper'; +import {ActivityIndicator, StyleSheet, Text, View} from 'react-native'; +import {colors} from '../theme'; type Props = { label: string; - icon: string; + icon?: string; }; -const Placeholder: FC = ({label, icon}) => { +const Placeholder: FC = ({label}) => { return ( - - + + {label} - + ); }; @@ -22,11 +21,13 @@ const styles = StyleSheet.create({ flex: 1, justifyContent: 'center', alignItems: 'center', + backgroundColor: colors.background, + gap: 16, }, text: { - fontSize: 24, - color: MD3Colors.primary20, + fontSize: 16, + color: colors.secondary, }, }); -export default Placeholder; +export default Placeholder; \ No newline at end of file diff --git a/packages/host/src/components/SplashScreen.tsx b/packages/host/src/components/SplashScreen.tsx index 90806cff..8548e0b8 100644 --- a/packages/host/src/components/SplashScreen.tsx +++ b/packages/host/src/components/SplashScreen.tsx @@ -1,26 +1,12 @@ import React from 'react'; -import {StyleSheet, SafeAreaView} from 'react-native'; -import {MD3Colors, ProgressBar, Text} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; +import {ActivityIndicator, StyleSheet, View} from 'react-native'; +import {colors} from '../theme'; const SplashScreen = () => { return ( - - - - Host application is loading. Please wait... - - - + + + ); }; @@ -28,21 +14,9 @@ const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', - }, - icon: { - textAlign: 'center', - }, - text: { - paddingVertical: 16, - paddingHorizontal: 32, - fontSize: 24, - color: MD3Colors.primary20, - textAlign: 'center', - }, - progress: { - marginVertical: 16, - marginHorizontal: 32, + alignItems: 'center', + backgroundColor: colors.background, }, }); -export default SplashScreen; +export default SplashScreen; \ No newline at end of file diff --git a/packages/host/src/declarations.d.ts b/packages/host/src/declarations.d.ts new file mode 100644 index 00000000..9db0b193 --- /dev/null +++ b/packages/host/src/declarations.d.ts @@ -0,0 +1,32 @@ +declare module 'trading/App' { + import type React from 'react'; + const App: React.ComponentType; + export default App; +} + +declare module 'wallet/App' { + import type React from 'react'; + const App: React.ComponentType; + export default App; +} + +declare module 'auth/AuthProvider' { + import type React from 'react'; + type AuthState = {isLoading: boolean; isSignout: boolean}; + const AuthProvider: React.ComponentType<{ + children: (state: AuthState) => React.ReactNode; + }>; + export default AuthProvider; +} + +declare module 'auth/SignInScreen' { + import type React from 'react'; + const SignInScreen: React.ComponentType; + export default SignInScreen; +} + +declare module 'auth/AccountScreen' { + import type React from 'react'; + const AccountScreen: React.ComponentType; + export default AccountScreen; +} \ No newline at end of file diff --git a/packages/host/src/navigation/AccountNavigator.tsx b/packages/host/src/navigation/AccountNavigator.tsx deleted file mode 100644 index 02f3ec13..00000000 --- a/packages/host/src/navigation/AccountNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import AccountScreen from '../screens/AccountScreen'; - -export type AccountStackParamList = { - Account: undefined; -}; - -const Home = createNativeStackNavigator(); - -const AccountNavigator = () => { - return ( - - - - ); -}; - -export default AccountNavigator; diff --git a/packages/host/src/navigation/HomeNavigator.tsx b/packages/host/src/navigation/HomeNavigator.tsx deleted file mode 100644 index 41da46da..00000000 --- a/packages/host/src/navigation/HomeNavigator.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import HomeScreen from '../screens/HomeScreen'; -import NavBar from '../components/NavBar'; -import UpcomingScreen from '../screens/UpcomingScreen'; - -export type HomeStackParamList = { - Home: undefined; - Upcoming: undefined; -}; - -const Home = createNativeStackNavigator(); - -const HomeNavigator = () => { - return ( - - - - - ); -}; - -export default HomeNavigator; diff --git a/packages/host/src/navigation/MainNavigator.tsx b/packages/host/src/navigation/MainNavigator.tsx index 655e2e33..83a297e4 100644 --- a/packages/host/src/navigation/MainNavigator.tsx +++ b/packages/host/src/navigation/MainNavigator.tsx @@ -1,17 +1,9 @@ import React from 'react'; import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import BookingScreen from '../screens/BookingScreen'; import TabsNavigator from './TabsNavigator'; -import NewsScreen from '../screens/NewsScreen'; -import ShoppingScreen from '../screens/ShoppingScreen'; -import DashboardScreen from '../screens/DashboardScreen'; export type MainStackParamList = { Tabs: undefined; - Booking: undefined; - Shopping: undefined; - News: undefined; - Dashboard: undefined; }; const Main = createNativeStackNavigator(); @@ -20,12 +12,8 @@ const MainNavigator = () => { return ( - - - - ); }; -export default MainNavigator; +export default MainNavigator; \ No newline at end of file diff --git a/packages/host/src/navigation/ServicesNavigator.tsx b/packages/host/src/navigation/ServicesNavigator.tsx deleted file mode 100644 index 78584f0f..00000000 --- a/packages/host/src/navigation/ServicesNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import ServicesScreen from '../screens/ServicesScreen'; -import NavBar from '../components/NavBar'; - -export type ServicesStackParamList = { - Services: undefined; -}; - -const Home = createNativeStackNavigator(); - -const ServicesNavigator = () => { - return ( - - - - ); -}; - -export default ServicesNavigator; diff --git a/packages/host/src/navigation/TabsNavigator.tsx b/packages/host/src/navigation/TabsNavigator.tsx index 7ca463a2..9456f715 100644 --- a/packages/host/src/navigation/TabsNavigator.tsx +++ b/packages/host/src/navigation/TabsNavigator.tsx @@ -1,55 +1,105 @@ import React from 'react'; import {createNativeBottomTabNavigator} from '@bottom-tabs/react-navigation'; -import {MD3Colors} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import HomeNavigator from './HomeNavigator'; -import ServicesNavigator from './ServicesNavigator'; -import AccountNavigator from './AccountNavigator'; +import {createNativeStackNavigator} from '@react-navigation/native-stack'; +import Placeholder from '../components/Placeholder'; +import ErrorBoundary from '../components/ErrorBoundary'; +import {colors} from '../theme'; + +const randomDelay = () => + new Promise(resolve => setTimeout(resolve, 250 + Math.random() * 100)); + +const TradingApp = React.lazy(() => + randomDelay().then(() => import('trading/App')), +); +const WalletApp = React.lazy(() => + randomDelay().then(() => import('wallet/App')), +); +const AccountScreenRemote = React.lazy(() => + randomDelay().then(() => import('auth/AccountScreen')), +); + +const TradingScreen = () => ( + + }> + + + +); + +const WalletScreen = () => ( + + }> + + + +); + +const AccountRemoteScreen = () => ( + + }> + + + +); + +const AccountStack = createNativeStackNavigator(); + +const AccountScreen = () => ( + + + +); export type TabsParamList = { - HomeNavigator: undefined; - ServicesNavigator: undefined; - AccountNavigator: undefined; + Trading: undefined; + Wallet: undefined; + Account: undefined; }; -const homeIcon = Icon.getImageSourceSync('home', 24); -const compassIcon = Icon.getImageSourceSync('compass', 24); -const accountIcon = Icon.getImageSourceSync('account', 24); - const Tabs = createNativeBottomTabNavigator(); const TabsNavigator = () => { return ( + tabBarActiveTintColor={colors.primary} + tabBarInactiveTintColor={colors.secondary}> homeIcon, + title: 'Trading', + tabBarIcon: () => ({sfSymbol: 'chart.line.uptrend.xyaxis'}), }} /> compassIcon, + title: 'Wallet', + tabBarIcon: () => ({sfSymbol: 'creditcard'}), }} /> accountIcon, + tabBarIcon: () => ({sfSymbol: 'person.crop.circle'}), }} /> ); }; -export default TabsNavigator; +export default TabsNavigator; \ No newline at end of file diff --git a/packages/host/src/screens/AccountScreen.tsx b/packages/host/src/screens/AccountScreen.tsx deleted file mode 100644 index 6d952d5e..00000000 --- a/packages/host/src/screens/AccountScreen.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Account = React.lazy(() => import('auth/AccountScreen')); - -const AccountScreen = () => { - return ( - - }> - - - - ); -}; - -export default AccountScreen; diff --git a/packages/host/src/screens/BookingScreen.tsx b/packages/host/src/screens/BookingScreen.tsx deleted file mode 100644 index 7739df0d..00000000 --- a/packages/host/src/screens/BookingScreen.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Booking = React.lazy(() => import('booking/App')); - -const BookingScreen = () => { - return ( - - }> - - - - ); -}; - -export default BookingScreen; diff --git a/packages/host/src/screens/DashboardScreen.tsx b/packages/host/src/screens/DashboardScreen.tsx deleted file mode 100644 index dadbc341..00000000 --- a/packages/host/src/screens/DashboardScreen.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Dashboard = React.lazy(() => import('dashboard/App')); - -const DashboardScreen = () => { - return ( - - }> - - - - ); -}; - -export default DashboardScreen; diff --git a/packages/host/src/screens/HomeScreen.tsx b/packages/host/src/screens/HomeScreen.tsx deleted file mode 100644 index 739f7e3d..00000000 --- a/packages/host/src/screens/HomeScreen.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import React from 'react'; -import { - FlatList, - ListRenderItem, - ScrollView, - StyleSheet, - View, -} from 'react-native'; -import {CompositeScreenProps} from '@react-navigation/native'; -import {NativeStackScreenProps} from '@react-navigation/native-stack'; -import {NativeBottomTabScreenProps} from '@bottom-tabs/react-navigation'; -import { - Avatar, - Card, - Button, - Divider, - Text, - Title, - Paragraph, -} from 'react-native-paper'; -import {TabsParamList} from '../navigation/TabsNavigator'; -import {HomeStackParamList} from '../navigation/HomeNavigator'; -import upcomingBookings from '../data/upcomingBookings.json'; -import newProducts from '../data/newProducts.json'; -import recentNews from '../data/recentNews.json'; -import recentArticles from '../data/recentArticles.json'; - -type Props = CompositeScreenProps< - NativeStackScreenProps, - NativeBottomTabScreenProps ->; - -const renderUpcoming = ({item}: any) => ( - - } - /> - - - - - -); - -const renderProduct: ListRenderItem = ({item, index}) => ( - - - - {`${item.name} • $${item.price}`} - {item.description} - - - - - - -); - -const renderArticle: ListRenderItem = ({item, index}) => ( - - - - {item.title} - {item.content} - - -); - -const renderDivider = () => ; - -const HomeScreen = ({navigation}: Props) => { - return ( - - - - Upcoming Appointments - - - - - - - New Products - - - - - - - Recent News - - - - - - - Recent Articles - - - - - - ); -}; - -const styles = StyleSheet.create({ - button: { - paddingHorizontal: 16, - }, - container: { - flex: 1, - backgroundColor: '#fff', - }, - contentContainer: { - paddingHorizontal: 16, - }, - divider: { - backgroundColor: 'transparent', - width: 16, - }, - header: { - padding: 16, - flexDirection: 'row', - alignItems: 'center', - }, - headerTitle: { - flex: 1, - }, - cardWidth: { - width: 270, - }, -}); - -export default HomeScreen; diff --git a/packages/host/src/screens/NewsScreen.tsx b/packages/host/src/screens/NewsScreen.tsx deleted file mode 100644 index d6c982d7..00000000 --- a/packages/host/src/screens/NewsScreen.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -// @ts-ignore -const News = React.lazy(() => import('news/App')); - -const NewsScreen = () => { - return ( - - }> - - - - ); -}; - -export default NewsScreen; diff --git a/packages/host/src/screens/ServicesScreen.tsx b/packages/host/src/screens/ServicesScreen.tsx deleted file mode 100644 index ac1b11f3..00000000 --- a/packages/host/src/screens/ServicesScreen.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import React, {useCallback} from 'react'; -import { - Alert, - FlatList, - ListRenderItemInfo, - StyleSheet, - View, -} from 'react-native'; -import {CompositeScreenProps} from '@react-navigation/native'; -import {NativeStackScreenProps} from '@react-navigation/native-stack'; -import {MainStackParamList} from '../navigation/MainNavigator'; -import {Card, Paragraph, Title} from 'react-native-paper'; -import services from '../data/services.json'; -import {ServicesStackParamList} from '../navigation/ServicesNavigator'; - -type ServiceScreenProps = CompositeScreenProps< - NativeStackScreenProps, - NativeStackScreenProps ->; - -type ServiceMenuItem = { - id: string; - title: string; - description: string; - image: string; -}; - -const ServicesScreen = ({navigation}: ServiceScreenProps) => { - const openBooking = useCallback( - () => navigation.navigate('Booking'), - [navigation], - ); - - const openNews = useCallback(() => navigation.navigate('News'), [navigation]); - - const openShopping = useCallback( - () => navigation.navigate('Shopping'), - [navigation], - ); - - const openDashboard = useCallback( - () => navigation.navigate('Dashboard'), - [navigation], - ); - - const renderItem = useCallback( - ({item, index}: ListRenderItemInfo) => { - const lastItem = index === services.data.length - 1; - const map = new Map([ - ['booking', openBooking], - ['news', openNews], - ['shopping', openShopping], - ['dashboard', openDashboard], - ]); - - const onPress = - map.get(item.id) ?? (() => Alert.alert('Not implemented yet')); - - return ( - - - - - {item.title} - {item.description} - - - - ); - }, - [openBooking, openDashboard, openNews, openShopping], - ); - - return ( - - ); -}; - -const styles = StyleSheet.create({ - contentContainer: { - padding: 8, - }, - serviceItem: { - flex: 1, - padding: 8, - maxWidth: '100%', - }, - lastServiceItem: { - maxWidth: '50%', - }, - cardItem: { - flex: 1, - }, -}); - -export default ServicesScreen; diff --git a/packages/host/src/screens/ShoppingScreen.tsx b/packages/host/src/screens/ShoppingScreen.tsx deleted file mode 100644 index ef9f2d31..00000000 --- a/packages/host/src/screens/ShoppingScreen.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Shopping = React.lazy(() => import('shopping/App')); - -const ShoppingScreen = () => { - return ( - - }> - - - - ); -}; - -export default ShoppingScreen; diff --git a/packages/host/src/screens/UpcomingScreen.tsx b/packages/host/src/screens/UpcomingScreen.tsx deleted file mode 100644 index 2dcd806c..00000000 --- a/packages/host/src/screens/UpcomingScreen.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Upcoming = React.lazy(() => import('booking/UpcomingScreen')); - -const UpcomingScreen = () => { - return ( - - }> - - - - ); -}; - -export default UpcomingScreen; diff --git a/packages/host/src/theme.ts b/packages/host/src/theme.ts new file mode 100644 index 00000000..81056b33 --- /dev/null +++ b/packages/host/src/theme.ts @@ -0,0 +1,30 @@ +import {MD3DarkTheme} from 'react-native-paper'; + +export const colors = { + background: '#0A0E1A', + surface: '#131929', + surfaceVariant: '#1C2438', + primary: '#4F8EF7', + onPrimary: '#FFFFFF', + secondary: '#A0AEC0', + onSurface: '#E2E8F0', + onBackground: '#E2E8F0', + priceUp: '#2ECC71', + priceDown: '#E74C3C', + border: '#2D3748', +}; + +export const theme = { + ...MD3DarkTheme, + colors: { + ...MD3DarkTheme.colors, + background: colors.background, + surface: colors.surface, + surfaceVariant: colors.surfaceVariant, + primary: colors.primary, + onPrimary: colors.onPrimary, + secondary: colors.secondary, + onSurface: colors.onSurface, + onBackground: colors.onBackground, + }, +}; \ No newline at end of file diff --git a/packages/host/tsconfig.json b/packages/host/tsconfig.json index aa06ccad..7cd1670e 100644 --- a/packages/host/tsconfig.json +++ b/packages/host/tsconfig.json @@ -14,12 +14,9 @@ "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "strict": true, - "skipLibCheck": true, - "paths": { - "*": ["./@mf-types/*"] - } + "skipLibCheck": true }, - "include": ["**/*.ts", "**/*.tsx", "./@mf-types/*"], + "include": ["**/*.ts", "**/*.tsx"], "exclude": [ "babel.config.js", "metro.config.js", diff --git a/packages/sdk/lib/dependencies.json b/packages/sdk/lib/dependencies.json index 77cd4fc9..7e786dc5 100644 --- a/packages/sdk/lib/dependencies.json +++ b/packages/sdk/lib/dependencies.json @@ -43,6 +43,10 @@ "name": "react-native-vector-icons", "version": "10.3.0" }, + "super-app-showcase-sdk": { + "name": "super-app-showcase-sdk", + "version": "0.0.2" + }, "@module-federation/enhanced": { "name": "@module-federation/enhanced", "version": "2.3.1", @@ -51,5 +55,37 @@ "react-native-edge-to-edge": { "name": "react-native-edge-to-edge", "version": "1.8.1" + }, + "react-native-reanimated": { + "name": "react-native-reanimated", + "version": "4.3.0" + }, + "react-native-worklets": { + "name": "react-native-worklets", + "version": "0.8.1" + }, + "react-native-gesture-handler": { + "name": "react-native-gesture-handler", + "version": "2.31.1" + }, + "@shopify/react-native-skia": { + "name": "@shopify/react-native-skia", + "version": "2.6.2" + }, + "victory-native": { + "name": "victory-native", + "version": "41.20.2" + }, + "@gorhom/bottom-sheet": { + "name": "@gorhom/bottom-sheet", + "version": "5.2.10" + }, + "react-native-bottom-tabs": { + "name": "react-native-bottom-tabs", + "version": "1.1.0" + }, + "@bottom-tabs/react-navigation": { + "name": "@bottom-tabs/react-navigation", + "version": "1.1.0" } } diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 614f5174..9bb2e1b8 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -6,13 +6,33 @@ "homepage": "https://github.com/callstack/super-app-showcase", "repository": "github:callstack/super-app-showcase", "main": "index.js", + "types": "./src/index.ts", + "exports": { + ".": { + "react-native": "./src/index.ts", + "require": "./index.js", + "default": "./index.js" + } + }, "files": [ "android", "ios", "lib", + "src", "index.js", "preset.js" ], + "devDependencies": { + "@swc/helpers": "^0.5.20", + "@types/react": "^19.2.0", + "react": "19.2.3", + "react-native": "*", + "typescript": "^5.8.3" + }, + "peerDependencies": { + "react": "*", + "react-native": "*" + }, "publishConfig": { "registry": "https://registry.npmjs.org/", "access": "public" diff --git a/packages/sdk/src/components/ConnectionBanner.tsx b/packages/sdk/src/components/ConnectionBanner.tsx new file mode 100644 index 00000000..0caf995d --- /dev/null +++ b/packages/sdk/src/components/ConnectionBanner.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import {StyleSheet, Text, View} from 'react-native'; +import {useConnectionStatus} from '../hooks/useConnectionStatus'; +import {colors} from '../theme'; + +const ConnectionBanner = () => { + const status = useConnectionStatus(); + + if (status === 'connected') { + return null; + } + + const label = + status === 'reconnecting' + ? 'Reconnecting to market…' + : 'Connecting to market…'; + + return ( + + {label} + + ); +}; + +const styles = StyleSheet.create({ + banner: { + backgroundColor: colors.surfaceVariant, + paddingVertical: 6, + paddingHorizontal: 16, + alignItems: 'center', + }, + text: { + color: colors.secondary, + fontSize: 12, + }, +}); + +export default ConnectionBanner; \ No newline at end of file diff --git a/packages/sdk/src/constants.ts b/packages/sdk/src/constants.ts new file mode 100644 index 00000000..93dd329e --- /dev/null +++ b/packages/sdk/src/constants.ts @@ -0,0 +1,22 @@ +import type {Asset, AssetSymbol} from './types'; + +export const ASSETS: Asset[] = [ + {symbol: 'BTC', name: 'Bitcoin', krakenPair: 'XBT/USD'}, + {symbol: 'ETH', name: 'Ethereum', krakenPair: 'ETH/USD'}, + {symbol: 'SOL', name: 'Solana', krakenPair: 'SOL/USD'}, + {symbol: 'XRP', name: 'XRP', krakenPair: 'XRP/USD'}, + {symbol: 'ADA', name: 'Cardano', krakenPair: 'ADA/USD'}, +]; + +export const ASSET_MAP: Record = Object.fromEntries( + ASSETS.map(a => [a.symbol, a]), +) as Record; + +// Kraken uses XBT for Bitcoin — map krakenPair back to our symbol +export const KRAKEN_PAIR_TO_SYMBOL: Record = { + 'XBT/USD': 'BTC', + 'ETH/USD': 'ETH', + 'SOL/USD': 'SOL', + 'XRP/USD': 'XRP', + 'ADA/USD': 'ADA', +}; \ No newline at end of file diff --git a/packages/sdk/src/hooks/useConnectionStatus.ts b/packages/sdk/src/hooks/useConnectionStatus.ts new file mode 100644 index 00000000..b58bffc6 --- /dev/null +++ b/packages/sdk/src/hooks/useConnectionStatus.ts @@ -0,0 +1,18 @@ +import React from 'react'; +import {PriceContext} from '../providers/PriceProvider'; +import type {ConnectionStatus} from '../services/KrakenWebSocketService'; + +const useConnectionStatus = (): ConnectionStatus => { + const service = React.useContext(PriceContext); + const [status, setStatus] = React.useState( + () => service.status, + ); + + React.useEffect(() => { + return service.onStatusChange(setStatus); + }, [service]); + + return status; +}; + +export {useConnectionStatus}; \ No newline at end of file diff --git a/packages/sdk/src/hooks/useFlashAnimation.ts b/packages/sdk/src/hooks/useFlashAnimation.ts new file mode 100644 index 00000000..04925b66 --- /dev/null +++ b/packages/sdk/src/hooks/useFlashAnimation.ts @@ -0,0 +1,34 @@ +import React from 'react'; +import { + interpolateColor, + useAnimatedStyle, + useSharedValue, + withSequence, + withTiming, +} from 'react-native-reanimated'; +import {colors} from '../theme'; + +export const useFlashAnimation = (value: number) => { + const prevRef = React.useRef(0); + const isUp = useSharedValue(true); + const progress = useSharedValue(0); + + React.useEffect(() => { + if (prevRef.current !== 0 && value !== prevRef.current) { + isUp.value = value > prevRef.current; + progress.value = withSequence( + withTiming(1, {duration: 150}), + withTiming(0, {duration: 600}), + ); + } + prevRef.current = value; + }, [value, progress, isUp]); + + return useAnimatedStyle(() => ({ + backgroundColor: interpolateColor( + progress.value, + [0, 1], + [colors.transparent, isUp.value ? colors.priceUp : colors.priceDown], + ), + })); +}; \ No newline at end of file diff --git a/packages/sdk/src/hooks/useHistoricalPrices.ts b/packages/sdk/src/hooks/useHistoricalPrices.ts new file mode 100644 index 00000000..72b3d708 --- /dev/null +++ b/packages/sdk/src/hooks/useHistoricalPrices.ts @@ -0,0 +1,41 @@ +import React from 'react'; + +const KRAKEN_OHLC_URL = 'https://api.kraken.com/0/public/OHLC'; +const INTERVAL_MINUTES = 1; +const MAX_TICKS = 60; + +type KrakenOHLCResponse = { + error: string[]; + result: Record & {last: number}; +}; + +export function useHistoricalPrices(krakenPair: string): number[] { + const [prices, setPrices] = React.useState([]); + + React.useEffect(() => { + const pair = krakenPair.replace('/', ''); + + fetch(`${KRAKEN_OHLC_URL}?pair=${pair}&interval=${INTERVAL_MINUTES}`) + .then(res => res.json() as Promise) + .then(json => { + if (json.error.length) { + return; + } + // Kraken returns the result under an internal pair key (e.g. XXBTZUSD) + const resultKey = Object.keys(json.result).find(k => k !== 'last'); + if (!resultKey) { + return; + } + // Each candle: [time, open, high, low, close, vwap, volume, count] + const closePrices = json.result[resultKey] + .slice(-MAX_TICKS) + .map(candle => parseFloat(candle[4])); + setPrices(closePrices); + }) + .catch(() => { + // Network failure — chart will fill from live ticks + }); + }, [krakenPair]); + + return prices; +} \ No newline at end of file diff --git a/packages/sdk/src/hooks/usePrices.ts b/packages/sdk/src/hooks/usePrices.ts new file mode 100644 index 00000000..1af76de9 --- /dev/null +++ b/packages/sdk/src/hooks/usePrices.ts @@ -0,0 +1,52 @@ +import React from 'react'; +import {PriceContext} from '../providers/PriceProvider'; +import {ASSETS} from '../constants'; +import type {AssetSymbol, PriceMap} from '../types'; + +const useAssetPrice = (symbol: AssetSymbol): number => { + const service = React.useContext(PriceContext); + const [price, setPrice] = React.useState( + () => service.getPrice(symbol) ?? 0, + ); + const [, startTransition] = React.useTransition(); + + React.useEffect(() => { + return service.subscribe(symbol, nextPrice => { + startTransition(() => { + setPrice(nextPrice); + }); + }); + }, [service, symbol, startTransition]); + + return price; +}; + +const usePrices = (): Partial => { + const service = React.useContext(PriceContext); + const [prices, setPrices] = React.useState>(() => { + const initial: Partial = {}; + ASSETS.forEach(({symbol}) => { + const p = service.getPrice(symbol); + if (p !== undefined) { + initial[symbol] = p; + } + }); + return initial; + }); + const [, startTransition] = React.useTransition(); + + React.useEffect(() => { + const unsubscribers = ASSETS.map(({symbol}) => + service.subscribe(symbol, price => { + startTransition(() => { + setPrices(prev => ({...prev, [symbol]: price})); + }); + }), + ); + return () => unsubscribers.forEach(unsub => unsub()); + }, [service, startTransition]); + + return prices; +}; + +export {useAssetPrice, usePrices}; \ No newline at end of file diff --git a/packages/sdk/src/index.ts b/packages/sdk/src/index.ts new file mode 100644 index 00000000..1fe62cbf --- /dev/null +++ b/packages/sdk/src/index.ts @@ -0,0 +1,14 @@ +export {getSharedDependencies} from './sharedDeps'; +export {KrakenWebSocketService} from './services/KrakenWebSocketService'; +export type {ConnectionStatus} from './services/KrakenWebSocketService'; +export {PriceProvider, PriceContext} from './providers/PriceProvider'; +export {useAssetPrice, usePrices} from './hooks/usePrices'; +export {useConnectionStatus} from './hooks/useConnectionStatus'; +export {useHistoricalPrices} from './hooks/useHistoricalPrices'; +export {useFlashAnimation} from './hooks/useFlashAnimation'; +export {ASSETS, ASSET_MAP, KRAKEN_PAIR_TO_SYMBOL} from './constants'; +export type {Asset, AssetSymbol, PriceUpdate, PriceMap} from './types'; +export {formatPrice, formatValue} from './utils/formatPrice'; +export {getAssetIconUri} from './utils/assetIcon'; +export {colors} from './theme'; +export {default as ConnectionBanner} from './components/ConnectionBanner'; \ No newline at end of file diff --git a/packages/sdk/src/providers/PriceProvider.tsx b/packages/sdk/src/providers/PriceProvider.tsx new file mode 100644 index 00000000..290e5459 --- /dev/null +++ b/packages/sdk/src/providers/PriceProvider.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import {KrakenWebSocketService} from '../services/KrakenWebSocketService'; + +const PriceContext = React.createContext( + KrakenWebSocketService.shared, +); + +const PriceProvider = ({children}: {children: React.ReactNode}) => { + React.useEffect(() => { + KrakenWebSocketService.shared.connect(); + return () => { + KrakenWebSocketService.shared.disconnect(); + }; + }, []); + + return ( + + {children} + + ); +}; + +export {PriceProvider, PriceContext}; \ No newline at end of file diff --git a/packages/sdk/src/services/KrakenWebSocketService.ts b/packages/sdk/src/services/KrakenWebSocketService.ts new file mode 100644 index 00000000..6977ce5d --- /dev/null +++ b/packages/sdk/src/services/KrakenWebSocketService.ts @@ -0,0 +1,153 @@ +import {ASSETS, KRAKEN_PAIR_TO_SYMBOL} from '../constants'; + +type PriceListener = (price: number) => void; +export type ConnectionStatus = 'connecting' | 'connected' | 'reconnecting' | 'disconnected'; +type StatusListener = (status: ConnectionStatus) => void; + +const WS_URL = 'wss://ws.kraken.com'; +const RECONNECT_DELAY_MS = 2000; +const MAX_RECONNECT_DELAY_MS = 30000; + +class KrakenWebSocketService { + private static _instance: KrakenWebSocketService; + + private ws: WebSocket | null = null; + private listeners = new Map>(); + private prices = new Map(); + private reconnectDelay = RECONNECT_DELAY_MS; + private reconnectTimer: ReturnType | null = null; + private intentionalClose = false; + private _status: ConnectionStatus = 'disconnected'; + private statusListeners = new Set(); + + static get shared(): KrakenWebSocketService { + if (!KrakenWebSocketService._instance) { + KrakenWebSocketService._instance = new KrakenWebSocketService(); + } + return KrakenWebSocketService._instance; + } + + get status(): ConnectionStatus { + return this._status; + } + + onStatusChange(listener: StatusListener): () => void { + this.statusListeners.add(listener); + listener(this._status); + return () => this.statusListeners.delete(listener); + } + + private setStatus(status: ConnectionStatus): void { + this._status = status; + this.statusListeners.forEach(l => l(status)); + } + + connect(): void { + if (this.ws?.readyState === WebSocket.OPEN) { + return; + } + + this.intentionalClose = false; + this.setStatus('connecting'); + this.ws = new WebSocket(WS_URL); + + this.ws.onopen = () => { + this.reconnectDelay = RECONNECT_DELAY_MS; + this.setStatus('connected'); + this.ws?.send( + JSON.stringify({ + event: 'subscribe', + pair: ASSETS.map(a => a.krakenPair), + subscription: {name: 'ticker'}, + }), + ); + }; + + this.ws.onmessage = event => { + this.handleMessage(event.data); + }; + + this.ws.onclose = () => { + if (!this.intentionalClose) { + this.setStatus('reconnecting'); + this.scheduleReconnect(); + } else { + this.setStatus('disconnected'); + } + }; + + this.ws.onerror = () => { + this.ws?.close(); + }; + } + + disconnect(): void { + this.intentionalClose = true; + if (this.reconnectTimer) { + clearTimeout(this.reconnectTimer); + this.reconnectTimer = null; + } + this.ws?.close(); + this.ws = null; + } + + subscribe(symbol: string, listener: PriceListener): () => void { + if (!this.listeners.has(symbol)) { + this.listeners.set(symbol, new Set()); + } + this.listeners.get(symbol)!.add(listener); + + // Emit current price immediately if available + const current = this.prices.get(symbol); + if (current !== undefined) { + listener(current); + } + + return () => { + this.listeners.get(symbol)?.delete(listener); + }; + } + + getPrice(symbol: string): number | undefined { + return this.prices.get(symbol); + } + + private handleMessage(data: string): void { + try { + const msg = JSON.parse(data); + + // Ticker messages are arrays: [channelId, tickerData, "ticker", "XBT/USD"] + if (!Array.isArray(msg) || msg[2] !== 'ticker') { + return; + } + + const krakenPair: string = msg[3]; + const symbol = KRAKEN_PAIR_TO_SYMBOL[krakenPair]; + if (!symbol) { + return; + } + + const price = parseFloat(msg[1]?.c?.[0]); + if (isNaN(price)) { + return; + } + + this.prices.set(symbol, price); + this.listeners.get(symbol)?.forEach(listener => listener(price)); + } catch { + // Ignore malformed messages + } + } + + private scheduleReconnect(): void { + this.reconnectTimer = setTimeout(() => { + this.reconnectDelay = Math.min( + this.reconnectDelay * 2, + MAX_RECONNECT_DELAY_MS, + ); + this.connect(); + }, this.reconnectDelay); + } +} + +export {KrakenWebSocketService}; \ No newline at end of file diff --git a/packages/sdk/src/sharedDeps.ts b/packages/sdk/src/sharedDeps.ts new file mode 100644 index 00000000..efe7d184 --- /dev/null +++ b/packages/sdk/src/sharedDeps.ts @@ -0,0 +1,15 @@ +import dependencies from '../lib/dependencies.json'; + +type SharedDepEntry = {version: string; shared?: boolean}; +type SharedDepsMap = Record; + +export function getSharedDependencies({eager}: {eager: boolean}): SharedDepsMap { + return Object.fromEntries( + Object.entries(dependencies as Record) + .filter(([, props]) => props.shared !== false) + .map(([dep, {version}]) => [ + dep, + {singleton: true, eager, version, requiredVersion: version}, + ]), + ); +} \ No newline at end of file diff --git a/packages/sdk/src/theme.ts b/packages/sdk/src/theme.ts new file mode 100644 index 00000000..4c524b7f --- /dev/null +++ b/packages/sdk/src/theme.ts @@ -0,0 +1,16 @@ +export const colors = { + background: '#0A0E1A', + surface: '#131929', + surfaceVariant: '#1C2438', + primary: '#4F8EF7', + onPrimary: '#FFFFFF', + secondary: '#A0AEC0', + onSurface: '#E2E8F0', + onBackground: '#E2E8F0', + priceUp: 'rgba(46, 204, 113, 0.3)', + priceDown: 'rgba(231, 76, 60, 0.3)', + priceUpText: '#2ECC71', + priceDownText: '#E74C3C', + border: '#2D3748', + transparent: 'rgba(0,0,0,0)', +}; \ No newline at end of file diff --git a/packages/sdk/src/types.ts b/packages/sdk/src/types.ts new file mode 100644 index 00000000..7644a163 --- /dev/null +++ b/packages/sdk/src/types.ts @@ -0,0 +1,15 @@ +export type AssetSymbol = 'BTC' | 'ETH' | 'SOL' | 'XRP' | 'ADA'; + +export interface Asset { + symbol: AssetSymbol; + name: string; + krakenPair: string; +} + +export interface PriceUpdate { + symbol: AssetSymbol; + price: number; + previousPrice: number; +} + +export type PriceMap = Record; \ No newline at end of file diff --git a/packages/sdk/src/utils/assetIcon.ts b/packages/sdk/src/utils/assetIcon.ts new file mode 100644 index 00000000..303d19ce --- /dev/null +++ b/packages/sdk/src/utils/assetIcon.ts @@ -0,0 +1,4 @@ +const ICON_BASE_URL = 'https://assets.coincap.io/assets/icons'; + +export const getAssetIconUri = (symbol: string): string => + `${ICON_BASE_URL}/${symbol.toLowerCase()}@2x.png`; \ No newline at end of file diff --git a/packages/sdk/src/utils/formatPrice.ts b/packages/sdk/src/utils/formatPrice.ts new file mode 100644 index 00000000..99babbce --- /dev/null +++ b/packages/sdk/src/utils/formatPrice.ts @@ -0,0 +1,19 @@ +export const formatPrice = (price: number): string => { + if (price === 0) { + return '—'; + } + return price.toLocaleString('en-US', { + style: 'currency', + currency: 'USD', + maximumFractionDigits: price >= 1 ? 2 : 6, + }); +}; + +export const formatValue = (value: number): string => + value > 0 + ? value.toLocaleString('en-US', { + style: 'currency', + currency: 'USD', + maximumFractionDigits: 2, + }) + : '—'; \ No newline at end of file diff --git a/packages/sdk/tsconfig.json b/packages/sdk/tsconfig.json new file mode 100644 index 00000000..0c885972 --- /dev/null +++ b/packages/sdk/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020", "DOM"], + "module": "ES2020", + "moduleResolution": "bundler", + "jsx": "react-native", + "strict": true, + "skipLibCheck": true, + "noEmit": true, + "resolveJsonModule": true, + "typeRoots": ["../../node_modules/.pnpm/node_modules/@types", "../../node_modules/@types"] + }, + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["**/node_modules"] +} \ No newline at end of file diff --git a/packages/shopping/.gitignore b/packages/shopping/.gitignore deleted file mode 100644 index 370d7737..00000000 --- a/packages/shopping/.gitignore +++ /dev/null @@ -1,69 +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 -**/.xcode.env.local - - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# BUCK -buck-out/ -\.buckd/ -*.keystore -!debug.keystore -.kotlin/ - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -**/Pods/ -/vendor/bundle/ - -# dist dir -dist/ diff --git a/packages/shopping/.prettierrc.js b/packages/shopping/.prettierrc.js deleted file mode 100644 index 2b540746..00000000 --- a/packages/shopping/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - arrowParens: 'avoid', - bracketSameLine: true, - bracketSpacing: false, - singleQuote: true, - trailingComma: 'all', -}; diff --git a/packages/shopping/.watchmanconfig b/packages/shopping/.watchmanconfig deleted file mode 100644 index 9e26dfee..00000000 --- a/packages/shopping/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/packages/shopping/README.md b/packages/shopping/README.md deleted file mode 100644 index f9606a6c..00000000 --- a/packages/shopping/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Shopping Application - -This is mini app for shopping service. Shopping exposes `MainNavigator`. `MainNavigator` is Shopping app itself. Shopping app uses auth logic and UI (`SignInScreen`, `AccountScreen`) from Auth remote module, so we suggest to run Auth dev server to prevent issues with Shopping applicappation. If Auth dev server will no be run, Shopping app will not work as standalone app. - -## Setup - -Install dependencies for all apps in root directory of this monorepo: - -``` -pnpm install -``` - -### Run - -Start dev server for all apps in root directory of this monorepo if you need to work as a part of host app. Shopping app server will run on 9001 port: - -``` -pnpm start -``` diff --git a/packages/shopping/app.json b/packages/shopping/app.json deleted file mode 100644 index 13b8e052..00000000 --- a/packages/shopping/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "shopping", - "displayName": "shopping" -} \ No newline at end of file diff --git a/packages/shopping/babel.config.js b/packages/shopping/babel.config.js deleted file mode 100644 index f7b3da3b..00000000 --- a/packages/shopping/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], -}; diff --git a/packages/shopping/jest.config.js b/packages/shopping/jest.config.js deleted file mode 100644 index 9480dd5b..00000000 --- a/packages/shopping/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - preset: 'react-native', - fakeTimers: { - enableGlobally: true, - }, - setupFiles: ['./jest.setup.js'], - transformIgnorePatterns: [ - 'node_modules/(?!(?:.pnpm/)?((jest-)?react-native|@react-native(-community)?|react-navigation|@react-navigation|react-native-svg))', - ], -}; diff --git a/packages/shopping/jest.setup.js b/packages/shopping/jest.setup.js deleted file mode 100644 index 307ed9b5..00000000 --- a/packages/shopping/jest.setup.js +++ /dev/null @@ -1,10 +0,0 @@ -jest.mock('@callstack/repack/client', () => ({ - Federated: { - importModule: jest.fn((container, module) => { - if (container === 'auth') { - const authMock = require('../auth/mocks/federated'); - return Promise.resolve(authMock.default(module)); - } - }), - }, -})); diff --git a/packages/shopping/mocks/App.tsx b/packages/shopping/mocks/App.tsx deleted file mode 100644 index 3d1c7bfb..00000000 --- a/packages/shopping/mocks/App.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import React from 'react'; - -export const AppMock = () => <>; diff --git a/packages/shopping/mocks/federated.ts b/packages/shopping/mocks/federated.ts deleted file mode 100644 index b8798750..00000000 --- a/packages/shopping/mocks/federated.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {AppMock} from './App'; - -export default (module: string) => { - switch (module) { - case './App': - return AppMock; - default: - throw new Error(`ShoppingMock: unknown module: ${module}`); - } -}; diff --git a/packages/shopping/package.json b/packages/shopping/package.json deleted file mode 100644 index 9c1b916e..00000000 --- a/packages/shopping/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "shopping", - "version": "0.0.1", - "private": true, - "scripts": { - "start": "react-native start --port 9001", - "test": "jest", - "lint": "eslint . --ext .js,.jsx,.ts,.tsx", - "typecheck": "tsc", - "bundle": "pnpm bundle:ios && pnpm bundle:android", - "bundle:ios": "react-native bundle --platform ios --entry-file index.js --dev false", - "bundle:android": "react-native bundle --platform android --entry-file index.js --dev false", - "align-deps": "rnx-align-deps --write", - "check-deps": "rnx-align-deps" - }, - "dependencies": { - "@bottom-tabs/react-navigation": "1.1.0", - "@module-federation/enhanced": "2.3.1", - "@react-native-async-storage/async-storage": "3.0.2", - "@react-navigation/native": "7.2.2", - "@react-navigation/native-stack": "7.14.10", - "react": "19.2.3", - "react-native": "0.84.1", - "react-native-bottom-tabs": "1.1.0", - "react-native-edge-to-edge": "1.8.1", - "react-native-paper": "5.15.0", - "react-native-safe-area-context": "5.7.0", - "react-native-screens": "4.24.0", - "react-native-vector-icons": "10.3.0" - }, - "devDependencies": { - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.3", - "@babel/runtime": "^7.25.0", - "@callstack/repack": "5.2.5", - "@react-native-community/cli": "20.1.0", - "@react-native/babel-preset": "0.84.1", - "@react-native/eslint-config": "0.84.1", - "@react-native/typescript-config": "0.84.1", - "@rnx-kit/align-deps": "^3.4.3", - "@rspack/core": "1.7.11", - "@swc/helpers": "^0.5.20", - "@types/jest": "^29.5.14", - "@types/react": "^19.2.0", - "@types/react-native-vector-icons": "^6.4.18", - "@types/react-test-renderer": "^19.1.0", - "@typescript-eslint/eslint-plugin": "^8.12.2", - "@typescript-eslint/parser": "^8.12.2", - "eslint": "^8.57.0", - "jest": "^29.6.3", - "prettier": "^2.8.8", - "react-test-renderer": "^19.2.3", - "super-app-showcase-sdk": "0.0.2", - "typescript": "^5.8.3" - }, - "rnx-kit": { - "kitType": "app", - "alignDeps": { - "presets": [ - "./node_modules/super-app-showcase-sdk/preset" - ], - "requirements": [ - "super-app-showcase-sdk@0.0.2" - ], - "capabilities": [ - "super-app" - ] - } - } -} diff --git a/packages/shopping/src/App.tsx b/packages/shopping/src/App.tsx deleted file mode 100644 index b1b88d43..00000000 --- a/packages/shopping/src/App.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import {NavigationContainer} from '@react-navigation/native'; -import MainNavigator from './navigation/MainNavigator'; -import SplashScreen from './components/SplashScreen'; -import ErrorBoundary from './components/ErrorBoundary'; - -const AuthProvider = React.lazy(() => import('auth/AuthProvider')); -const SignInScreen = React.lazy(() => import('auth/SignInScreen')); - -const App = () => { - return ( - - }> - - {(authData: {isSignout: boolean; isLoading: boolean}) => { - if (authData.isLoading) { - return ; - } - - if (authData.isSignout) { - return ( - }> - - - ); - } - - return ( - - - - ); - }} - - - - ); -}; - -export default App; diff --git a/packages/shopping/src/__tests__/App-test.tsx b/packages/shopping/src/__tests__/App-test.tsx deleted file mode 100644 index 085b231a..00000000 --- a/packages/shopping/src/__tests__/App-test.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import React from 'react'; -import renderer from 'react-test-renderer'; - -import App from '../App'; - -it('renders correctly', () => { - renderer.create(); -}); diff --git a/packages/shopping/src/components/ErrorBoundary.tsx b/packages/shopping/src/components/ErrorBoundary.tsx deleted file mode 100644 index 359cdb67..00000000 --- a/packages/shopping/src/components/ErrorBoundary.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react'; -import {StyleSheet, Text, SafeAreaView} from 'react-native'; -import {MD3Colors} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -type Props = { - children: React.ReactNode; - name: string; -}; - -type State = { - hasError: boolean; -}; - -class ErrorBoundary extends React.Component { - name: string; - - constructor(props: Props) { - super(props); - this.name = props.name; - this.state = {hasError: false}; - } - - static getDerivedStateFromError() { - return {hasError: true}; - } - - componentDidCatch(error: Error, errorInfo: React.ErrorInfo) { - console.log(error, errorInfo); - } - - render() { - if (this.state.hasError) { - return ( - - - {`Failed to load ${this.name}`} - - ); - } - - return this.props.children; - } -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - text: { - fontSize: 24, - color: MD3Colors.primary20, - textAlign: 'center', - }, -}); - -export default ErrorBoundary; diff --git a/packages/shopping/src/components/NavBar.tsx b/packages/shopping/src/components/NavBar.tsx deleted file mode 100644 index 2d77508b..00000000 --- a/packages/shopping/src/components/NavBar.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import {NativeStackHeaderProps} from '@react-navigation/native-stack'; -import {Appbar, MD3Colors} from 'react-native-paper'; - -const NavBar = ({navigation, back, route, options}: NativeStackHeaderProps) => { - return ( - - {back ? : null} - - - ); -}; - -export default NavBar; diff --git a/packages/shopping/src/components/Placeholder.tsx b/packages/shopping/src/components/Placeholder.tsx deleted file mode 100644 index d63ab4f0..00000000 --- a/packages/shopping/src/components/Placeholder.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React, {FC} from 'react'; -import {SafeAreaView, StyleSheet, Text} from 'react-native'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import {MD3Colors} from 'react-native-paper'; - -type Props = { - label: string; - icon: string; -}; - -const Placeholder: FC = ({label, icon}) => { - return ( - - - {label} - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - text: { - fontSize: 24, - color: MD3Colors.primary20, - }, -}); - -export default Placeholder; diff --git a/packages/shopping/src/components/ScreenPlaceholder.tsx b/packages/shopping/src/components/ScreenPlaceholder.tsx deleted file mode 100644 index 9e2630dc..00000000 --- a/packages/shopping/src/components/ScreenPlaceholder.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import React from 'react'; -import {StyleSheet, View} from 'react-native'; -import {Text} from 'react-native-paper'; - -const ScreenPlaceholder = () => { - return ( - - Not implemented yet - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - title: { - fontSize: 24, - }, -}); - -export default ScreenPlaceholder; diff --git a/packages/shopping/src/components/SplashScreen.tsx b/packages/shopping/src/components/SplashScreen.tsx deleted file mode 100644 index 66528229..00000000 --- a/packages/shopping/src/components/SplashScreen.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react'; -import {StyleSheet, SafeAreaView} from 'react-native'; -import {MD3Colors, ProgressBar, Text} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; - -const SplashScreen = () => { - return ( - - - - Shopping application is loading. Please wait... - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - }, - icon: { - textAlign: 'center', - }, - text: { - paddingVertical: 16, - paddingHorizontal: 32, - fontSize: 24, - color: MD3Colors.primary20, - textAlign: 'center', - }, - progress: { - marginVertical: 16, - marginHorizontal: 32, - }, -}); - -export default SplashScreen; diff --git a/packages/shopping/src/data/products.json b/packages/shopping/src/data/products.json deleted file mode 100644 index 59f176dc..00000000 --- a/packages/shopping/src/data/products.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "data": [ - { - "id": "1", - "price": "100", - "name": "Shampoo", - "description": "Shampoo for hair", - "image": "https://picsum.photos/700?a" - }, - { - "id": "2", - "price": "200", - "name": "Conditioner", - "description": "Conditioner for hair and scalp", - "image": "https://picsum.photos/700?a" - }, - { - "id": "3", - "price": "300", - "name": "Hair Oil", - "description": "Hair Oil for hair growth", - "image": "https://picsum.photos/700?a" - }, - { - "id": "4", - "price": "400", - "name": "Hair Gel", - "description": "Hair Gel for hair styling", - "image": "https://picsum.photos/700?a" - } - ] -} \ No newline at end of file diff --git a/packages/shopping/src/navigation/AccountNavigator.tsx b/packages/shopping/src/navigation/AccountNavigator.tsx deleted file mode 100644 index 98fd781a..00000000 --- a/packages/shopping/src/navigation/AccountNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import AccountScreen from '../screens/AccountScreen'; - -export type AccountStackParamList = { - Account: undefined; -}; - -const Account = createNativeStackNavigator(); - -const AccountNavigator = () => { - return ( - - - - ); -}; - -export default AccountNavigator; diff --git a/packages/shopping/src/navigation/HomeNavigator.tsx b/packages/shopping/src/navigation/HomeNavigator.tsx deleted file mode 100644 index ffc487a0..00000000 --- a/packages/shopping/src/navigation/HomeNavigator.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import HomeScreen from '../screens/HomeScreen'; -import NavBar from '../components/NavBar'; - -export type HomeStackParamList = { - Home: undefined; - Upcoming: undefined; -}; - -const Home = createNativeStackNavigator(); - -const HomeNavigator = () => { - return ( - - - - ); -}; - -export default HomeNavigator; diff --git a/packages/shopping/src/navigation/MainNavigator.tsx b/packages/shopping/src/navigation/MainNavigator.tsx deleted file mode 100644 index 0c4ca8e6..00000000 --- a/packages/shopping/src/navigation/MainNavigator.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import TabsNavigator from './TabsNavigator'; - -export type MainStackParamList = { - Tabs: undefined; -}; - -const Main = createNativeStackNavigator(); - -const MainNavigator = () => { - return ( - - - - ); -}; - -export default MainNavigator; diff --git a/packages/shopping/src/navigation/SearchNavigator.tsx b/packages/shopping/src/navigation/SearchNavigator.tsx deleted file mode 100644 index 0f393091..00000000 --- a/packages/shopping/src/navigation/SearchNavigator.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react'; -import {createNativeStackNavigator} from '@react-navigation/native-stack'; -import NavBar from '../components/NavBar'; -import SearchScreen from '../screens/SearchScreen'; - -export type SearchStackParamList = { - Search: undefined; -}; - -const Search = createNativeStackNavigator(); - -const SearchNavigator = () => { - return ( - - - - ); -}; - -export default SearchNavigator; diff --git a/packages/shopping/src/navigation/TabsNavigator.tsx b/packages/shopping/src/navigation/TabsNavigator.tsx deleted file mode 100644 index 2dd5e165..00000000 --- a/packages/shopping/src/navigation/TabsNavigator.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import {createNativeBottomTabNavigator} from '@bottom-tabs/react-navigation'; -import {MD3Colors} from 'react-native-paper'; -import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import AccountNavigator from './AccountNavigator'; -import HomeNavigator from './HomeNavigator'; -import SearchNavigator from './SearchNavigator'; - -export type TabsParamList = { - HomeNavigator: undefined; - SearchNavigator: undefined; - AccountNavigator: undefined; -}; - -const homeIcon = Icon.getImageSourceSync('home', 24); -const magnifyIcon = Icon.getImageSourceSync('magnify', 24); -const accountIcon = Icon.getImageSourceSync('account', 24); - -const Tabs = createNativeBottomTabNavigator(); - -const TabsNavigator = () => { - return ( - - homeIcon, - }} - /> - magnifyIcon, - }} - /> - accountIcon, - }} - /> - - ); -}; - -export default TabsNavigator; diff --git a/packages/shopping/src/screens/AccountScreen.tsx b/packages/shopping/src/screens/AccountScreen.tsx deleted file mode 100644 index 6d952d5e..00000000 --- a/packages/shopping/src/screens/AccountScreen.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react'; -import ErrorBoundary from '../components/ErrorBoundary'; -import Placeholder from '../components/Placeholder'; - -const Account = React.lazy(() => import('auth/AccountScreen')); - -const AccountScreen = () => { - return ( - - }> - - - - ); -}; - -export default AccountScreen; diff --git a/packages/shopping/src/screens/HomeScreen.tsx b/packages/shopping/src/screens/HomeScreen.tsx deleted file mode 100644 index 65da22e7..00000000 --- a/packages/shopping/src/screens/HomeScreen.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import React from 'react'; -import { - Alert, - Dimensions, - FlatList, - Image, - ListRenderItem, - ScrollView, - StyleSheet, - View, -} from 'react-native'; -import { - Card, - Button, - Divider, - Text, - Title, - Paragraph, -} from 'react-native-paper'; -import products from '../data/products.json'; - -const showNotImplementedAlert = () => Alert.alert('Not implemented yet'); - -const renderProduct: ListRenderItem = ({item, index}) => ( - - - - {`${item.name} • $${item.price}`} - {item.description} - - - - - - -); - -const renderSliderItem = () => { - return ( - - ); -}; - -const renderDivider = () => ; - -const HomeScreen = () => { - return ( - - - - - Featured Products - - - - - - - New Products - - - - - - - You may also like - - - - - - ); -}; - -const {width: sliderItemWidth} = Dimensions.get('screen'); - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - }, - contentContainer: { - paddingHorizontal: 16, - }, - divider: { - backgroundColor: 'transparent', - width: 16, - }, - header: { - padding: 16, - flexDirection: 'row', - alignItems: 'center', - }, - headerTitle: { - flex: 1, - }, - cardWidth: { - width: 270, - }, - sliderItem: { - width: sliderItemWidth, - height: (sliderItemWidth / 3) * 2, - }, -}); - -export default HomeScreen; diff --git a/packages/shopping/src/screens/SearchScreen.tsx b/packages/shopping/src/screens/SearchScreen.tsx deleted file mode 100644 index 8454920d..00000000 --- a/packages/shopping/src/screens/SearchScreen.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React, {useCallback, useState} from 'react'; -import {StyleSheet, View} from 'react-native'; -import {MD3Colors, Searchbar} from 'react-native-paper'; - -const SearchScreen = () => { - const [searchQuery, setSearchQuery] = useState(''); - - const onChangeSearch = useCallback( - (query: string) => setSearchQuery(query), - [], - ); - - return ( - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#fff', - }, - searchbar: { - margin: 16, - }, -}); - -export default SearchScreen; diff --git a/packages/shopping/tsconfig.json b/packages/shopping/tsconfig.json deleted file mode 100644 index 511c11be..00000000 --- a/packages/shopping/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "@react-native/typescript-config", - "compilerOptions": { - "types": ["jest"], - "module": "es2020", - "paths": { - "*": ["./@mf-types/*"] - } - }, - "include": ["**/*.ts", "**/*.tsx", "./@mf-types/*"], - "exclude": ["**/node_modules", "**/Pods"] -} diff --git a/packages/shopping/.eslintrc.js b/packages/trading/.eslintrc.js similarity index 78% rename from packages/shopping/.eslintrc.js rename to packages/trading/.eslintrc.js index 2406aa68..7e1dc7fe 100644 --- a/packages/shopping/.eslintrc.js +++ b/packages/trading/.eslintrc.js @@ -12,11 +12,5 @@ module.exports = { 'no-undef': 'off', }, }, - { - files: ['jest.setup.js'], - env: { - jest: true, - }, - }, ], -}; +}; \ No newline at end of file diff --git a/packages/trading/app.json b/packages/trading/app.json new file mode 100644 index 00000000..92631035 --- /dev/null +++ b/packages/trading/app.json @@ -0,0 +1,4 @@ +{ + "name": "trading", + "displayName": "Trading" +} \ No newline at end of file diff --git a/packages/trading/babel.config.js b/packages/trading/babel.config.js new file mode 100644 index 00000000..2b63a414 --- /dev/null +++ b/packages/trading/babel.config.js @@ -0,0 +1,4 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], + plugins: ['babel-plugin-react-compiler', 'react-native-worklets/plugin'], +}; \ No newline at end of file diff --git a/packages/booking/index.js b/packages/trading/index.js similarity index 69% rename from packages/booking/index.js rename to packages/trading/index.js index ef707c25..9b379303 100644 --- a/packages/booking/index.js +++ b/packages/trading/index.js @@ -2,4 +2,4 @@ import {AppRegistry} from 'react-native'; import App from './src/App'; import {name as appName} from './app.json'; -AppRegistry.registerComponent(appName, () => App); +AppRegistry.registerComponent(appName, () => App); \ No newline at end of file diff --git a/packages/trading/package.json b/packages/trading/package.json new file mode 100644 index 00000000..17b44fde --- /dev/null +++ b/packages/trading/package.json @@ -0,0 +1,44 @@ +{ + "name": "trading", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "react-native start --port 9001", + "test": "jest --passWithNoTests", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "typecheck": "tsc" + }, + "dependencies": { + "@legendapp/list": "2.0.19", + "@module-federation/enhanced": "2.3.1", + "@react-navigation/native": "7.2.2", + "@react-navigation/native-stack": "7.14.10", + "react": "19.2.3", + "react-native": "0.84.1", + "react-native-safe-area-context": "5.7.0", + "react-native-screens": "4.24.0" + }, + "peerDependencies": { + "@gorhom/bottom-sheet": "*", + "@shopify/react-native-skia": "*", + "react-native-gesture-handler": "*", + "react-native-reanimated": "*", + "react-native-worklets": "*", + "victory-native": "*" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@callstack/repack": "5.2.5", + "@react-native/babel-preset": "0.84.1", + "@react-native/eslint-config": "0.84.1", + "@react-native/typescript-config": "0.84.1", + "@rspack/core": "1.7.11", + "@swc/helpers": "^0.5.20", + "@types/react": "^19.2.0", + "@typescript-eslint/eslint-plugin": "^8.12.2", + "@typescript-eslint/parser": "^8.12.2", + "eslint": "^8.57.0", + "super-app-showcase-sdk": "0.0.2", + "typescript": "^5.8.3" + } +} \ No newline at end of file diff --git a/packages/shopping/react-native.config.js b/packages/trading/react-native.config.js similarity index 96% rename from packages/shopping/react-native.config.js rename to packages/trading/react-native.config.js index d3fe7ef9..2fc5b06d 100644 --- a/packages/shopping/react-native.config.js +++ b/packages/trading/react-native.config.js @@ -1,3 +1,3 @@ module.exports = { commands: require('@callstack/repack/commands/rspack'), -}; +}; \ No newline at end of file diff --git a/packages/shopping/rspack.config.ts b/packages/trading/rspack.config.ts similarity index 65% rename from packages/shopping/rspack.config.ts rename to packages/trading/rspack.config.ts index 5d6dd3d5..cc627ff1 100644 --- a/packages/shopping/rspack.config.ts +++ b/packages/trading/rspack.config.ts @@ -7,21 +7,20 @@ import {getSharedDependencies} from 'super-app-showcase-sdk'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); -/** - * Rspack configuration enhanced with Re.Pack defaults for React Native. - * - * Learn about Rspack configuration: https://rspack.dev/config/ - * Learn about Re.Pack configuration: https://re-pack.dev/docs/guides/configuration - */ - export default Repack.defineRspackConfig(({mode, platform}) => { return { mode, context: __dirname, entry: './index.js', - resolve: {...Repack.getResolveOptions({enablePackageExports: true})}, + resolve: { + ...Repack.getResolveOptions({enablePackageExports: true}), + modules: [ + path.resolve(__dirname, '../host/node_modules'), + 'node_modules', + ], + }, output: { - uniqueName: 'sas-shopping', + uniqueName: 'sas-trading', }, module: { rules: [ @@ -40,8 +39,8 @@ export default Repack.defineRspackConfig(({mode, platform}) => { plugins: [ new Repack.RepackPlugin(), new Repack.plugins.ModuleFederationPluginV2({ - name: 'shopping', - filename: 'shopping.container.js.bundle', + name: 'trading', + filename: 'trading.container.js.bundle', dts: false, exposes: { './App': './src/navigation/MainNavigator', @@ -51,14 +50,9 @@ export default Repack.defineRspackConfig(({mode, platform}) => { }, shared: getSharedDependencies({eager: false}), }), - new Repack.plugins.CodeSigningPlugin({ - enabled: mode === 'production', - privateKeyPath: path.join('..', '..', 'code-signing.pem'), - }), - // silence missing @react-native-masked-view optionally required by @react-navigation/elements new rspack.IgnorePlugin({ resourceRegExp: /^@react-native-masked-view/, }), ], }; -}); +}); \ No newline at end of file diff --git a/packages/trading/src/App.tsx b/packages/trading/src/App.tsx new file mode 100644 index 00000000..5848fde2 --- /dev/null +++ b/packages/trading/src/App.tsx @@ -0,0 +1,16 @@ +import React from 'react'; +import {NavigationContainer} from '@react-navigation/native'; +import {GestureHandlerRootView} from 'react-native-gesture-handler'; +import MainNavigator from './navigation/MainNavigator'; + +const App = () => { + return ( + + + + + + ); +}; + +export default App; \ No newline at end of file diff --git a/packages/trading/src/components/AssetRow.tsx b/packages/trading/src/components/AssetRow.tsx new file mode 100644 index 00000000..de785be9 --- /dev/null +++ b/packages/trading/src/components/AssetRow.tsx @@ -0,0 +1,80 @@ +import React from 'react'; +import {Image, Pressable, StyleSheet, Text, View} from 'react-native'; +import Animated, { + interpolateColor, + useAnimatedStyle, + useSharedValue, +} from 'react-native-reanimated'; +import {getAssetIconUri, colors, type Asset} from 'super-app-showcase-sdk'; +import PriceCell from './PriceCell'; + +interface AssetRowProps { + asset: Asset; + onPress: (asset: Asset) => void; +} + +const AssetRow = ({asset, onPress}: AssetRowProps) => { + const flashProgress = useSharedValue(0); + const flashIsUp = useSharedValue(true); + + const rowStyle = useAnimatedStyle(() => ({ + backgroundColor: interpolateColor( + flashProgress.value, + [0, 1], + [colors.transparent, flashIsUp.value ? colors.priceUp : colors.priceDown], + ), + })); + + return ( + onPress(asset)}> + + + + {asset.name} + {asset.symbol} + + + + + ); +}; + +const styles = StyleSheet.create({ + row: { + flexDirection: 'row', + alignItems: 'center', + paddingHorizontal: 16, + paddingVertical: 14, + borderBottomWidth: StyleSheet.hairlineWidth, + borderBottomColor: colors.border, + }, + icon: { + width: 40, + height: 40, + borderRadius: 20, + backgroundColor: colors.surfaceVariant, + }, + info: { + flex: 1, + marginLeft: 12, + gap: 2, + }, + name: { + color: colors.onSurface, + fontSize: 16, + fontWeight: '600', + }, + symbol: { + color: colors.secondary, + fontSize: 13, + }, +}); + +export default React.memo(AssetRow); \ No newline at end of file diff --git a/packages/trading/src/components/PriceCell.tsx b/packages/trading/src/components/PriceCell.tsx new file mode 100644 index 00000000..a970bd30 --- /dev/null +++ b/packages/trading/src/components/PriceCell.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import {StyleSheet, Text} from 'react-native'; +import {withSequence, withTiming, type SharedValue} from 'react-native-reanimated'; +import {useAssetPrice, formatPrice, colors, type AssetSymbol} from 'super-app-showcase-sdk'; + +interface PriceCellProps { + symbol: AssetSymbol; + flashProgress: SharedValue; + flashIsUp: SharedValue; +} + +const PriceCell = React.memo(({symbol, flashProgress, flashIsUp}: PriceCellProps) => { + const price = useAssetPrice(symbol); + const prevRef = React.useRef(0); + + React.useEffect(() => { + if (prevRef.current !== 0 && price !== prevRef.current) { + flashIsUp.value = price > prevRef.current; + flashProgress.value = withSequence( + withTiming(1, {duration: 150}), + withTiming(0, {duration: 600}), + ); + } + prevRef.current = price; + }, [price, flashProgress, flashIsUp]); + + return {formatPrice(price)}; +}); + +const styles = StyleSheet.create({ + price: { + color: colors.onSurface, + fontSize: 16, + fontWeight: '500', + fontVariant: ['tabular-nums'], + }, +}); + +export default PriceCell; \ No newline at end of file diff --git a/packages/trading/src/components/TradeBottomSheet.tsx b/packages/trading/src/components/TradeBottomSheet.tsx new file mode 100644 index 00000000..cd0840f0 --- /dev/null +++ b/packages/trading/src/components/TradeBottomSheet.tsx @@ -0,0 +1,181 @@ +import React from 'react'; +import { + Pressable, + StyleSheet, + Text, + TextInput, + View, +} from 'react-native'; +import BottomSheet, { + BottomSheetBackdrop, + BottomSheetView, + type BottomSheetBackdropProps, +} from '@gorhom/bottom-sheet'; +import {colors, type Asset} from 'super-app-showcase-sdk'; + +export interface BottomSheetRef { + open: () => void; + close: () => void; +} + +interface Props { + asset: Asset; + onConfirm: () => void; +} + +const SNAP_POINTS = ['45%']; + +const renderBackdrop = (props: BottomSheetBackdropProps) => ( + +); + +const TradeBottomSheet = React.forwardRef( + ({asset, onConfirm}, ref) => { + const sheetRef = React.useRef(null); + const amountRef = React.useRef(''); + + React.useImperativeHandle(ref, () => ({ + open: () => sheetRef.current?.expand(), + close: () => sheetRef.current?.close(), + })); + + const handleConfirm = React.useCallback(() => { + sheetRef.current?.close(); + onConfirm(); + }, [onConfirm]); + + const handleCancel = React.useCallback(() => { + sheetRef.current?.close(); + }, []); + + return ( + + + Trade {asset.name} + {asset.symbol}/USD + + + Amount (USD) + { + amountRef.current = text; + }} + /> + + + + [ + styles.cancelButton, + pressed && styles.buttonPressed, + ]} + onPress={handleCancel}> + Cancel + + [ + styles.confirmButton, + pressed && styles.buttonPressed, + ]} + onPress={handleConfirm}> + Confirm Trade + + + + + ); + }, +); + +const styles = StyleSheet.create({ + background: { + backgroundColor: colors.surface, + }, + indicator: { + backgroundColor: colors.border, + }, + content: { + paddingHorizontal: 24, + paddingTop: 8, + paddingBottom: 32, + gap: 16, + }, + title: { + color: colors.onSurface, + fontSize: 20, + fontWeight: '700', + }, + subtitle: { + color: colors.secondary, + fontSize: 14, + marginTop: -8, + }, + inputContainer: { + gap: 8, + }, + inputLabel: { + color: colors.secondary, + fontSize: 13, + }, + input: { + backgroundColor: colors.surfaceVariant, + borderRadius: 10, + paddingHorizontal: 16, + paddingVertical: 14, + color: colors.onSurface, + fontSize: 18, + fontWeight: '500', + fontVariant: ['tabular-nums'], + }, + actions: { + flexDirection: 'row', + gap: 12, + marginTop: 8, + }, + cancelButton: { + flex: 1, + backgroundColor: colors.surfaceVariant, + borderRadius: 10, + paddingVertical: 14, + alignItems: 'center', + }, + confirmButton: { + flex: 2, + backgroundColor: colors.primary, + borderRadius: 10, + paddingVertical: 14, + alignItems: 'center', + }, + buttonPressed: { + opacity: 0.8, + }, + cancelText: { + color: colors.secondary, + fontSize: 15, + fontWeight: '600', + }, + confirmText: { + color: colors.onPrimary, + fontSize: 15, + fontWeight: '600', + }, +}); + +export default TradeBottomSheet; \ No newline at end of file diff --git a/packages/trading/src/navigation/MainNavigator.tsx b/packages/trading/src/navigation/MainNavigator.tsx new file mode 100644 index 00000000..c5960d94 --- /dev/null +++ b/packages/trading/src/navigation/MainNavigator.tsx @@ -0,0 +1,44 @@ +import React from 'react'; +import {createNativeStackNavigator} from '@react-navigation/native-stack'; +import AssetListScreen from '../screens/AssetListScreen'; +import AssetDetailsScreen from '../screens/AssetDetailsScreen'; +import TradeSuccessScreen from '../screens/TradeSuccessScreen'; +import {colors, type Asset} from 'super-app-showcase-sdk'; + +export type TradingStackParamList = { + AssetList: undefined; + AssetDetails: {asset: Asset}; + TradeSuccess: {symbol: string}; +}; + +const Stack = createNativeStackNavigator(); + +const MainNavigator = () => { + return ( + + + ({title: route.params.asset.name})} + /> + + + ); +}; + +export default MainNavigator; \ No newline at end of file diff --git a/packages/trading/src/screens/AssetDetailsScreen.tsx b/packages/trading/src/screens/AssetDetailsScreen.tsx new file mode 100644 index 00000000..760135c5 --- /dev/null +++ b/packages/trading/src/screens/AssetDetailsScreen.tsx @@ -0,0 +1,301 @@ +import React from 'react'; +import { + Pressable, + ScrollView, + StyleSheet, + Text, + View, +} from 'react-native'; +import {useBottomTabBarHeight} from 'react-native-bottom-tabs'; +import {matchFont} from '@shopify/react-native-skia'; +import {CartesianChart, Line} from 'victory-native'; +import {useDerivedValue, useSharedValue, withTiming} from 'react-native-reanimated'; +import type {NativeStackScreenProps} from '@react-navigation/native-stack'; +import {useAssetPrice, useHistoricalPrices, formatPrice, colors} from 'super-app-showcase-sdk'; +import type {TradingStackParamList} from '../navigation/MainNavigator'; +import TradeBottomSheet from '../components/TradeBottomSheet'; +import type {BottomSheetRef} from '../components/TradeBottomSheet'; + +type Props = NativeStackScreenProps; + +const MAX_TICKS = 60; + +const NEWS_ITEMS = [ + { + id: '1', + title: 'Federal Reserve signals potential rate cuts later this year', + time: '2h ago', + source: 'Reuters', + }, + { + id: '2', + title: 'Institutional adoption accelerates as major banks enter crypto market', + time: '4h ago', + source: 'Bloomberg', + }, + { + id: '3', + title: 'On-chain metrics suggest accumulation phase for long-term holders', + time: '6h ago', + source: 'CoinDesk', + }, + { + id: '4', + title: 'New regulatory framework proposed to clarify digital asset classification', + time: '8h ago', + source: 'Financial Times', + }, +]; + +const AssetDetailsScreen = ({route, navigation}: Props) => { + const {asset} = route.params; + const tabBarHeight = useBottomTabBarHeight(); + const price = useAssetPrice(asset.symbol); + const historicalPrices = useHistoricalPrices(asset.krakenPair); + const prevPriceRef = React.useRef(0); + const tradeSheetRef = React.useRef(null); + + const [chartData, setChartData] = React.useState< + {index: number; price: number}[] + >([]); + const bufferRef = React.useRef([]); + const seededRef = React.useRef(false); + + React.useEffect(() => { + if (historicalPrices.length === 0 || seededRef.current) { + return; + } + seededRef.current = true; + bufferRef.current = historicalPrices; + setChartData(historicalPrices.map((p, index) => ({index, price: p}))); + }, [historicalPrices]); + + // Shared value for line color: 0 = neutral, 1 = up, -1 = down + const lineColorProgress = useSharedValue(0); + + const lineColor = useDerivedValue(() => { + if (lineColorProgress.value > 0) { + return colors.priceUpText; + } + if (lineColorProgress.value < 0) { + return colors.priceDownText; + } + return colors.primary; + }); + + React.useEffect(() => { + if (price === 0) { + return; + } + + // Update 60-tick buffer + bufferRef.current = [...bufferRef.current, price].slice(-MAX_TICKS); + React.startTransition(() => { + setChartData( + bufferRef.current.map((p, index) => ({index, price: p})), + ); + }); + + // Animate line color on direction change + if (prevPriceRef.current !== 0 && price !== prevPriceRef.current) { + const direction = price > prevPriceRef.current ? 1 : -1; + lineColorProgress.value = direction; + lineColorProgress.value = withTiming(0, {duration: 800}); + } + prevPriceRef.current = price; + }, [price, lineColorProgress]); + + const chartFont = React.useMemo(() => { + try { + return matchFont({fontSize: 11}); + } catch { + return null; + } + }, []); + + const openTradeSheet = React.useCallback(() => { + tradeSheetRef.current?.open(); + }, []); + + const hasData = chartData.length > 1; + + return ( + + + {/* Current price */} + + + {formatPrice(price)} + + {asset.symbol}/USD + + + {/* Chart */} + + {hasData ? ( + { + const n = Number(value); + if (n >= 1000) { + return `$${(n / 1000).toFixed(1)}k`; + } + if (n >= 1) { + return `$${n.toFixed(0)}`; + } + return `$${n.toFixed(3)}`; + }, + }]}> + {({points}) => ( + + )} + + ) : ( + + + Waiting for price data… + + + )} + + + {/* News */} + Latest News + {NEWS_ITEMS.map(item => ( + + {item.title} + + {item.source} · {item.time} + + + ))} + + + {/* Trade button */} + + [ + styles.tradeButton, + pressed && styles.tradeButtonPressed, + ]} + onPress={openTradeSheet}> + Trade {asset.symbol} + + + + { + navigation.navigate('TradeSuccess', {symbol: asset.symbol}); + }} + /> + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: colors.background, + }, + scroll: { + flex: 1, + }, + scrollContent: { + padding: 16, + paddingBottom: 32, + }, + priceRow: { + marginBottom: 16, + gap: 4, + }, + currentPrice: { + color: colors.onBackground, + fontSize: 32, + fontWeight: '700', + fontVariant: ['tabular-nums'], + }, + symbol: { + color: colors.secondary, + fontSize: 14, + }, + chartContainer: { + height: 220, + marginBottom: 24, + backgroundColor: colors.surface, + borderRadius: 12, + overflow: 'hidden', + }, + chartPlaceholder: { + flex: 1, + justifyContent: 'center', + alignItems: 'center', + }, + chartPlaceholderText: { + color: colors.secondary, + fontSize: 14, + }, + sectionTitle: { + color: colors.onBackground, + fontSize: 18, + fontWeight: '600', + marginBottom: 12, + }, + newsItem: { + backgroundColor: colors.surface, + borderRadius: 10, + padding: 14, + marginBottom: 10, + gap: 6, + }, + newsTitle: { + color: colors.onSurface, + fontSize: 14, + lineHeight: 20, + fontWeight: '500', + }, + newsMeta: { + color: colors.secondary, + fontSize: 12, + }, + footer: { + padding: 16, + backgroundColor: colors.background, + borderTopWidth: StyleSheet.hairlineWidth, + borderTopColor: colors.border, + }, + tradeButton: { + backgroundColor: colors.primary, + paddingVertical: 16, + borderRadius: 12, + alignItems: 'center', + }, + tradeButtonPressed: { + opacity: 0.8, + }, + tradeButtonText: { + color: colors.onPrimary, + fontSize: 16, + fontWeight: '600', + }, +}); + +export default AssetDetailsScreen; \ No newline at end of file diff --git a/packages/trading/src/screens/AssetListScreen.tsx b/packages/trading/src/screens/AssetListScreen.tsx new file mode 100644 index 00000000..5484e1c5 --- /dev/null +++ b/packages/trading/src/screens/AssetListScreen.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import {StyleSheet, View} from 'react-native'; +import {LegendList} from '@legendapp/list'; +import {ASSETS, colors, ConnectionBanner, type Asset} from 'super-app-showcase-sdk'; +import {useNavigation} from '@react-navigation/native'; +import type {NativeStackNavigationProp} from '@react-navigation/native-stack'; +import AssetRow from '../components/AssetRow'; +import type {TradingStackParamList} from '../navigation/MainNavigator'; + +type NavigationProp = NativeStackNavigationProp; + +const AssetListScreen = () => { + const navigation = useNavigation(); + + const handlePress = React.useCallback( + (asset: Asset) => { + navigation.navigate('AssetDetails', {asset}); + }, + [navigation], + ); + + return ( + + + item.symbol} + renderItem={({item}) => } + estimatedItemSize={69} + style={styles.list} + /> + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: colors.background, + }, + list: { + flex: 1, + }, +}); + +export default AssetListScreen; \ No newline at end of file diff --git a/packages/trading/src/screens/TradeSuccessScreen.tsx b/packages/trading/src/screens/TradeSuccessScreen.tsx new file mode 100644 index 00000000..f9355a4c --- /dev/null +++ b/packages/trading/src/screens/TradeSuccessScreen.tsx @@ -0,0 +1,65 @@ +import React from 'react'; +import {Pressable, StyleSheet, Text, View} from 'react-native'; +import type {NativeStackScreenProps} from '@react-navigation/native-stack'; +import type {TradingStackParamList} from '../navigation/MainNavigator'; +import {colors} from 'super-app-showcase-sdk'; + +type Props = NativeStackScreenProps; + +const TradeSuccessScreen = ({navigation, route}: Props) => { + return ( + + + Trade Placed! + {route.params.symbol}/USD order confirmed + [styles.button, pressed && styles.buttonPressed]} + onPress={() => navigation.goBack()}> + Done + + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: '#1A8C4E', + justifyContent: 'center', + alignItems: 'center', + gap: 12, + padding: 32, + }, + checkmark: { + fontSize: 80, + color: colors.onPrimary, + marginBottom: 8, + }, + title: { + color: colors.onPrimary, + fontSize: 32, + fontWeight: '700', + }, + subtitle: { + color: 'rgba(255,255,255,0.75)', + fontSize: 16, + marginBottom: 32, + }, + button: { + backgroundColor: 'rgba(255,255,255,0.2)', + paddingVertical: 14, + paddingHorizontal: 40, + borderRadius: 12, + marginTop: 16, + }, + buttonPressed: { + opacity: 0.7, + }, + buttonText: { + color: colors.onPrimary, + fontSize: 16, + fontWeight: '600', + }, +}); + +export default TradeSuccessScreen; \ No newline at end of file diff --git a/packages/trading/tsconfig.json b/packages/trading/tsconfig.json new file mode 100644 index 00000000..9a4a739c --- /dev/null +++ b/packages/trading/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "@react-native/typescript-config", + "compilerOptions": { + "module": "es2020", + "types": ["react-native", "jest"], + "paths": { + "@gorhom/bottom-sheet": ["../host/node_modules/@gorhom/bottom-sheet"], + "@shopify/react-native-skia": ["../host/node_modules/@shopify/react-native-skia"], + "react-native-bottom-tabs": ["../host/node_modules/react-native-bottom-tabs"], + "react-native-gesture-handler": ["../host/node_modules/react-native-gesture-handler"], + "react-native-reanimated": ["../host/node_modules/react-native-reanimated"], + "victory-native": ["../host/node_modules/victory-native"] + } + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "babel.config.js", "jest.config.js"] +} \ No newline at end of file diff --git a/packages/dashboard/.eslintrc.js b/packages/wallet/.eslintrc.js similarity index 78% rename from packages/dashboard/.eslintrc.js rename to packages/wallet/.eslintrc.js index 2406aa68..7e1dc7fe 100644 --- a/packages/dashboard/.eslintrc.js +++ b/packages/wallet/.eslintrc.js @@ -12,11 +12,5 @@ module.exports = { 'no-undef': 'off', }, }, - { - files: ['jest.setup.js'], - env: { - jest: true, - }, - }, ], -}; +}; \ No newline at end of file diff --git a/packages/wallet/app.json b/packages/wallet/app.json new file mode 100644 index 00000000..04c51aa3 --- /dev/null +++ b/packages/wallet/app.json @@ -0,0 +1,4 @@ +{ + "name": "wallet", + "displayName": "Wallet" +} \ No newline at end of file diff --git a/packages/wallet/babel.config.js b/packages/wallet/babel.config.js new file mode 100644 index 00000000..2b63a414 --- /dev/null +++ b/packages/wallet/babel.config.js @@ -0,0 +1,4 @@ +module.exports = { + presets: ['module:@react-native/babel-preset'], + plugins: ['babel-plugin-react-compiler', 'react-native-worklets/plugin'], +}; \ No newline at end of file diff --git a/packages/shopping/index.js b/packages/wallet/index.js similarity index 69% rename from packages/shopping/index.js rename to packages/wallet/index.js index ef707c25..9b379303 100644 --- a/packages/shopping/index.js +++ b/packages/wallet/index.js @@ -2,4 +2,4 @@ import {AppRegistry} from 'react-native'; import App from './src/App'; import {name as appName} from './app.json'; -AppRegistry.registerComponent(appName, () => App); +AppRegistry.registerComponent(appName, () => App); \ No newline at end of file diff --git a/packages/wallet/package.json b/packages/wallet/package.json new file mode 100644 index 00000000..28c981a0 --- /dev/null +++ b/packages/wallet/package.json @@ -0,0 +1,41 @@ +{ + "name": "wallet", + "version": "0.0.1", + "private": true, + "scripts": { + "start": "react-native start --port 9002", + "test": "jest --passWithNoTests", + "lint": "eslint . --ext .js,.jsx,.ts,.tsx", + "typecheck": "tsc" + }, + "dependencies": { + "@legendapp/list": "2.0.19", + "@module-federation/enhanced": "2.3.1", + "@react-navigation/native": "7.2.2", + "@react-navigation/native-stack": "7.14.10", + "react": "19.2.3", + "react-native": "0.84.1", + "react-native-safe-area-context": "5.7.0", + "react-native-screens": "4.24.0" + }, + "peerDependencies": { + "@shopify/react-native-skia": "*", + "react-native-reanimated": "*", + "react-native-worklets": "*" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@callstack/repack": "5.2.5", + "@react-native/babel-preset": "0.84.1", + "@react-native/eslint-config": "0.84.1", + "@react-native/typescript-config": "0.84.1", + "@rspack/core": "1.7.11", + "@swc/helpers": "^0.5.20", + "@types/react": "^19.2.0", + "@typescript-eslint/eslint-plugin": "^8.12.2", + "@typescript-eslint/parser": "^8.12.2", + "eslint": "^8.57.0", + "super-app-showcase-sdk": "0.0.2", + "typescript": "^5.8.3" + } +} \ No newline at end of file diff --git a/packages/booking/react-native.config.js b/packages/wallet/react-native.config.js similarity index 96% rename from packages/booking/react-native.config.js rename to packages/wallet/react-native.config.js index d3fe7ef9..2fc5b06d 100644 --- a/packages/booking/react-native.config.js +++ b/packages/wallet/react-native.config.js @@ -1,3 +1,3 @@ module.exports = { commands: require('@callstack/repack/commands/rspack'), -}; +}; \ No newline at end of file diff --git a/packages/booking/rspack.config.ts b/packages/wallet/rspack.config.ts similarity index 63% rename from packages/booking/rspack.config.ts rename to packages/wallet/rspack.config.ts index 8ecd33db..facbae09 100644 --- a/packages/booking/rspack.config.ts +++ b/packages/wallet/rspack.config.ts @@ -7,21 +7,20 @@ import {getSharedDependencies} from 'super-app-showcase-sdk'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); -/** - * Rspack configuration enhanced with Re.Pack defaults for React Native. - * - * Learn about Rspack configuration: https://rspack.dev/config/ - * Learn about Re.Pack configuration: https://re-pack.dev/docs/guides/configuration - */ - export default Repack.defineRspackConfig(({mode, platform}) => { return { mode, context: __dirname, entry: './index.js', - resolve: {...Repack.getResolveOptions({enablePackageExports: true})}, + resolve: { + ...Repack.getResolveOptions({enablePackageExports: true}), + modules: [ + path.resolve(__dirname, '../host/node_modules'), + 'node_modules', + ], + }, output: { - uniqueName: 'sas-booking', + uniqueName: 'sas-wallet', }, module: { rules: [ @@ -40,26 +39,20 @@ export default Repack.defineRspackConfig(({mode, platform}) => { plugins: [ new Repack.RepackPlugin(), new Repack.plugins.ModuleFederationPluginV2({ - name: 'booking', - filename: 'booking.container.js.bundle', + name: 'wallet', + filename: 'wallet.container.js.bundle', dts: false, exposes: { './App': './src/navigation/MainNavigator', - './UpcomingScreen': './src/screens/UpcomingScreen', }, remotes: { auth: `auth@http://localhost:9003/${platform}/mf-manifest.json`, }, shared: getSharedDependencies({eager: false}), }), - new Repack.plugins.CodeSigningPlugin({ - enabled: mode === 'production', - privateKeyPath: path.join('..', '..', 'code-signing.pem'), - }), - // silence missing @react-native-masked-view optionally required by @react-navigation/elements new rspack.IgnorePlugin({ resourceRegExp: /^@react-native-masked-view/, }), ], }; -}); +}); \ No newline at end of file diff --git a/packages/wallet/src/App.tsx b/packages/wallet/src/App.tsx new file mode 100644 index 00000000..027bc79e --- /dev/null +++ b/packages/wallet/src/App.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import {NavigationContainer} from '@react-navigation/native'; +import MainNavigator from './navigation/MainNavigator'; + +const App = () => { + return ( + + + + ); +}; + +export default App; \ No newline at end of file diff --git a/packages/wallet/src/components/HoldingRow.tsx b/packages/wallet/src/components/HoldingRow.tsx new file mode 100644 index 00000000..65d25cb0 --- /dev/null +++ b/packages/wallet/src/components/HoldingRow.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import {Image, StyleSheet, Text, View} from 'react-native'; +import Animated, { + interpolateColor, + useAnimatedStyle, + useSharedValue, +} from 'react-native-reanimated'; +import {getAssetIconUri, colors, type Asset} from 'super-app-showcase-sdk'; +import type {Holding} from '../constants'; +import ValueCell from './ValueCell'; + +interface Props { + holding: Holding; + asset: Asset; +} + +const HoldingRow = ({holding, asset}: Props) => { + const flashProgress = useSharedValue(0); + const flashIsUp = useSharedValue(true); + + const rowStyle = useAnimatedStyle(() => ({ + backgroundColor: interpolateColor( + flashProgress.value, + [0, 1], + [colors.transparent, flashIsUp.value ? colors.priceUp : colors.priceDown], + ), + })); + + return ( + + + + {asset.name} + + {holding.quantity} {holding.symbol} + + + + + ); +}; + +const styles = StyleSheet.create({ + row: { + flexDirection: 'row', + alignItems: 'center', + padding: 16, + borderRadius: 12, + marginBottom: 10, + backgroundColor: colors.surface, + }, + icon: { + width: 44, + height: 44, + borderRadius: 22, + backgroundColor: colors.surfaceVariant, + }, + info: { + flex: 1, + marginLeft: 12, + gap: 3, + }, + name: { + color: colors.onSurface, + fontSize: 16, + fontWeight: '600', + }, + quantity: { + color: colors.secondary, + fontSize: 13, + }, +}); + +export default React.memo(HoldingRow); \ No newline at end of file diff --git a/packages/wallet/src/components/ValueCell.tsx b/packages/wallet/src/components/ValueCell.tsx new file mode 100644 index 00000000..93e43ba3 --- /dev/null +++ b/packages/wallet/src/components/ValueCell.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import {StyleSheet, Text, View} from 'react-native'; +import {withSequence, withTiming, type SharedValue} from 'react-native-reanimated'; +import {useAssetPrice, formatPrice, formatValue, colors, type AssetSymbol} from 'super-app-showcase-sdk'; + +interface ValueCellProps { + symbol: AssetSymbol; + quantity: number; + flashProgress: SharedValue; + flashIsUp: SharedValue; +} + +const ValueCell = React.memo(({symbol, quantity, flashProgress, flashIsUp}: ValueCellProps) => { + const price = useAssetPrice(symbol); + const value = price * quantity; + const prevRef = React.useRef(0); + + React.useEffect(() => { + if (prevRef.current !== 0 && value !== prevRef.current) { + flashIsUp.value = value > prevRef.current; + flashProgress.value = withSequence( + withTiming(1, {duration: 150}), + withTiming(0, {duration: 600}), + ); + } + prevRef.current = value; + }, [value, flashProgress, flashIsUp]); + + return ( + + {formatValue(value)} + {formatPrice(price)} + + ); +}); + +const styles = StyleSheet.create({ + valueContainer: { + alignItems: 'flex-end', + gap: 3, + }, + value: { + color: colors.onSurface, + fontSize: 16, + fontWeight: '600', + fontVariant: ['tabular-nums'], + }, + price: { + color: colors.secondary, + fontSize: 12, + fontVariant: ['tabular-nums'], + }, +}); + +export default ValueCell; \ No newline at end of file diff --git a/packages/wallet/src/constants.ts b/packages/wallet/src/constants.ts new file mode 100644 index 00000000..920a73cd --- /dev/null +++ b/packages/wallet/src/constants.ts @@ -0,0 +1,11 @@ +import type {AssetSymbol} from 'super-app-showcase-sdk'; + +export interface Holding { + symbol: AssetSymbol; + quantity: number; +} + +export const HOLDINGS: Holding[] = [ + {symbol: 'BTC', quantity: 1}, + {symbol: 'ETH', quantity: 0.5}, +]; \ No newline at end of file diff --git a/packages/wallet/src/navigation/MainNavigator.tsx b/packages/wallet/src/navigation/MainNavigator.tsx new file mode 100644 index 00000000..c95cd883 --- /dev/null +++ b/packages/wallet/src/navigation/MainNavigator.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import {createNativeStackNavigator} from '@react-navigation/native-stack'; +import WalletScreen from '../screens/WalletScreen'; +import {colors} from 'super-app-showcase-sdk'; + +export type WalletStackParamList = { + Wallet: undefined; +}; + +const Stack = createNativeStackNavigator(); + +const MainNavigator = () => { + return ( + + + + ); +}; + +export default MainNavigator; \ No newline at end of file diff --git a/packages/wallet/src/screens/WalletScreen.tsx b/packages/wallet/src/screens/WalletScreen.tsx new file mode 100644 index 00000000..45148214 --- /dev/null +++ b/packages/wallet/src/screens/WalletScreen.tsx @@ -0,0 +1,89 @@ +import React from 'react'; +import {StyleSheet, Text, View} from 'react-native'; +import {LegendList} from '@legendapp/list'; +import {usePrices, ASSET_MAP, formatValue, colors, ConnectionBanner} from 'super-app-showcase-sdk'; +import {HOLDINGS, type Holding} from '../constants'; +import HoldingRow from '../components/HoldingRow'; + +const TotalBalance = () => { + const prices = usePrices(); + const total = HOLDINGS.reduce( + (sum, h) => sum + h.quantity * (prices[h.symbol] ?? 0), + 0, + ); + + return ( + + Total Portfolio Value + {formatValue(total)} + Updates in real-time + + ); +}; + +const renderHolding = ({item}: {item: Holding}) => ( + +); + +const WalletScreen = () => { + return ( + + + item.symbol} + renderItem={renderHolding} + estimatedItemSize={84} + ListHeaderComponent={ + + + My Holdings + + } + contentContainerStyle={styles.listContent} + /> + + ); +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + backgroundColor: colors.background, + }, + listContent: { + padding: 16, + }, + header: { + gap: 24, + marginBottom: 8, + }, + balanceCard: { + backgroundColor: colors.surface, + borderRadius: 16, + padding: 24, + alignItems: 'center', + gap: 6, + }, + balanceLabel: { + color: colors.secondary, + fontSize: 14, + }, + balanceAmount: { + color: colors.onBackground, + fontSize: 36, + fontWeight: '700', + fontVariant: ['tabular-nums'], + }, + balanceSubtext: { + color: colors.secondary, + fontSize: 12, + }, + sectionTitle: { + color: colors.onBackground, + fontSize: 18, + fontWeight: '600', + }, +}); + +export default WalletScreen; \ No newline at end of file diff --git a/packages/wallet/tsconfig.json b/packages/wallet/tsconfig.json new file mode 100644 index 00000000..f0fba51d --- /dev/null +++ b/packages/wallet/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@react-native/typescript-config", + "compilerOptions": { + "module": "es2020", + "types": ["react-native", "jest"], + "paths": { + "react-native-reanimated": ["../host/node_modules/react-native-reanimated"] + } + }, + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "babel.config.js", "jest.config.js"] +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7c557f5..29f739a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,6 +18,9 @@ importers: .: dependencies: + babel-plugin-react-compiler: + specifier: ^1.0.0 + version: 1.0.0 mprocs: specifier: ^0.7.1 version: 0.7.1 @@ -134,14 +137,23 @@ importers: specifier: ^5.8.3 version: 5.9.3 - packages/booking: + packages/host: dependencies: '@bottom-tabs/react-navigation': specifier: 1.1.0 version: 1.1.0(@react-navigation/native@7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-bottom-tabs@1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@gorhom/bottom-sheet': + specifier: ^5.2.10 + version: 5.2.10(@types/react-native@0.70.15)(@types/react@19.2.14)(react-native-gesture-handler@2.31.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@legendapp/list': + specifier: ^2.0.19 + version: 2.0.19(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@module-federation/enhanced': specifier: 2.3.1 version: 2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react@19.2.3)(typescript@5.9.3) + '@module-federation/error-codes': + specifier: 2.3.1 + version: 2.3.1 '@react-native-async-storage/async-storage': specifier: 3.0.2 version: 3.0.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) @@ -151,24 +163,33 @@ importers: '@react-navigation/native-stack': specifier: 7.14.10 version: 7.14.10(@react-navigation/native@7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-screens@4.24.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@shopify/react-native-skia': + specifier: ^2.6.2 + version: 2.6.2(react-native-reanimated@4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react: specifier: 19.2.3 version: 19.2.3 react-native: specifier: 0.84.1 version: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + react-native-bootsplash: + specifier: 7.2.0 + version: 7.2.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-bottom-tabs: specifier: 1.1.0 version: 1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-calendars: - specifier: 1.1291.1 - version: 1.1291.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-edge-to-edge: specifier: 1.8.1 version: 1.8.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-gesture-handler: + specifier: ^2.31.1 + version: 2.31.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-paper: specifier: 5.15.0 version: 5.15.0(patch_hash=jbcjvd6hhp2gtyomtoldpygoay)(react-native-safe-area-context@5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-reanimated: + specifier: ^4.3.0 + version: 4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: specifier: 5.7.0 version: 5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) @@ -178,6 +199,12 @@ importers: react-native-vector-icons: specifier: 10.3.0 version: 10.3.0 + react-native-worklets: + specifier: ^0.8.1 + version: 0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + victory-native: + specifier: ^41.20.2 + version: 41.20.2(5ofnavbsw2wiu7jdpiydqfpi2a) devDependencies: '@babel/core': specifier: ^7.25.2 @@ -194,6 +221,12 @@ importers: '@react-native-community/cli': specifier: 20.1.0 version: 20.1.0(typescript@5.9.3) + '@react-native-community/cli-platform-android': + specifier: 20.1.0 + version: 20.1.0 + '@react-native-community/cli-platform-ios': + specifier: 20.1.0 + version: 20.1.0 '@react-native/babel-preset': specifier: 0.84.1 version: 0.84.1(@babel/core@7.26.0) @@ -230,6 +263,9 @@ importers: '@typescript-eslint/parser': specifier: ^8.12.2 version: 8.12.2(eslint@8.57.1)(typescript@5.9.3) + babel-plugin-transform-inline-environment-variables: + specifier: ^0.4.4 + version: 0.4.4 eslint: specifier: ^8.57.0 version: 8.57.1 @@ -249,141 +285,32 @@ importers: specifier: ^5.8.3 version: 5.9.3 - packages/dashboard: - dependencies: - '@bottom-tabs/react-navigation': - specifier: 1.1.0 - version: 1.1.0(@react-navigation/native@7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-bottom-tabs@1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - '@module-federation/enhanced': - specifier: 2.3.1 - version: 2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react@19.2.3)(typescript@5.9.3) - '@react-native-async-storage/async-storage': - specifier: 3.0.2 - version: 3.0.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - '@react-navigation/native': - specifier: 7.2.2 - version: 7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - '@react-navigation/native-stack': - specifier: 7.14.10 - version: 7.14.10(@react-navigation/native@7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-safe-area-context@5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-screens@4.24.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react: - specifier: 19.2.3 - version: 19.2.3 - react-native: - specifier: 0.84.1 - version: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) - react-native-bottom-tabs: - specifier: 1.1.0 - version: 1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-calendars: - specifier: 1.1291.1 - version: 1.1291.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-edge-to-edge: - specifier: 1.8.1 - version: 1.8.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-paper: - specifier: 5.15.0 - version: 5.15.0(patch_hash=jbcjvd6hhp2gtyomtoldpygoay)(react-native-safe-area-context@5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-safe-area-context: - specifier: 5.7.0 - version: 5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-screens: - specifier: 4.24.0 - version: 4.24.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-vector-icons: - specifier: 10.3.0 - version: 10.3.0 + packages/sdk: devDependencies: - '@babel/core': - specifier: ^7.25.2 - version: 7.26.0 - '@babel/preset-env': - specifier: ^7.25.3 - version: 7.26.0(@babel/core@7.26.0) - '@babel/runtime': - specifier: ^7.25.0 - version: 7.26.0 - '@callstack/repack': - specifier: 5.2.5 - version: 5.2.5(@babel/core@7.26.0)(@module-federation/enhanced@2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react@19.2.3)(typescript@5.9.3))(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3)) - '@react-native-community/cli': - specifier: 20.1.0 - version: 20.1.0(typescript@5.9.3) - '@react-native-community/cli-platform-android': - specifier: 20.1.0 - version: 20.1.0 - '@react-native-community/cli-platform-ios': - specifier: 20.1.0 - version: 20.1.0 - '@react-native/babel-preset': - specifier: 0.84.1 - version: 0.84.1(@babel/core@7.26.0) - '@react-native/eslint-config': - specifier: 0.84.1 - version: 0.84.1(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(prettier@2.8.8)(typescript@5.9.3) - '@react-native/typescript-config': - specifier: 0.84.1 - version: 0.84.1 - '@rnx-kit/align-deps': - specifier: ^3.4.3 - version: 3.4.3(metro@0.83.5) - '@rspack/core': - specifier: 1.7.11 - version: 1.7.11(@swc/helpers@0.5.20) '@swc/helpers': specifier: ^0.5.20 version: 0.5.20 - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 '@types/react': specifier: ^19.2.0 version: 19.2.14 - '@types/react-native-vector-icons': - specifier: ^6.4.18 - version: 6.4.18 - '@types/react-test-renderer': - specifier: ^19.1.0 - version: 19.1.0 - '@typescript-eslint/eslint-plugin': - specifier: ^8.12.2 - version: 8.12.2(@typescript-eslint/parser@8.12.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) - '@typescript-eslint/parser': - specifier: ^8.12.2 - version: 8.12.2(eslint@8.57.1)(typescript@5.9.3) - eslint: - specifier: ^8.57.0 - version: 8.57.1 - jest: - specifier: ^29.6.3 - version: 29.7.0(@types/node@20.8.4) - prettier: - specifier: ^2.8.8 - version: 2.8.8 - react-test-renderer: - specifier: ^19.2.3 - version: 19.2.4(react@19.2.3) - super-app-showcase-sdk: - specifier: 0.0.2 - version: link:../sdk + react: + specifier: 19.2.3 + version: 19.2.3 + react-native: + specifier: '*' + version: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) typescript: specifier: ^5.8.3 version: 5.9.3 - packages/host: + packages/trading: dependencies: - '@bottom-tabs/react-navigation': - specifier: 1.1.0 - version: 1.1.0(@react-navigation/native@7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-bottom-tabs@1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@legendapp/list': + specifier: 2.0.19 + version: 2.0.19(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@module-federation/enhanced': specifier: 2.3.1 version: 2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react@19.2.3)(typescript@5.9.3) - '@module-federation/error-codes': - specifier: 2.3.1 - version: 2.3.1 - '@react-native-async-storage/async-storage': - specifier: 3.0.2 - version: 3.0.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@react-navigation/native': specifier: 7.2.2 version: 7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) @@ -396,100 +323,46 @@ importers: react-native: specifier: 0.84.1 version: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) - react-native-bootsplash: - specifier: 7.2.0 - version: 7.2.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-bottom-tabs: - specifier: 1.1.0 - version: 1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-edge-to-edge: - specifier: 1.8.1 - version: 1.8.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-paper: - specifier: 5.15.0 - version: 5.15.0(patch_hash=jbcjvd6hhp2gtyomtoldpygoay)(react-native-safe-area-context@5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: specifier: 5.7.0 version: 5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-screens: specifier: 4.24.0 version: 4.24.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-vector-icons: - specifier: 10.3.0 - version: 10.3.0 devDependencies: '@babel/core': specifier: ^7.25.2 version: 7.26.0 - '@babel/preset-env': - specifier: ^7.25.3 - version: 7.26.0(@babel/core@7.26.0) - '@babel/runtime': - specifier: ^7.25.0 - version: 7.26.0 '@callstack/repack': specifier: 5.2.5 version: 5.2.5(@babel/core@7.26.0)(@module-federation/enhanced@2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react@19.2.3)(typescript@5.9.3))(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3)) - '@react-native-community/cli': - specifier: 20.1.0 - version: 20.1.0(typescript@5.9.3) - '@react-native-community/cli-platform-android': - specifier: 20.1.0 - version: 20.1.0 - '@react-native-community/cli-platform-ios': - specifier: 20.1.0 - version: 20.1.0 '@react-native/babel-preset': specifier: 0.84.1 version: 0.84.1(@babel/core@7.26.0) '@react-native/eslint-config': specifier: 0.84.1 - version: 0.84.1(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(prettier@2.8.8)(typescript@5.9.3) + version: 0.84.1(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(prettier@3.8.1)(typescript@5.9.3) '@react-native/typescript-config': specifier: 0.84.1 version: 0.84.1 - '@rnx-kit/align-deps': - specifier: ^3.4.3 - version: 3.4.3(metro@0.83.5) '@rspack/core': specifier: 1.7.11 version: 1.7.11(@swc/helpers@0.5.20) '@swc/helpers': specifier: ^0.5.20 version: 0.5.20 - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 '@types/react': specifier: ^19.2.0 version: 19.2.14 - '@types/react-native-vector-icons': - specifier: ^6.4.18 - version: 6.4.18 - '@types/react-test-renderer': - specifier: ^19.1.0 - version: 19.1.0 '@typescript-eslint/eslint-plugin': specifier: ^8.12.2 - version: 8.12.2(@typescript-eslint/parser@8.12.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.12.2 - version: 8.12.2(eslint@8.57.1)(typescript@5.9.3) - babel-plugin-transform-inline-environment-variables: - specifier: ^0.4.4 - version: 0.4.4 + version: 8.58.0(eslint@8.57.1)(typescript@5.9.3) eslint: specifier: ^8.57.0 version: 8.57.1 - jest: - specifier: ^29.6.3 - version: 29.7.0(@types/node@20.8.4) - prettier: - specifier: ^2.8.8 - version: 2.8.8 - react-test-renderer: - specifier: ^19.2.3 - version: 19.2.4(react@19.2.3) super-app-showcase-sdk: specifier: 0.0.2 version: link:../sdk @@ -497,19 +370,14 @@ importers: specifier: ^5.8.3 version: 5.9.3 - packages/sdk: {} - - packages/shopping: + packages/wallet: dependencies: - '@bottom-tabs/react-navigation': - specifier: 1.1.0 - version: 1.1.0(@react-navigation/native@7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-bottom-tabs@1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@legendapp/list': + specifier: 2.0.19 + version: 2.0.19(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@module-federation/enhanced': specifier: 2.3.1 version: 2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react@19.2.3)(typescript@5.9.3) - '@react-native-async-storage/async-storage': - specifier: 3.0.2 - version: 3.0.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) '@react-navigation/native': specifier: 7.2.2 version: 7.2.2(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) @@ -522,88 +390,46 @@ importers: react-native: specifier: 0.84.1 version: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) - react-native-bottom-tabs: - specifier: 1.1.0 - version: 1.1.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-edge-to-edge: - specifier: 1.8.1 - version: 1.8.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-paper: - specifier: 5.15.0 - version: 5.15.0(patch_hash=jbcjvd6hhp2gtyomtoldpygoay)(react-native-safe-area-context@5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-safe-area-context: specifier: 5.7.0 version: 5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) react-native-screens: specifier: 4.24.0 version: 4.24.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - react-native-vector-icons: - specifier: 10.3.0 - version: 10.3.0 devDependencies: '@babel/core': specifier: ^7.25.2 version: 7.26.0 - '@babel/preset-env': - specifier: ^7.25.3 - version: 7.26.0(@babel/core@7.26.0) - '@babel/runtime': - specifier: ^7.25.0 - version: 7.26.0 '@callstack/repack': specifier: 5.2.5 version: 5.2.5(@babel/core@7.26.0)(@module-federation/enhanced@2.3.1(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react@19.2.3)(typescript@5.9.3))(@rspack/core@1.7.11(@swc/helpers@0.5.20))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3)) - '@react-native-community/cli': - specifier: 20.1.0 - version: 20.1.0(typescript@5.9.3) '@react-native/babel-preset': specifier: 0.84.1 version: 0.84.1(@babel/core@7.26.0) '@react-native/eslint-config': specifier: 0.84.1 - version: 0.84.1(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(prettier@2.8.8)(typescript@5.9.3) + version: 0.84.1(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(prettier@3.8.1)(typescript@5.9.3) '@react-native/typescript-config': specifier: 0.84.1 version: 0.84.1 - '@rnx-kit/align-deps': - specifier: ^3.4.3 - version: 3.4.3(metro@0.83.5) '@rspack/core': specifier: 1.7.11 version: 1.7.11(@swc/helpers@0.5.20) '@swc/helpers': specifier: ^0.5.20 version: 0.5.20 - '@types/jest': - specifier: ^29.5.14 - version: 29.5.14 '@types/react': specifier: ^19.2.0 version: 19.2.14 - '@types/react-native-vector-icons': - specifier: ^6.4.18 - version: 6.4.18 - '@types/react-test-renderer': - specifier: ^19.1.0 - version: 19.1.0 '@typescript-eslint/eslint-plugin': specifier: ^8.12.2 - version: 8.12.2(@typescript-eslint/parser@8.12.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + version: 8.58.0(@typescript-eslint/parser@8.58.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.12.2 - version: 8.12.2(eslint@8.57.1)(typescript@5.9.3) + version: 8.58.0(eslint@8.57.1)(typescript@5.9.3) eslint: specifier: ^8.57.0 version: 8.57.1 - jest: - specifier: ^29.6.3 - version: 29.7.0(@types/node@20.8.4) - prettier: - specifier: ^2.8.8 - version: 2.8.8 - react-test-renderer: - specifier: ^19.2.3 - version: 19.2.4(react@19.2.3) super-app-showcase-sdk: specifier: 0.0.2 version: link:../sdk @@ -640,6 +466,10 @@ packages: resolution: {integrity: sha512-qETICbZSLe7uXv9VE8T/RWOdIE5qqyTucOt4zLYMafj2MRO271VGgLd4RACJMeBO37UPWhXiKMBk7YlJ0fOzQA==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.0': + resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.26.0': resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} @@ -667,6 +497,10 @@ packages: resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': + resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + engines: {node: '>=6.9.0'} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} engines: {node: '>=6.9.0'} @@ -675,6 +509,10 @@ packages: resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.28.6': + resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.25.9': resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} @@ -687,12 +525,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.28.6': + resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.25.9': resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.28.5': + resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-define-polyfill-provider@0.6.2': resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: @@ -706,20 +556,38 @@ packages: resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.28.5': + resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.28.6': + resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.26.0': resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.6': + resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.25.9': resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.25.9': resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} @@ -728,6 +596,10 @@ packages: resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.28.6': + resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.25.9': resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} @@ -746,6 +618,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.28.6': + resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.25.9': resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} engines: {node: '>=6.9.0'} @@ -754,6 +632,10 @@ packages: resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} @@ -774,6 +656,10 @@ packages: resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.25.9': resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} @@ -903,6 +789,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-jsx@7.28.6': + resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -945,6 +837,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-typescript@7.28.6': + resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} @@ -957,6 +855,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-generator-functions@7.25.9': resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} engines: {node: '>=6.9.0'} @@ -987,6 +891,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.28.6': + resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-static-block@7.26.0': resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} @@ -999,6 +909,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.28.6': + resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.25.9': resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} engines: {node: '>=6.9.0'} @@ -1107,6 +1023,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.28.6': + resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.25.9': resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} engines: {node: '>=6.9.0'} @@ -1137,6 +1059,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': + resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-numeric-separator@7.25.9': resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} engines: {node: '>=6.9.0'} @@ -1167,6 +1095,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.28.6': + resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.25.9': resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} engines: {node: '>=6.9.0'} @@ -1245,6 +1179,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.25.9': resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} engines: {node: '>=6.9.0'} @@ -1263,6 +1203,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typeof-symbol@7.25.9': resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} engines: {node: '>=6.9.0'} @@ -1275,6 +1221,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.28.6': + resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.25.9': resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} engines: {node: '>=6.9.0'} @@ -1293,6 +1245,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-sets-regex@7.25.9': resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} engines: {node: '>=6.9.0'} @@ -1310,6 +1268,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/preset-typescript@7.28.5': + resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/runtime@7.26.0': resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} @@ -1342,10 +1306,6 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.0': - resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} - engines: {node: '>=6.9.0'} - '@babel/types@7.29.0': resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} engines: {node: '>=6.9.0'} @@ -1390,6 +1350,10 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + '@egjs/hammerjs@2.0.17': + resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} + engines: {node: '>=0.8.0'} + '@emnapi/core@1.9.1': resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} @@ -1466,6 +1430,27 @@ packages: '@fastify/sensible@6.0.4': resolution: {integrity: sha512-1vxcCUlPMew6WroK8fq+LVOwbsLtX+lmuRuqpcp6eYqu6vmkLwbKTdBWAZwbeaSgCfW4tzUpTIHLLvTiQQ1BwQ==} + '@gorhom/bottom-sheet@5.2.10': + resolution: {integrity: sha512-MnFddmVOlaoash0d9g1ClqFqX+32h/sV3PNEFz9A8XCvUbZGQM9OG6HHAzTb+eQfUGA8DkaurI+wfpNFyzj5Yw==} + peerDependencies: + '@types/react': '*' + '@types/react-native': '*' + react: '*' + react-native: '*' + react-native-gesture-handler: '>=2.16.1' + react-native-reanimated: '>=3.16.0 || >=4.0.0-' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-native': + optional: true + + '@gorhom/portal@1.0.14': + resolution: {integrity: sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A==} + peerDependencies: + react: '*' + react-native: '*' + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -1760,6 +1745,12 @@ packages: peerDependencies: tslib: '2' + '@legendapp/list@2.0.19': + resolution: {integrity: sha512-zDWg8yg0smKxxk+M7gwAbZAnf5uczohPA+IjqLSkImz7+e9ytxeT0Mq35RBO9RTKODOXfV/aIgm1uqUHLBEdmg==} + peerDependencies: + react: '*' + react-native: '*' + '@lukeed/ms@2.0.2': resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} engines: {node: '>=8'} @@ -2164,6 +2155,19 @@ packages: react-refresh: optional: true + '@shopify/react-native-skia@2.6.2': + resolution: {integrity: sha512-NzZ3+MRedZAUhguWw9DTCpWFd09Bq+tdGWhimGfJLGckuyoWGyimTiNTmaO2DeeivHTnGdv+eXbw7j/AV3LkRQ==} + hasBin: true + peerDependencies: + react: '>=19.0' + react-native: '>=0.78' + react-native-reanimated: '>=3.19.1' + peerDependenciesMeta: + react-native: + optional: true + react-native-reanimated: + optional: true + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -2206,6 +2210,9 @@ packages: '@types/graceful-fs@4.1.7': resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==} + '@types/hammerjs@2.0.46': + resolution: {integrity: sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==} + '@types/http-proxy@1.17.16': resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} @@ -2233,6 +2240,11 @@ packages: '@types/react-native@0.70.15': resolution: {integrity: sha512-wHrMQd65odOFbejFSDF7riocwLGEjkoJCF3GhH2a1vKqWbCExH361AZa/1GMG8gijAP86hkjF9gHZFHepEXaZA==} + '@types/react-reconciler@0.28.9': + resolution: {integrity: sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==} + peerDependencies: + '@types/react': '*' + '@types/react-test-renderer@19.1.0': resolution: {integrity: sha512-XD0WZrHqjNrxA/MaR9O22w/RNidWR9YZmBdRGI7wcnWGrv/3dA8wKCJ8m63Sn+tLJhcjmuhOi629N66W6kgWzQ==} @@ -2379,6 +2391,9 @@ packages: '@vscode/sudo-prompt@9.3.2': resolution: {integrity: sha512-gcXoCN00METUNFeQOFJ+C9xUI0DKB+0EGMVg7wbVYRHBw2Eq3fKisDZOkRdOz3kqXRKOENMfShPOmypw1/8nOw==} + '@webgpu/types@0.1.21': + resolution: {integrity: sha512-pUrWq3V5PiSGFLeLxoGqReTZmiiXwY3jRkIG5sLLKjyqNxrwm/04b4nw7LSmGWJcKk59XOM/YRTUwOzo4MMlow==} + '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} @@ -2581,6 +2596,9 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-react-compiler@1.0.0: + resolution: {integrity: sha512-Ixm8tFfoKKIPYdCCKYTsqv+Fd4IJ0DQqMyEimo+pxUOMUR9cVPlwTrFt9Avu+3cb6Zp3mAzl+t1MrG2fxxKsxw==} + babel-plugin-syntax-hermes-parser@0.32.0: resolution: {integrity: sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==} @@ -2705,6 +2723,9 @@ packages: caniuse-lite@1.0.30001702: resolution: {integrity: sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==} + canvaskit-wasm@0.41.0: + resolution: {integrity: sha512-cnbL02NFB3yOYMF/MtxViZHgD1vh55Pvy+zR8q4JuFvyCPejZP3eClkt2GuZ0S7jOmGMCJXaHBasbMChbR9JZg==} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -2875,10 +2896,6 @@ packages: core-js-compat@3.38.1: resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} - core-js@1.2.7: - resolution: {integrity: sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==} - deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. - cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} engines: {node: '>=14'} @@ -2915,6 +2932,72 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} @@ -3087,9 +3170,6 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3132,10 +3212,6 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} @@ -3371,9 +3447,6 @@ packages: fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fbjs@0.8.18: - resolution: {integrity: sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==} - fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -3459,15 +3532,6 @@ packages: debug: optional: true - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -3499,9 +3563,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -3520,9 +3581,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3583,9 +3641,6 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -3618,18 +3673,10 @@ packages: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -3718,10 +3765,6 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - idb@8.0.3: resolution: {integrity: sha512-LtwtVyVYO5BqRvcsKuB2iUMnHwPVByPCXFXOpuU96IZPPoPN6xjOGxZQ74pgSVVLQWtUOYgyeL4GE98BY5D3wg==} @@ -3741,9 +3784,6 @@ packages: engines: {node: '>=16.x'} hasBin: true - immutable@4.3.4: - resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} - import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -3771,6 +3811,10 @@ packages: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -3892,10 +3936,6 @@ packages: is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - is-stream@1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3951,9 +3991,6 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - isomorphic-fetch@2.2.1: - resolution: {integrity: sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==} - isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -3986,6 +4023,11 @@ packages: iterator.prototype@1.1.2: resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + its-fine@1.2.5: + resolution: {integrity: sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA==} + peerDependencies: + react: '>=18.0' + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4145,6 +4187,11 @@ packages: engines: {node: '>=6'} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -4434,9 +4481,6 @@ packages: engines: {node: '>=10'} hasBin: true - moment@2.29.4: - resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} - mprocs@0.7.1: resolution: {integrity: sha512-v22SIwcOphZm6XLdNfeHf4ZDYHqV1hghyfqNLwmZ604lEXlEkiuazYBWUz3xEB2GdABEAKfCZ8qiOVIoREM6CQ==} engines: {node: '>=0.10.0'} @@ -4471,9 +4515,6 @@ packages: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} engines: {node: '>=12.0.0'} - node-fetch@1.7.3: - resolution: {integrity: sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==} - node-html-parser@7.1.0: resolution: {integrity: sha512-iJo8b2uYGT40Y8BTyy5ufL6IVbN8rbm/1QK2xffXU/1a/v3AAa0d1YAoqBNYqaS4R/HajkWIpIfdE6KcyFh1AQ==} @@ -4517,9 +4558,6 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -4729,9 +4767,6 @@ packages: process-warning@5.0.0: resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} - promise@7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} - promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -4739,9 +4774,6 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - prop-types@15.5.8: - resolution: {integrity: sha512-QiDx7s0lWoAVxmEmOYnn3rIZGduup2PZgj3rta5O5y0NfPKu3ApWi+GdMfTto7PmO/5+p4yamSLMZkj0jaTL4A==} - prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -4786,6 +4818,9 @@ packages: react-devtools-core@6.1.5: resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==} + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + react-freeze@1.0.3: resolution: {integrity: sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g==} engines: {node: '>=10'} @@ -4801,9 +4836,6 @@ packages: react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-is@19.1.0: - resolution: {integrity: sha512-Oe56aUPnkHyyDxxkvqtd7KkdQP5uIUfHxd5XTb3wE9d/kRnZLmKbDB0GWk919tdQ+mxxPtG6EAs6RMT6i1qtHg==} - react-is@19.2.4: resolution: {integrity: sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA==} @@ -4820,15 +4852,18 @@ packages: react: '*' react-native: '*' - react-native-calendars@1.1291.1: - resolution: {integrity: sha512-L2MK2t3kbnDg2RoU12UAoQyNrUpDYdj2MyIfg13YrwVb8BuI/gc0q/VpEinY3iz5ETHiFsTLkCsAFwSj7xbZWw==} - react-native-edge-to-edge@1.8.1: resolution: {integrity: sha512-bhvsKqeX9PGkY9wBUk9vni/tJNJdKtLPbs/j3e/3CdV4JmUWfTXYYoL+4Hc8Wmej+5eJxkc8KOFa454ruFWBCA==} peerDependencies: react: '*' react-native: '*' + react-native-gesture-handler@2.31.1: + resolution: {integrity: sha512-wQDlECdEzHhYKTnQXFnSqWUtJ5TS3MGQi7EWvQczTnEVKfk6XVSBecnpWAoI/CqlYQ7IWMJEyutY6BxwEBoxeg==} + peerDependencies: + react: '*' + react-native: '*' + react-native-is-edge-to-edge@1.3.1: resolution: {integrity: sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA==} peerDependencies: @@ -4842,6 +4877,13 @@ packages: react-native: '*' react-native-safe-area-context: '*' + react-native-reanimated@4.3.0: + resolution: {integrity: sha512-HOTTPdKtddXTOsmQxDASXEwLS3lqEHrKERD3XOgzSqWJ7L3x81Pnx7mTcKx1FKdkgomMug/XSmm1C6Z7GIowxA==} + peerDependencies: + react: '*' + react-native: 0.81 - 0.85 + react-native-worklets: 0.8.x + react-native-safe-area-context@5.7.0: resolution: {integrity: sha512-/9/MtQz8ODphjsLdZ+GZAIcC/RtoqW9EeShf7Uvnfgm/pzYrJ75y3PV/J1wuAV1T5Dye5ygq4EAW20RoBq0ABQ==} peerDependencies: @@ -4854,14 +4896,31 @@ packages: react: '*' react-native: '*' - react-native-swipe-gestures@1.0.5: - resolution: {integrity: sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw==} + react-native-skia-android@147.1.0: + resolution: {integrity: sha512-pWA0M0G74AhjEop0HLCkjWJMup2HJxOmuUjfPt6kSDhYeWKVx8AEzWh0Fh19ah78zE/s4hD0Of0Tyem5shhiTg==} + + react-native-skia-apple-ios@147.1.0: + resolution: {integrity: sha512-cr4rWe4Bf0H0TTutUp5cgHt5/Felttl1bh4BAAAsgAeL2F10FAK9urX8spjUshzMwjqXD7rNOWuFzU6ZcNlGKw==} + + react-native-skia-apple-macos@147.1.0: + resolution: {integrity: sha512-Qbv0Y7LgawtRKuGk8gnGeh8nDWwNiu03LcX0mVaQzBBbxFDYvqejanA+AkO3p8gsQb+fsXRc9DAk+U8cBnzZvA==} + + react-native-skia-apple-tvos@147.1.0: + resolution: {integrity: sha512-b+4vILXHPu++t8H41PHLBVsTab2LPqwXNdzgdScyl4+Cu8Ta34aUQW3T469cB0ogAMPdu//KV00w4YVpDZoRUQ==} react-native-vector-icons@10.3.0: resolution: {integrity: sha512-IFQ0RE57819hOUdFvgK4FowM5aMXg7C7XKsuGLevqXkkIJatc3QopN0wYrb2IrzUgmdpfP+QVIbI3S6h7M0btw==} deprecated: react-native-vector-icons package has moved to a new model of per-icon-family packages. See the https://github.com/oblador/react-native-vector-icons/blob/master/MIGRATION.md on how to migrate hasBin: true + react-native-worklets@0.8.1: + resolution: {integrity: sha512-oWP/lStsAHU6oYCaWDXrda/wOHVdhusQJz1e6x9gPnXdFf4ndNDAOtWCmk2zGrAnlapfyA3rM6PCQq94mPg9cw==} + peerDependencies: + '@babel/core': '*' + '@react-native/metro-config': '*' + react: '*' + react-native: 0.81 - 0.85 + react-native@0.84.1: resolution: {integrity: sha512-0PjxOyXRu3tZ8EobabxSukvhKje2HJbsZikR0U+pvS0pYZza2hXKjcSBiBdFN4h9D0S3v6a8kkrDK6WTRKMwzg==} engines: {node: '>= 20.19.4'} @@ -4873,6 +4932,12 @@ packages: '@types/react': optional: true + react-reconciler@0.31.0: + resolution: {integrity: sha512-7Ob7Z+URmesIsIVRjnLoDGwBEG/tVitidU0nMsqX/eeJaLY89RISO/10ERe0MqmzuKUUB1rmY+h1itMbUHg9BQ==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^19.0.0 + react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} @@ -4894,12 +4959,6 @@ packages: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} - recyclerlistview@3.0.5: - resolution: {integrity: sha512-JVHz13u520faEsbVqFrJOMuJjc4mJlOXODe5QdqAJHdl5/IpyYeo83uiHrpzxyLb8QtJ0889JMlDik+Z1Ed0QQ==} - peerDependencies: - react: '>= 15.2.1' - react-native: '>= 0.30.0' - reflect.getprototypeof@1.0.4: resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} engines: {node: '>= 0.4'} @@ -4908,6 +4967,10 @@ packages: resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} + regenerate-unicode-properties@10.2.2: + resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} + engines: {node: '>=4'} + regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} @@ -4928,6 +4991,10 @@ packages: resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} engines: {node: '>=4'} + regexpu-core@6.4.0: + resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} + engines: {node: '>=4'} + regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} @@ -4935,6 +5002,10 @@ packages: resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} hasBin: true + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} + hasBin: true + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -5031,6 +5102,9 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -5085,16 +5159,9 @@ packages: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - sf-symbols-typescript@2.0.0: - resolution: {integrity: sha512-Fc8Uhhl2plqXMw7GQ8q83t/zj1xhNCJvteDNJUDULaH/4a/Eqw5aW1UYEznyEIgkokw7QYXuQ9hOw8jhBLXL0A==} - engines: {node: '>=10'} - sf-symbols-typescript@2.2.0: resolution: {integrity: sha512-TPbeg0b7ylrswdGCji8FRGFAKuqbpQlLbL8SOle3j1iHSs5Ob5mhvMAxWN2UItOjgALAB5Zp3fmMfj8mbWvXKw==} engines: {node: '>=10'} @@ -5133,9 +5200,6 @@ packages: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} engines: {node: '>= 0.4'} - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - side-channel@1.1.0: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} @@ -5296,10 +5360,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -5396,9 +5456,6 @@ packages: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} - ts-object-utils@0.0.5: - resolution: {integrity: sha512-iV0GvHqOmilbIKJsfyfJY9/dNHCs969z3so90dQWsO1eMMozvTpnB1MEaUbb3FYtZTGjv5sIy/xmslEz0Rg2TA==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -5450,9 +5507,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ua-parser-js@0.7.36: - resolution: {integrity: sha512-CPPLoCts2p7D8VbybttE3P2ylv0OBZEAy7a12DsulIEcAiMtWJy+PBgMXgWDI80D5UwqE8oQPHYnk13tm38M2Q==} - unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -5471,6 +5525,10 @@ packages: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} + unicode-match-property-value-ecmascript@2.2.1: + resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} + engines: {node: '>=4'} + unicode-property-aliases-ecmascript@2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} @@ -5500,11 +5558,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - use-latest-callback@0.2.1: - resolution: {integrity: sha512-QWlq8Is8BGWBf883QOEQP5HWYX/kMI+JTbJ5rdtvJLmXTIh9XoHIO3PQcmQl8BU44VKxow1kbQUHa6mQSMALDQ==} - peerDependencies: - react: '>=16.8' - use-latest-callback@0.2.6: resolution: {integrity: sha512-FvRG9i1HSo0wagmX63Vrm8SnlUU3LMM3WyZkQ76RnslpBrX694AdG4A0zQBx2B3ZifFA0yv/BaEHGBnEax5rZg==} peerDependencies: @@ -5534,6 +5587,15 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + victory-native@41.20.2: + resolution: {integrity: sha512-gc6DPnfoAHYnaWndXfrITlBvKdLKtoq3J4muBn/Sawu528+MfByAI8LlJBboDGHE1rLBWsgiS58h67D3Ulmtqg==} + peerDependencies: + '@shopify/react-native-skia': '>=1.2.3' + react: '*' + react-native: '*' + react-native-gesture-handler: '>=2.0.0' + react-native-reanimated: '>=3.0.0' + vlq@0.2.3: resolution: {integrity: sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==} @@ -5654,9 +5716,6 @@ packages: resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==} engines: {node: '>=10.0.0'} - xdate@0.8.2: - resolution: {integrity: sha512-sNBlLfOC8S3V0vLDEUianQOXcTsc9j4lfeKU/klHe0RjHAYn0CXsSttumTot8dzalboV8gZbH38B+WcCIBjhFQ==} - xml-formatter@3.7.0: resolution: {integrity: sha512-+8qTc3zv2UcJ1v9IsSIce37Dl4MQG14Cp7tWrwmy202UaI1wqRukw5QMX1JHsV+DX64yw77EgGsj2s5wGvuMbQ==} engines: {node: '>= 16'} @@ -5763,7 +5822,7 @@ snapshots: '@babel/code-frame@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 @@ -5775,6 +5834,8 @@ snapshots: '@babel/compat-data@7.26.0': {} + '@babel/compat-data@7.29.0': {} + '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.2.1 @@ -5814,7 +5875,7 @@ snapshots: '@babel/generator@7.27.0': dependencies: '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 @@ -5829,12 +5890,16 @@ snapshots: '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.29.0 '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -5846,6 +5911,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.28.6': + dependencies: + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -5872,6 +5945,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.29.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -5879,6 +5965,13 @@ snapshots: regexpu-core: 6.1.1 semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.3 + regexpu-core: 6.4.0 + semver: 6.3.1 + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -5895,14 +5988,28 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.28.5': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.28.6': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -5915,14 +6022,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 + + '@babel/helper-optimise-call-expression@7.27.1': + dependencies: + '@babel/types': 7.29.0 '@babel/helper-plugin-utils@7.25.9': {} '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.28.6': {} + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -5950,17 +6072,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-replace-supers@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.28.5 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + dependencies: + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -5974,11 +6112,13 @@ snapshots: '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} + '@babel/helper-wrap-function@7.25.9': dependencies: '@babel/template': 7.25.9 '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -5989,7 +6129,7 @@ snapshots: '@babel/highlight@7.22.20': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.28.5 chalk: 2.4.2 js-tokens: 4.0.0 @@ -5999,7 +6139,7 @@ snapshots: '@babel/parser@7.27.0': dependencies: - '@babel/types': 7.27.0 + '@babel/types': 7.29.0 '@babel/parser@7.29.2': dependencies: @@ -6052,17 +6192,17 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)': dependencies: @@ -6092,22 +6232,27 @@ snapshots: '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': dependencies: @@ -6117,17 +6262,17 @@ snapshots: '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': dependencies: @@ -6137,13 +6282,18 @@ snapshots: '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6155,6 +6305,11 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6191,6 +6346,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6211,6 +6374,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-classes@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-globals': 7.28.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-replace-supers': 7.28.6(@babel/core@7.26.0) + '@babel/traverse': 7.29.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6325,6 +6500,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.28.6 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6359,6 +6542,11 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6392,6 +6580,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6441,7 +6637,7 @@ snapshots: '@babel/helper-module-imports': 7.25.9 '@babel/helper-plugin-utils': 7.26.5 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.27.0 + '@babel/types': 7.29.0 transitivePeerDependencies: - supports-color @@ -6479,6 +6675,11 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6497,6 +6698,11 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6513,6 +6719,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6530,6 +6747,12 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.28.6 + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': dependencies: '@babel/core': 7.26.0 @@ -6618,6 +6841,17 @@ snapshots: '@babel/types': 7.26.0 esutils: 2.0.3 + '@babel/preset-typescript@7.28.5(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.28.6 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.0 @@ -6632,7 +6866,7 @@ snapshots: dependencies: '@babel/code-frame': 7.26.2 '@babel/parser': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.29.0 '@babel/template@7.28.6': dependencies: @@ -6658,7 +6892,7 @@ snapshots: '@babel/generator': 7.27.0 '@babel/parser': 7.27.0 '@babel/template': 7.27.0 - '@babel/types': 7.27.0 + '@babel/types': 7.29.0 debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: @@ -6681,11 +6915,6 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.27.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/types@7.29.0': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -6709,7 +6938,7 @@ snapshots: '@callstack/repack-dev-server@5.2.5': dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.29.0 '@fastify/middie': 9.3.1 '@fastify/sensible': 6.0.4 fastify: 5.8.4 @@ -6748,9 +6977,9 @@ snapshots: react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) react-refresh: 0.14.0 schema-utils: 4.3.2 - semver: 7.7.2 + semver: 7.7.4 shallowequal: 1.1.0 - tapable: 2.2.1 + tapable: 2.3.0 terser-webpack-plugin: 5.3.14 throttleit: 2.1.0 webpack-merge: 6.0.1 @@ -6768,6 +6997,10 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} + '@egjs/hammerjs@2.0.17': + dependencies: + '@types/hammerjs': 2.0.46 + '@emnapi/core@1.9.1': dependencies: '@emnapi/wasi-threads': 1.2.0 @@ -6826,7 +7059,7 @@ snapshots: getenv: 1.0.0 glob: 7.1.6 resolve-from: 5.0.0 - semver: 7.7.2 + semver: 7.7.4 slash: 3.0.0 slugify: 1.6.6 xcode: 3.0.1 @@ -6887,10 +7120,28 @@ snapshots: dequal: 2.0.3 fastify-plugin: 5.1.0 forwarded: 0.2.0 - http-errors: 2.0.0 + http-errors: 2.0.1 type-is: 2.0.1 vary: 1.1.2 + '@gorhom/bottom-sheet@5.2.10(@types/react-native@0.70.15)(@types/react@19.2.14)(react-native-gesture-handler@2.31.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native-reanimated@4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + dependencies: + '@gorhom/portal': 1.0.14(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + invariant: 2.2.4 + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + react-native-gesture-handler: 2.31.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + optionalDependencies: + '@types/react': 19.2.14 + '@types/react-native': 0.70.15 + + '@gorhom/portal@1.0.14(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + dependencies: + nanoid: 3.3.11 + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': @@ -7212,8 +7463,8 @@ snapshots: '@jridgewell/source-map@0.3.5': dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.4.15': {} @@ -7245,6 +7496,12 @@ snapshots: dependencies: tslib: 2.8.1 + '@legendapp/list@2.0.19(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + dependencies: + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) + '@lukeed/ms@2.0.2': {} '@module-federation/bridge-react-webpack-plugin@2.3.1': @@ -7515,7 +7772,7 @@ snapshots: node-stream-zip: 1.15.0 ora: 5.4.1 picocolors: 1.1.1 - semver: 7.7.2 + semver: 7.7.4 wcwidth: 1.0.1 yaml: 2.6.0 transitivePeerDependencies: @@ -7569,7 +7826,7 @@ snapshots: ora: 5.4.1 picocolors: 1.1.1 prompts: 2.4.2 - semver: 7.7.2 + semver: 7.7.4 '@react-native-community/cli-types@20.1.0': dependencies: @@ -7659,12 +7916,12 @@ snapshots: '@react-native/community-cli-plugin@0.84.1(patch_hash=gdpi5rwh3blcwxgyspzwxjdb6a)(@react-native-community/cli@20.1.0(typescript@5.9.3))': dependencies: '@react-native/dev-middleware': 0.84.1 - debug: 4.4.0 + debug: 4.4.3 invariant: 2.2.4 metro: 0.83.5 metro-config: 0.83.5 metro-core: 0.83.5 - semver: 7.7.2 + semver: 7.7.4 optionalDependencies: '@react-native-community/cli': 20.1.0(typescript@5.9.3) transitivePeerDependencies: @@ -7677,7 +7934,7 @@ snapshots: '@react-native/debugger-shell@0.84.1': dependencies: cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.3 fb-dotslash: 0.5.8 transitivePeerDependencies: - supports-color @@ -7690,7 +7947,7 @@ snapshots: chrome-launcher: 0.15.2 chromium-edge-launcher: 0.2.0 connect: 3.7.0 - debug: 4.4.0 + debug: 4.4.3 invariant: 2.2.4 nullthrows: 1.1.1 open: 7.4.2 @@ -7722,6 +7979,27 @@ snapshots: - supports-color - typescript + '@react-native/eslint-config@0.84.1(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(prettier@3.8.1)(typescript@5.9.3)': + dependencies: + '@babel/core': 7.26.0 + '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@8.57.1) + '@react-native/eslint-plugin': 0.84.1 + '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.58.0(eslint@8.57.1)(typescript@5.9.3) + eslint: 8.57.1 + eslint-config-prettier: 8.10.0(eslint@8.57.1) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) + eslint-plugin-ft-flow: 2.0.3(@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-jest: 29.15.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(typescript@5.9.3) + eslint-plugin-react: 7.33.2(eslint@8.57.1) + eslint-plugin-react-hooks: 7.0.1(eslint@8.57.1) + eslint-plugin-react-native: 5.0.0(eslint@8.57.1) + prettier: 3.8.1 + transitivePeerDependencies: + - jest + - supports-color + - typescript + '@react-native/eslint-plugin@0.84.1': {} '@react-native/gradle-plugin@0.84.1': {} @@ -7749,7 +8027,7 @@ snapshots: nanoid: 3.3.11 query-string: 7.1.3 react: 19.2.3 - react-is: 19.1.0 + react-is: 19.2.4 use-latest-callback: 0.2.6(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) @@ -7889,6 +8167,19 @@ snapshots: optionalDependencies: react-refresh: 0.14.0 + '@shopify/react-native-skia@2.6.2(react-native-reanimated@4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3)': + dependencies: + canvaskit-wasm: 0.41.0 + react: 19.2.3 + react-native-skia-android: 147.1.0 + react-native-skia-apple-ios: 147.1.0 + react-native-skia-apple-macos: 147.1.0 + react-native-skia-apple-tvos: 147.1.0 + react-reconciler: 0.31.0(react@19.2.3) + optionalDependencies: + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + react-native-reanimated: 4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + '@sideway/address@4.1.5': dependencies: '@hapi/hoek': 9.3.0 @@ -7920,29 +8211,31 @@ snapshots: '@types/babel__core@7.20.2': dependencies: - '@babel/parser': 7.26.1 - '@babel/types': 7.26.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@types/babel__generator': 7.6.5 '@types/babel__template': 7.4.2 '@types/babel__traverse': 7.20.2 '@types/babel__generator@7.6.5': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 '@types/babel__template@7.4.2': dependencies: - '@babel/parser': 7.26.1 - '@babel/types': 7.26.0 + '@babel/parser': 7.29.2 + '@babel/types': 7.29.0 '@types/babel__traverse@7.20.2': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 '@types/graceful-fs@4.1.7': dependencies: '@types/node': 20.8.4 + '@types/hammerjs@2.0.46': {} + '@types/http-proxy@1.17.16': dependencies: '@types/node': 20.8.4 @@ -7977,6 +8270,10 @@ snapshots: dependencies: '@types/react': 19.2.14 + '@types/react-reconciler@0.28.9(@types/react@19.2.14)': + dependencies: + '@types/react': 19.2.14 + '@types/react-test-renderer@19.1.0': dependencies: '@types/react': 19.2.14 @@ -8119,7 +8416,7 @@ snapshots: fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 + semver: 7.7.4 ts-api-utils: 1.3.0(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -8177,6 +8474,8 @@ snapshots: '@vscode/sudo-prompt@9.3.2': {} + '@webgpu/types@0.1.21': {} + '@xmldom/xmldom@0.7.13': {} '@xmldom/xmldom@0.8.10': {} @@ -8285,7 +8584,7 @@ snapshots: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 is-string: 1.0.7 array.prototype.flat@1.3.2: @@ -8308,7 +8607,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.22.2 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 arraybuffer.prototype.slice@1.0.2: dependencies: @@ -8316,7 +8615,7 @@ snapshots: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -8328,7 +8627,7 @@ snapshots: asynciterator.prototype@1.0.0: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 asynckit@0.4.0: {} @@ -8345,7 +8644,7 @@ snapshots: axios@1.13.5: dependencies: - follow-redirects: 1.15.11 + follow-redirects: 1.15.11(debug@4.4.3) form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -8382,8 +8681,8 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.0 + '@babel/template': 7.28.6 + '@babel/types': 7.29.0 '@types/babel__core': 7.20.2 '@types/babel__traverse': 7.20.2 @@ -8411,6 +8710,10 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-react-compiler@1.0.0: + dependencies: + '@babel/types': 7.29.0 + babel-plugin-syntax-hermes-parser@0.32.0: dependencies: hermes-parser: 0.32.0 @@ -8542,8 +8845,8 @@ snapshots: call-bind@1.0.2: dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 call-bound@1.0.4: dependencies: @@ -8558,6 +8861,10 @@ snapshots: caniuse-lite@1.0.30001702: {} + canvaskit-wasm@0.41.0: + dependencies: + '@webgpu/types': 0.1.21 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -8739,8 +9046,6 @@ snapshots: dependencies: browserslist: 4.24.2 - core-js@1.2.7: {} - cosmiconfig@9.0.0(typescript@5.9.3): dependencies: env-paths: 2.2.1 @@ -8793,6 +9098,70 @@ snapshots: csstype@3.2.3: {} + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-color@3.1.0: {} + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-ease@3.0.1: {} + + d3-format@3.1.2: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-path@3.1.0: {} + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-selection@3.0.0: {} + + d3-shape@3.2.0: + dependencies: + d3-path: 3.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dayjs@1.11.13: {} debug@2.6.9: @@ -8838,8 +9207,8 @@ snapshots: define-data-property@1.1.0: dependencies: - get-intrinsic: 1.2.1 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.0 define-lazy-prop@3.0.0: {} @@ -8914,10 +9283,6 @@ snapshots: encodeurl@2.0.0: {} - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - entities@4.5.0: {} env-paths@2.2.1: {} @@ -8943,17 +9308,17 @@ snapshots: arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + es-set-tostringtag: 2.1.0 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 get-symbol-description: 1.0.0 globalthis: 1.0.3 - gopd: 1.0.1 + gopd: 1.2.0 has: 1.0.4 has-property-descriptors: 1.0.0 has-proto: 1.0.1 - has-symbols: 1.0.3 + has-symbols: 1.1.0 internal-slot: 1.0.5 is-array-buffer: 3.0.2 is-callable: 1.2.7 @@ -8963,7 +9328,7 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.12 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.4 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.1 @@ -8989,13 +9354,13 @@ snapshots: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - es-set-tostringtag: 2.0.1 - function-bind: 1.1.1 - get-intrinsic: 1.2.1 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 globalthis: 1.0.3 has-property-descriptors: 1.0.0 has-proto: 1.0.1 - has-symbols: 1.0.3 + has-symbols: 1.1.0 internal-slot: 1.0.5 iterator.prototype: 1.1.2 safe-array-concat: 1.0.1 @@ -9004,12 +9369,6 @@ snapshots: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.1: - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 - has-tostringtag: 1.0.0 - es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 @@ -9056,7 +9415,7 @@ snapshots: eslint-plugin-jest@29.15.1(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(jest@29.7.0(@types/node@20.8.4))(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.12.2(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.58.0(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 optionalDependencies: '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) @@ -9068,7 +9427,7 @@ snapshots: eslint-plugin-react-hooks@7.0.1(eslint@8.57.1): dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.27.0 + '@babel/parser': 7.29.2 eslint: 8.57.1 hermes-parser: 0.25.1 zod: 4.3.6 @@ -9288,7 +9647,7 @@ snapshots: process-warning: 5.0.0 rfdc: 1.4.1 secure-json-parse: 4.1.0 - semver: 7.7.2 + semver: 7.7.4 toad-cache: 3.7.0 fastq@1.17.1: @@ -9301,16 +9660,6 @@ snapshots: dependencies: bser: 2.1.1 - fbjs@0.8.18: - dependencies: - core-js: 1.2.7 - isomorphic-fetch: 2.2.1 - loose-envify: 1.4.0 - object-assign: 4.1.1 - promise: 7.3.1 - setimmediate: 1.0.5 - ua-parser-js: 0.7.36 - fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 @@ -9393,11 +9742,9 @@ snapshots: pirates: 3.0.2 vlq: 0.2.3 - follow-redirects@1.15.11: {} - - follow-redirects@1.15.9(debug@4.4.0): + follow-redirects@1.15.11(debug@4.4.3): optionalDependencies: - debug: 4.4.0 + debug: 4.4.3 for-each@0.3.3: dependencies: @@ -9433,8 +9780,6 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.1: {} - function-bind@1.1.2: {} function.prototype.name@1.1.6: @@ -9450,13 +9795,6 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.1: - dependencies: - function-bind: 1.1.1 - has: 1.0.4 - has-proto: 1.0.1 - has-symbols: 1.0.3 - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -9482,7 +9820,7 @@ snapshots: get-symbol-description@1.0.0: dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 getenv@1.0.0: {} @@ -9536,10 +9874,6 @@ snapshots: dependencies: define-properties: 1.2.1 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.1 - gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -9559,21 +9893,15 @@ snapshots: has-property-descriptors@1.0.0: dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 has-proto@1.0.1: {} - has-symbols@1.0.3: {} - has-symbols@1.1.0: {} - has-tostringtag@1.0.0: - dependencies: - has-symbols: 1.0.3 - has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 has@1.0.4: {} @@ -9640,18 +9968,18 @@ snapshots: http-proxy-middleware@3.0.5: dependencies: '@types/http-proxy': 1.17.16 - debug: 4.4.0 - http-proxy: 1.18.1(debug@4.4.0) + debug: 4.4.3 + http-proxy: 1.18.1(debug@4.4.3) is-glob: 4.0.3 is-plain-object: 5.0.0 micromatch: 4.0.8 transitivePeerDependencies: - supports-color - http-proxy@1.18.1(debug@4.4.0): + http-proxy@1.18.1(debug@4.4.3): dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.9(debug@4.4.0) + follow-redirects: 1.15.11(debug@4.4.3) requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -9659,7 +9987,7 @@ snapshots: https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9671,10 +9999,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - idb@8.0.3: {} ieee754@1.2.1: {} @@ -9687,8 +10011,6 @@ snapshots: dependencies: queue: 6.0.2 - immutable@4.3.4: {} - import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -9712,9 +10034,11 @@ snapshots: internal-slot@1.0.5: dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 has: 1.0.4 - side-channel: 1.0.4 + side-channel: 1.1.0 + + internmap@2.0.3: {} invariant@2.2.4: dependencies: @@ -9725,7 +10049,7 @@ snapshots: is-array-buffer@3.0.2: dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 is-typed-array: 1.1.12 is-arrayish@0.2.1: {} @@ -9734,7 +10058,7 @@ snapshots: is-async-function@2.0.0: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-bigint@1.0.4: dependencies: @@ -9743,7 +10067,7 @@ snapshots: is-boolean-object@1.1.2: dependencies: call-bind: 1.0.2 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-callable@1.2.7: {} @@ -9753,7 +10077,7 @@ snapshots: is-date-object@1.0.5: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-docker@2.2.1: {} @@ -9773,7 +10097,7 @@ snapshots: is-generator-function@1.0.10: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-glob@4.0.3: dependencies: @@ -9791,7 +10115,7 @@ snapshots: is-number-object@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -9806,7 +10130,7 @@ snapshots: is-regex@1.1.4: dependencies: call-bind: 1.0.2 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-set@2.0.2: {} @@ -9814,17 +10138,15 @@ snapshots: dependencies: call-bind: 1.0.2 - is-stream@1.1.0: {} - is-stream@2.0.1: {} is-string@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-symbol@1.0.4: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 is-typed-array@1.1.12: dependencies: @@ -9841,7 +10163,7 @@ snapshots: is-weakset@2.0.2: dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 is-windows@1.0.2: {} @@ -9861,11 +10183,6 @@ snapshots: isobject@3.0.1: {} - isomorphic-fetch@2.2.1: - dependencies: - node-fetch: 1.7.3 - whatwg-fetch: 3.6.19 - isomorphic-ws@5.0.0(ws@8.18.0): dependencies: ws: 8.18.0 @@ -9875,7 +10192,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.1 + '@babel/parser': 7.29.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.1 @@ -9888,7 +10205,7 @@ snapshots: '@babel/parser': 7.26.1 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 7.6.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -9914,11 +10231,18 @@ snapshots: iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 reflect.getprototypeof: 1.0.4 set-function-name: 2.0.1 + its-fine@1.2.5(@types/react@19.2.14)(react@19.2.3): + dependencies: + '@types/react-reconciler': 0.28.9(@types/react@19.2.14) + react: 19.2.3 + transitivePeerDependencies: + - '@types/react' + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -10160,7 +10484,7 @@ snapshots: '@babel/generator': 7.26.0 '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) - '@babel/types': 7.26.0 + '@babel/types': 7.29.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -10175,7 +10499,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.3 + semver: 7.7.4 transitivePeerDependencies: - supports-color @@ -10258,6 +10582,8 @@ snapshots: jsesc@3.0.2: {} + jsesc@3.1.0: {} + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -10295,7 +10621,7 @@ snapshots: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.7.2 + semver: 7.7.4 jsx-ast-utils@3.3.5: dependencies: @@ -10409,7 +10735,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.3 + semver: 7.7.4 makeerror@1.0.12: dependencies: @@ -10481,7 +10807,7 @@ snapshots: metro-file-map@0.83.5: dependencies: - debug: 4.4.0 + debug: 4.4.3 fb-watchman: 2.0.2 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 @@ -10576,7 +10902,7 @@ snapshots: chalk: 4.1.2 ci-info: 2.0.0 connect: 3.7.0 - debug: 4.4.0 + debug: 4.4.3 error-stack-parser: 2.1.4 flow-enums-runtime: 0.0.6 graceful-fs: 4.2.11 @@ -10652,9 +10978,6 @@ snapshots: mkdirp@1.0.4: {} - moment@2.29.4: - optional: true - mprocs@0.7.1: {} ms@2.0.0: {} @@ -10673,11 +10996,6 @@ snapshots: nocache@3.0.4: {} - node-fetch@1.7.3: - dependencies: - encoding: 0.1.13 - is-stream: 1.1.0 - node-html-parser@7.1.0: dependencies: css-select: 5.1.0 @@ -10715,8 +11033,6 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.12.3: {} - object-inspect@1.13.4: {} object-keys@1.1.1: {} @@ -10725,7 +11041,7 @@ snapshots: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 - has-symbols: 1.0.3 + has-symbols: 1.1.0 object-keys: 1.1.1 object.entries@1.1.7: @@ -10937,10 +11253,6 @@ snapshots: process-warning@5.0.0: {} - promise@7.3.1: - dependencies: - asap: 2.0.6 - promise@8.3.0: dependencies: asap: 2.0.6 @@ -10950,10 +11262,6 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - prop-types@15.5.8: - dependencies: - fbjs: 0.8.18 - prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -11006,6 +11314,8 @@ snapshots: - bufferutil - utf-8-validate + react-fast-compare@3.2.2: {} + react-freeze@1.0.3(react@19.2.3): dependencies: react: 19.2.3 @@ -11016,8 +11326,6 @@ snapshots: react-is@18.3.1: {} - react-is@19.1.0: {} - react-is@19.2.4: {} react-native-bootsplash@7.2.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): @@ -11043,27 +11351,20 @@ snapshots: react: 19.2.3 react-freeze: 1.0.3(react@19.2.3) react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) - sf-symbols-typescript: 2.0.0 - use-latest-callback: 0.2.1(react@19.2.3) + sf-symbols-typescript: 2.2.0 + use-latest-callback: 0.2.6(react@19.2.3) - react-native-calendars@1.1291.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-edge-to-edge@1.8.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: - hoist-non-react-statics: 3.3.2 - immutable: 4.3.4 - lodash: 4.17.21 - memoize-one: 5.2.1 - prop-types: 15.8.1 - react-native-swipe-gestures: 1.0.5 - recyclerlistview: 3.0.5(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - xdate: 0.8.2 - optionalDependencies: - moment: 2.29.4 - transitivePeerDependencies: - - react - - react-native + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) - react-native-edge-to-edge@1.8.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + react-native-gesture-handler@2.31.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: + '@egjs/hammerjs': 2.0.17 + '@types/react-test-renderer': 19.1.0 + hoist-non-react-statics: 3.3.2 + invariant: 2.2.4 react: 19.2.3 react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) @@ -11081,6 +11382,14 @@ snapshots: react-native-safe-area-context: 5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) use-latest-callback: 0.2.6(react@19.2.3) + react-native-reanimated@4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + dependencies: + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + react-native-is-edge-to-edge: 1.3.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-worklets: 0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + semver: 7.7.4 + react-native-safe-area-context@5.7.0(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 @@ -11093,13 +11402,38 @@ snapshots: react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) warn-once: 0.1.1 - react-native-swipe-gestures@1.0.5: {} + react-native-skia-android@147.1.0: {} + + react-native-skia-apple-ios@147.1.0: {} + + react-native-skia-apple-macos@147.1.0: {} + + react-native-skia-apple-tvos@147.1.0: {} react-native-vector-icons@10.3.0: dependencies: prop-types: 15.8.1 yargs: 16.2.0 + react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.26.0) + '@babel/preset-typescript': 7.28.5(@babel/core@7.26.0) + convert-source-map: 2.0.0 + react: 19.2.3 + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + semver: 7.7.4 + transitivePeerDependencies: + - supports-color + react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -11132,7 +11466,7 @@ snapshots: react-refresh: 0.14.0 regenerator-runtime: 0.13.11 scheduler: 0.27.0 - semver: 7.7.2 + semver: 7.7.4 stacktrace-parser: 0.1.10 tinyglobby: 0.2.15 whatwg-fetch: 3.6.19 @@ -11148,6 +11482,11 @@ snapshots: - supports-color - utf-8-validate + react-reconciler@0.31.0(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.25.0 + react-refresh@0.14.0: {} react-test-renderer@19.2.4(react@19.2.3): @@ -11166,20 +11505,12 @@ snapshots: real-require@0.2.0: {} - recyclerlistview@3.0.5(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): - dependencies: - lodash.debounce: 4.0.8 - prop-types: 15.5.8 - react: 19.2.3 - react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) - ts-object-utils: 0.0.5 - reflect.getprototypeof@1.0.4: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 globalthis: 1.0.3 which-builtin-type: 1.1.3 @@ -11187,6 +11518,10 @@ snapshots: dependencies: regenerate: 1.4.2 + regenerate-unicode-properties@10.2.2: + dependencies: + regenerate: 1.4.2 + regenerate@1.4.2: {} regenerator-runtime@0.13.11: {} @@ -11212,12 +11547,25 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 + regexpu-core@6.4.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.2 + regjsgen: 0.8.0 + regjsparser: 0.13.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.1 + regjsgen@0.8.0: {} regjsparser@0.11.2: dependencies: jsesc: 3.0.2 + regjsparser@0.13.1: + dependencies: + jsesc: 3.1.0 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -11277,8 +11625,8 @@ snapshots: safe-array-concat@1.0.1: dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 isarray: 2.0.5 safe-buffer@5.1.2: {} @@ -11288,7 +11636,7 @@ snapshots: safe-regex-test@1.0.0: dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 is-regex: 1.1.4 safe-regex2@5.1.0: @@ -11301,6 +11649,8 @@ snapshots: sax@1.4.1: {} + scheduler@0.25.0: {} + scheduler@0.27.0: {} schema-utils@4.3.2: @@ -11363,12 +11713,8 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.0 - setimmediate@1.0.5: {} - setprototypeof@1.2.0: {} - sf-symbols-typescript@2.0.0: {} - sf-symbols-typescript@2.2.0: {} shallow-clone@3.0.1: @@ -11436,12 +11782,6 @@ snapshots: object-inspect: 1.13.4 side-channel-map: 1.0.1 - side-channel@1.0.4: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 - side-channel@1.1.0: dependencies: es-errors: 1.3.0 @@ -11540,12 +11880,12 @@ snapshots: call-bind: 1.0.2 define-properties: 1.2.1 es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 internal-slot: 1.0.5 regexp.prototype.flags: 1.5.1 set-function-name: 2.0.1 - side-channel: 1.0.4 + side-channel: 1.1.0 string.prototype.trim@1.2.8: dependencies: @@ -11599,13 +11939,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tapable@2.2.1: {} - tapable@2.3.0: {} terser-webpack-plugin@5.3.14: dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 @@ -11674,8 +12012,6 @@ snapshots: ts-dedent@2.2.0: {} - ts-object-utils@0.0.5: {} - tslib@2.8.1: {} type-check@0.4.0: @@ -11704,7 +12040,7 @@ snapshots: typed-array-buffer@1.0.0: dependencies: call-bind: 1.0.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 is-typed-array: 1.1.12 typed-array-byte-length@1.0.0: @@ -11730,13 +12066,11 @@ snapshots: typescript@5.9.3: {} - ua-parser-js@0.7.36: {} - unbox-primitive@1.0.2: dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 - has-symbols: 1.0.3 + has-symbols: 1.1.0 which-boxed-primitive: 1.0.2 undici-types@5.25.3: {} @@ -11750,6 +12084,8 @@ snapshots: unicode-match-property-value-ecmascript@2.1.0: {} + unicode-match-property-value-ecmascript@2.2.1: {} + unicode-property-aliases-ecmascript@2.1.0: {} universalify@0.1.2: {} @@ -11770,10 +12106,6 @@ snapshots: dependencies: punycode: 2.3.0 - use-latest-callback@0.2.1(react@19.2.3): - dependencies: - react: 19.2.3 - use-latest-callback@0.2.6(react@19.2.3): dependencies: react: 19.2.3 @@ -11796,6 +12128,21 @@ snapshots: vary@1.1.2: {} + victory-native@41.20.2(5ofnavbsw2wiu7jdpiydqfpi2a): + dependencies: + '@shopify/react-native-skia': 2.6.2(react-native-reanimated@4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + d3-scale: 4.0.2 + d3-shape: 3.2.0 + d3-zoom: 3.0.0 + its-fine: 1.2.5(@types/react@19.2.14)(react@19.2.3) + react: 19.2.3 + react-fast-compare: 3.2.2 + react-native: 0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3) + react-native-gesture-handler: 2.31.1(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + react-native-reanimated: 4.3.0(react-native-worklets@0.8.1(@babel/core@7.26.0)(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3))(react-native@0.84.1(@babel/core@7.26.0)(@react-native-community/cli@20.1.0(typescript@5.9.3))(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + transitivePeerDependencies: + - '@types/react' + vlq@0.2.3: {} vlq@1.0.1: {} @@ -11829,7 +12176,7 @@ snapshots: which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -11855,8 +12202,8 @@ snapshots: available-typed-arrays: 1.0.5 call-bind: 1.0.2 for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + gopd: 1.2.0 + has-tostringtag: 1.0.2 which@1.3.1: dependencies: @@ -11908,8 +12255,6 @@ snapshots: simple-plist: 1.3.1 uuid: 7.0.3 - xdate@0.8.2: {} - xml-formatter@3.7.0: dependencies: xml-parser-xo: 4.1.5