diff --git a/.npmrc b/.npmrc
index 78351aa..50267dc 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1,2 +1,5 @@
+node-linker=hoisted
public-hoist-pattern[]=*react*
public-hoist-pattern[]=*@types/react*
+public-hoist-pattern[]=*expo*
+public-hoist-pattern[]=*react-native*
diff --git a/README.md b/README.md
index cf161ec..2ed82df 100644
--- a/README.md
+++ b/README.md
@@ -40,10 +40,23 @@ The toolbar appears in the bottom-right corner. Click to activate, then click an
Agentation captures class names, selectors, and element positions so AI agents can `grep` for the exact code you're referring to. Instead of describing "the blue button in the sidebar," you give the agent `.sidebar > button.primary` and your feedback.
+## Packages
+
+| Package | Platform | Install |
+|---------|----------|---------|
+| `agentation` | Web (React) | `npm install agentation` |
+| `agentation-rn` | React Native | `npm install agentation-rn` |
+
## Requirements
+### Web
- React 18+
-- Desktop browser (mobile not supported)
+- Desktop browser
+
+### React Native
+- React Native >= 0.72.0
+- React >= 18.0.0
+- iOS & Android supported
## Docs
diff --git a/packages/agentation-rn/.gitignore b/packages/agentation-rn/.gitignore
new file mode 100644
index 0000000..b947077
--- /dev/null
+++ b/packages/agentation-rn/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+dist/
diff --git a/packages/agentation-rn/CLAUDE.md b/packages/agentation-rn/CLAUDE.md
new file mode 100644
index 0000000..75b889c
--- /dev/null
+++ b/packages/agentation-rn/CLAUDE.md
@@ -0,0 +1,79 @@
+# Agentation RN Package
+
+This is the publishable npm package for React Native. Changes here affect everyone who installs `agentation-rn`.
+
+## Critical Rules
+
+1. **NEVER run `npm publish`** - Only publish when explicitly instructed
+2. **NEVER bump version** in package.json without explicit instruction
+3. **NEVER modify exports** in index.ts without discussing breaking changes
+
+## What Gets Published
+
+- `dist/` folder (compiled from `src/`)
+- `package.json`, `README.md`, `LICENSE`
+
+## Before Modifying `src/`
+
+- Consider: Is this a breaking change?
+- Consider: Does this affect the API surface?
+- Consider: Will existing users' code still work?
+- Consider: Does this break parity with the web package?
+
+## Main Export
+
+```tsx
+import { Agentation } from 'agentation-rn';
+```
+
+## Mobile-Specific APIs
+
+These are React Native additions not in the web package:
+
+- `useAgentationScroll` - ScrollView marker positioning
+- `AgenationView` - Modal/sheet annotation context
+
+## Programmatic API (Web Parity)
+
+The component exposes these callback props (matching web 1.2.0+):
+
+- `onAnnotationAdd(annotation)` - when annotation created
+- `onAnnotationDelete(annotation)` - when annotation deleted
+- `onAnnotationUpdate(annotation)` - when annotation edited
+- `onAnnotationsClear(annotations[])` - when all cleared
+- `onCopy(markdown)` - when copy button clicked
+- `copyToClipboard` (boolean, default: true)
+
+**API stability**: These are public contracts. Changing signatures or removing callbacks is a breaking change requiring a major version bump.
+
+## Testing Changes
+
+1. Run `pnpm build` to ensure it compiles
+2. Run `pnpm typecheck` for TypeScript validation
+3. Test the example app on iOS: `cd example && pnpm ios`
+4. Test the example app on Android: `cd example && pnpm android`
+
+## Publishing
+
+When instructed to publish a new npm version:
+
+1. Bump version in `package.json`
+2. Run `pnpm build`
+3. Commit the version bump
+4. Run `npm publish --access public` (will prompt for OTP)
+5. Push to main
+
+## Web API Parity
+
+Maintain compatibility with the web `agentation` package:
+
+| Feature | Web | RN | Notes |
+|---------|-----|-----|-------|
+| Annotation callbacks | ✅ | ✅ | Same signatures |
+| Demo mode | ✅ | ✅ | Same props |
+| Output levels | ✅ | ✅ | compact/standard/detailed/forensic |
+| Settings persistence | ✅ | ✅ | localStorage vs AsyncStorage |
+| `identifyElement` | ✅ | ✅ | Alias for `detectComponent` |
+| `getElementPath` | ✅ | ✅ | Alias for `formatElementPath` |
+
+When adding features, consider if they should also be added to the web package.
diff --git a/packages/agentation-rn/LICENSE b/packages/agentation-rn/LICENSE
new file mode 100644
index 0000000..4dc169a
--- /dev/null
+++ b/packages/agentation-rn/LICENSE
@@ -0,0 +1,27 @@
+PolyForm Shield License 1.0.0
+
+Copyright (c) 2026 Benji Taylor
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to use,
+copy, modify, and distribute the Software, subject to the following conditions:
+
+1. You may not use the Software to provide a product or service that competes
+ with the Software or any product or service offered by the Licensor that
+ includes the Software.
+
+2. You may not remove or obscure any licensing, copyright, or other notices
+ included in the Software.
+
+3. If you distribute the Software or any derivative works, you must include a
+ copy of this license.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+For more information, see https://polyformproject.org/licenses/shield/1.0.0
diff --git a/packages/agentation-rn/README.md b/packages/agentation-rn/README.md
new file mode 100644
index 0000000..cf01d70
--- /dev/null
+++ b/packages/agentation-rn/README.md
@@ -0,0 +1,212 @@
+# agentation-rn
+
+React Native support for [Agentation](https://agentation.dev) - Visual feedback for AI coding agents.
+
+Tap components in your app to create annotations, then copy structured markdown output for AI tools like Claude Code.
+
+## Installation
+
+```bash
+npm install agentation-rn
+# or
+yarn add agentation-rn
+# or
+pnpm add agentation-rn
+```
+
+### Peer Dependencies
+
+```bash
+npm install react-native-safe-area-context
+```
+
+Optional (for enhanced features):
+```bash
+npm install @callstack/liquid-glass react-native-svg
+```
+
+## Quick Start
+
+```tsx
+import { Agentation } from 'agentation-rn';
+
+export default function App() {
+ return (
+ console.log('Added:', annotation)}
+ onCopy={(markdown) => {
+ // Send to your AI tool
+ console.log('Markdown:', markdown);
+ }}
+ >
+
+
+ );
+}
+```
+
+## Features
+
+- **Tap to Annotate** - Tap any component to create an annotation
+- **Component Detection** - Automatically identifies React components with file paths and line numbers
+- **Structured Output** - Generates AI-ready markdown with element context
+- **4 Detail Levels** - compact, standard, detailed, forensic
+- **Settings Persistence** - Saves preferences via AsyncStorage
+- **Navigation Support** - Detects React Navigation routes
+
+## API
+
+### ``
+
+Main wrapper component. Provides annotation functionality to your entire app.
+
+```tsx
+ {}} // Called when annotation created
+ onAnnotationUpdate={(annotation) => {}} // Called when annotation edited
+ onAnnotationDelete={(annotation) => {}} // Called when annotation deleted
+ onAnnotationsClear={(annotations) => {}} // Called when all cleared
+ onCopy={(markdown) => {}} // Called when markdown copied
+>
+
+
+```
+
+### Mobile-Specific APIs
+
+#### `useAgentationScroll`
+
+Required for ScrollViews - keeps annotation markers positioned correctly during scroll.
+
+```tsx
+import { useAgentationScroll } from 'agentation-rn';
+
+function MyScreen() {
+ const { onScroll, scrollEventThrottle } = useAgentationScroll();
+
+ return (
+
+ {/* Your content */}
+
+ );
+}
+```
+
+#### ``
+
+For Modals and Sheets - provides isolated annotation context since iOS modals render outside the normal view hierarchy.
+
+```tsx
+import { AgenationView } from 'agentation-rn';
+import { Modal } from 'react-native';
+
+function MyModal({ visible, onClose }) {
+ return (
+
+
+
+
+
+ );
+}
+```
+
+### Hooks
+
+#### `useAnnotations`
+
+Low-level hook for custom annotation UIs.
+
+```tsx
+import { useAnnotations } from 'agentation-rn';
+
+const {
+ annotations,
+ addAnnotation,
+ updateAnnotation,
+ deleteAnnotation,
+ clearAnnotations,
+ copyToClipboard,
+ settings,
+ updateSettings,
+} = useAnnotations({ screenName: 'MyScreen' });
+```
+
+### Utilities
+
+```tsx
+import {
+ // Component detection
+ detectComponent,
+ identifyElement, // alias for detectComponent
+ formatElementPath,
+ getElementPath, // alias for formatElementPath
+
+ // Markdown generation
+ generateMarkdown,
+ generateSimpleMarkdown,
+
+ // Storage
+ saveAnnotations,
+ loadAnnotations,
+ clearAnnotations,
+
+ // Helpers
+ copyToClipboard,
+ generateId,
+} from 'agentation-rn';
+```
+
+## Platform Support
+
+| Platform | Status |
+|----------|--------|
+| iOS | Supported |
+| Android | Supported |
+| React Native | >= 0.72.0 |
+| React | >= 18.0.0 |
+
+### Navigation Support
+
+| Library | Status |
+|---------|--------|
+| React Navigation | Supported |
+| Expo Router | Coming soon |
+
+## Output Example
+
+When you copy annotations, you get structured markdown:
+
+```markdown
+# App Feedback - MyScreen
+
+## Annotation 1
+- **Element:** Button (src/components/Button.tsx:42)
+- **Comment:** This button should be larger
+- **Position:** x: 150, y: 320
+
+## Annotation 2
+- **Element:** Text (src/screens/Home.tsx:18)
+- **Comment:** Font size too small on mobile
+- **Position:** x: 20, y: 180
+```
+
+## Running the Example
+
+```bash
+cd packages/agentation-rn/example
+pnpm install
+
+# iOS
+pnpm ios
+
+# Android
+pnpm android
+```
+
+## License
+
+PolyForm-Shield-1.0.0
diff --git a/packages/agentation-rn/example/.gitignore b/packages/agentation-rn/example/.gitignore
new file mode 100644
index 0000000..999c4e5
--- /dev/null
+++ b/packages/agentation-rn/example/.gitignore
@@ -0,0 +1,6 @@
+node_modules/
+.expo/
+
+# Native folders - generated by `npx expo prebuild`
+ios/
+android/
diff --git a/packages/agentation-rn/example/App.tsx b/packages/agentation-rn/example/App.tsx
new file mode 100644
index 0000000..cdc96bc
--- /dev/null
+++ b/packages/agentation-rn/example/App.tsx
@@ -0,0 +1,93 @@
+import React, { useRef } from 'react';
+import { StyleSheet, View } from 'react-native';
+import { SafeAreaProvider } from 'react-native-safe-area-context';
+import { NavigationContainer, NavigationContainerRef } from '@react-navigation/native';
+import { createNativeStackNavigator } from '@react-navigation/native-stack';
+import { Agentation } from 'agentation-rn';
+import { colors, typography } from './theme';
+import { EventsPanel } from './components';
+import { useApiEvents } from './hooks';
+
+import { HomeScreen, SettingsScreen, ProfileScreen, ScrollExampleScreen, ModalExampleScreen } from './screens';
+
+export type RootStackParamList = {
+ Home: undefined;
+ Settings: undefined;
+ Profile: { userId: string };
+ ScrollExample: undefined;
+ ModalExample: undefined;
+};
+
+const Stack = createNativeStackNavigator();
+
+export default function App() {
+ const navigationRef = useRef>(null);
+ const { events, clearEvents, callbacks } = useApiEvents();
+
+ return (
+
+
+
+ {
+ // Expose navigation ref for route detection
+ (global as any).__REACT_NAVIGATION_DEVTOOLS__ = {
+ navigatorRef: navigationRef,
+ };
+ }}
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: colors.light.bg,
+ },
+});
diff --git a/packages/agentation-rn/example/README.md b/packages/agentation-rn/example/README.md
new file mode 100644
index 0000000..79d7a6b
--- /dev/null
+++ b/packages/agentation-rn/example/README.md
@@ -0,0 +1,27 @@
+# agentation-rn example
+
+Demo app showcasing agentation-rn features.
+
+## Setup
+
+```bash
+pnpm install
+```
+
+## Run
+
+```bash
+# iOS
+pnpm ios
+
+# Android
+pnpm android
+```
+
+## Features Demonstrated
+
+- Basic annotation workflow
+- ScrollView integration (`useAgentationScroll`)
+- Modal support (`AgenationView`)
+- React Navigation route detection
+- Event callbacks and markdown export
diff --git a/packages/agentation-rn/example/app.json b/packages/agentation-rn/example/app.json
new file mode 100644
index 0000000..fe11b2f
--- /dev/null
+++ b/packages/agentation-rn/example/app.json
@@ -0,0 +1,36 @@
+{
+ "expo": {
+ "name": "agentation-rn-example",
+ "slug": "agentation-rn-example",
+ "autolinking": {
+ "exclude": ["react-native-worklets", "react-native-reanimated"]
+ },
+ "version": "1.0.0",
+ "orientation": "portrait",
+ "icon": "./assets/icon.png",
+ "userInterfaceStyle": "light",
+ "newArchEnabled": true,
+ "splash": {
+ "image": "./assets/splash-icon.png",
+ "resizeMode": "contain",
+ "backgroundColor": "#ffffff"
+ },
+ "ios": {
+ "supportsTablet": true,
+ "bundleIdentifier": "com.agentation.rn.example",
+ "deploymentTarget": "26.0"
+ },
+ "android": {
+ "adaptiveIcon": {
+ "foregroundImage": "./assets/adaptive-icon.png",
+ "backgroundColor": "#ffffff"
+ },
+ "edgeToEdgeEnabled": true,
+ "predictiveBackGestureEnabled": false,
+ "package": "com.agentation.rn.example"
+ },
+ "web": {
+ "favicon": "./assets/favicon.png"
+ }
+ }
+}
diff --git a/packages/agentation-rn/example/assets/adaptive-icon.png b/packages/agentation-rn/example/assets/adaptive-icon.png
new file mode 100644
index 0000000..03d6f6b
Binary files /dev/null and b/packages/agentation-rn/example/assets/adaptive-icon.png differ
diff --git a/packages/agentation-rn/example/assets/favicon.png b/packages/agentation-rn/example/assets/favicon.png
new file mode 100644
index 0000000..e75f697
Binary files /dev/null and b/packages/agentation-rn/example/assets/favicon.png differ
diff --git a/packages/agentation-rn/example/assets/icon.png b/packages/agentation-rn/example/assets/icon.png
new file mode 100644
index 0000000..a0b1526
Binary files /dev/null and b/packages/agentation-rn/example/assets/icon.png differ
diff --git a/packages/agentation-rn/example/assets/splash-icon.png b/packages/agentation-rn/example/assets/splash-icon.png
new file mode 100644
index 0000000..03d6f6b
Binary files /dev/null and b/packages/agentation-rn/example/assets/splash-icon.png differ
diff --git a/packages/agentation-rn/example/babel.config.js b/packages/agentation-rn/example/babel.config.js
new file mode 100644
index 0000000..ece5ab9
--- /dev/null
+++ b/packages/agentation-rn/example/babel.config.js
@@ -0,0 +1,12 @@
+const { inspectorBabelPlugin } = require('react-native-dev-inspector/metro');
+
+module.exports = function (api) {
+ api.cache(true);
+ return {
+ presets: ['babel-preset-expo'],
+ plugins: [
+ // Injects __callerSource prop into JSX elements with file, line, and column info
+ inspectorBabelPlugin,
+ ],
+ };
+};
diff --git a/packages/agentation-rn/example/components/Badge.tsx b/packages/agentation-rn/example/components/Badge.tsx
new file mode 100644
index 0000000..422bfb7
--- /dev/null
+++ b/packages/agentation-rn/example/components/Badge.tsx
@@ -0,0 +1,30 @@
+
+import React from 'react';
+import { View, Text, StyleSheet } from 'react-native';
+import { spacing, radius, typography } from '../theme';
+
+interface BadgeProps {
+ label: string;
+ color: string;
+}
+
+export function Badge({ label, color }: BadgeProps) {
+ return (
+
+ {label}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ badge: {
+ paddingHorizontal: spacing.sm + 2,
+ paddingVertical: spacing.xs,
+ borderRadius: radius.pill,
+ },
+ badgeText: {
+ color: '#fff',
+ fontSize: typography.sizes.small,
+ fontWeight: typography.weights.medium,
+ },
+});
diff --git a/packages/agentation-rn/example/components/BulletList.tsx b/packages/agentation-rn/example/components/BulletList.tsx
new file mode 100644
index 0000000..de74ae0
--- /dev/null
+++ b/packages/agentation-rn/example/components/BulletList.tsx
@@ -0,0 +1,42 @@
+
+import React from 'react';
+import { View, Text, StyleSheet } from 'react-native';
+import { colors, spacing, typography } from '../theme';
+
+interface BulletListProps {
+ items: string[];
+}
+
+export function BulletList({ items }: BulletListProps) {
+ return (
+
+ {items.map((item, index) => (
+
+ •
+ {item}
+
+ ))}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ bulletList: {
+ marginBottom: spacing.sm,
+ },
+ bulletItem: {
+ flexDirection: 'row',
+ marginBottom: spacing.sm,
+ },
+ bulletDot: {
+ width: 20,
+ fontSize: typography.sizes.body,
+ color: colors.primary,
+ },
+ bulletText: {
+ flex: 1,
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ },
+});
diff --git a/packages/agentation-rn/example/components/Button.tsx b/packages/agentation-rn/example/components/Button.tsx
new file mode 100644
index 0000000..7eb1d2c
--- /dev/null
+++ b/packages/agentation-rn/example/components/Button.tsx
@@ -0,0 +1,77 @@
+
+import React from 'react';
+import { TouchableOpacity, Text, StyleSheet } from 'react-native';
+import { colors, spacing, radius, typography } from '../theme';
+
+interface ButtonProps {
+ title: string;
+ onPress: () => void;
+ variant?: 'primary' | 'secondary' | 'danger';
+ disabled?: boolean;
+}
+
+export function Button({
+ title,
+ onPress,
+ variant = 'primary',
+ disabled = false,
+}: ButtonProps) {
+ const buttonStyle = [
+ styles.button,
+ variant === 'primary' && styles.buttonPrimary,
+ variant === 'secondary' && styles.buttonSecondary,
+ variant === 'danger' && styles.buttonDanger,
+ disabled && styles.buttonDisabled,
+ ];
+ const textStyle = [
+ styles.buttonText,
+ variant === 'secondary' && styles.buttonTextSecondary,
+ disabled && styles.buttonTextDisabled,
+ ];
+
+ return (
+
+ {title}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ button: {
+ paddingVertical: spacing.sm,
+ paddingHorizontal: spacing.md + 2,
+ borderRadius: radius.md,
+ minWidth: 80,
+ },
+ buttonPrimary: {
+ backgroundColor: colors.light.text,
+ },
+ buttonSecondary: {
+ backgroundColor: colors.light.bgCard,
+ borderWidth: 1,
+ borderColor: colors.light.borderMedium,
+ },
+ buttonDanger: {
+ backgroundColor: colors.danger,
+ },
+ buttonDisabled: {
+ opacity: 0.5,
+ },
+ buttonText: {
+ fontSize: typography.sizes.ui,
+ fontWeight: typography.weights.medium,
+ color: '#fff',
+ textAlign: 'center',
+ },
+ buttonTextSecondary: {
+ color: colors.light.text,
+ },
+ buttonTextDisabled: {
+ color: colors.light.textMuted,
+ },
+});
diff --git a/packages/agentation-rn/example/components/Card.tsx b/packages/agentation-rn/example/components/Card.tsx
new file mode 100644
index 0000000..3321c07
--- /dev/null
+++ b/packages/agentation-rn/example/components/Card.tsx
@@ -0,0 +1,35 @@
+
+import React from 'react';
+import { View, Text, StyleSheet } from 'react-native';
+import { colors, spacing, radius, typography, shadows } from '../theme';
+
+interface CardProps {
+ title?: string;
+ children: React.ReactNode;
+}
+
+export function Card({ title, children }: CardProps) {
+ return (
+
+ {title && {title}}
+ {children}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ card: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.xl,
+ padding: spacing.lg,
+ marginBottom: spacing.md,
+ ...shadows.md,
+ },
+ cardTitle: {
+ fontSize: typography.sizes.ui,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ marginBottom: spacing.md,
+ letterSpacing: typography.letterSpacing.tight,
+ },
+});
diff --git a/packages/agentation-rn/example/components/DemoCard.tsx b/packages/agentation-rn/example/components/DemoCard.tsx
new file mode 100644
index 0000000..7f82d14
--- /dev/null
+++ b/packages/agentation-rn/example/components/DemoCard.tsx
@@ -0,0 +1,41 @@
+
+import React from 'react';
+import { View, Text, StyleSheet } from 'react-native';
+import { colors, spacing, radius, typography, shadows } from '../theme';
+
+interface DemoCardProps {
+ title: string;
+ description: string;
+}
+
+export function DemoCard({ title, description }: DemoCardProps) {
+ return (
+
+ {title}
+ {description}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ demoCard: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.lg,
+ padding: spacing.lg,
+ marginBottom: spacing.md,
+ borderWidth: 1,
+ borderColor: colors.light.border,
+ ...shadows.sm,
+ },
+ demoCardTitle: {
+ fontSize: typography.sizes.title,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ marginBottom: spacing.sm,
+ },
+ demoCardDescription: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ },
+});
diff --git a/packages/agentation-rn/example/components/EventsPanel.tsx b/packages/agentation-rn/example/components/EventsPanel.tsx
new file mode 100644
index 0000000..c4a1af7
--- /dev/null
+++ b/packages/agentation-rn/example/components/EventsPanel.tsx
@@ -0,0 +1,233 @@
+import React, { useState, useRef, useEffect } from 'react';
+import {
+ View,
+ Text,
+ StyleSheet,
+ TouchableOpacity,
+ ScrollView,
+ Animated,
+ Dimensions,
+} from 'react-native';
+
+export interface ApiEvent {
+ id: string;
+ type: 'onAnnotationAdd' | 'onAnnotationUpdate' | 'onAnnotationDelete' | 'onCopy' | 'onAnnotationsClear';
+ data: Record;
+ timestamp: number;
+}
+
+interface EventsPanelProps {
+ events: ApiEvent[];
+ onClear: () => void;
+ enabled?: boolean;
+}
+
+const EVENT_COLORS: Record = {
+ onAnnotationAdd: '#34c759',
+ onAnnotationUpdate: '#ff9500',
+ onAnnotationDelete: '#ff3b30',
+ onCopy: '#007aff',
+ onAnnotationsClear: '#ff3b30',
+};
+
+export function EventsPanel({ events, onClear, enabled = true }: EventsPanelProps) {
+ const [isExpanded, setIsExpanded] = useState(true);
+ const slideAnim = useRef(new Animated.Value(1)).current;
+ const scrollRef = useRef(null);
+
+ const screenWidth = Dimensions.get('window').width;
+ const panelWidth = Math.min(300, screenWidth * 0.45);
+
+ if (!enabled) {
+ return null;
+ }
+
+ useEffect(() => {
+ Animated.timing(slideAnim, {
+ toValue: isExpanded ? 1 : 0,
+ duration: 200,
+ useNativeDriver: true,
+ }).start();
+ }, [isExpanded, slideAnim]);
+
+ useEffect(() => {
+ // Auto-scroll to bottom when new events arrive
+ if (scrollRef.current && events.length > 0) {
+ setTimeout(() => {
+ scrollRef.current?.scrollToEnd({ animated: true });
+ }, 100);
+ }
+ }, [events.length]);
+
+ const formatData = (data: Record) => {
+ const entries = Object.entries(data).slice(0, 3);
+ return entries.map(([key, value]) => {
+ let displayValue = value;
+ if (typeof value === 'string' && value.length > 25) {
+ displayValue = value.slice(0, 25) + '...';
+ }
+ return `${key}: ${JSON.stringify(displayValue)}`;
+ });
+ };
+
+ return (
+
+
+ setIsExpanded(!isExpanded)}
+ >
+ {isExpanded ? '›' : '‹'}
+
+ Events
+ {events.length > 0 && (
+
+ Clear
+
+ )}
+
+
+ {isExpanded && (
+
+ {events.length === 0 ? (
+ No events yet
+ ) : (
+ events.map((event) => (
+
+
+ {event.type}
+
+ {Object.keys(event.data).length > 0 && (
+
+ {formatData(event.data).map((line, i) => (
+
+ {line}
+
+ ))}
+
+ )}
+
+ ))
+ )}
+
+ )}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ position: 'absolute',
+ top: 100,
+ right: 0,
+ maxHeight: 350,
+ backgroundColor: 'rgba(28, 28, 30, 0.95)',
+ borderTopLeftRadius: 12,
+ borderBottomLeftRadius: 12,
+ overflow: 'hidden',
+ shadowColor: '#000',
+ shadowOffset: { width: -2, height: 2 },
+ shadowOpacity: 0.3,
+ shadowRadius: 8,
+ elevation: 8,
+ zIndex: 999,
+ },
+ header: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ paddingVertical: 8,
+ paddingHorizontal: 12,
+ borderBottomWidth: 1,
+ borderBottomColor: 'rgba(255, 255, 255, 0.1)',
+ },
+ collapseButton: {
+ width: 20,
+ height: 20,
+ alignItems: 'center',
+ justifyContent: 'center',
+ },
+ collapseIcon: {
+ color: 'rgba(255, 255, 255, 0.6)',
+ fontSize: 16,
+ fontWeight: '600',
+ },
+ title: {
+ flex: 1,
+ color: '#fff',
+ fontSize: 13,
+ fontWeight: '600',
+ marginLeft: 4,
+ },
+ clearButton: {
+ paddingHorizontal: 8,
+ paddingVertical: 2,
+ },
+ clearText: {
+ color: 'rgba(255, 255, 255, 0.5)',
+ fontSize: 11,
+ },
+ eventsList: {
+ flex: 1,
+ paddingVertical: 8,
+ },
+ emptyText: {
+ color: 'rgba(255, 255, 255, 0.4)',
+ fontSize: 12,
+ textAlign: 'center',
+ paddingVertical: 20,
+ },
+ eventItem: {
+ marginHorizontal: 12,
+ marginVertical: 4,
+ paddingLeft: 10,
+ paddingRight: 8,
+ paddingVertical: 6,
+ borderLeftWidth: 3,
+ backgroundColor: 'rgba(255, 255, 255, 0.05)',
+ borderRadius: 4,
+ },
+ eventType: {
+ fontSize: 12,
+ fontWeight: '600',
+ fontFamily: 'Menlo',
+ },
+ eventData: {
+ marginTop: 4,
+ },
+ eventDataLine: {
+ fontSize: 10,
+ color: 'rgba(255, 255, 255, 0.6)',
+ fontFamily: 'Menlo',
+ lineHeight: 14,
+ },
+});
diff --git a/packages/agentation-rn/example/components/HighlightBox.tsx b/packages/agentation-rn/example/components/HighlightBox.tsx
new file mode 100644
index 0000000..3f1aea7
--- /dev/null
+++ b/packages/agentation-rn/example/components/HighlightBox.tsx
@@ -0,0 +1,29 @@
+
+import React from 'react';
+import { View, Text, StyleSheet } from 'react-native';
+import { colors, spacing, radius, typography } from '../theme';
+
+interface HighlightBoxProps {
+ children: React.ReactNode;
+}
+
+export function HighlightBox({ children }: HighlightBoxProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ highlightBox: {
+ backgroundColor: colors.light.bgSubtle,
+ borderRadius: radius.md,
+ padding: spacing.md,
+ },
+ highlightText: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 22,
+ },
+});
diff --git a/packages/agentation-rn/example/components/Icons.tsx b/packages/agentation-rn/example/components/Icons.tsx
new file mode 100644
index 0000000..760a40f
--- /dev/null
+++ b/packages/agentation-rn/example/components/Icons.tsx
@@ -0,0 +1,46 @@
+
+import React from 'react';
+import Svg, { Path } from 'react-native-svg';
+import { colors } from '../theme';
+
+interface IconProps {
+ size?: number;
+ color?: string;
+}
+
+export function SparkleIcon({ size = 20, color = colors.light.text }: IconProps) {
+ return (
+
+ );
+}
+
+export function CopyIcon({ size = 20, color = colors.light.text }: IconProps) {
+ return (
+
+ );
+}
diff --git a/packages/agentation-rn/example/components/InputField.tsx b/packages/agentation-rn/example/components/InputField.tsx
new file mode 100644
index 0000000..59d174f
--- /dev/null
+++ b/packages/agentation-rn/example/components/InputField.tsx
@@ -0,0 +1,56 @@
+
+import React from 'react';
+import { View, Text, TextInput, StyleSheet } from 'react-native';
+import { colors, spacing, radius, typography } from '../theme';
+
+interface InputFieldProps {
+ label?: string;
+ placeholder?: string;
+ value: string;
+ onChangeText: (text: string) => void;
+ secureTextEntry?: boolean;
+}
+
+export function InputField({
+ label,
+ placeholder,
+ value,
+ onChangeText,
+ secureTextEntry = false,
+}: InputFieldProps) {
+ return (
+
+ {label && {label}}
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ inputContainer: {
+ marginBottom: spacing.md,
+ },
+ inputLabel: {
+ fontSize: typography.sizes.caption,
+ fontWeight: typography.weights.medium,
+ color: colors.light.textSecondary,
+ marginBottom: spacing.xs,
+ },
+ input: {
+ backgroundColor: colors.light.bg,
+ borderRadius: radius.md,
+ paddingVertical: spacing.sm + 2,
+ paddingHorizontal: spacing.md,
+ borderWidth: 1,
+ borderColor: colors.light.border,
+ fontSize: typography.sizes.body,
+ color: colors.light.text,
+ },
+});
diff --git a/packages/agentation-rn/example/components/ListItem.tsx b/packages/agentation-rn/example/components/ListItem.tsx
new file mode 100644
index 0000000..d3c11ea
--- /dev/null
+++ b/packages/agentation-rn/example/components/ListItem.tsx
@@ -0,0 +1,55 @@
+
+import React from 'react';
+import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
+import { colors, spacing, typography } from '../theme';
+
+interface ListItemProps {
+ title: string;
+ subtitle?: string;
+ onPress: () => void;
+ showChevron?: boolean;
+}
+
+export function ListItem({
+ title,
+ subtitle,
+ onPress,
+ showChevron = true,
+}: ListItemProps) {
+ return (
+
+
+ {title}
+ {subtitle && {subtitle}}
+
+ {showChevron && ›}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ listItem: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ paddingVertical: spacing.md,
+ borderBottomWidth: 1,
+ borderBottomColor: colors.light.border,
+ },
+ listItemContent: {
+ flex: 1,
+ },
+ listItemTitle: {
+ fontSize: typography.sizes.body,
+ fontWeight: typography.weights.medium,
+ color: colors.light.text,
+ },
+ listItemSubtitle: {
+ fontSize: typography.sizes.caption,
+ color: colors.light.textTertiary,
+ marginTop: 2,
+ },
+ listItemChevron: {
+ fontSize: 20,
+ color: colors.light.textMuted,
+ },
+});
diff --git a/packages/agentation-rn/example/components/NoteBox.tsx b/packages/agentation-rn/example/components/NoteBox.tsx
new file mode 100644
index 0000000..6313ee4
--- /dev/null
+++ b/packages/agentation-rn/example/components/NoteBox.tsx
@@ -0,0 +1,32 @@
+
+import React from 'react';
+import { View, Text, StyleSheet } from 'react-native';
+import { colors, spacing, radius, typography } from '../theme';
+
+interface NoteBoxProps {
+ children: React.ReactNode;
+}
+
+export function NoteBox({ children }: NoteBoxProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ noteBox: {
+ backgroundColor: colors.light.bgSubtle,
+ borderRadius: radius.md,
+ padding: spacing.md,
+ borderLeftWidth: 3,
+ borderLeftColor: colors.light.textMuted,
+ },
+ noteText: {
+ fontSize: typography.sizes.caption,
+ color: colors.light.textTertiary,
+ lineHeight: 18,
+ fontStyle: 'italic',
+ },
+});
diff --git a/packages/agentation-rn/example/components/NumberedList.tsx b/packages/agentation-rn/example/components/NumberedList.tsx
new file mode 100644
index 0000000..66594a3
--- /dev/null
+++ b/packages/agentation-rn/example/components/NumberedList.tsx
@@ -0,0 +1,43 @@
+
+import React from 'react';
+import { View, Text, StyleSheet } from 'react-native';
+import { colors, spacing, typography } from '../theme';
+
+interface NumberedListProps {
+ items: string[];
+}
+
+export function NumberedList({ items }: NumberedListProps) {
+ return (
+
+ {items.map((item, index) => (
+
+ {index + 1}.
+ {item}
+
+ ))}
+
+ );
+}
+
+const styles = StyleSheet.create({
+ numberedList: {
+ marginBottom: spacing.sm,
+ },
+ numberedItem: {
+ flexDirection: 'row',
+ marginBottom: spacing.sm,
+ },
+ numberedNumber: {
+ width: 24,
+ fontSize: typography.sizes.body,
+ fontWeight: typography.weights.semibold,
+ color: colors.primary,
+ },
+ numberedText: {
+ flex: 1,
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ },
+});
diff --git a/packages/agentation-rn/example/components/Paragraph.tsx b/packages/agentation-rn/example/components/Paragraph.tsx
new file mode 100644
index 0000000..000bada
--- /dev/null
+++ b/packages/agentation-rn/example/components/Paragraph.tsx
@@ -0,0 +1,21 @@
+
+import React from 'react';
+import { Text, StyleSheet } from 'react-native';
+import { colors, spacing, typography } from '../theme';
+
+interface ParagraphProps {
+ children: React.ReactNode;
+}
+
+export function Paragraph({ children }: ParagraphProps) {
+ return {children};
+}
+
+const styles = StyleSheet.create({
+ paragraph: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 22,
+ marginBottom: spacing.md,
+ },
+});
diff --git a/packages/agentation-rn/example/components/SectionHeader.tsx b/packages/agentation-rn/example/components/SectionHeader.tsx
new file mode 100644
index 0000000..139fe8a
--- /dev/null
+++ b/packages/agentation-rn/example/components/SectionHeader.tsx
@@ -0,0 +1,23 @@
+
+import React from 'react';
+import { Text, StyleSheet } from 'react-native';
+import { colors, spacing, typography } from '../theme';
+
+interface SectionHeaderProps {
+ title: string;
+}
+
+export function SectionHeader({ title }: SectionHeaderProps) {
+ return {title};
+}
+
+const styles = StyleSheet.create({
+ sectionHeader: {
+ fontSize: typography.sizes.large,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ marginTop: spacing.lg,
+ marginBottom: spacing.md,
+ letterSpacing: typography.letterSpacing.tight,
+ },
+});
diff --git a/packages/agentation-rn/example/components/ToggleRow.tsx b/packages/agentation-rn/example/components/ToggleRow.tsx
new file mode 100644
index 0000000..efc8d58
--- /dev/null
+++ b/packages/agentation-rn/example/components/ToggleRow.tsx
@@ -0,0 +1,58 @@
+
+import React from 'react';
+import { View, Text, Switch, StyleSheet } from 'react-native';
+import { colors, spacing, typography } from '../theme';
+
+interface ToggleRowProps {
+ label: string;
+ description?: string;
+ value: boolean;
+ onValueChange: (value: boolean) => void;
+}
+
+export function ToggleRow({
+ label,
+ description,
+ value,
+ onValueChange,
+}: ToggleRowProps) {
+ return (
+
+
+ {label}
+ {description && {description}}
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ toggleRow: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ paddingVertical: spacing.md,
+ borderBottomWidth: 1,
+ borderBottomColor: colors.light.border,
+ },
+ toggleInfo: {
+ flex: 1,
+ marginRight: spacing.lg,
+ },
+ toggleLabel: {
+ fontSize: typography.sizes.body,
+ fontWeight: typography.weights.medium,
+ color: colors.light.text,
+ },
+ toggleDescription: {
+ fontSize: typography.sizes.caption,
+ color: colors.light.textTertiary,
+ marginTop: 2,
+ },
+});
diff --git a/packages/agentation-rn/example/components/index.ts b/packages/agentation-rn/example/components/index.ts
new file mode 100644
index 0000000..597cad6
--- /dev/null
+++ b/packages/agentation-rn/example/components/index.ts
@@ -0,0 +1,17 @@
+
+export { Card } from './Card';
+export { Button } from './Button';
+export { Badge } from './Badge';
+export { ListItem } from './ListItem';
+export { InputField } from './InputField';
+export { ToggleRow } from './ToggleRow';
+export { DemoCard } from './DemoCard';
+export { SectionHeader } from './SectionHeader';
+export { Paragraph } from './Paragraph';
+export { NumberedList } from './NumberedList';
+export { BulletList } from './BulletList';
+export { HighlightBox } from './HighlightBox';
+export { NoteBox } from './NoteBox';
+export { SparkleIcon, CopyIcon } from './Icons';
+export { EventsPanel } from './EventsPanel';
+export type { ApiEvent } from './EventsPanel';
diff --git a/packages/agentation-rn/example/hooks/index.ts b/packages/agentation-rn/example/hooks/index.ts
new file mode 100644
index 0000000..f175f38
--- /dev/null
+++ b/packages/agentation-rn/example/hooks/index.ts
@@ -0,0 +1,2 @@
+export { useApiEvents } from './useApiEvents';
+export type { AgenationCallbacks, UseApiEventsReturn } from './useApiEvents';
diff --git a/packages/agentation-rn/example/hooks/useApiEvents.ts b/packages/agentation-rn/example/hooks/useApiEvents.ts
new file mode 100644
index 0000000..e045b01
--- /dev/null
+++ b/packages/agentation-rn/example/hooks/useApiEvents.ts
@@ -0,0 +1,72 @@
+import { useState, useCallback } from 'react';
+import type { Annotation } from 'agentation-rn';
+import type { ApiEvent } from '../components/EventsPanel';
+
+export interface AgenationCallbacks {
+ onAnnotationAdd: (annotation: Annotation) => void;
+ onAnnotationUpdate: (annotation: Annotation) => void;
+ onAnnotationDelete: (annotation: Annotation) => void;
+ onCopy: (markdown: string) => void;
+ onAnnotationsClear: (cleared: Annotation[]) => void;
+}
+
+export interface UseApiEventsReturn {
+ events: ApiEvent[];
+ clearEvents: () => void;
+ callbacks: AgenationCallbacks;
+}
+
+export function useApiEvents(maxEvents = 20): UseApiEventsReturn {
+ const [events, setEvents] = useState([]);
+
+ const addEvent = useCallback((type: ApiEvent['type'], data: Record) => {
+ const event: ApiEvent = {
+ id: `${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,
+ type,
+ data,
+ timestamp: Date.now(),
+ };
+ setEvents(prev => [...prev.slice(-(maxEvents - 1)), event]);
+ }, [maxEvents]);
+
+ const clearEvents = useCallback(() => {
+ setEvents([]);
+ }, []);
+
+ const callbacks: AgenationCallbacks = {
+ onAnnotationAdd: useCallback((annotation: Annotation) => {
+ addEvent('onAnnotationAdd', {
+ element: annotation.element,
+ comment: annotation.comment,
+ });
+ }, [addEvent]),
+
+ onAnnotationUpdate: useCallback((annotation: Annotation) => {
+ addEvent('onAnnotationUpdate', {
+ element: annotation.element,
+ comment: annotation.comment,
+ });
+ }, [addEvent]),
+
+ onAnnotationDelete: useCallback((annotation: Annotation) => {
+ addEvent('onAnnotationDelete', {
+ element: annotation.element,
+ });
+ }, [addEvent]),
+
+ onCopy: useCallback((markdown: string) => {
+ addEvent('onCopy', {
+ length: markdown.length,
+ format: 'markdown',
+ });
+ }, [addEvent]),
+
+ onAnnotationsClear: useCallback((cleared: Annotation[]) => {
+ addEvent('onAnnotationsClear', {
+ count: cleared.length,
+ });
+ }, [addEvent]),
+ };
+
+ return { events, clearEvents, callbacks };
+}
diff --git a/packages/agentation-rn/example/index.ts b/packages/agentation-rn/example/index.ts
new file mode 100644
index 0000000..5fd059f
--- /dev/null
+++ b/packages/agentation-rn/example/index.ts
@@ -0,0 +1,4 @@
+import { registerRootComponent } from 'expo';
+import App from './App';
+
+registerRootComponent(App);
diff --git a/packages/agentation-rn/example/metro.config.js b/packages/agentation-rn/example/metro.config.js
new file mode 100644
index 0000000..17947d4
--- /dev/null
+++ b/packages/agentation-rn/example/metro.config.js
@@ -0,0 +1,49 @@
+const { getDefaultConfig } = require('expo/metro-config');
+const path = require('path');
+
+const projectRoot = __dirname;
+const monorepoRoot = path.resolve(projectRoot, '../../..');
+const libraryRoot = path.resolve(projectRoot, '..');
+const librarySrc = path.resolve(libraryRoot, 'src');
+
+const config = getDefaultConfig(projectRoot);
+
+// Watch library and monorepo for hot reload
+config.watchFolders = [libraryRoot, monorepoRoot];
+
+// Resolve from monorepo root first to avoid duplicate React
+config.resolver.nodeModulesPaths = [
+ path.resolve(monorepoRoot, 'node_modules'),
+ path.resolve(projectRoot, 'node_modules'),
+];
+
+// Disable package exports to avoid dist/ resolution
+config.resolver.unstable_enablePackageExports = false;
+
+// Ensure single copy of React packages
+const reactPackages = ['react', 'react-native', 'react/jsx-runtime', 'react/jsx-dev-runtime'];
+
+// Custom resolver
+config.resolver.resolveRequest = (context, moduleName, platform) => {
+ // Redirect agentation-rn to src/
+ if (moduleName === 'agentation-rn') {
+ return {
+ filePath: path.resolve(librarySrc, 'index.ts'),
+ type: 'sourceFile',
+ };
+ }
+
+ // Ensure React packages resolve from monorepo root
+ if (reactPackages.includes(moduleName)) {
+ return context.resolveRequest(
+ { ...context, originModulePath: path.resolve(monorepoRoot, 'index.js') },
+ moduleName,
+ platform
+ );
+ }
+
+ // Fall back to default resolution
+ return context.resolveRequest(context, moduleName, platform);
+};
+
+module.exports = config;
diff --git a/packages/agentation-rn/example/package.json b/packages/agentation-rn/example/package.json
new file mode 100644
index 0000000..3139ec5
--- /dev/null
+++ b/packages/agentation-rn/example/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "@agentation-rn/example",
+ "version": "1.0.0",
+ "private": true,
+ "main": "index.ts",
+ "scripts": {
+ "start": "expo start",
+ "android": "expo run:android",
+ "ios": "expo run:ios",
+ "web": "expo start --web",
+ "typecheck": "tsc --noEmit"
+ },
+ "dependencies": {
+ "@callstack/liquid-glass": "^0.7.0",
+ "@react-native-async-storage/async-storage": "^2.2.0",
+ "@react-navigation/native": "^7.1.28",
+ "@react-navigation/native-stack": "^7.10.1",
+ "agentation-rn": "workspace:*",
+ "expo": "~54.0.32",
+ "expo-clipboard": "^8.0.8",
+ "expo-status-bar": "~3.0.9",
+ "react": "19.1.0",
+ "react-native": "0.81.5",
+ "react-native-dev-inspector": "^1.1.0",
+ "react-native-safe-area-context": "~5.6.0",
+ "react-native-screens": "~4.16.0",
+ "react-native-svg": "15.12.1"
+ },
+ "devDependencies": {
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
+ "@types/react": "~19.1.0",
+ "babel-preset-expo": "^54.0.10",
+ "typescript": "~5.9.2"
+ }
+}
diff --git a/packages/agentation-rn/example/screens/HomeScreen.tsx b/packages/agentation-rn/example/screens/HomeScreen.tsx
new file mode 100644
index 0000000..10c0040
--- /dev/null
+++ b/packages/agentation-rn/example/screens/HomeScreen.tsx
@@ -0,0 +1,386 @@
+
+import React, { useState } from 'react';
+import {
+ View,
+ Text,
+ StyleSheet,
+ ScrollView,
+} from 'react-native';
+import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import { colors, spacing, radius, typography } from '../theme';
+import {
+ Card,
+ Button,
+ InputField,
+ DemoCard,
+ SectionHeader,
+ Paragraph,
+ NumberedList,
+ BulletList,
+ HighlightBox,
+ NoteBox,
+ SparkleIcon,
+ CopyIcon,
+} from '../components';
+
+// =============================================================================
+// Types
+// =============================================================================
+
+type RootStackParamList = {
+ Home: undefined;
+ Settings: undefined;
+ Profile: { userId: string };
+ ScrollExample: undefined;
+ ModalExample: undefined;
+};
+
+type HomeScreenProps = {
+ navigation: NativeStackNavigationProp;
+};
+
+// =============================================================================
+// HomeScreen
+// =============================================================================
+
+export function HomeScreen({ navigation }: HomeScreenProps) {
+ const [demoInput, setDemoInput] = useState('');
+
+ return (
+
+ {/* Header */}
+
+ Overview
+ Point at problems, not code
+
+
+ {/* Introduction */}
+
+
+ Agentation (agent + annotation) is a dev tool that lets you annotate
+ elements in your app and generate structured feedback for AI coding agents.
+
+
+ Tap elements, add notes, and paste the output into Claude Code, Cursor,
+ or any agent that has access to your codebase. It's fully agent-agnostic,
+ so the markdown output works with any AI tool.
+
+
+ The key insight: agents can find and fix code much faster when they
+ know exactly which element you're referring to. Agentation captures
+ component names, file paths, and positions so the agent can locate
+ the corresponding source files. Based on agentation.dev by Benji
+ Taylor, Dennis Jin, and Alex Vanderzon.
+
+
+
+ {/* Quick Start */}
+
+
+
+
+ 1.
+
+ Tap the
+
+ icon to activate
+
+
+
+ 2.
+
+ Tap any element to see its name highlighted
+
+
+
+ 3.
+
+ Long press to add an annotation
+
+
+
+ 4.
+
+ Write your feedback and tap Save
+
+
+
+ 5.
+
+ Tap
+
+ to copy formatted markdown
+
+
+
+ 6.
+ Paste into your agent
+
+
+
+
+ {/* How It Works */}
+
+
+
+ Agentation works best with AI tools that have access to your codebase
+ (Claude Code, Cursor, Windsurf, etc.):
+
+
+
+
+ Without Agentation:{'\n'}
+ "the blue button in the sidebar"{'\n\n'}
+ With Agentation:{'\n'}
+ components/Button.tsx:42 (Button)
+
+
+
+
+ {/* Try It - Demo Section */}
+
+
+
+ The toolbar is active on this screen. Try annotating these demo elements:
+
+
+ {/* Demo Buttons */}
+
+ Button Components
+
+
+
+
+ {/* Demo Input */}
+
+ Input Component
+
+
+
+ {/* Demo Cards */}
+
+ Card Components
+
+
+
+
+
+ {/* Navigation Examples */}
+
+
+
+ Agentation detects the current route and includes it in annotation
+ output. This helps agents understand which screen an element belongs to.
+
+
+ Currently supports React Navigation only. Expo Router and other
+ navigation libraries are not yet supported.
+
+
+
+ Test route detection across different screens:
+
+
+
+ navigation.navigate('Settings')} />
+ navigation.navigate('Profile', { userId: '123' })}
+ variant="secondary"
+ />
+
+
+
+ {/* API Examples */}
+
+
+
+ React Native has constraints that don't exist on web. These APIs help
+ Agentation work seamlessly in mobile-specific contexts:
+
+
+ useAgentationScroll — Keeps annotation markers positioned correctly
+ during scroll. Required because RN scroll events don't bubble like web.
+
+
+
+ AgenationView — Drop-in annotation layer for modals and nested
+ navigators. iOS modals render outside the normal view hierarchy,
+ so this provides a separate annotation context.
+
+
+
+
+ Try the examples to see these APIs in action:
+
+
+
+ navigation.navigate('ScrollExample')}
+ />
+ navigation.navigate('ModalExample')}
+ variant="secondary"
+ />
+
+
+
+ {/* Best Practices */}
+
+
+
+
+
+ {/* Footer */}
+
+ agentation-rn
+ RN port by @skylarbarrera
+ Original: agentation.dev
+
+
+ );
+}
+
+// =============================================================================
+// Styles
+// =============================================================================
+
+const styles = StyleSheet.create({
+ scrollView: {
+ flex: 1,
+ backgroundColor: colors.light.bg,
+ },
+ scrollContent: {
+ padding: spacing.lg,
+ paddingBottom: 120,
+ },
+
+ // Header
+ header: {
+ marginBottom: spacing.md,
+ },
+ title: {
+ fontSize: 28,
+ fontWeight: typography.weights.bold,
+ color: colors.light.text,
+ letterSpacing: typography.letterSpacing.tight,
+ },
+ tagline: {
+ fontSize: typography.sizes.title,
+ color: colors.light.textTertiary,
+ marginTop: spacing.xs,
+ fontStyle: 'italic',
+ },
+
+ // Quick Start
+ quickStartList: {
+ gap: spacing.sm,
+ },
+ quickStartItem: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+ quickStartNumber: {
+ width: 24,
+ fontSize: typography.sizes.body,
+ fontWeight: typography.weights.semibold,
+ color: colors.primary,
+ },
+ quickStartText: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ },
+ quickStartTextRow: {
+ flex: 1,
+ flexDirection: 'row',
+ alignItems: 'center',
+ flexWrap: 'wrap',
+ },
+ inlineIcon: {
+ marginHorizontal: 2,
+ },
+ bold: {
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ },
+
+ // Code Block
+ codeBlock: {
+ backgroundColor: colors.dark.bg,
+ borderRadius: radius.lg,
+ padding: spacing.md,
+ marginTop: spacing.md,
+ },
+ codeText: {
+ fontSize: typography.sizes.caption,
+ fontFamily: 'Menlo',
+ color: colors.dark.textSecondary,
+ lineHeight: 18,
+ },
+
+ // Demo Section
+ demoSection: {
+ marginBottom: spacing.lg,
+ },
+ demoLabel: {
+ fontSize: typography.sizes.caption,
+ fontWeight: typography.weights.medium,
+ color: colors.light.textTertiary,
+ marginBottom: spacing.sm,
+ textTransform: 'uppercase',
+ letterSpacing: 0.5,
+ },
+
+ // Buttons
+ buttonRow: {
+ flexDirection: 'row',
+ gap: spacing.sm,
+ flexWrap: 'wrap',
+ },
+
+ // Footer
+ footer: {
+ marginTop: spacing.xxl,
+ alignItems: 'center',
+ paddingVertical: spacing.lg,
+ },
+ footerText: {
+ fontSize: typography.sizes.caption,
+ color: colors.light.textTertiary,
+ },
+ footerMuted: {
+ fontSize: typography.sizes.small,
+ color: colors.light.textMuted,
+ marginTop: spacing.xs,
+ },
+});
diff --git a/packages/agentation-rn/example/screens/ModalExampleScreen.tsx b/packages/agentation-rn/example/screens/ModalExampleScreen.tsx
new file mode 100644
index 0000000..8a6c7db
--- /dev/null
+++ b/packages/agentation-rn/example/screens/ModalExampleScreen.tsx
@@ -0,0 +1,236 @@
+
+import React, { useState } from 'react';
+import {
+ View,
+ Text,
+ Modal,
+ TouchableOpacity,
+ StyleSheet,
+ SafeAreaView,
+} from 'react-native';
+import { AgenationView } from 'agentation-rn';
+import { colors, spacing, radius, typography, shadows } from '../theme';
+
+export function ModalExampleScreen() {
+ const [modalVisible, setModalVisible] = useState(false);
+
+ return (
+
+
+
+ Modal Example
+
+ AgenationView enables annotations inside modals
+
+
+
+
+ AgenationView
+
+ The main Agentation wrapper can't reach inside native modals.
+ Use AgenationView to enable annotations in any context.
+
+
+
+ {`\n \n \n \n`}
+
+
+
+
+ setModalVisible(true)}
+ activeOpacity={0.7}
+ >
+ Open Modal
+
+
+
+ setModalVisible(false)}
+ >
+ {/* Wrap modal content with AgenationView for annotation support */}
+
+
+
+ Modal with Annotations
+ setModalVisible(false)}
+ hitSlop={{ top: 10, bottom: 10, left: 10, right: 10 }}
+ >
+ Done
+
+
+
+
+
+ This modal is wrapped with AgenationView. Tap anywhere to
+ create annotations - even inside the modal!
+
+
+
+ Feature Card
+
+ Tap this card to annotate it. The annotation will be
+ local to this modal's AgenationView context.
+
+
+
+
+ Another Card
+
+ Each AgenationView maintains its own annotation state.
+ Great for forms, sheets, and overlays.
+
+
+
+
+ Toolbar Included
+
+ AgenationView includes its own toolbar (FAB). Toggle
+ annotation mode, copy to clipboard, or clear all.
+
+
+
+
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: colors.light.bg,
+ },
+ content: {
+ flex: 1,
+ padding: spacing.lg,
+ },
+
+ // Header
+ header: {
+ marginBottom: spacing.lg,
+ },
+ title: {
+ fontSize: typography.sizes.large,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ letterSpacing: typography.letterSpacing.tight,
+ },
+ subtitle: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textTertiary,
+ marginTop: spacing.xs,
+ },
+
+ // Info Card
+ infoCard: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.xl,
+ padding: spacing.lg,
+ marginBottom: spacing.lg,
+ borderWidth: 1,
+ borderColor: colors.primary,
+ ...shadows.sm,
+ },
+ infoTitle: {
+ fontSize: typography.sizes.ui,
+ fontWeight: typography.weights.semibold,
+ color: colors.primary,
+ marginBottom: spacing.sm,
+ },
+ infoText: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ marginBottom: spacing.md,
+ },
+ codeBlock: {
+ backgroundColor: colors.light.bgSubtle,
+ borderRadius: radius.md,
+ padding: spacing.md,
+ },
+ codeText: {
+ fontSize: typography.sizes.caption,
+ fontFamily: 'Menlo',
+ color: colors.light.text,
+ lineHeight: 18,
+ },
+
+ // Button
+ button: {
+ backgroundColor: colors.light.text,
+ paddingVertical: spacing.md,
+ paddingHorizontal: spacing.xl,
+ borderRadius: radius.md,
+ alignSelf: 'flex-start',
+ },
+ buttonText: {
+ color: '#fff',
+ fontSize: typography.sizes.ui,
+ fontWeight: typography.weights.medium,
+ },
+
+ // Modal
+ modalContainer: {
+ flex: 1,
+ backgroundColor: colors.light.bg,
+ },
+ modalContent: {
+ flex: 1,
+ },
+ modalHeader: {
+ flexDirection: 'row',
+ justifyContent: 'space-between',
+ alignItems: 'center',
+ padding: spacing.lg,
+ borderBottomWidth: 1,
+ borderBottomColor: colors.light.border,
+ backgroundColor: colors.light.bgCard,
+ },
+ modalTitle: {
+ fontSize: typography.sizes.title,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ },
+ closeButton: {
+ fontSize: typography.sizes.ui,
+ fontWeight: typography.weights.medium,
+ color: colors.primary,
+ },
+ modalBody: {
+ flex: 1,
+ padding: spacing.lg,
+ },
+ modalText: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ marginBottom: spacing.lg,
+ },
+
+ // Cards in modal
+ card: {
+ backgroundColor: colors.light.bgCard,
+ padding: spacing.lg,
+ borderRadius: radius.xl,
+ marginBottom: spacing.md,
+ ...shadows.md,
+ },
+ cardTitle: {
+ fontSize: typography.sizes.ui,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ marginBottom: spacing.sm,
+ },
+ cardText: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ },
+});
diff --git a/packages/agentation-rn/example/screens/ProfileScreen.tsx b/packages/agentation-rn/example/screens/ProfileScreen.tsx
new file mode 100644
index 0000000..373e67d
--- /dev/null
+++ b/packages/agentation-rn/example/screens/ProfileScreen.tsx
@@ -0,0 +1,185 @@
+
+import React from 'react';
+import {
+ View,
+ Text,
+ StyleSheet,
+ ScrollView,
+} from 'react-native';
+import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import type { RouteProp } from '@react-navigation/native';
+import { colors, spacing, radius, typography, shadows } from '../theme';
+import { Card, Button, ListItem } from '../components';
+
+type RootStackParamList = {
+ Home: undefined;
+ Settings: undefined;
+ Profile: { userId: string };
+};
+
+type ProfileScreenProps = {
+ navigation: NativeStackNavigationProp;
+ route: RouteProp;
+};
+
+export function ProfileScreen({ navigation, route }: ProfileScreenProps) {
+ const { userId } = route.params;
+
+ return (
+
+ {/* Header with Avatar */}
+
+
+
+ T
+
+
+ Test User
+ user@example.com
+
+ userId: {userId}
+
+
+
+ {/* Stats */}
+
+
+
+ 42
+ Posts
+
+
+ 1.2K
+ Followers
+
+
+ 890
+ Following
+
+
+
+
+ {/* Profile Info */}
+
+ {}} />
+ console.log('Edit name')} />
+ console.log('Edit email')} />
+ console.log('Edit phone')} />
+ console.log('Edit location')} />
+
+
+ {/* Actions */}
+
+
+ console.log('Edit profile')} />
+ console.log('Share')} variant="secondary" />
+
+
+ console.log('Logout')} variant="danger" />
+
+
+
+ {/* Footer */}
+
+ @skylarbarrera
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ scrollView: {
+ flex: 1,
+ backgroundColor: colors.light.bg,
+ },
+ scrollContent: {
+ padding: spacing.lg,
+ paddingBottom: 100,
+ },
+
+ // Header
+ header: {
+ alignItems: 'center',
+ marginBottom: spacing.lg,
+ padding: spacing.xl,
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.xl,
+ ...shadows.md,
+ },
+ avatarContainer: {
+ marginBottom: spacing.lg,
+ },
+ avatar: {
+ width: 80,
+ height: 80,
+ borderRadius: 40,
+ backgroundColor: colors.primary,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ avatarText: {
+ fontSize: 32,
+ fontWeight: typography.weights.semibold,
+ color: '#fff',
+ },
+ userName: {
+ fontSize: typography.sizes.large,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ },
+ userEmail: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textTertiary,
+ marginTop: spacing.xs,
+ },
+ routeInfoContainer: {
+ marginTop: spacing.md,
+ backgroundColor: colors.light.bgSubtle,
+ paddingHorizontal: spacing.md,
+ paddingVertical: spacing.xs,
+ borderRadius: radius.md,
+ },
+ routeInfo: {
+ fontSize: typography.sizes.caption,
+ color: colors.light.textMuted,
+ fontFamily: 'Menlo',
+ },
+
+ // Stats
+ statsRow: {
+ flexDirection: 'row',
+ justifyContent: 'space-around',
+ },
+ statItem: {
+ alignItems: 'center',
+ padding: spacing.md,
+ },
+ statValue: {
+ fontSize: typography.sizes.large,
+ fontWeight: typography.weights.bold,
+ color: colors.light.text,
+ },
+ statLabel: {
+ fontSize: typography.sizes.caption,
+ color: colors.light.textTertiary,
+ marginTop: spacing.xs,
+ },
+
+ // Buttons
+ buttonRow: {
+ flexDirection: 'row',
+ gap: spacing.sm,
+ marginBottom: spacing.sm,
+ },
+
+ // Footer
+ footer: {
+ marginTop: spacing.xl,
+ alignItems: 'center',
+ paddingVertical: spacing.lg,
+ },
+ footerText: {
+ fontSize: typography.sizes.small,
+ color: colors.light.textMuted,
+ },
+});
diff --git a/packages/agentation-rn/example/screens/ScrollExampleScreen.tsx b/packages/agentation-rn/example/screens/ScrollExampleScreen.tsx
new file mode 100644
index 0000000..b85c89c
--- /dev/null
+++ b/packages/agentation-rn/example/screens/ScrollExampleScreen.tsx
@@ -0,0 +1,145 @@
+
+import React from 'react';
+import { View, Text, ScrollView, StyleSheet, NativeScrollEvent, NativeSyntheticEvent } from 'react-native';
+import { useAgentationScroll } from 'agentation-rn';
+import { colors, spacing, radius, typography, shadows } from '../theme';
+
+export function ScrollExampleScreen() {
+ // Hook returns onScroll and scrollEventThrottle for ScrollView
+ // Gracefully no-ops in production or if Agentation not available
+ const { onScroll, scrollEventThrottle } = useAgentationScroll();
+
+ return (
+
+
+ Scroll Example
+
+ Annotations adjust position as you scroll
+
+
+
+
+ useAgentationScroll
+
+ This hook provides scroll tracking for annotation positioning.
+ Markers stay anchored to content as you scroll.
+
+
+
+ {`const { onScroll, scrollEventThrottle } = useAgentationScroll();`}
+
+
+
+
+ {/* Generate cards to scroll through */}
+ {Array.from({ length: 15 }, (_, i) => (
+
+ Card {i + 1}
+
+ Tap anywhere to create an annotation. The marker will stay
+ anchored to this content as you scroll up and down.
+
+
+ ))}
+
+
+ End of list
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ backgroundColor: colors.light.bg,
+ },
+ content: {
+ padding: spacing.lg,
+ paddingBottom: 120,
+ },
+
+ // Header
+ header: {
+ marginBottom: spacing.lg,
+ },
+ title: {
+ fontSize: typography.sizes.large,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ letterSpacing: typography.letterSpacing.tight,
+ },
+ subtitle: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textTertiary,
+ marginTop: spacing.xs,
+ },
+
+ // Info Card
+ infoCard: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.xl,
+ padding: spacing.lg,
+ marginBottom: spacing.lg,
+ borderWidth: 1,
+ borderColor: colors.primary,
+ borderStyle: 'solid',
+ },
+ infoTitle: {
+ fontSize: typography.sizes.ui,
+ fontWeight: typography.weights.semibold,
+ color: colors.primary,
+ marginBottom: spacing.sm,
+ },
+ infoText: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ marginBottom: spacing.md,
+ },
+ codeBlock: {
+ backgroundColor: colors.light.bgSubtle,
+ borderRadius: radius.md,
+ padding: spacing.md,
+ },
+ codeText: {
+ fontSize: typography.sizes.caption,
+ fontFamily: 'Menlo',
+ color: colors.light.text,
+ },
+
+ // Cards
+ card: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.xl,
+ padding: spacing.lg,
+ marginBottom: spacing.md,
+ ...shadows.md,
+ },
+ cardTitle: {
+ fontSize: typography.sizes.title,
+ fontWeight: typography.weights.semibold,
+ color: colors.light.text,
+ marginBottom: spacing.sm,
+ },
+ cardText: {
+ fontSize: typography.sizes.body,
+ color: colors.light.textSecondary,
+ lineHeight: 20,
+ },
+
+ // Footer
+ footer: {
+ alignItems: 'center',
+ paddingVertical: spacing.xl,
+ },
+ footerText: {
+ fontSize: typography.sizes.caption,
+ color: colors.light.textMuted,
+ },
+});
diff --git a/packages/agentation-rn/example/screens/SettingsScreen.tsx b/packages/agentation-rn/example/screens/SettingsScreen.tsx
new file mode 100644
index 0000000..7444718
--- /dev/null
+++ b/packages/agentation-rn/example/screens/SettingsScreen.tsx
@@ -0,0 +1,123 @@
+
+import React, { useState } from 'react';
+import {
+ View,
+ Text,
+ StyleSheet,
+ ScrollView,
+} from 'react-native';
+import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
+import { colors, spacing, typography } from '../theme';
+import { Card, ListItem, ToggleRow } from '../components';
+
+type RootStackParamList = {
+ Home: undefined;
+ Settings: undefined;
+ Profile: { userId: string };
+};
+
+type SettingsScreenProps = {
+ navigation: NativeStackNavigationProp;
+};
+
+export function SettingsScreen({ navigation }: SettingsScreenProps) {
+ const [notifications, setNotifications] = useState(true);
+ const [darkMode, setDarkMode] = useState(false);
+ const [analytics, setAnalytics] = useState(true);
+ const [biometrics, setBiometrics] = useState(false);
+
+ return (
+
+ {/* Preferences */}
+
+
+
+
+
+
+
+ {/* Account */}
+
+ navigation.navigate('Profile', { userId: '123' })}
+ />
+ console.log('Security')}
+ />
+ console.log('Privacy')}
+ />
+
+
+ {/* About */}
+
+ {}}
+ />
+ console.log('Terms')}
+ />
+ console.log('Privacy Policy')}
+ />
+
+
+ {/* Footer */}
+
+ @skylarbarrera
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ scrollView: {
+ flex: 1,
+ backgroundColor: colors.light.bg,
+ },
+ scrollContent: {
+ padding: spacing.lg,
+ paddingBottom: 100,
+ },
+ footer: {
+ marginTop: spacing.xl,
+ alignItems: 'center',
+ paddingVertical: spacing.lg,
+ },
+ footerText: {
+ fontSize: typography.sizes.small,
+ color: colors.light.textMuted,
+ },
+});
diff --git a/packages/agentation-rn/example/screens/index.ts b/packages/agentation-rn/example/screens/index.ts
new file mode 100644
index 0000000..a4b3514
--- /dev/null
+++ b/packages/agentation-rn/example/screens/index.ts
@@ -0,0 +1,5 @@
+export { HomeScreen } from './HomeScreen';
+export { SettingsScreen } from './SettingsScreen';
+export { ProfileScreen } from './ProfileScreen';
+export { ScrollExampleScreen } from './ScrollExampleScreen';
+export { ModalExampleScreen } from './ModalExampleScreen';
diff --git a/packages/agentation-rn/example/theme.ts b/packages/agentation-rn/example/theme.ts
new file mode 100644
index 0000000..f0167a4
--- /dev/null
+++ b/packages/agentation-rn/example/theme.ts
@@ -0,0 +1,205 @@
+
+export const colors = {
+ // Primary actions
+ primary: '#3c82f7',
+ primaryHover: '#74b1fd',
+ success: '#34c759',
+ danger: '#ff3b30',
+
+ // Dark mode (primary UI)
+ dark: {
+ bg: '#1a1a1a',
+ bgElevated: '#2a2a2a',
+ bgOverlay: '#383838',
+ text: '#ffffff',
+ textSecondary: 'rgba(255,255,255,0.85)',
+ textTertiary: 'rgba(255,255,255,0.5)',
+ textMuted: 'rgba(255,255,255,0.35)',
+ border: 'rgba(255,255,255,0.08)',
+ borderLight: 'rgba(255,255,255,0.12)',
+ },
+
+ // Light mode
+ light: {
+ bg: '#fdfdfc',
+ bgCard: '#ffffff',
+ bgSubtle: 'rgba(0,0,0,0.03)',
+ bgHover: 'rgba(0,0,0,0.06)',
+ text: '#111111',
+ textSecondary: 'rgba(0,0,0,0.7)',
+ textTertiary: 'rgba(0,0,0,0.5)',
+ textMuted: 'rgba(0,0,0,0.35)',
+ border: 'rgba(0,0,0,0.08)',
+ borderMedium: 'rgba(0,0,0,0.12)',
+ },
+};
+
+export const spacing = {
+ xs: 4,
+ sm: 8,
+ md: 12,
+ lg: 16,
+ xl: 24,
+ xxl: 32,
+};
+
+export const radius = {
+ sm: 4,
+ md: 6,
+ lg: 8,
+ xl: 12,
+ xxl: 16,
+ pill: 999,
+};
+
+export const typography = {
+ // React Native uses system fonts (SF Pro on iOS, Roboto on Android)
+ sizes: {
+ tiny: 10,
+ small: 11,
+ caption: 12,
+ body: 14,
+ ui: 13,
+ title: 16,
+ heading: 18,
+ large: 20,
+ },
+ weights: {
+ regular: '400' as const,
+ medium: '500' as const,
+ semibold: '600' as const,
+ bold: '700' as const,
+ },
+ letterSpacing: {
+ tight: -0.3,
+ normal: 0,
+ wide: 0.5,
+ },
+};
+
+export const shadows = {
+ sm: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 1 },
+ shadowOpacity: 0.06,
+ shadowRadius: 3,
+ elevation: 1,
+ },
+ md: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 2 },
+ shadowOpacity: 0.08,
+ shadowRadius: 8,
+ elevation: 3,
+ },
+ lg: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 4 },
+ shadowOpacity: 0.15,
+ shadowRadius: 16,
+ elevation: 5,
+ },
+ marker: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 2 },
+ shadowOpacity: 0.2,
+ shadowRadius: 6,
+ elevation: 4,
+ },
+};
+
+// Animation presets (for react-native-reanimated)
+export const animations = {
+ spring: {
+ damping: 15,
+ stiffness: 150,
+ },
+ springBouncy: {
+ damping: 12,
+ stiffness: 180,
+ },
+ timing: {
+ fast: 150,
+ normal: 200,
+ slow: 300,
+ },
+};
+
+// Common component styles
+export const componentStyles = {
+ // Cards
+ card: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.lg,
+ padding: spacing.lg,
+ ...shadows.md,
+ },
+ cardDark: {
+ backgroundColor: colors.dark.bg,
+ borderRadius: radius.lg,
+ padding: spacing.lg,
+ ...shadows.md,
+ },
+
+ // Buttons
+ buttonPrimary: {
+ backgroundColor: colors.light.text,
+ borderRadius: radius.md,
+ paddingVertical: spacing.sm,
+ paddingHorizontal: spacing.md + 2,
+ },
+ buttonSecondary: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.md,
+ paddingVertical: spacing.sm,
+ paddingHorizontal: spacing.md + 2,
+ borderWidth: 1,
+ borderColor: colors.light.borderMedium,
+ },
+
+ // Icon buttons (toolbar style)
+ iconButton: {
+ width: 34,
+ height: 34,
+ borderRadius: 17,
+ justifyContent: 'center' as const,
+ alignItems: 'center' as const,
+ },
+
+ // Inputs
+ input: {
+ backgroundColor: colors.light.bgCard,
+ borderRadius: radius.md,
+ paddingVertical: spacing.sm,
+ paddingHorizontal: spacing.md,
+ borderWidth: 1,
+ borderColor: colors.light.border,
+ fontSize: typography.sizes.body,
+ },
+
+ // Badges
+ badge: {
+ minWidth: 18,
+ height: 18,
+ borderRadius: 9,
+ paddingHorizontal: 5,
+ backgroundColor: colors.primary,
+ justifyContent: 'center' as const,
+ alignItems: 'center' as const,
+ },
+ badgeText: {
+ color: '#fff',
+ fontSize: typography.sizes.tiny,
+ fontWeight: typography.weights.semibold,
+ },
+};
+
+export default {
+ colors,
+ spacing,
+ radius,
+ typography,
+ shadows,
+ animations,
+ componentStyles,
+};
diff --git a/packages/agentation-rn/example/tsconfig.json b/packages/agentation-rn/example/tsconfig.json
new file mode 100644
index 0000000..b9567f6
--- /dev/null
+++ b/packages/agentation-rn/example/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "extends": "expo/tsconfig.base",
+ "compilerOptions": {
+ "strict": true
+ }
+}
diff --git a/packages/agentation-rn/package.json b/packages/agentation-rn/package.json
new file mode 100644
index 0000000..5ca2c88
--- /dev/null
+++ b/packages/agentation-rn/package.json
@@ -0,0 +1,73 @@
+{
+ "name": "agentation-rn",
+ "version": "1.0.0",
+ "description": "Visual feedback for AI coding agents - React Native",
+ "main": "dist/index.js",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.js"
+ }
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/benjitaylor/agentation.git",
+ "directory": "packages/agentation-rn"
+ },
+ "keywords": [
+ "react-native",
+ "annotations",
+ "feedback",
+ "ai",
+ "claude-code",
+ "devtools",
+ "developer-tools",
+ "debugging"
+ ],
+ "author": "@skylarbarrera",
+ "license": "PolyForm-Shield-1.0.0",
+ "peerDependencies": {
+ "react": ">=18.0.0",
+ "react-native": ">=0.72.0",
+ "react-native-safe-area-context": ">=4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@callstack/liquid-glass": {
+ "optional": true
+ },
+ "react-native-dev-inspector": {
+ "optional": true
+ },
+ "react-native-svg": {
+ "optional": true
+ },
+ "react-native-screens": {
+ "optional": true
+ }
+ },
+ "dependencies": {
+ "@react-native-async-storage/async-storage": "^1.21.0",
+ "expo-clipboard": "^8.0.8"
+ },
+ "devDependencies": {
+ "@callstack/liquid-glass": "^0.7.0",
+ "@types/react": "^19.1.1",
+ "tsup": "^8.0.0",
+ "typescript": "^5.3.0"
+ },
+ "scripts": {
+ "build": "tsup",
+ "watch": "tsup --watch",
+ "clean": "rm -rf dist",
+ "typecheck": "tsc --noEmit",
+ "prepublishOnly": "npm run build"
+ },
+ "files": [
+ "dist",
+ "README.md",
+ "LICENSE"
+ ]
+}
diff --git a/packages/agentation-rn/src/components/AgenationView.tsx b/packages/agentation-rn/src/components/AgenationView.tsx
new file mode 100644
index 0000000..9ed69db
--- /dev/null
+++ b/packages/agentation-rn/src/components/AgenationView.tsx
@@ -0,0 +1,185 @@
+import React, { useState, useRef, useCallback } from 'react';
+import {
+ View,
+ StyleSheet,
+ GestureResponderEvent,
+} from 'react-native';
+import { debugLog, debugError } from '../utils/debug';
+import { detectComponentAtPoint } from '../utils/componentDetection';
+import type { Annotation, ComponentDetection } from '../types';
+import { AnnotationMarker } from './AnnotationMarker';
+import { AnnotationPopup } from './AnnotationPopup';
+import { Toolbar } from './Toolbar';
+import { copyToClipboard, formatDetectedElement } from '../utils/helpers';
+
+export interface AgenationViewProps {
+ children: React.ReactNode;
+ enabled?: boolean;
+ onAnnotationAdd?: (annotation: Partial) => void;
+ style?: React.ComponentProps['style'];
+}
+
+export function AgenationView({
+ children,
+ enabled = true,
+ onAnnotationAdd,
+ style,
+}: AgenationViewProps) {
+ if (!__DEV__ || !enabled) {
+ return {children};
+ }
+
+ const [annotations, setAnnotations] = useState[]>([]);
+ const [popupVisible, setPopupVisible] = useState(false);
+ const [pendingTap, setPendingTap] = useState<{ x: number; y: number } | null>(null);
+ const [pendingDetection, setPendingDetection] = useState(null);
+ const [selectedIndex, setSelectedIndex] = useState(null);
+ const [isActive, setIsActive] = useState(true);
+ const contentRef = useRef(null);
+
+ const handleToggleMode = useCallback(() => {
+ setIsActive(prev => !prev);
+ }, []);
+
+ const handleCopyMarkdown = useCallback(async () => {
+ if (annotations.length === 0) return;
+
+ const markdown = annotations
+ .map((ann, i) => {
+ const location = ann.elementPath
+ ? `${ann.elementPath}${ann.element ? ` (${ann.element})` : ''}`
+ : ann.element || 'Unknown';
+ return `${i + 1}. **${location}**\n ${ann.comment || '(no comment)'}`;
+ })
+ .join('\n\n');
+
+ await copyToClipboard(markdown);
+ debugLog('Copied annotations to clipboard');
+ }, [annotations]);
+
+ const handleClearAll = useCallback(() => {
+ setAnnotations([]);
+ }, []);
+
+ const handleOverlayTouch = useCallback(
+ (e: GestureResponderEvent): boolean => {
+ const touch = e.nativeEvent.touches?.[0] || e.nativeEvent;
+ const locationX = touch.locationX ?? touch.pageX;
+ const locationY = touch.locationY ?? touch.pageY;
+
+ debugLog('AgenationView touch at:', locationX, locationY);
+
+ setPendingTap({ x: locationX, y: locationY });
+ setSelectedIndex(null);
+ setPendingDetection(null);
+ setPopupVisible(true);
+
+ detectComponentAtPoint(contentRef.current, locationX, locationY)
+ .then(detection => {
+ setPendingDetection(detection);
+ })
+ .catch((e) => debugError('Detection failed:', e));
+
+ return true;
+ },
+ []
+ );
+
+ const handleMarkerPress = useCallback((index: number) => {
+ const ann = annotations[index];
+ setSelectedIndex(index);
+ setPendingTap({ x: ann.x!, y: ann.y! });
+ setPopupVisible(true);
+ }, [annotations]);
+
+ const handlePopupSave = useCallback((comment: string) => {
+ if (selectedIndex !== null) {
+ setAnnotations(prev => prev.map((ann, i) =>
+ i === selectedIndex ? { ...ann, comment } : ann
+ ));
+ } else if (pendingTap && pendingDetection?.codeInfo) {
+ const newAnnotation: Partial = {
+ x: pendingTap.x,
+ y: pendingTap.y,
+ comment,
+ element: pendingDetection.codeInfo.componentName || 'Unknown',
+ elementPath: pendingDetection.codeInfo.relativePath || '',
+ timestamp: Date.now(),
+ };
+ setAnnotations(prev => [...prev, newAnnotation]);
+ onAnnotationAdd?.(newAnnotation);
+ }
+
+ setPopupVisible(false);
+ setPendingTap(null);
+ setPendingDetection(null);
+ setSelectedIndex(null);
+ }, [selectedIndex, pendingTap, pendingDetection, onAnnotationAdd]);
+
+ const handlePopupCancel = useCallback(() => {
+ setPopupVisible(false);
+ setPendingTap(null);
+ setPendingDetection(null);
+ setSelectedIndex(null);
+ }, []);
+
+ const handlePopupDelete = useCallback(() => {
+ if (selectedIndex !== null) {
+ setAnnotations(prev => prev.filter((_, i) => i !== selectedIndex));
+ }
+ setPopupVisible(false);
+ setPendingTap(null);
+ setSelectedIndex(null);
+ }, [selectedIndex]);
+
+ return (
+
+ {children}
+
+ {isActive && !popupVisible && (
+
+ )}
+
+ {annotations.map((ann, index) => (
+ handleMarkerPress(index)}
+ />
+ ))}
+
+
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ },
+ overlay: {
+ ...StyleSheet.absoluteFillObject,
+ backgroundColor: 'transparent',
+ },
+});
diff --git a/packages/agentation-rn/src/components/Agentation.tsx b/packages/agentation-rn/src/components/Agentation.tsx
new file mode 100644
index 0000000..ff8a6eb
--- /dev/null
+++ b/packages/agentation-rn/src/components/Agentation.tsx
@@ -0,0 +1,423 @@
+import { useState, useRef, useCallback, useMemo, useEffect } from 'react';
+import {
+ View,
+ StyleSheet,
+ GestureResponderEvent,
+} from 'react-native';
+import { useSafeAreaInsets } from 'react-native-safe-area-context';
+import { debugLog, debugError } from '../utils/debug';
+import type { AgenationProps, Annotation, ComponentDetection, DemoAnnotation, AgenationSettings, OutputDetailLevel } from '../types';
+import { DEFAULT_SETTINGS } from '../types';
+import { loadSettings, saveSettings } from '../utils/storage';
+import { useAnnotations } from '../hooks/useAnnotations';
+import { generateId, getTimestamp, formatDetectedElement } from '../utils/helpers';
+import { detectComponentAtPoint } from '../utils/componentDetection';
+import { Toolbar } from './Toolbar';
+import { AnnotationMarker } from './AnnotationMarker';
+import { AnnotationPopup } from './AnnotationPopup';
+import { AgenationContext, AgenationContextValue } from '../context/AgenationContext';
+
+
+export type { AgenationProps };
+
+function convertDemoAnnotations(demoAnnotations: DemoAnnotation[]): Annotation[] {
+ return demoAnnotations.map((demo) => {
+ const parts = demo.selector.split(':');
+ const element = parts[0] || 'Unknown';
+ const lineNumber = parts[1] ? parseInt(parts[1], 10) : undefined;
+
+ return {
+ id: generateId(),
+ x: 0,
+ y: 0,
+ comment: demo.comment,
+ element,
+ elementPath: demo.selector,
+ timestamp: getTimestamp(),
+ selectedText: demo.selectedText,
+ lineNumber,
+ };
+ });
+}
+
+function getCurrentRouteName(): string | undefined {
+ try {
+ const globalNav = (global as any).__REACT_NAVIGATION_DEVTOOLS__;
+ if (globalNav?.navigatorRef?.current) {
+ const state = globalNav.navigatorRef.current.getRootState?.();
+ if (state) {
+ let current = state;
+ while (current.routes && current.index !== undefined) {
+ current = current.routes[current.index];
+ if (!current.state) return current.name;
+ }
+ return current.name;
+ }
+ }
+ return undefined;
+ } catch {
+ return undefined;
+ }
+}
+
+export function Agentation({
+ children,
+ disabled = false,
+ demoAnnotations,
+ onAnnotationAdd,
+ onAnnotationDelete,
+ onAnnotationUpdate,
+ onAnnotationsClear,
+ onCopy,
+ copyToClipboard = true,
+ toolbarOffset,
+}: AgenationProps) {
+ const insets = useSafeAreaInsets();
+
+ if (disabled || !__DEV__) {
+ return <>{children}>;
+ }
+
+ const toolbarHeight = Math.max(insets.bottom, 16) + 16 + 56 + (toolbarOffset?.y ?? 0);
+
+ const [isActive, setIsActive] = useState(false);
+ const [selectedAnnotation, setSelectedAnnotation] = useState(null);
+ const [popupVisible, setPopupVisible] = useState(false);
+ const [pendingTap, setPendingTap] = useState<{ x: number; y: number } | null>(null);
+ const [pendingDetection, setPendingDetection] = useState(null);
+ const [currentRoute, setCurrentRoute] = useState(getCurrentRouteName());
+ const [scrollOffset, setScrollOffset] = useState({ x: 0, y: 0 });
+ const [settings, setSettings] = useState(DEFAULT_SETTINGS);
+ const [isSettingsMenuOpen, setIsSettingsMenuOpen] = useState(false);
+ const [removingIds, setRemovingIds] = useState>(new Set());
+ const [isDarkMode, setIsDarkMode] = useState(true);
+ const [showMarkers, setShowMarkers] = useState(true);
+ const contentRef = useRef(null);
+
+ useEffect(() => {
+ loadSettings().then(setSettings);
+ }, []);
+
+ const handleAnnotationColorChange = useCallback((color: string) => {
+ const newSettings = { ...settings, annotationColor: color };
+ setSettings(newSettings);
+ saveSettings({ annotationColor: color });
+ }, [settings]);
+
+ const handleClearAfterCopyChange = useCallback((value: boolean) => {
+ const newSettings = { ...settings, clearAfterCopy: value };
+ setSettings(newSettings);
+ saveSettings({ clearAfterCopy: value });
+ }, [settings]);
+
+ const handleOutputDetailChange = useCallback((level: OutputDetailLevel) => {
+ const newSettings = { ...settings, outputDetail: level };
+ setSettings(newSettings);
+ saveSettings({ outputDetail: level });
+ }, [settings]);
+
+ const handleSettingsMenuChange = useCallback((isOpen: boolean) => {
+ setIsSettingsMenuOpen(isOpen);
+ }, []);
+
+ const handleShowMarkersChange = useCallback((show: boolean) => {
+ setShowMarkers(show);
+ }, []);
+
+ const reportScrollOffset = useCallback((x: number, y: number) => {
+ setScrollOffset({ x, y });
+ }, []);
+
+ const contextValue = useMemo(() => ({
+ reportScrollOffset,
+ scrollOffset,
+ isDarkMode,
+ setIsDarkMode,
+ }), [reportScrollOffset, scrollOffset, isDarkMode]);
+
+ const updateCurrentRoute = useCallback(() => {
+ const route = getCurrentRouteName();
+ if (route !== currentRoute) {
+ setCurrentRoute(route);
+ }
+ }, [currentRoute]);
+
+ const initialAnnotations = useMemo(() => {
+ if (!demoAnnotations || !demoAnnotations.length) {
+ return undefined;
+ }
+ return convertDemoAnnotations(demoAnnotations);
+ }, [demoAnnotations]);
+
+ const {
+ annotations,
+ createAnnotation,
+ updateAnnotation,
+ deleteAnnotation,
+ clearAll,
+ copyMarkdown,
+ } = useAnnotations({
+ initialAnnotations,
+ onAnnotationAdd,
+ onAnnotationUpdate,
+ onAnnotationDelete,
+ onCopy,
+ copyToClipboard,
+ });
+
+ const handleToggleMode = useCallback(() => {
+ setIsActive(prev => {
+ const newMode = !prev;
+ if (!newMode) {
+ setSelectedAnnotation(null);
+ setPopupVisible(false);
+ setPendingTap(null);
+ setPendingDetection(null);
+ }
+ return newMode;
+ });
+ }, []);
+
+ const handleOverlayStartShouldSetResponder = useCallback(
+ (e: GestureResponderEvent): boolean => {
+ const touch = e.nativeEvent.touches?.[0] || e.nativeEvent;
+ const locationX = touch.locationX ?? touch.pageX;
+ const locationY = touch.locationY ?? touch.pageY;
+
+ debugLog('Overlay touch at:', locationX, locationY);
+
+ setPendingTap({ x: locationX, y: locationY });
+ setSelectedAnnotation(null);
+ setPendingDetection(null);
+ setPopupVisible(true);
+
+ detectComponentAtPoint(contentRef.current, locationX, locationY)
+ .then(detection => {
+ setPendingDetection(detection);
+ })
+ .catch((e) => debugError('Detection failed:', e));
+
+ return true;
+ },
+ []
+ );
+
+ const handleMarkerPress = useCallback((annotation: Annotation) => {
+ setSelectedAnnotation(annotation);
+ setPendingTap({ x: annotation.x, y: annotation.y });
+ setPopupVisible(true);
+ }, []);
+
+ const handleMarkerEdit = useCallback((annotation: Annotation) => {
+ setSelectedAnnotation(annotation);
+ setPendingTap({ x: annotation.x, y: annotation.y });
+ setPopupVisible(true);
+ }, []);
+
+ const handleMarkerDelete = useCallback(
+ (id: string) => {
+ deleteAnnotation(id);
+ },
+ [deleteAnnotation]
+ );
+
+ const handlePopupSave = useCallback(
+ async (comment: string) => {
+ updateCurrentRoute();
+
+ if (selectedAnnotation) {
+ updateAnnotation(selectedAnnotation.id, comment);
+ } else if (pendingTap) {
+ await createAnnotation(
+ pendingTap.x,
+ pendingTap.y,
+ contentRef.current,
+ comment
+ );
+ }
+
+ setPopupVisible(false);
+ setPendingTap(null);
+ setSelectedAnnotation(null);
+ setPendingDetection(null);
+ },
+ [selectedAnnotation, pendingTap, updateAnnotation, createAnnotation, updateCurrentRoute]
+ );
+
+ const handlePopupCancel = useCallback(() => {
+ setPopupVisible(false);
+ setPendingTap(null);
+ setSelectedAnnotation(null);
+ setPendingDetection(null);
+ }, []);
+
+ const handlePopupDelete = useCallback(() => {
+ if (selectedAnnotation) {
+ deleteAnnotation(selectedAnnotation.id);
+ }
+ setPopupVisible(false);
+ setPendingTap(null);
+ setSelectedAnnotation(null);
+ }, [selectedAnnotation, deleteAnnotation]);
+
+ const handleCopyMarkdown = useCallback(async () => {
+ await copyMarkdown(settings.outputDetail);
+ if (settings.clearAfterCopy) {
+ clearAll();
+ }
+ }, [copyMarkdown, settings.outputDetail, settings.clearAfterCopy, clearAll]);
+
+ const handleMarkerRemoveComplete = useCallback((id: string) => {
+ setRemovingIds(prev => {
+ const next = new Set(prev);
+ next.delete(id);
+ return next;
+ });
+ deleteAnnotation(id);
+ }, [deleteAnnotation]);
+
+ const handleClearAll = useCallback(() => {
+ if (onAnnotationsClear) {
+ onAnnotationsClear([...annotations]);
+ }
+ // Stagger the removal animations (reverse order - last markers exit first, matching web)
+ const STAGGER_DELAY = 20; // ms between each marker starting to animate out
+ const reversedAnnotations = [...annotations].reverse();
+ reversedAnnotations.forEach((annotation, index) => {
+ setTimeout(() => {
+ setRemovingIds(prev => new Set([...prev, annotation.id]));
+ }, index * STAGGER_DELAY);
+ });
+ }, [onAnnotationsClear, annotations]);
+
+ useEffect(() => {
+ const route = getCurrentRouteName();
+ if (route !== currentRoute) {
+ setCurrentRoute(route);
+ }
+ }, [annotations, currentRoute]);
+
+ const visibleAnnotations = useMemo(() => {
+ return annotations.filter(annotation => {
+ if (!annotation.routeName && !currentRoute) return true;
+ if (!annotation.routeName) return true;
+ return annotation.routeName === currentRoute;
+ });
+ }, [annotations, currentRoute]);
+
+ const selectedAnnotationIndex = useMemo(() => {
+ if (!selectedAnnotation) return -1;
+ return visibleAnnotations.findIndex(a => a.id === selectedAnnotation.id);
+ }, [visibleAnnotations, selectedAnnotation]);
+
+ return (
+
+
+
+ {children}
+
+
+ <>
+ {isActive && !popupVisible && (
+
+ )}
+
+ {showMarkers && (
+
+ {visibleAnnotations.map((annotation, index) => (
+ handleMarkerPress(annotation)}
+ onEdit={handleMarkerEdit}
+ onDelete={handleMarkerDelete}
+ scrollOffset={scrollOffset}
+ color={settings.annotationColor}
+ isRemoving={removingIds.has(annotation.id)}
+ onRemoveComplete={() => handleMarkerRemoveComplete(annotation.id)}
+ />
+ ))}
+
+ )}
+
+
+
+ {popupVisible && selectedAnnotation && selectedAnnotationIndex !== -1 && (
+
+ {}}
+ scrollOffset={scrollOffset}
+ color={settings.annotationColor}
+ skipEntryAnimation
+ />
+
+ )}
+
+
+ >
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ flex: 1,
+ },
+ content: {
+ flex: 1,
+ },
+ overlayTouch: {
+ ...StyleSheet.absoluteFillObject,
+ backgroundColor: 'transparent',
+ zIndex: 1,
+ },
+ markersContainer: {
+ ...StyleSheet.absoluteFillObject,
+ zIndex: 2,
+ },
+ selectedMarkerContainer: {
+ ...StyleSheet.absoluteFillObject,
+ zIndex: 1001,
+ },
+});
diff --git a/packages/agentation-rn/src/components/AnnotationMarker.tsx b/packages/agentation-rn/src/components/AnnotationMarker.tsx
new file mode 100644
index 0000000..19366b7
--- /dev/null
+++ b/packages/agentation-rn/src/components/AnnotationMarker.tsx
@@ -0,0 +1,282 @@
+import { useEffect, useRef, memo } from 'react';
+import {
+ View,
+ Text,
+ TouchableOpacity,
+ StyleSheet,
+ Platform,
+ Animated,
+ ActionSheetIOS,
+ Alert,
+} from 'react-native';
+import type { AnnotationMarkerProps, Annotation } from '../types';
+import { TIMING } from '../utils/animations';
+
+interface MarkerProps extends Omit {
+ annotation?: Annotation;
+ index?: number;
+ isPending?: boolean;
+ x: number;
+ y: number;
+ onPress?: () => void;
+ onLongPress?: () => void;
+ onEdit?: (annotation: Annotation) => void;
+ onDelete?: (id: string) => void;
+ scrollOffset?: { x: number; y: number };
+ isEditing?: boolean;
+ skipEntryAnimation?: boolean;
+ color?: string;
+ isRemoving?: boolean;
+ onRemoveComplete?: () => void;
+}
+
+export const AnnotationMarker = memo(function AnnotationMarker(props: (AnnotationMarkerProps & {
+ scrollOffset?: { x: number; y: number };
+ onEdit?: (annotation: Annotation) => void;
+ onDelete?: (id: string) => void;
+ isEditing?: boolean;
+ skipEntryAnimation?: boolean;
+ color?: string;
+ isRemoving?: boolean;
+ onRemoveComplete?: () => void;
+}) | MarkerProps) {
+ const { isSelected, onPress } = props;
+ const onLongPress = 'onLongPress' in props ? props.onLongPress : undefined;
+
+ const isPending = 'isPending' in props ? props.isPending : false;
+ const x = 'x' in props ? props.x : props.annotation.x;
+ const y = 'y' in props ? props.y : props.annotation.y;
+ const index = 'index' in props ? props.index : undefined;
+ const scrollOffset = 'scrollOffset' in props ? props.scrollOffset : { x: 0, y: 0 };
+ const annotation = 'annotation' in props ? props.annotation : undefined;
+ const onEdit = 'onEdit' in props ? props.onEdit : undefined;
+ const onDelete = 'onDelete' in props ? props.onDelete : undefined;
+ const skipEntryAnimation = 'skipEntryAnimation' in props ? props.skipEntryAnimation : false;
+ const color = 'color' in props ? props.color : '#3c82f7';
+ const isRemoving = 'isRemoving' in props ? props.isRemoving : false;
+ const onRemoveComplete = 'onRemoveComplete' in props ? props.onRemoveComplete : undefined;
+
+ const markerSize = 22;
+
+ const opacityAnim = useRef(new Animated.Value(skipEntryAnimation ? 1 : 0)).current;
+ const scaleAnim = useRef(new Animated.Value(skipEntryAnimation ? 1 : 0.3)).current;
+
+ useEffect(() => {
+ if (skipEntryAnimation) return;
+
+ Animated.parallel([
+ Animated.timing(opacityAnim, {
+ toValue: 1,
+ duration: TIMING.entrance,
+ useNativeDriver: true,
+ }),
+ Animated.timing(scaleAnim, {
+ toValue: 1,
+ duration: TIMING.entrance,
+ useNativeDriver: true,
+ }),
+ ]).start();
+ }, [opacityAnim, scaleAnim, skipEntryAnimation]);
+
+ useEffect(() => {
+ if (isRemoving) {
+ Animated.parallel([
+ Animated.timing(opacityAnim, {
+ toValue: 0,
+ duration: TIMING.exit,
+ useNativeDriver: true,
+ }),
+ Animated.timing(scaleAnim, {
+ toValue: 0.3,
+ duration: TIMING.exit,
+ useNativeDriver: true,
+ }),
+ ]).start(() => {
+ onRemoveComplete?.();
+ });
+ }
+ }, [isRemoving, opacityAnim, scaleAnim, onRemoveComplete]);
+
+ const adjustedX = x - (scrollOffset?.x || 0);
+ const adjustedY = y - (scrollOffset?.y || 0);
+
+ const handleEdit = () => {
+ if (annotation && onEdit) {
+ onEdit(annotation);
+ }
+ };
+
+ const handleDelete = () => {
+ if (annotation && onDelete) {
+ onDelete(annotation.id);
+ }
+ };
+
+ const handleLongPress = () => {
+ if (onLongPress) {
+ onLongPress();
+ return;
+ }
+
+ if (!annotation) return;
+
+ const commentPreview = annotation.comment.length > 50
+ ? annotation.comment.substring(0, 50) + '...'
+ : annotation.comment;
+
+ if (Platform.OS === 'ios') {
+ const options = ['Cancel'];
+ const destructiveIndex = onDelete ? options.length : undefined;
+ if (onDelete) options.push('Delete');
+ if (onEdit) options.push('Edit');
+
+ ActionSheetIOS.showActionSheetWithOptions(
+ {
+ title: `Annotation #${(index ?? 0) + 1}`,
+ message: commentPreview || undefined,
+ options,
+ cancelButtonIndex: 0,
+ destructiveButtonIndex: destructiveIndex,
+ },
+ (buttonIndex) => {
+ if (buttonIndex === 0) return; // Cancel
+ if (onDelete && buttonIndex === 1) {
+ handleDelete();
+ } else if (onEdit) {
+ handleEdit();
+ }
+ }
+ );
+ } else {
+ Alert.alert(
+ `Annotation #${(index ?? 0) + 1}`,
+ commentPreview || 'No comment',
+ [
+ ...(onEdit ? [{ text: 'Edit', onPress: handleEdit }] : []),
+ ...(onDelete ? [{ text: 'Delete', style: 'destructive' as const, onPress: handleDelete }] : []),
+ { text: 'Cancel', style: 'cancel' as const },
+ ]
+ );
+ }
+ };
+
+ const markerContent = (
+
+ {isPending ? (
+ +
+ ) : (
+
+ {index !== undefined ? index + 1 : '?'}
+
+ )}
+
+ );
+
+ return (
+
+
+ {markerContent}
+
+
+ );
+});
+
+export function PendingMarker({ x, y, color = '#3c82f7' }: { x: number; y: number; color?: string }) {
+ const markerSize = 22;
+
+ return (
+
+
+ +
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ marker: {
+ position: 'absolute',
+ zIndex: 998,
+ },
+ touchable: {
+ flex: 1,
+ },
+ pendingMarker: {
+ zIndex: 1001,
+ },
+ markerInner: {
+ backgroundColor: '#3c82f7',
+ justifyContent: 'center',
+ alignItems: 'center',
+ borderWidth: 1,
+ borderColor: 'rgba(0, 0, 0, 0.04)',
+ ...Platform.select({
+ ios: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 2 },
+ shadowOpacity: 0.2,
+ shadowRadius: 6,
+ },
+ android: {
+ elevation: 4,
+ },
+ }),
+ },
+ pendingMarkerInner: {
+ backgroundColor: '#34C759',
+ },
+ markerInnerSelected: {
+ backgroundColor: '#FF9500',
+ },
+ markerSelected: {
+ zIndex: 9999,
+ },
+ markerText: {
+ color: 'white',
+ fontSize: 11,
+ fontWeight: '600',
+ },
+ markerPlus: {
+ color: 'white',
+ fontSize: 14,
+ fontWeight: '400',
+ marginTop: -1,
+ },
+});
diff --git a/packages/agentation-rn/src/components/AnnotationPopup.tsx b/packages/agentation-rn/src/components/AnnotationPopup.tsx
new file mode 100644
index 0000000..a44a056
--- /dev/null
+++ b/packages/agentation-rn/src/components/AnnotationPopup.tsx
@@ -0,0 +1,426 @@
+import { useState, useEffect, useRef, useCallback, useMemo } from 'react';
+import {
+ View,
+ Text,
+ TextInput,
+ TouchableOpacity,
+ StyleSheet,
+ Animated,
+ Keyboard,
+ Platform,
+ Pressable,
+ KeyboardAvoidingView,
+ useWindowDimensions,
+} from 'react-native';
+import type { AnnotationPopupProps } from '../types';
+import { PendingMarker } from './AnnotationMarker';
+import { TIMING } from '../utils/animations';
+
+const THEME = {
+ dark: {
+ background: '#1a1a1a',
+ backgroundLight: 'rgba(255, 255, 255, 0.05)',
+ backgroundQuote: 'rgba(255, 255, 255, 0.05)',
+ border: 'rgba(255, 255, 255, 0.15)',
+ popupBorder: 'rgba(255, 255, 255, 0.08)',
+ text: '#fff',
+ textMuted: 'rgba(255, 255, 255, 0.5)',
+ textDim: 'rgba(255, 255, 255, 0.35)',
+ textQuote: 'rgba(255, 255, 255, 0.6)',
+ cancelText: 'rgba(255, 255, 255, 0.5)',
+ danger: '#ff3b30',
+ shadowOpacity: 0.3,
+ overlayBg: 'rgba(0, 0, 0, 0.4)',
+ },
+ light: {
+ background: '#FFFFFF',
+ backgroundLight: 'rgba(0, 0, 0, 0.03)',
+ backgroundQuote: 'rgba(0, 0, 0, 0.04)',
+ border: 'rgba(0, 0, 0, 0.12)',
+ popupBorder: 'rgba(0, 0, 0, 0.06)',
+ text: '#1a1a1a',
+ textMuted: 'rgba(0, 0, 0, 0.6)',
+ textDim: 'rgba(0, 0, 0, 0.4)',
+ textQuote: 'rgba(0, 0, 0, 0.55)',
+ cancelText: 'rgba(0, 0, 0, 0.5)',
+ danger: '#ff3b30',
+ shadowOpacity: 0.12,
+ overlayBg: 'rgba(0, 0, 0, 0.2)',
+ },
+} as const;
+
+interface ExtendedPopupProps extends AnnotationPopupProps {
+ detectedElement?: string;
+ toolbarHeight?: number;
+ settingsMenuHeight?: number;
+ accentColor?: string;
+ isDarkMode?: boolean;
+}
+
+export function AnnotationPopup(props: ExtendedPopupProps) {
+ const { annotation, position, visible, onSave, onCancel, onDelete, detectedElement, toolbarHeight = 80, settingsMenuHeight = 0, accentColor = '#3c82f7', isDarkMode = true } = props;
+ const { width: screenWidth, height: screenHeight } = useWindowDimensions();
+ const theme = useMemo(() => THEME[isDarkMode ? 'dark' : 'light'], [isDarkMode]);
+
+ const [comment, setComment] = useState(annotation?.comment || '');
+ const [isFocused, setIsFocused] = useState(false);
+ const [keyboardHeight, setKeyboardHeight] = useState(0);
+
+ const scaleAnim = useRef(new Animated.Value(0.95)).current;
+ const opacityAnim = useRef(new Animated.Value(0)).current;
+ const translateYAnim = useRef(new Animated.Value(4)).current;
+ const inputRef = useRef(null);
+
+ useEffect(() => {
+ setComment(annotation?.comment || '');
+ }, [annotation]);
+
+ useEffect(() => {
+ const showSub = Keyboard.addListener('keyboardWillShow', (e) => {
+ setKeyboardHeight(e.endCoordinates.height);
+ });
+ const hideSub = Keyboard.addListener('keyboardWillHide', () => {
+ setKeyboardHeight(0);
+ });
+
+ return () => {
+ showSub.remove();
+ hideSub.remove();
+ };
+ }, []);
+
+ useEffect(() => {
+ if (visible) {
+ Animated.parallel([
+ Animated.timing(scaleAnim, {
+ toValue: 1,
+ duration: TIMING.normal,
+ useNativeDriver: true,
+ }),
+ Animated.timing(translateYAnim, {
+ toValue: 0,
+ duration: TIMING.normal,
+ useNativeDriver: true,
+ }),
+ Animated.timing(opacityAnim, {
+ toValue: 1,
+ duration: TIMING.normal,
+ useNativeDriver: true,
+ }),
+ ]).start();
+
+ setTimeout(() => {
+ inputRef.current?.focus();
+ }, 50);
+ } else {
+ scaleAnim.setValue(0.95);
+ translateYAnim.setValue(4);
+ opacityAnim.setValue(0);
+ }
+ }, [visible, scaleAnim, translateYAnim, opacityAnim]);
+
+ const handleSave = useCallback(() => {
+ if (comment.trim()) {
+ Keyboard.dismiss();
+ onSave(comment.trim());
+ setComment('');
+ }
+ }, [comment, onSave]);
+
+ const handleCancel = useCallback(() => {
+ Keyboard.dismiss();
+ onCancel();
+ setComment('');
+ }, [onCancel]);
+
+ const handleDelete = useCallback(() => {
+ if (onDelete) {
+ Keyboard.dismiss();
+ onDelete();
+ setComment('');
+ }
+ }, [onDelete]);
+
+ if (!visible) {
+ return null;
+ }
+
+ const popupWidth = 280;
+ const popupHeight = 150;
+ const markerSize = 32;
+ const spacing = 8;
+
+ // 1. Horizontal position (center on marker, clamp to edges)
+ const popupX = Math.min(
+ Math.max(position.x - popupWidth / 2, 16),
+ screenWidth - popupWidth - 16
+ );
+
+ // 2. Calculate zones
+ const safeTop = 60; // Status bar + safe area
+ const markerTop = position.y - markerSize / 2;
+ const markerBottom = position.y + markerSize / 2;
+
+ // Where does the blocked area start? (keyboard, settings, or toolbar)
+ // Toolbar is ALWAYS at bottom, settings menu appears above it when open
+ // Settings menu has 8px margin below it (between it and toolbar)
+ let blockedAreaTop: number;
+ if (keyboardHeight > 0) {
+ blockedAreaTop = screenHeight - keyboardHeight;
+ } else if (settingsMenuHeight > 0) {
+ // Settings menu open - just use toolbar height, the popup will be above settings
+ blockedAreaTop = screenHeight - toolbarHeight - settingsMenuHeight;
+ } else {
+ // Settings closed - popup must stay above toolbar
+ blockedAreaTop = screenHeight - toolbarHeight;
+ }
+
+
+ // 3. Try to position below marker (preferred)
+ const belowY = markerBottom + spacing;
+ const belowFits = (belowY + popupHeight) <= blockedAreaTop;
+
+ // 4. Try to position above marker (tighter spacing when above)
+ const aboveY = markerTop - 4 - popupHeight;
+ const aboveFits = aboveY >= safeTop && (aboveY + popupHeight + spacing) <= blockedAreaTop;
+
+ // 5. Decide position
+ let popupY: number;
+ if (belowFits) {
+ popupY = belowY;
+ } else if (aboveFits) {
+ popupY = aboveY;
+ } else {
+ // Fallback: position directly above blocked area
+ popupY = Math.max(safeTop, blockedAreaTop - popupHeight);
+ }
+
+ const elementName = annotation?.element || detectedElement || 'Component';
+ const selectedText = annotation?.selectedText;
+ const isEditMode = !!annotation?.id;
+ const submitLabel = isEditMode ? 'Save' : 'Add';
+
+ return (
+ <>
+
+
+ {!isEditMode && (
+
+ )}
+
+
+
+
+
+
+ {elementName}
+
+
+
+ {selectedText && (
+
+
+ “{selectedText.slice(0, 80)}
+ {selectedText.length > 80 ? '...' : ''}”
+
+
+ )}
+
+ setIsFocused(true)}
+ onBlur={() => setIsFocused(false)}
+ onSubmitEditing={handleSave}
+ blurOnSubmit={false}
+ />
+
+
+ {isEditMode && onDelete && (
+
+ Delete
+
+ )}
+
+
+
+
+ Cancel
+
+
+
+ {submitLabel}
+
+
+
+
+
+ >
+ );
+}
+
+const styles = StyleSheet.create({
+ overlay: {
+ ...StyleSheet.absoluteFillObject,
+ zIndex: 999,
+ },
+ keyboardAvoid: {
+ ...StyleSheet.absoluteFillObject,
+ zIndex: 1000,
+ },
+ popup: {
+ position: 'absolute',
+ width: 280,
+ borderRadius: 16,
+ paddingHorizontal: 16,
+ paddingTop: 12,
+ paddingBottom: 14,
+ ...Platform.select({
+ ios: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 4 },
+ shadowRadius: 24,
+ },
+ android: {
+ elevation: 16,
+ },
+ }),
+ borderWidth: 1,
+ },
+
+ header: {
+ marginBottom: 8,
+ },
+ elementName: {
+ fontSize: 12,
+ fontWeight: '500',
+ },
+
+ quote: {
+ borderRadius: 4,
+ paddingHorizontal: 8,
+ paddingVertical: 6,
+ marginBottom: 8,
+ },
+ quoteText: {
+ fontSize: 11,
+ fontStyle: 'italic',
+ lineHeight: 16,
+ },
+
+ input: {
+ borderWidth: 1,
+ borderRadius: 8,
+ paddingHorizontal: 10,
+ paddingVertical: 8,
+ fontSize: 13,
+ minHeight: 56,
+ maxHeight: 120,
+ },
+
+ actions: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'flex-end',
+ gap: 6,
+ marginTop: 8,
+ },
+
+ actionsSpacer: {
+ flex: 1,
+ },
+
+ cancelButton: {
+ paddingHorizontal: 14,
+ paddingVertical: 6,
+ borderRadius: 16,
+ },
+ cancelButtonText: {
+ fontSize: 12,
+ fontWeight: '500',
+ },
+
+ deleteButton: {
+ paddingHorizontal: 14,
+ paddingVertical: 6,
+ borderRadius: 16,
+ },
+ deleteButtonText: {
+ fontSize: 12,
+ fontWeight: '500',
+ },
+
+ submitButton: {
+ paddingHorizontal: 14,
+ paddingVertical: 6,
+ borderRadius: 16,
+ },
+ submitButtonDisabled: {
+ opacity: 0.4,
+ },
+ submitButtonText: {
+ fontSize: 12,
+ fontWeight: '500',
+ color: '#fff',
+ },
+});
diff --git a/packages/agentation-rn/src/components/Icons.tsx b/packages/agentation-rn/src/components/Icons.tsx
new file mode 100644
index 0000000..e745531
--- /dev/null
+++ b/packages/agentation-rn/src/components/Icons.tsx
@@ -0,0 +1,266 @@
+import { Text, View, StyleSheet } from 'react-native';
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+let Svg: any;
+let Path: any;
+let Circle: any;
+
+try {
+ const svg = require('react-native-svg');
+ Svg = svg.Svg;
+ Path = svg.Path;
+ Circle = svg.Circle;
+} catch {}
+/* eslint-enable @typescript-eslint/no-explicit-any */
+
+interface IconProps {
+ size?: number;
+ color?: string;
+}
+
+function EmojiIcon({ emoji, size = 24 }: { emoji: string; size?: number }) {
+ return (
+
+ {emoji}
+
+ );
+}
+
+export function IconListSparkle({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconCheckSmall({ size = 14, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconCopy({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconTrash({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconGear({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconClose({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconSun({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconMoon({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconEye({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+export function IconEyeSlash({ size = 24, color = 'currentColor' }: IconProps) {
+ if (!Svg) return ;
+
+ return (
+
+ );
+}
+
+const styles = StyleSheet.create({
+ emojiContainer: {
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ emoji: {
+ textAlign: 'center',
+ },
+});
diff --git a/packages/agentation-rn/src/components/Toolbar.tsx b/packages/agentation-rn/src/components/Toolbar.tsx
new file mode 100644
index 0000000..b63f5dc
--- /dev/null
+++ b/packages/agentation-rn/src/components/Toolbar.tsx
@@ -0,0 +1,651 @@
+import React, { useState, useCallback, useRef, useMemo, useContext } from 'react';
+import {
+ View,
+ TouchableOpacity,
+ Pressable,
+ StyleSheet,
+ Platform,
+ Animated,
+ Text,
+ StyleProp,
+ ViewStyle,
+} from 'react-native';
+import { useSafeAreaInsets } from 'react-native-safe-area-context';
+import { IconListSparkle, IconClose, IconCopy, IconTrash, IconGear, IconSun, IconMoon, IconEye, IconEyeSlash, IconCheckSmall } from './Icons';
+import type { OutputDetailLevel } from '../types';
+import { useToolbarAnimations } from '../hooks/useToolbarAnimations';
+import { useToolbarSettings } from '../hooks/useToolbarSettings';
+import { AgenationContext } from '../context/AgenationContext';
+import { version as __VERSION__ } from '../../package.json';
+
+const THEME = {
+ dark: {
+ containerBg: '#1a1a1a',
+ textPrimary: '#FFFFFF',
+ textSecondary: 'rgba(255, 255, 255, 0.6)',
+ textTertiary: 'rgba(255, 255, 255, 0.5)',
+ textQuaternary: 'rgba(255, 255, 255, 0.4)',
+ toggleText: 'rgba(255, 255, 255, 0.85)',
+ border: 'rgba(255, 255, 255, 0.07)',
+ checkboxBorder: 'rgba(255, 255, 255, 0.2)',
+ checkboxCheckedBg: '#FFFFFF',
+ checkboxCheckedBorder: 'rgba(255, 255, 255, 0.3)',
+ checkmarkColor: '#1a1a1a',
+ dotInactive: 'rgba(255, 255, 255, 0.3)',
+ dotActive: '#FFFFFF',
+ iconDisabled: '#666666',
+ shadowOpacity: 0.2,
+ menuBorder: 'rgba(255, 255, 255, 0.08)',
+ menuShadowOffset: 4,
+ menuShadowOpacity: 0.3,
+ menuShadowRadius: 20,
+ },
+ light: {
+ containerBg: '#FFFFFF',
+ textPrimary: 'rgba(0, 0, 0, 0.85)',
+ textSecondary: 'rgba(0, 0, 0, 0.5)',
+ textTertiary: 'rgba(0, 0, 0, 0.4)',
+ textQuaternary: 'rgba(0, 0, 0, 0.4)',
+ toggleText: 'rgba(0, 0, 0, 0.5)',
+ border: 'rgba(0, 0, 0, 0.08)',
+ checkboxBorder: 'rgba(0, 0, 0, 0.15)',
+ checkboxCheckedBg: '#1a1a1a',
+ checkboxCheckedBorder: '#1a1a1a',
+ checkmarkColor: '#FFFFFF',
+ dotInactive: 'rgba(0, 0, 0, 0.2)',
+ dotActive: 'rgba(0, 0, 0, 0.7)',
+ iconDisabled: 'rgba(0, 0, 0, 0.3)',
+ shadowOpacity: 0.2,
+ menuBorder: 'rgba(0, 0, 0, 0.04)',
+ menuShadowOffset: 1,
+ menuShadowOpacity: 0.25,
+ menuShadowRadius: 8,
+ },
+} as const;
+
+const DETAIL_LEVEL_LABELS: Record = {
+ compact: 'Compact',
+ standard: 'Standard',
+ detailed: 'Detailed',
+ forensic: 'Forensic',
+};
+
+interface FloatingContainerProps {
+ children: React.ReactNode;
+ style?: StyleProp;
+}
+
+function FloatingContainer({ children, style }: FloatingContainerProps) {
+ return (
+
+ {children}
+
+ );
+}
+
+interface AnimatedButtonProps {
+ onPress: () => void;
+ disabled?: boolean;
+ style?: StyleProp;
+ children: React.ReactNode;
+}
+
+function AnimatedButton({ onPress, disabled, style, children }: AnimatedButtonProps) {
+ const scaleAnim = useRef(new Animated.Value(1)).current;
+
+ const handlePressIn = useCallback(() => {
+ Animated.spring(scaleAnim, {
+ toValue: 0.9,
+ useNativeDriver: true,
+ friction: 5,
+ }).start();
+ }, [scaleAnim]);
+
+ const handlePressOut = useCallback(() => {
+ Animated.spring(scaleAnim, {
+ toValue: 1,
+ useNativeDriver: true,
+ friction: 3,
+ }).start();
+ }, [scaleAnim]);
+
+ return (
+
+
+ {children}
+
+
+ );
+}
+
+export interface ToolbarProps {
+ isActive: boolean;
+ annotationCount: number;
+ onToggleMode: () => void;
+ onCopyMarkdown: () => void;
+ onClearAll: () => void;
+ zIndex?: number;
+ outputDetail?: OutputDetailLevel;
+ onOutputDetailChange?: (level: OutputDetailLevel) => void;
+ clearAfterCopy?: boolean;
+ onClearAfterCopyChange?: (value: boolean) => void;
+ annotationColor?: string;
+ onAnnotationColorChange?: (color: string) => void;
+ offset?: { x?: number; y?: number };
+ onSettingsMenuChange?: (isOpen: boolean) => void;
+ showMarkers?: boolean;
+ onShowMarkersChange?: (show: boolean) => void;
+}
+
+export function Toolbar(props: ToolbarProps) {
+ const {
+ isActive,
+ annotationCount,
+ onToggleMode,
+ onCopyMarkdown,
+ onClearAll,
+ zIndex = 9999,
+ outputDetail: controlledOutputDetail,
+ onOutputDetailChange,
+ clearAfterCopy: controlledClearAfterCopy,
+ onClearAfterCopyChange,
+ annotationColor: controlledAnnotationColor,
+ onAnnotationColorChange,
+ offset,
+ onSettingsMenuChange,
+ showMarkers: controlledShowMarkers,
+ onShowMarkersChange,
+ } = props;
+
+ const insets = useSafeAreaInsets();
+ const context = useContext(AgenationContext);
+
+ const [isExpanded, setIsExpanded] = useState(false);
+ const [showSettingsMenu, setShowSettingsMenu] = useState(false);
+ const [internalShowMarkers, setInternalShowMarkers] = useState(true);
+ const showMarkers = controlledShowMarkers ?? internalShowMarkers;
+
+ const isDarkMode = context?.isDarkMode ?? true;
+ const setIsDarkMode = context?.setIsDarkMode ?? (() => {});
+ const theme = useMemo(() => THEME[isDarkMode ? 'dark' : 'light'], [isDarkMode]);
+
+ const animations = useToolbarAnimations(isExpanded, showSettingsMenu, annotationCount);
+
+ const settings = useToolbarSettings({
+ controlledOutputDetail,
+ onOutputDetailChange,
+ controlledClearAfterCopy,
+ onClearAfterCopyChange,
+ controlledAnnotationColor,
+ onAnnotationColorChange,
+ });
+
+ const handleFabPress = useCallback(() => {
+ if (!isExpanded) {
+ setIsExpanded(true);
+ if (!isActive) {
+ onToggleMode();
+ }
+ } else {
+ setIsExpanded(false);
+ if (showSettingsMenu) {
+ setShowSettingsMenu(false);
+ onSettingsMenuChange?.(false);
+ }
+ if (isActive) {
+ onToggleMode();
+ }
+ }
+ }, [isExpanded, isActive, onToggleMode, showSettingsMenu, onSettingsMenuChange]);
+
+ const handleCopyPress = useCallback(() => {
+ onCopyMarkdown();
+ }, [onCopyMarkdown]);
+
+ const handleTrashPress = useCallback(() => {
+ onClearAll();
+ }, [onClearAll]);
+
+ const handleSettingsPress = useCallback(() => {
+ setShowSettingsMenu(prev => {
+ const newValue = !prev;
+ onSettingsMenuChange?.(newValue);
+ return newValue;
+ });
+ }, [onSettingsMenuChange]);
+
+ const handleMarkersToggle = useCallback(() => {
+ const newValue = !showMarkers;
+ setInternalShowMarkers(newValue);
+ onShowMarkersChange?.(newValue);
+ }, [showMarkers, onShowMarkersChange]);
+
+ const bottomPosition = Math.max(insets.bottom, 16) + 16 + (offset?.y ?? 0);
+ const rightPosition = 20 + (offset?.x ?? 0);
+
+ const iconColor = theme.textPrimary;
+ const badgeColor = settings.currentAnnotationColor;
+
+ const containerStyle = [styles.container, { zIndex, bottom: bottomPosition, right: rightPosition }];
+
+ return (
+
+
+
+
+
+ /
+ agentation
+
+ v{__VERSION__}
+ setIsDarkMode(!isDarkMode)}
+ activeOpacity={0.7}
+ >
+ {isDarkMode ? : }
+
+
+
+
+
+ Output Detail
+
+
+ {DETAIL_LEVEL_LABELS[settings.currentOutputDetail]}
+
+
+ {(['compact', 'standard', 'detailed', 'forensic'] as OutputDetailLevel[]).map((level) => (
+
+ ))}
+
+
+
+
+
+
+
+ Marker Colour
+
+
+
+
+
+
+
+ {settings.currentClearAfterCopy && (
+
+ )}
+
+ Clear after output
+
+
+
+
+
+
+
+
+
+
+
+ {annotationCount > 0 && (
+
+
+ {annotationCount > 99 ? '99+' : annotationCount}
+
+
+ )}
+
+
+
+
+
+
+ {showMarkers ? (
+ 0 ? iconColor : theme.iconDisabled} />
+ ) : (
+ 0 ? iconColor : theme.iconDisabled} />
+ )}
+
+
+
+ 0 ? iconColor : theme.iconDisabled} />
+
+
+
+ 0 ? iconColor : theme.iconDisabled} />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+const styles = StyleSheet.create({
+ container: {
+ position: 'absolute',
+ alignItems: 'flex-end',
+ },
+
+ toolbarWrapper: {
+ position: 'relative',
+ alignItems: 'center',
+ },
+
+ fabWrapper: {
+ position: 'absolute',
+ right: 0,
+ bottom: 0,
+ },
+ fab: {
+ width: 44,
+ height: 44,
+ borderRadius: 22,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+
+ expandedWrapper: {
+ position: 'relative',
+ },
+ toolbar: {
+ borderRadius: 24,
+ paddingHorizontal: 6,
+ paddingVertical: 6,
+ flexDirection: 'row',
+ alignItems: 'center',
+ },
+ toolbarButtons: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 6,
+ },
+ toolbarButton: {
+ width: 34,
+ height: 34,
+ borderRadius: 17,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ toolbarButtonDisabled: {
+ opacity: 0.35,
+ },
+ toolbarDivider: {
+ width: 1,
+ height: 12,
+ marginHorizontal: 2,
+ },
+
+ floatingBackground: {
+ ...Platform.select({
+ ios: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 2 },
+ shadowOpacity: 0.2,
+ shadowRadius: 8,
+ },
+ android: {
+ elevation: 8,
+ },
+ }),
+ },
+
+ badge: {
+ position: 'absolute',
+ top: -8,
+ right: -8,
+ minWidth: 18,
+ height: 18,
+ borderRadius: 9,
+ justifyContent: 'center',
+ alignItems: 'center',
+ paddingHorizontal: 5,
+ ...Platform.select({
+ ios: {
+ shadowColor: '#000',
+ shadowOffset: { width: 0, height: 1 },
+ shadowOpacity: 0.15,
+ shadowRadius: 3,
+ },
+ android: {
+ elevation: 2,
+ },
+ }),
+ },
+ badgeText: {
+ color: '#FFFFFF',
+ fontSize: 10,
+ fontWeight: '600',
+ },
+
+ settingsMenuWrapper: {
+ marginBottom: 8,
+ },
+ settingsMenu: {
+ borderRadius: 16,
+ paddingTop: 13,
+ paddingBottom: 16,
+ paddingHorizontal: 16,
+ minWidth: 205,
+ },
+ settingsHeader: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ minHeight: 24,
+ paddingBottom: 8,
+ borderBottomWidth: 1,
+ },
+ settingsBrand: {
+ fontSize: 13,
+ fontWeight: '600',
+ letterSpacing: -0.12,
+ },
+ settingsVersion: {
+ fontSize: 11,
+ fontWeight: '400',
+ marginLeft: 'auto',
+ letterSpacing: -0.12,
+ },
+ themeToggle: {
+ width: 22,
+ height: 22,
+ marginLeft: 8,
+ borderRadius: 6,
+ justifyContent: 'center',
+ alignItems: 'center',
+ },
+ settingsSectionFirst: {
+ paddingTop: 8,
+ },
+ settingsSection: {
+ paddingTop: 8,
+ marginTop: 8,
+ borderTopWidth: 1,
+ },
+ settingsRow: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ justifyContent: 'space-between',
+ minHeight: 24,
+ },
+ toggleRow: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ minHeight: 24,
+ },
+ settingsLabel: {
+ fontSize: 13,
+ fontWeight: '400',
+ },
+ toggleLabel: {
+ fontSize: 13,
+ fontWeight: '400',
+ marginLeft: 8,
+ },
+ settingsValueText: {
+ fontSize: 13,
+ fontWeight: '500',
+ },
+ settingsValueWithDots: {
+ flexDirection: 'row',
+ alignItems: 'center',
+ gap: 6,
+ },
+ cycleDots: {
+ flexDirection: 'column',
+ alignItems: 'center',
+ gap: 2,
+ },
+ cycleDot: {
+ width: 2,
+ height: 2,
+ borderRadius: 1,
+ },
+ cycleDotActive: {
+ width: 3,
+ height: 3,
+ borderRadius: 1.5,
+ },
+ colorSwatch: {
+ width: 20,
+ height: 20,
+ borderRadius: 10,
+ },
+ checkbox: {
+ width: 16,
+ height: 16,
+ borderRadius: 4,
+ borderWidth: 1.5,
+ justifyContent: 'center',
+ alignItems: 'center',
+ marginRight: 2,
+ },
+});
diff --git a/packages/agentation-rn/src/components/index.ts b/packages/agentation-rn/src/components/index.ts
new file mode 100644
index 0000000..8314946
--- /dev/null
+++ b/packages/agentation-rn/src/components/index.ts
@@ -0,0 +1,14 @@
+export { Agentation } from './Agentation';
+export type { AgenationProps } from './Agentation';
+
+export { AgenationView } from './AgenationView';
+export type { AgenationViewProps } from './AgenationView';
+
+export { AnnotationMarker, PendingMarker } from './AnnotationMarker';
+
+export { AnnotationPopup } from './AnnotationPopup';
+
+export { Toolbar } from './Toolbar';
+export type { ToolbarProps } from './Toolbar';
+
+export * from './Icons';
diff --git a/packages/agentation-rn/src/context/AgenationContext.ts b/packages/agentation-rn/src/context/AgenationContext.ts
new file mode 100644
index 0000000..d9810df
--- /dev/null
+++ b/packages/agentation-rn/src/context/AgenationContext.ts
@@ -0,0 +1,10 @@
+import { createContext } from 'react';
+
+export interface AgenationContextValue {
+ reportScrollOffset: (x: number, y: number) => void;
+ scrollOffset: { x: number; y: number };
+ isDarkMode: boolean;
+ setIsDarkMode: (value: boolean) => void;
+}
+
+export const AgenationContext = createContext(null);
diff --git a/packages/agentation-rn/src/hooks/index.ts b/packages/agentation-rn/src/hooks/index.ts
new file mode 100644
index 0000000..496018e
--- /dev/null
+++ b/packages/agentation-rn/src/hooks/index.ts
@@ -0,0 +1,11 @@
+export { useAnnotations } from './useAnnotations';
+export type { UseAnnotationsOptions, UseAnnotationsReturn } from './useAnnotations';
+
+export { useAgentationScroll } from './useAgentationScroll';
+export type { UseAgentationScrollReturn } from './useAgentationScroll';
+
+export { useToolbarAnimations } from './useToolbarAnimations';
+export type { ToolbarAnimationValues } from './useToolbarAnimations';
+
+export { useToolbarSettings } from './useToolbarSettings';
+export type { ToolbarSettingsOptions, ToolbarSettingsResult } from './useToolbarSettings';
diff --git a/packages/agentation-rn/src/hooks/useAgentationScroll.ts b/packages/agentation-rn/src/hooks/useAgentationScroll.ts
new file mode 100644
index 0000000..e561135
--- /dev/null
+++ b/packages/agentation-rn/src/hooks/useAgentationScroll.ts
@@ -0,0 +1,40 @@
+import { useCallback, useContext } from 'react';
+import type { NativeScrollEvent, NativeSyntheticEvent } from 'react-native';
+import { AgenationContext } from '../context/AgenationContext';
+
+export interface UseAgentationScrollReturn {
+ onScroll: (event: NativeSyntheticEvent) => void;
+ scrollEventThrottle: number;
+}
+
+const NOOP_RETURN: UseAgentationScrollReturn = {
+ onScroll: () => {},
+ scrollEventThrottle: 16,
+};
+
+export function useAgentationScroll(): UseAgentationScrollReturn {
+ if (!__DEV__) {
+ return NOOP_RETURN;
+ }
+
+ const context = useContext(AgenationContext);
+
+ const onScroll = useCallback(
+ (event: NativeSyntheticEvent) => {
+ if (!context?.reportScrollOffset) return;
+
+ const { contentOffset } = event.nativeEvent;
+ context.reportScrollOffset(contentOffset.x, contentOffset.y);
+ },
+ [context]
+ );
+
+ if (!context) {
+ return NOOP_RETURN;
+ }
+
+ return {
+ onScroll,
+ scrollEventThrottle: 16,
+ };
+}
diff --git a/packages/agentation-rn/src/hooks/useAnnotations.ts b/packages/agentation-rn/src/hooks/useAnnotations.ts
new file mode 100644
index 0000000..1697264
--- /dev/null
+++ b/packages/agentation-rn/src/hooks/useAnnotations.ts
@@ -0,0 +1,181 @@
+import { useState, useCallback } from 'react';
+import { Platform, Dimensions, PixelRatio } from 'react-native';
+import { debugError } from '../utils/debug';
+import type { Annotation, OutputDetailLevel } from '../types';
+import { generateId, getTimestamp, copyToClipboard } from '../utils/helpers';
+import { detectComponentAtPoint, formatElementPath, getComponentType } from '../utils/componentDetection';
+import { generateMarkdown } from '../utils/markdownGeneration';
+import { getNavigationInfo, NavigationResolver } from '../utils/navigationDetection';
+
+export interface UseAnnotationsOptions {
+ initialAnnotations?: Annotation[];
+ onAnnotationAdd?: (annotation: Annotation) => void;
+ onAnnotationUpdate?: (annotation: Annotation) => void;
+ onAnnotationDelete?: (annotation: Annotation) => void;
+ onCopy?: (markdown: string) => void;
+ copyToClipboard?: boolean;
+ navigationResolver?: NavigationResolver;
+}
+
+export interface UseAnnotationsReturn {
+ annotations: Annotation[];
+ createAnnotation: (
+ x: number,
+ y: number,
+ viewInstance: unknown,
+ comment: string
+ ) => Promise;
+ updateAnnotation: (id: string, comment: string) => void;
+ deleteAnnotation: (id: string) => void;
+ clearAll: () => void;
+ copyMarkdown: (outputDetail?: OutputDetailLevel) => Promise;
+ getAnnotation: (id: string) => Annotation | undefined;
+}
+
+export function useAnnotations(
+ options: UseAnnotationsOptions
+): UseAnnotationsReturn {
+ const {
+ initialAnnotations = [],
+ onAnnotationAdd,
+ onAnnotationUpdate,
+ onAnnotationDelete,
+ onCopy,
+ copyToClipboard: shouldCopyToClipboard = true,
+ navigationResolver,
+ } = options;
+
+ const [annotations, setAnnotations] = useState(initialAnnotations);
+
+ const createAnnotation = useCallback(
+ async (
+ x: number,
+ y: number,
+ viewInstance: unknown,
+ comment: string
+ ): Promise => {
+ try {
+ const detection = await detectComponentAtPoint(viewInstance, x, y);
+
+ if (!detection.success || !detection.codeInfo) {
+ debugError('Component detection failed:', detection.error);
+ return null;
+ }
+
+ const {
+ codeInfo,
+ bounds,
+ parentComponents,
+ accessibility,
+ testID,
+ textContent,
+ fullPath,
+ nearbyElements,
+ isFixed,
+ } = detection;
+
+ const screenDims = Dimensions.get('window');
+ const navInfo = getNavigationInfo(navigationResolver);
+
+ const annotation: Annotation = {
+ id: generateId(),
+ x,
+ y,
+ comment,
+ element: codeInfo.componentName || 'Unknown',
+ elementPath: formatElementPath(codeInfo),
+ timestamp: getTimestamp(),
+ componentType: getComponentType(codeInfo),
+ sourcePath: codeInfo.relativePath,
+ lineNumber: codeInfo.lineNumber,
+ columnNumber: codeInfo.columnNumber,
+ boundingBox: bounds || undefined,
+ parentComponents,
+ accessibility,
+ testID,
+ nearbyText: textContent,
+ fullPath,
+ nearbyElements,
+ isFixed,
+ routeName: navInfo?.routeName,
+ routeParams: navInfo?.routeParams,
+ navigationPath: navInfo?.navigationPath,
+ platform: Platform.OS as 'ios' | 'android' | 'web',
+ screenDimensions: {
+ width: screenDims.width,
+ height: screenDims.height,
+ },
+ pixelRatio: PixelRatio.get(),
+ };
+
+ setAnnotations(prev => [...prev, annotation]);
+ onAnnotationAdd?.(annotation);
+
+ return annotation;
+ } catch (error) {
+ debugError('Failed to create annotation:', error);
+ return null;
+ }
+ },
+ [navigationResolver, onAnnotationAdd]
+ );
+
+ const updateAnnotation = useCallback(
+ (id: string, comment: string) => {
+ const existing = annotations.find(a => a.id === id);
+ if (!existing) return;
+
+ const updated = { ...existing, comment, timestamp: getTimestamp() };
+ setAnnotations(prev => prev.map(ann => ann.id === id ? updated : ann));
+ onAnnotationUpdate?.(updated);
+ },
+ [annotations, onAnnotationUpdate]
+ );
+
+ const deleteAnnotation = useCallback(
+ (id: string) => {
+ const annotation = annotations.find(a => a.id === id);
+ if (!annotation) return;
+
+ setAnnotations(prev => prev.filter(ann => ann.id !== id));
+ onAnnotationDelete?.(annotation);
+ },
+ [annotations, onAnnotationDelete]
+ );
+
+ const clearAll = useCallback(() => {
+ setAnnotations([]);
+ }, []);
+
+ const copyMarkdownFn = useCallback(async (outputDetail?: OutputDetailLevel) => {
+ try {
+ const output = generateMarkdown(annotations, outputDetail);
+
+ if (shouldCopyToClipboard) {
+ await copyToClipboard(output.content);
+ }
+
+ onCopy?.(output.content);
+ } catch (error) {
+ debugError('Failed to copy markdown:', error);
+ throw error;
+ }
+ }, [annotations, onCopy, shouldCopyToClipboard]);
+
+ const getAnnotation = useCallback(
+ (id: string) => {
+ return annotations.find(ann => ann.id === id);
+ },
+ [annotations]
+ );
+
+ return {
+ annotations,
+ createAnnotation,
+ updateAnnotation,
+ deleteAnnotation,
+ clearAll,
+ copyMarkdown: copyMarkdownFn,
+ getAnnotation,
+ };
+}
diff --git a/packages/agentation-rn/src/hooks/useToolbarAnimations.ts b/packages/agentation-rn/src/hooks/useToolbarAnimations.ts
new file mode 100644
index 0000000..5488ae3
--- /dev/null
+++ b/packages/agentation-rn/src/hooks/useToolbarAnimations.ts
@@ -0,0 +1,172 @@
+import { useRef, useEffect, useMemo } from 'react';
+import { Animated } from 'react-native';
+import { SPRING_BOUNCY, SPRING_SMOOTH, DELAYS, TIMING } from '../utils/animations';
+
+export interface ToolbarAnimationValues {
+ expandAnim: Animated.Value;
+ settingsAnim: Animated.Value;
+ settingsScale: Animated.Value;
+ settingsTranslateY: Animated.Value;
+ entranceScale: Animated.Value;
+ entranceRotate: Animated.Value;
+ entranceOpacity: Animated.Value;
+ badgeScale: Animated.Value;
+ fabOpacity: Animated.AnimatedInterpolation;
+ toolbarOpacity: Animated.Value;
+ settingsOpacity: Animated.Value;
+ entranceRotateInterpolate: Animated.AnimatedInterpolation;
+}
+
+export function useToolbarAnimations(
+ isExpanded: boolean,
+ showSettingsMenu: boolean,
+ annotationCount: number
+): ToolbarAnimationValues {
+ const expandAnim = useRef(new Animated.Value(0)).current;
+ const settingsAnim = useRef(new Animated.Value(0)).current;
+ const settingsScale = useRef(new Animated.Value(0.95)).current;
+ const settingsTranslateY = useRef(new Animated.Value(10)).current;
+ const entranceScale = useRef(new Animated.Value(0.5)).current;
+ const entranceRotate = useRef(new Animated.Value(90)).current;
+ const entranceOpacity = useRef(new Animated.Value(0)).current;
+ const badgeScale = useRef(new Animated.Value(0)).current;
+ const hadBadge = useRef(false);
+ const badgeTimeoutRef = useRef(undefined);
+ const isUnmountedRef = useRef(false);
+
+ const fabOpacity = useMemo(() => expandAnim.interpolate({
+ inputRange: [0, 1],
+ outputRange: [1, 0],
+ }), [expandAnim]);
+
+ // toolbarOpacity removed - was identity interpolation (0→0, 1→1), expandAnim used directly
+
+ const entranceRotateInterpolate = useMemo(() => entranceRotate.interpolate({
+ inputRange: [0, 90],
+ outputRange: ['0deg', '90deg'],
+ }), [entranceRotate]);
+
+ useEffect(() => {
+ return () => {
+ isUnmountedRef.current = true;
+ if (badgeTimeoutRef.current) {
+ clearTimeout(badgeTimeoutRef.current);
+ }
+ };
+ }, []);
+
+ useEffect(() => {
+ Animated.parallel([
+ Animated.spring(entranceScale, {
+ toValue: 1,
+ friction: SPRING_BOUNCY.friction,
+ tension: SPRING_BOUNCY.tension,
+ useNativeDriver: true,
+ }),
+ Animated.spring(entranceRotate, {
+ toValue: 0,
+ friction: SPRING_BOUNCY.friction,
+ tension: SPRING_BOUNCY.tension,
+ useNativeDriver: true,
+ }),
+ Animated.timing(entranceOpacity, {
+ toValue: 1,
+ duration: TIMING.normal,
+ useNativeDriver: true,
+ }),
+ ]).start();
+ }, [entranceScale, entranceRotate, entranceOpacity]);
+
+ useEffect(() => {
+ if (badgeTimeoutRef.current) {
+ clearTimeout(badgeTimeoutRef.current);
+ badgeTimeoutRef.current = undefined;
+ }
+
+ if (annotationCount > 0 && !hadBadge.current) {
+ hadBadge.current = true;
+ badgeScale.setValue(0);
+ badgeTimeoutRef.current = setTimeout(() => {
+ Animated.spring(badgeScale, {
+ toValue: 1,
+ friction: SPRING_BOUNCY.friction,
+ tension: SPRING_BOUNCY.tension,
+ useNativeDriver: true,
+ }).start();
+ }, DELAYS.badgeEntrance);
+ } else if (annotationCount === 0) {
+ hadBadge.current = false;
+ badgeScale.setValue(0);
+ }
+ }, [annotationCount, badgeScale]);
+
+ useEffect(() => {
+ Animated.timing(expandAnim, {
+ toValue: isExpanded ? 1 : 0,
+ duration: TIMING.normal,
+ useNativeDriver: true,
+ }).start();
+ }, [isExpanded, expandAnim]);
+
+ useEffect(() => {
+ if (showSettingsMenu) {
+ Animated.parallel([
+ Animated.spring(settingsScale, {
+ toValue: 1,
+ friction: SPRING_SMOOTH.friction,
+ tension: SPRING_SMOOTH.tension,
+ useNativeDriver: true,
+ }),
+ Animated.spring(settingsTranslateY, {
+ toValue: 0,
+ friction: SPRING_SMOOTH.friction,
+ tension: SPRING_SMOOTH.tension,
+ useNativeDriver: true,
+ }),
+ Animated.timing(settingsAnim, {
+ toValue: 1,
+ duration: TIMING.normal,
+ useNativeDriver: true,
+ }),
+ ]).start();
+ } else {
+ Animated.parallel([
+ Animated.timing(settingsScale, {
+ toValue: 0.95,
+ duration: TIMING.fast,
+ useNativeDriver: true,
+ }),
+ Animated.timing(settingsTranslateY, {
+ toValue: 20,
+ duration: TIMING.fast,
+ useNativeDriver: true,
+ }),
+ Animated.timing(settingsAnim, {
+ toValue: 0,
+ duration: TIMING.fast,
+ useNativeDriver: true,
+ }),
+ ]).start(() => {
+ if (!isUnmountedRef.current) {
+ settingsScale.setValue(0.95);
+ settingsTranslateY.setValue(10);
+ }
+ });
+ }
+ }, [showSettingsMenu, settingsAnim, settingsScale, settingsTranslateY]);
+
+ return {
+ expandAnim,
+ settingsAnim,
+ settingsScale,
+ settingsTranslateY,
+ entranceScale,
+ entranceRotate,
+ entranceOpacity,
+ badgeScale,
+ fabOpacity,
+ toolbarOpacity: expandAnim,
+ settingsOpacity: settingsAnim,
+ entranceRotateInterpolate,
+ };
+}
diff --git a/packages/agentation-rn/src/hooks/useToolbarSettings.ts b/packages/agentation-rn/src/hooks/useToolbarSettings.ts
new file mode 100644
index 0000000..c4fef2b
--- /dev/null
+++ b/packages/agentation-rn/src/hooks/useToolbarSettings.ts
@@ -0,0 +1,92 @@
+import { useState, useEffect, useCallback } from 'react';
+import type { OutputDetailLevel, AgenationSettings } from '../types';
+import { DEFAULT_SETTINGS, COLOR_OPTIONS } from '../types';
+import { loadSettings, saveSettings } from '../utils/storage';
+
+const DETAIL_LEVEL_ORDER: OutputDetailLevel[] = ['compact', 'standard', 'detailed', 'forensic'];
+
+function getNextDetailLevel(current: OutputDetailLevel): OutputDetailLevel {
+ const currentIndex = DETAIL_LEVEL_ORDER.indexOf(current);
+ const nextIndex = (currentIndex + 1) % DETAIL_LEVEL_ORDER.length;
+ return DETAIL_LEVEL_ORDER[nextIndex];
+}
+
+export interface ToolbarSettingsOptions {
+ controlledOutputDetail?: OutputDetailLevel;
+ onOutputDetailChange?: (level: OutputDetailLevel) => void;
+ controlledClearAfterCopy?: boolean;
+ onClearAfterCopyChange?: (value: boolean) => void;
+ controlledAnnotationColor?: string;
+ onAnnotationColorChange?: (color: string) => void;
+}
+
+export interface ToolbarSettingsResult {
+ currentOutputDetail: OutputDetailLevel;
+ currentClearAfterCopy: boolean;
+ currentAnnotationColor: string;
+ handleOutputDetailCycle: () => void;
+ handleClearAfterCopyToggle: () => void;
+ handleAnnotationColorCycle: () => void;
+}
+
+export function useToolbarSettings(options: ToolbarSettingsOptions): ToolbarSettingsResult {
+ const {
+ controlledOutputDetail,
+ onOutputDetailChange,
+ controlledClearAfterCopy,
+ onClearAfterCopyChange,
+ controlledAnnotationColor,
+ onAnnotationColorChange,
+ } = options;
+
+ const [internalSettings, setInternalSettings] = useState(DEFAULT_SETTINGS);
+
+ useEffect(() => {
+ loadSettings().then(setInternalSettings);
+ }, []);
+
+ const currentOutputDetail = controlledOutputDetail ?? internalSettings.outputDetail;
+ const currentClearAfterCopy = controlledClearAfterCopy ?? internalSettings.clearAfterCopy;
+ const currentAnnotationColor = controlledAnnotationColor ?? internalSettings.annotationColor;
+
+ const handleOutputDetailCycle = useCallback(() => {
+ const nextLevel = getNextDetailLevel(currentOutputDetail);
+ if (onOutputDetailChange) {
+ onOutputDetailChange(nextLevel);
+ } else {
+ setInternalSettings(prev => ({ ...prev, outputDetail: nextLevel }));
+ saveSettings({ outputDetail: nextLevel });
+ }
+ }, [currentOutputDetail, onOutputDetailChange]);
+
+ const handleClearAfterCopyToggle = useCallback(() => {
+ const newValue = !currentClearAfterCopy;
+ if (onClearAfterCopyChange) {
+ onClearAfterCopyChange(newValue);
+ } else {
+ setInternalSettings(prev => ({ ...prev, clearAfterCopy: newValue }));
+ saveSettings({ clearAfterCopy: newValue });
+ }
+ }, [currentClearAfterCopy, onClearAfterCopyChange]);
+
+ const handleAnnotationColorCycle = useCallback(() => {
+ const currentIndex = COLOR_OPTIONS.findIndex(c => c.value === currentAnnotationColor);
+ const nextIndex = (currentIndex + 1) % COLOR_OPTIONS.length;
+ const nextColor = COLOR_OPTIONS[nextIndex].value;
+ if (onAnnotationColorChange) {
+ onAnnotationColorChange(nextColor);
+ } else {
+ setInternalSettings(prev => ({ ...prev, annotationColor: nextColor }));
+ saveSettings({ annotationColor: nextColor });
+ }
+ }, [currentAnnotationColor, onAnnotationColorChange]);
+
+ return {
+ currentOutputDetail,
+ currentClearAfterCopy,
+ currentAnnotationColor,
+ handleOutputDetailCycle,
+ handleClearAfterCopyToggle,
+ handleAnnotationColorCycle,
+ };
+}
diff --git a/packages/agentation-rn/src/index.ts b/packages/agentation-rn/src/index.ts
new file mode 100644
index 0000000..01c4449
--- /dev/null
+++ b/packages/agentation-rn/src/index.ts
@@ -0,0 +1,67 @@
+export { Agentation } from './components/Agentation';
+export { AgenationView } from './components/AgenationView';
+export type { AgenationViewProps } from './components/AgenationView';
+
+export type {
+ Annotation,
+ DemoAnnotation,
+ OutputDetailLevel,
+ AgenationProps,
+ AgentationProps,
+ AnnotationMarkerProps,
+ AnnotationPopupProps,
+ CodeInfo,
+ ComponentDetection,
+ MarkdownOutput,
+ StorageKey,
+ AgenationSettings,
+} from './types';
+
+export { DEFAULT_SETTINGS } from './types';
+
+export { useAnnotations } from './hooks/useAnnotations';
+export type { UseAnnotationsOptions, UseAnnotationsReturn } from './hooks/useAnnotations';
+export { useAgentationScroll } from './hooks/useAgentationScroll';
+export type { UseAgentationScrollReturn } from './hooks/useAgentationScroll';
+
+export { AgenationContext } from './context/AgenationContext';
+export type { AgenationContextValue } from './context/AgenationContext';
+
+export {
+ detectComponent,
+ formatElementPath,
+ formatElementPathWithColumn,
+ getComponentType,
+ isComponentDetectionAvailable,
+ getDetectionErrorMessage,
+ detectComponentAtPoint,
+} from './utils/componentDetection';
+
+export {
+ detectComponent as identifyElement,
+ formatElementPath as getElementPath,
+} from './utils/componentDetection';
+
+export { generateMarkdown } from './utils/markdownGeneration';
+
+export {
+ saveAnnotations,
+ loadAnnotations,
+ getStorageKey,
+ saveSettings,
+ loadSettings,
+} from './utils/storage';
+
+export {
+ getNavigationInfo,
+ reactNavigationResolver,
+ expoRouterResolver,
+} from './utils/navigationDetection';
+export type { NavigationInfo, NavigationResolver } from './utils/navigationDetection';
+
+export {
+ generateId,
+ getTimestamp,
+ copyToClipboard,
+} from './utils/helpers';
+
diff --git a/packages/agentation-rn/src/types/annotation.ts b/packages/agentation-rn/src/types/annotation.ts
new file mode 100644
index 0000000..68a8fb7
--- /dev/null
+++ b/packages/agentation-rn/src/types/annotation.ts
@@ -0,0 +1,64 @@
+export type OutputDetailLevel = 'compact' | 'standard' | 'detailed' | 'forensic';
+
+export const COLOR_OPTIONS = [
+ { value: '#AF52DE', label: 'Purple' },
+ { value: '#3c82f7', label: 'Blue' },
+ { value: '#5AC8FA', label: 'Cyan' },
+ { value: '#34C759', label: 'Green' },
+ { value: '#FFD60A', label: 'Yellow' },
+ { value: '#FF9500', label: 'Orange' },
+ { value: '#FF3B30', label: 'Red' },
+] as const;
+
+export type DemoAnnotation = {
+ selector: string;
+ comment: string;
+ selectedText?: string;
+};
+
+export interface Annotation {
+ id: string;
+ x: number;
+ y: number;
+ comment: string;
+ element: string;
+ elementPath: string;
+ timestamp: number;
+ componentType?: string;
+ sourcePath?: string;
+ lineNumber?: number;
+ columnNumber?: number;
+ testID?: string;
+ selectedText?: string;
+ boundingBox?: {
+ x: number;
+ y: number;
+ width: number;
+ height: number;
+ };
+ nearbyText?: string;
+ nearbyElements?: string;
+ fullPath?: string;
+ accessibility?: string;
+ parentComponents?: string[];
+ isMultiSelect?: boolean;
+ isFixed?: boolean;
+ routeName?: string;
+ routeParams?: Record;
+ navigationPath?: string;
+ platform?: 'ios' | 'android' | 'web';
+ screenDimensions?: {
+ width: number;
+ height: number;
+ };
+ pixelRatio?: number;
+}
+
+export type StorageKey = `@agentation:${string}`;
+
+export interface MarkdownOutput {
+ content: string;
+ count: number;
+ screen: string;
+ timestamp: number;
+}
diff --git a/packages/agentation-rn/src/types/detection.ts b/packages/agentation-rn/src/types/detection.ts
new file mode 100644
index 0000000..6444896
--- /dev/null
+++ b/packages/agentation-rn/src/types/detection.ts
@@ -0,0 +1,30 @@
+export interface CodeInfo {
+ relativePath: string;
+ lineNumber: number;
+ columnNumber?: number;
+ componentName?: string;
+}
+
+export interface InspectInfo {
+ name: string;
+ codeInfo: CodeInfo | null;
+}
+
+export interface ComponentDetection {
+ success: boolean;
+ codeInfo: CodeInfo | null;
+ bounds: {
+ x: number;
+ y: number;
+ width: number;
+ height: number;
+ } | null;
+ error?: string;
+ parentComponents?: string[];
+ accessibility?: string;
+ testID?: string;
+ textContent?: string;
+ fullPath?: string;
+ nearbyElements?: string;
+ isFixed?: boolean;
+}
diff --git a/packages/agentation-rn/src/types/index.ts b/packages/agentation-rn/src/types/index.ts
new file mode 100644
index 0000000..4581688
--- /dev/null
+++ b/packages/agentation-rn/src/types/index.ts
@@ -0,0 +1,24 @@
+export type {
+ OutputDetailLevel,
+ DemoAnnotation,
+ Annotation,
+ StorageKey,
+ MarkdownOutput,
+} from './annotation';
+
+export { COLOR_OPTIONS } from './annotation';
+
+export type {
+ AgenationProps,
+ AgentationProps,
+ AnnotationMarkerProps,
+ AnnotationPopupProps,
+} from './props';
+
+export type {
+ CodeInfo,
+ ComponentDetection,
+} from './detection';
+
+export type { AgenationSettings } from './settings';
+export { DEFAULT_SETTINGS } from './settings';
diff --git a/packages/agentation-rn/src/types/props.ts b/packages/agentation-rn/src/types/props.ts
new file mode 100644
index 0000000..af829b7
--- /dev/null
+++ b/packages/agentation-rn/src/types/props.ts
@@ -0,0 +1,35 @@
+import type { Annotation, DemoAnnotation } from './annotation';
+
+export interface AgenationProps {
+ children: React.ReactNode;
+ demoAnnotations?: DemoAnnotation[];
+ onAnnotationAdd?: (annotation: Annotation) => void;
+ onAnnotationDelete?: (annotation: Annotation) => void;
+ onAnnotationUpdate?: (annotation: Annotation) => void;
+ onAnnotationsClear?: (annotations: Annotation[]) => void;
+ onCopy?: (markdown: string) => void;
+ copyToClipboard?: boolean;
+ disabled?: boolean;
+ toolbarOffset?: {
+ x?: number;
+ y?: number;
+ };
+}
+
+export type AgentationProps = AgenationProps;
+
+export interface AnnotationMarkerProps {
+ annotation: Annotation;
+ index: number;
+ isSelected: boolean;
+ onPress: () => void;
+}
+
+export interface AnnotationPopupProps {
+ annotation: Annotation | null;
+ position: { x: number; y: number };
+ visible: boolean;
+ onSave: (comment: string) => void;
+ onCancel: () => void;
+ onDelete?: () => void;
+}
diff --git a/packages/agentation-rn/src/types/settings.ts b/packages/agentation-rn/src/types/settings.ts
new file mode 100644
index 0000000..8f72adc
--- /dev/null
+++ b/packages/agentation-rn/src/types/settings.ts
@@ -0,0 +1,13 @@
+import type { OutputDetailLevel } from './annotation';
+
+export interface AgenationSettings {
+ outputDetail: OutputDetailLevel;
+ clearAfterCopy: boolean;
+ annotationColor: string;
+}
+
+export const DEFAULT_SETTINGS: AgenationSettings = {
+ outputDetail: 'standard',
+ clearAfterCopy: false,
+ annotationColor: '#3c82f7',
+};
diff --git a/packages/agentation-rn/src/utils/animations.ts b/packages/agentation-rn/src/utils/animations.ts
new file mode 100644
index 0000000..d278725
--- /dev/null
+++ b/packages/agentation-rn/src/utils/animations.ts
@@ -0,0 +1,22 @@
+export const SPRING_BOUNCY = {
+ friction: 7,
+ tension: 40,
+ useNativeDriver: true,
+};
+
+export const SPRING_SMOOTH = {
+ friction: 10,
+ tension: 60,
+ useNativeDriver: true,
+};
+
+export const TIMING = {
+ fast: 150,
+ normal: 200,
+ entrance: 250,
+ exit: 150,
+};
+
+export const DELAYS = {
+ badgeEntrance: 400,
+};
diff --git a/packages/agentation-rn/src/utils/componentDetection.ts b/packages/agentation-rn/src/utils/componentDetection.ts
new file mode 100644
index 0000000..1a994a5
--- /dev/null
+++ b/packages/agentation-rn/src/utils/componentDetection.ts
@@ -0,0 +1,338 @@
+import { debugLog, debugWarn, debugError } from './debug';
+import type { CodeInfo, ComponentDetection } from '../types';
+import {
+ getFiberFromInstance,
+ findNearestUserComponentWithSource,
+ findNearestUserComponent,
+ extractRelativePath,
+ isComponentDetectionAvailable as checkAvailability,
+ getInspectorDataForViewAtPoint,
+ type FiberCodeInfo,
+ type InspectorData,
+} from './fiberTraversal';
+
+const DETECTION_TIMEOUT = 3000;
+
+function withTimeout(promise: Promise, ms: number): Promise {
+ return Promise.race([
+ promise,
+ new Promise(resolve => setTimeout(() => resolve(null), ms)),
+ ]);
+}
+
+interface MeasurableView {
+ measure: (callback: (x: number, y: number, width: number, height: number, pageX: number, pageY: number) => void) => void;
+}
+
+function isMeasurable(view: unknown): view is MeasurableView {
+ return view !== null && typeof view === 'object' && 'measure' in view && typeof (view as MeasurableView).measure === 'function';
+}
+
+async function measureView(viewInstance: unknown): Promise<{ x: number; y: number; width: number; height: number } | null> {
+ return new Promise((resolve) => {
+ try {
+ if (!isMeasurable(viewInstance)) {
+ resolve(null);
+ return;
+ }
+
+ viewInstance.measure((_x: number, _y: number, width: number, height: number, pageX: number, pageY: number) => {
+ resolve({
+ x: pageX,
+ y: pageY,
+ width,
+ height,
+ });
+ });
+ } catch (error) {
+ debugWarn('Error measuring view:', error);
+ resolve(null);
+ }
+ });
+}
+
+function convertCodeInfo(fiberInfo: FiberCodeInfo): CodeInfo {
+ return {
+ relativePath: extractRelativePath(fiberInfo.fileName),
+ lineNumber: fiberInfo.lineNumber,
+ columnNumber: fiberInfo.columnNumber,
+ componentName: fiberInfo.componentName,
+ };
+}
+
+export async function detectComponent(
+ viewInstance: unknown
+): Promise {
+ if (!__DEV__) {
+ return {
+ success: false,
+ codeInfo: null,
+ bounds: null,
+ error: 'Component detection only works in development mode',
+ };
+ }
+
+ try {
+ const fiber = getFiberFromInstance(viewInstance);
+
+ if (fiber) {
+ const fiberCodeInfo = findNearestUserComponentWithSource(fiber);
+ if (fiberCodeInfo) {
+ return {
+ success: true,
+ codeInfo: convertCodeInfo(fiberCodeInfo),
+ bounds: await measureView(viewInstance),
+ };
+ }
+
+ const componentInfo = findNearestUserComponent(fiber);
+ if (componentInfo) {
+ return {
+ success: true,
+ codeInfo: {
+ relativePath: 'unknown',
+ lineNumber: 0,
+ columnNumber: 0,
+ componentName: componentInfo.componentName || 'Unknown',
+ },
+ bounds: await measureView(viewInstance),
+ };
+ }
+ }
+
+ return {
+ success: true,
+ codeInfo: {
+ relativePath: 'Unknown',
+ lineNumber: 0,
+ columnNumber: 0,
+ componentName: 'TappedComponent',
+ },
+ bounds: await measureView(viewInstance),
+ error: 'Could not find component info',
+ };
+ } catch (error) {
+ return {
+ success: false,
+ codeInfo: null,
+ bounds: null,
+ error: error instanceof Error ? error.message : 'Unknown error during component detection',
+ };
+ }
+}
+
+interface InspectorProps {
+ accessibilityLabel?: string;
+ accessibilityHint?: string;
+ accessibilityRole?: string;
+ testID?: string;
+ style?: Record | Array | null | undefined>;
+ children?: unknown;
+ __callerSource?: {
+ fileName?: string;
+ lineNumber?: number;
+ columnNumber?: number;
+ };
+}
+
+export async function detectComponentAtPoint(
+ viewRef: unknown,
+ x: number,
+ y: number
+): Promise {
+ if (!__DEV__) {
+ return {
+ success: false,
+ codeInfo: null,
+ bounds: null,
+ error: 'Component detection only works in development mode',
+ };
+ }
+
+ try {
+ const inspectorData = await withTimeout(
+ getInspectorDataForViewAtPoint(viewRef, x, y),
+ DETECTION_TIMEOUT
+ ) as InspectorData | null;
+
+ if (inspectorData && inspectorData.hierarchy && inspectorData.hierarchy.length) {
+ const bounds = inspectorData.frame ? {
+ x: inspectorData.frame.left,
+ y: inspectorData.frame.top,
+ width: inspectorData.frame.width,
+ height: inspectorData.frame.height,
+ } : null;
+
+ const allComponents = inspectorData.hierarchy
+ .map(item => item.name)
+ .filter(name => name && !name.startsWith('RCT') && name !== 'View');
+
+ const parentComponents = allComponents.slice(0, -1);
+ const fullPath = allComponents.join(' > ');
+ const nearbyElements = allComponents.slice(-3).join(', ');
+
+ const { findNodeHandle } = require('react-native');
+
+ let accessibility: string | undefined;
+ let testID: string | undefined;
+ let textContent: string | undefined;
+ let isFixed = false;
+
+ for (const item of inspectorData.hierarchy) {
+ if (item.source) {
+ debugLog(' Found source via hierarchy.source:', item.name);
+ return {
+ success: true,
+ codeInfo: {
+ relativePath: extractRelativePath(item.source.fileName),
+ lineNumber: item.source.lineNumber,
+ columnNumber: item.source.columnNumber,
+ componentName: item.name,
+ },
+ bounds,
+ parentComponents,
+ accessibility,
+ testID,
+ textContent,
+ fullPath,
+ nearbyElements,
+ isFixed,
+ };
+ }
+ }
+
+ const startIndex = inspectorData.selectedIndex ?? inspectorData.hierarchy.length - 1;
+
+ for (let i = startIndex; i >= 0; i--) {
+ const item = inspectorData.hierarchy[i];
+ if (item.getInspectorData) {
+ try {
+ const data = item.getInspectorData(findNodeHandle);
+ const props = (data?.props || {}) as InspectorProps;
+
+ if (!accessibility && (props.accessibilityLabel || props.accessibilityHint || props.accessibilityRole)) {
+ const parts: string[] = [];
+ if (props.accessibilityRole) parts.push(`role="${props.accessibilityRole}"`);
+ if (props.accessibilityLabel) parts.push(`label="${props.accessibilityLabel}"`);
+ if (props.accessibilityHint) parts.push(`hint="${props.accessibilityHint}"`);
+ accessibility = parts.join(', ');
+ }
+
+ if (!testID && props.testID) {
+ testID = props.testID;
+ }
+
+ if (props.style) {
+ const style = Array.isArray(props.style)
+ ? Object.assign({}, ...props.style.filter(Boolean))
+ : props.style;
+ if (style.position === 'absolute' || style.position === 'fixed') {
+ isFixed = true;
+ }
+ }
+
+ if (!textContent && item.name === 'Text' && props.children) {
+ const text = typeof props.children === 'string' ? props.children :
+ Array.isArray(props.children) ? props.children.filter(c => typeof c === 'string').join('') : '';
+ if (text) {
+ textContent = text.slice(0, 100);
+ }
+ }
+
+ if (props.__callerSource) {
+ const callerSource = props.__callerSource;
+ const fileName = callerSource.fileName || '';
+
+ if (fileName.includes('Agentation') || fileName.includes('node_modules')) {
+ debugLog(' Skipping library component:', item.name, fileName);
+ continue;
+ }
+
+ debugLog(' Found __callerSource via getInspectorData:', item.name, callerSource);
+ return {
+ success: true,
+ codeInfo: {
+ relativePath: extractRelativePath(fileName || 'unknown'),
+ lineNumber: callerSource.lineNumber || 0,
+ columnNumber: callerSource.columnNumber,
+ componentName: item.name,
+ },
+ bounds,
+ parentComponents,
+ accessibility,
+ testID,
+ textContent,
+ fullPath,
+ nearbyElements,
+ isFixed,
+ };
+ }
+ } catch (e) {
+ // getInspectorData might fail for some items
+ }
+ }
+ }
+
+ const selectedItem = inspectorData.hierarchy[inspectorData.selectedIndex] ||
+ inspectorData.hierarchy[0];
+ debugLog(' No source found, using component name:', selectedItem?.name);
+ return {
+ success: true,
+ codeInfo: {
+ relativePath: 'unknown',
+ lineNumber: 0,
+ columnNumber: 0,
+ componentName: selectedItem?.name || 'Unknown',
+ },
+ bounds,
+ parentComponents,
+ accessibility,
+ testID,
+ textContent,
+ fullPath,
+ nearbyElements,
+ isFixed,
+ };
+ }
+
+ return detectComponent(viewRef);
+ } catch (error) {
+ debugError('detectComponentAtPoint error:', error);
+ return detectComponent(viewRef);
+ }
+}
+
+export function formatElementPath(codeInfo: CodeInfo): string {
+ return `${codeInfo.relativePath}:${codeInfo.lineNumber}`;
+}
+
+export function formatElementPathWithColumn(codeInfo: CodeInfo): string {
+ if (codeInfo.columnNumber !== undefined) {
+ return `${codeInfo.relativePath}:${codeInfo.lineNumber}:${codeInfo.columnNumber}`;
+ }
+ return formatElementPath(codeInfo);
+}
+
+export function getComponentType(codeInfo: CodeInfo): string {
+ return codeInfo.componentName || 'Unknown';
+}
+
+export function isComponentDetectionAvailable(): boolean {
+ return checkAvailability();
+}
+
+export function getDetectionErrorMessage(error: string): string {
+ if (error.includes('development mode')) {
+ return 'Component detection only works in development builds. Make sure __DEV__ is true.';
+ }
+
+ if (error.includes('source information')) {
+ return 'No source maps found. Make sure you are running a development build with source maps enabled.';
+ }
+
+ if (error.includes('React Fiber')) {
+ return 'Could not access React internals. This may not be a valid React component.';
+ }
+
+ return error;
+}
diff --git a/packages/agentation-rn/src/utils/debug.ts b/packages/agentation-rn/src/utils/debug.ts
new file mode 100644
index 0000000..11ccbd2
--- /dev/null
+++ b/packages/agentation-rn/src/utils/debug.ts
@@ -0,0 +1,17 @@
+const PREFIX = '[Agentation]';
+
+export function debugLog(...args: unknown[]): void {
+ if (__DEV__) {
+ console.log(PREFIX, ...args);
+ }
+}
+
+export function debugWarn(...args: unknown[]): void {
+ if (__DEV__) {
+ console.warn(PREFIX, ...args);
+ }
+}
+
+export function debugError(...args: unknown[]): void {
+ console.error(PREFIX, ...args);
+}
diff --git a/packages/agentation-rn/src/utils/fiberTraversal.ts b/packages/agentation-rn/src/utils/fiberTraversal.ts
new file mode 100644
index 0000000..6113a7f
--- /dev/null
+++ b/packages/agentation-rn/src/utils/fiberTraversal.ts
@@ -0,0 +1,294 @@
+import { debugLog } from './debug';
+
+export interface FiberCodeInfo {
+ fileName: string;
+ lineNumber: number;
+ columnNumber?: number;
+ componentName?: string;
+}
+
+export interface InspectorData {
+ hierarchy: Array<{
+ name: string;
+ source?: {
+ fileName: string;
+ lineNumber: number;
+ columnNumber?: number;
+ };
+ getInspectorData?: (findNodeHandle: (instance: unknown) => number | null) => {
+ props: Record;
+ measure: (callback: (x: number, y: number, width: number, height: number, left: number, top: number) => void) => void;
+ };
+ }>;
+ selectedIndex: number;
+ frame: {
+ left: number;
+ top: number;
+ width: number;
+ height: number;
+ };
+ touchedViewTag?: number;
+}
+
+interface FiberNode {
+ type: unknown;
+ _debugSource?: {
+ fileName?: string;
+ lineNumber?: number;
+ columnNumber?: number;
+ };
+ memoizedProps?: Record;
+ pendingProps?: Record;
+ stateNode?: { _nativeTag?: number };
+ return: FiberNode | null;
+ child: FiberNode | null;
+ sibling: FiberNode | null;
+}
+
+interface ReactRenderer {
+ rendererConfig?: {
+ getInspectorDataForViewAtPoint?: (
+ viewRef: unknown,
+ x: number,
+ y: number,
+ callback: (data: InspectorData | null) => void
+ ) => void;
+ };
+ findFiberByHostInstance?: (instance: unknown) => FiberNode | null;
+}
+
+declare global {
+ var __REACT_DEVTOOLS_GLOBAL_HOOK__: {
+ renderers?: Map;
+ getFiberRoots?: (rendererId: number) => Set<{ current: FiberNode }>;
+ } | undefined;
+}
+
+export function getInspectorDataForViewAtPoint(
+ viewRef: unknown,
+ x: number,
+ y: number
+): Promise {
+ return new Promise((resolve) => {
+ const hook = global.__REACT_DEVTOOLS_GLOBAL_HOOK__;
+ if (!hook || !hook.renderers) {
+ debugLog(' No DevTools hook');
+ resolve(null);
+ return;
+ }
+
+ debugLog(' Renderers available:', hook.renderers.size);
+
+ for (const [rendererId, renderer] of hook.renderers) {
+ const hasAPI = !!renderer?.rendererConfig?.getInspectorDataForViewAtPoint;
+ debugLog(' Renderer', rendererId, 'has rendererConfig.getInspectorDataForViewAtPoint:', hasAPI);
+
+ if (renderer?.rendererConfig?.getInspectorDataForViewAtPoint) {
+ try {
+ renderer.rendererConfig.getInspectorDataForViewAtPoint(
+ viewRef,
+ x,
+ y,
+ (data: InspectorData | null) => {
+ debugLog(' Inspector data received');
+ if (data) {
+ debugLog(' Hierarchy length:', data.hierarchy?.length);
+ debugLog(' Selected index:', data.selectedIndex);
+ data.hierarchy?.forEach((item, i) => {
+ debugLog(`Hierarchy[${i}]: name=${item.name}, hasSource=${!!item.source}`);
+ if (item.source) {
+ debugLog(` Source: ${item.source.fileName}:${item.source.lineNumber}`);
+ }
+ });
+ } else {
+ debugLog(' No data returned from inspector');
+ }
+ resolve(data);
+ }
+ );
+ return;
+ } catch (e) {
+ debugLog(' getInspectorDataForViewAtPoint error:', e);
+ }
+ }
+ }
+
+ resolve(null);
+ });
+}
+
+export function getFiberFromInstance(instance: unknown): FiberNode | null {
+ if (!instance) return null;
+
+ if (typeof instance === 'number') {
+ return getFiberFromNativeTag(instance);
+ }
+
+ if (typeof instance === 'object' && instance !== null) {
+ const obj = instance as Record;
+ for (const key of Object.keys(obj)) {
+ if (key.startsWith('__reactFiber$') || key.startsWith('__reactInternalInstance$')) {
+ return obj[key];
+ }
+ }
+
+ const hook = global.__REACT_DEVTOOLS_GLOBAL_HOOK__;
+ if (hook && hook.renderers) {
+ for (const [, renderer] of hook.renderers) {
+ if (renderer.findFiberByHostInstance) {
+ try {
+ const fiber = renderer.findFiberByHostInstance(instance);
+ if (fiber) return fiber;
+ } catch (e) {
+ // Ignore
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+}
+
+function getFiberFromNativeTag(tag: number): FiberNode | null {
+ debugLog(' getFiberFromNativeTag called with tag:', tag);
+ const hook = global.__REACT_DEVTOOLS_GLOBAL_HOOK__;
+ if (!hook || !hook.renderers || !hook.getFiberRoots) {
+ debugLog(' Missing hook parts:', {
+ hook: !!hook,
+ renderers: !!hook?.renderers,
+ getFiberRoots: !!hook?.getFiberRoots,
+ });
+ return null;
+ }
+
+ for (const [rendererId] of hook.renderers) {
+ const roots = hook.getFiberRoots(rendererId);
+ debugLog(' Renderer', rendererId, 'roots:', roots?.size || 0);
+ for (const root of roots) {
+ const fiber = findFiberByNativeTag(root.current, tag);
+ if (fiber) {
+ debugLog(' Found fiber for tag', tag);
+ return fiber;
+ }
+ }
+ }
+ debugLog(' No fiber found for tag', tag);
+ return null;
+}
+
+function findFiberByNativeTag(fiber: FiberNode | null, tag: number): FiberNode | null {
+ if (!fiber) return null;
+ if (fiber.stateNode && fiber.stateNode._nativeTag === tag) return fiber;
+ const childResult = findFiberByNativeTag(fiber.child, tag);
+ if (childResult) return childResult;
+ return findFiberByNativeTag(fiber.sibling, tag);
+}
+
+export function findNearestUserComponentWithSource(fiber: FiberNode | null): FiberCodeInfo | null {
+ if (!fiber) return null;
+
+ let current: FiberNode | null = fiber;
+ let iterations = 0;
+
+ while (current && iterations < 50) {
+ iterations++;
+
+ if (current._debugSource) {
+ debugLog(' Found _debugSource on fiber');
+ return {
+ fileName: current._debugSource.fileName || 'unknown',
+ lineNumber: current._debugSource.lineNumber || 0,
+ columnNumber: current._debugSource.columnNumber,
+ componentName: getComponentName(current),
+ };
+ }
+
+ const props = current.memoizedProps || current.pendingProps;
+ if (props && (props as Record).__callerSource) {
+ const callerSource = (props as Record).__callerSource as {
+ fileName?: string;
+ lineNumber?: number;
+ columnNumber?: number;
+ };
+ debugLog(' Found __callerSource in props:', JSON.stringify(callerSource));
+ return {
+ fileName: callerSource.fileName || 'unknown',
+ lineNumber: callerSource.lineNumber || 0,
+ columnNumber: callerSource.columnNumber,
+ componentName: getComponentName(current),
+ };
+ }
+
+ current = current.return;
+ }
+
+ return null;
+}
+
+export function findNearestUserComponent(fiber: FiberNode | null): FiberCodeInfo | null {
+ if (!fiber) return null;
+
+ let current: FiberNode | null = fiber;
+ let iterations = 0;
+ let hostName: string | null = null;
+
+ while (current && iterations < 50) {
+ iterations++;
+ const type = current.type;
+
+ if (type && typeof type === 'string' && !hostName) {
+ hostName = type;
+ }
+
+ if (type && typeof type === 'function') {
+ const funcType = type as { displayName?: string; name?: string };
+ const name = funcType.displayName || funcType.name;
+ if (name && name !== 'Anonymous' && !name.startsWith('_')) {
+ return {
+ fileName: 'unknown',
+ lineNumber: 0,
+ componentName: name,
+ };
+ }
+ }
+
+ current = current.return;
+ }
+
+ if (hostName) {
+ return {
+ fileName: 'unknown',
+ lineNumber: 0,
+ componentName: hostName,
+ };
+ }
+
+ return null;
+}
+
+function getComponentName(fiber: FiberNode): string {
+ if (!fiber || !fiber.type) return 'Unknown';
+ const type = fiber.type;
+ if (typeof type === 'function') {
+ const funcType = type as { displayName?: string; name?: string };
+ return funcType.displayName || funcType.name || 'Anonymous';
+ }
+ if (typeof type === 'string') return type;
+ return 'Unknown';
+}
+
+export function extractRelativePath(absolutePath: string): string {
+ if (!absolutePath) return 'unknown';
+ const markers = ['/src/', '/app/', '/components/', '/screens/'];
+ for (const marker of markers) {
+ const index = absolutePath.indexOf(marker);
+ if (index !== -1) return absolutePath.slice(index + 1);
+ }
+ const parts = absolutePath.split('/');
+ return parts[parts.length - 1] || absolutePath;
+}
+
+export function isComponentDetectionAvailable(): boolean {
+ return __DEV__ && !!global.__REACT_DEVTOOLS_GLOBAL_HOOK__;
+}
diff --git a/packages/agentation-rn/src/utils/helpers.ts b/packages/agentation-rn/src/utils/helpers.ts
new file mode 100644
index 0000000..e86797a
--- /dev/null
+++ b/packages/agentation-rn/src/utils/helpers.ts
@@ -0,0 +1,30 @@
+import * as Clipboard from 'expo-clipboard';
+import { debugError } from './debug';
+
+export function generateId(): string {
+ return `ann_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;
+}
+
+export function getTimestamp(): number {
+ return Date.now();
+}
+
+export async function copyToClipboard(text: string): Promise {
+ try {
+ await Clipboard.setStringAsync(text);
+ } catch (error) {
+ debugError('Failed to copy to clipboard:', error);
+ throw error;
+ }
+}
+
+export function formatDetectedElement(
+ codeInfo: { relativePath?: string; lineNumber?: number; componentName?: string } | null
+): string | undefined {
+ if (!codeInfo) return undefined;
+ const filename = codeInfo.relativePath?.split('/').pop();
+ if (filename) {
+ return codeInfo.lineNumber ? `${filename}:${codeInfo.lineNumber}` : filename;
+ }
+ return codeInfo.componentName;
+}
diff --git a/packages/agentation-rn/src/utils/index.ts b/packages/agentation-rn/src/utils/index.ts
new file mode 100644
index 0000000..c398895
--- /dev/null
+++ b/packages/agentation-rn/src/utils/index.ts
@@ -0,0 +1,42 @@
+export {
+ detectComponent,
+ formatElementPath,
+ formatElementPathWithColumn,
+ getComponentType,
+ isComponentDetectionAvailable,
+ getDetectionErrorMessage,
+ detectComponentAtPoint,
+} from './componentDetection';
+
+export { generateMarkdown } from './markdownGeneration';
+
+export {
+ saveAnnotations,
+ loadAnnotations,
+ getStorageKey,
+ saveSettings,
+ loadSettings,
+} from './storage';
+
+export {
+ getNavigationInfo,
+ reactNavigationResolver,
+ expoRouterResolver,
+} from './navigationDetection';
+export type { NavigationInfo, NavigationResolver } from './navigationDetection';
+
+export {
+ generateId,
+ getTimestamp,
+ copyToClipboard,
+ formatDetectedElement,
+} from './helpers';
+
+export {
+ SPRING_BOUNCY,
+ SPRING_SMOOTH,
+ TIMING,
+ DELAYS,
+} from './animations';
+
+export { debugLog, debugWarn, debugError } from './debug';
diff --git a/packages/agentation-rn/src/utils/markdownGeneration.ts b/packages/agentation-rn/src/utils/markdownGeneration.ts
new file mode 100644
index 0000000..c1e94a6
--- /dev/null
+++ b/packages/agentation-rn/src/utils/markdownGeneration.ts
@@ -0,0 +1,263 @@
+import type { Annotation, MarkdownOutput, OutputDetailLevel } from '../types';
+
+export function generateMarkdown(
+ annotations: Annotation[],
+ detailLevel: OutputDetailLevel = 'standard'
+): MarkdownOutput {
+ const timestamp = Date.now();
+ const sorted = [...annotations].sort((a, b) => a.y - b.y);
+
+ const firstAnnotation = sorted[0];
+ const platform = firstAnnotation?.platform;
+ const routeName = firstAnnotation?.routeName;
+ const navigationPath = firstAnnotation?.navigationPath;
+ const screenDims = firstAnnotation?.screenDimensions;
+ const pixelRatio = firstAnnotation?.pixelRatio;
+
+ const pageTitle = routeName || 'App';
+
+ if (annotations.length === 0) {
+ return {
+ content: `# Page Feedback: ${pageTitle}\n\nNo annotations yet.`,
+ count: 0,
+ screen: pageTitle,
+ timestamp,
+ };
+ }
+
+ let content = '';
+
+ switch (detailLevel) {
+ case 'compact':
+ content = generateCompactOutput(sorted, pageTitle);
+ break;
+ case 'detailed':
+ content = generateDetailedOutput(sorted, pageTitle, {
+ routeName, navigationPath, platform, screenDims, timestamp,
+ });
+ break;
+ case 'forensic':
+ content = generateForensicOutput(sorted, pageTitle, {
+ routeName, navigationPath, platform, screenDims, pixelRatio, timestamp,
+ });
+ break;
+ case 'standard':
+ default:
+ content = generateStandardOutput(sorted, pageTitle, {
+ routeName, platform, screenDims, timestamp,
+ });
+ break;
+ }
+
+ return {
+ content,
+ count: annotations.length,
+ screen: pageTitle,
+ timestamp,
+ };
+}
+
+function generateCompactOutput(
+ annotations: Annotation[],
+ pageTitle: string
+): string {
+ let content = `## Feedback: ${pageTitle}\n\n`;
+
+ annotations.forEach((annotation, index) => {
+ const elementDisplay = annotation.element || 'Component';
+ content += `${index + 1}. **${annotation.elementPath}** (${elementDisplay})\n`;
+ content += ` ${annotation.comment}\n\n`;
+ });
+
+ return content;
+}
+
+function generateStandardOutput(
+ annotations: Annotation[],
+ pageTitle: string,
+ context: {
+ routeName?: string;
+ platform?: string;
+ screenDims?: { width: number; height: number };
+ timestamp: number;
+ }
+): string {
+ let content = `## Page Feedback: ${pageTitle}\n`;
+
+ if (context.screenDims) {
+ content += `**Screen:** ${context.screenDims.width}x${context.screenDims.height}\n`;
+ }
+ if (context.platform) {
+ content += `**Platform:** ${context.platform}\n`;
+ }
+
+ content += `\n`;
+
+ annotations.forEach((annotation, index) => {
+ content += `### ${index + 1}. ${annotation.element || 'Component'}\n`;
+ content += `**Location:** \`${annotation.elementPath}\`\n`;
+
+ if (annotation.componentType) {
+ content += `**Component:** ${annotation.componentType}\n`;
+ }
+
+ if (annotation.boundingBox) {
+ content += `**Position:** ${Math.round(annotation.boundingBox.x)}, ${Math.round(annotation.boundingBox.y)} (${Math.round(annotation.boundingBox.width)}x${Math.round(annotation.boundingBox.height)})\n`;
+ }
+
+ content += `**Feedback:** ${annotation.comment}\n\n`;
+ });
+
+ return content;
+}
+
+function generateDetailedOutput(
+ annotations: Annotation[],
+ pageTitle: string,
+ context: {
+ routeName?: string;
+ navigationPath?: string;
+ platform?: string;
+ screenDims?: { width: number; height: number };
+ timestamp: number;
+ }
+): string {
+ let content = `## Page Feedback: ${pageTitle}\n`;
+
+ if (context.screenDims) {
+ content += `**Screen:** ${context.screenDims.width}x${context.screenDims.height}\n`;
+ }
+ if (context.routeName) {
+ content += `**Route:** ${context.routeName}\n`;
+ }
+ if (context.navigationPath) {
+ content += `**Navigation Path:** ${context.navigationPath}\n`;
+ }
+ if (context.platform) {
+ content += `**Platform:** ${context.platform}\n`;
+ }
+
+ content += `\n---\n\n`;
+
+ annotations.forEach((annotation, index) => {
+ content += `### ${index + 1}. ${annotation.element || 'Component'}\n\n`;
+ content += `**Location:** \`${annotation.elementPath}\`\n`;
+
+ if (annotation.componentType) {
+ content += `**Component:** ${annotation.componentType}\n`;
+ }
+
+ if (annotation.parentComponents && annotation.parentComponents.length > 0) {
+ content += `**Parent Components:** ${annotation.parentComponents.join(' > ')}\n`;
+ }
+
+ if (annotation.boundingBox) {
+ content += `**Bounding box:** x:${Math.round(annotation.boundingBox.x)}, y:${Math.round(annotation.boundingBox.y)}, ${Math.round(annotation.boundingBox.width)}x${Math.round(annotation.boundingBox.height)}px\n`;
+ }
+
+ if (annotation.nearbyText) {
+ content += `**Nearby text:** "${annotation.nearbyText}"\n`;
+ }
+
+ if (annotation.selectedText) {
+ content += `**Selected text:** "${annotation.selectedText}"\n`;
+ }
+
+ if (annotation.accessibility) {
+ content += `**Accessibility:** ${annotation.accessibility}\n`;
+ }
+
+ content += `\n**Issue:** ${annotation.comment}\n\n`;
+ content += `---\n\n`;
+ });
+
+ content += `**Search tips:** Use the file paths above to find components. `;
+ content += `Try \`grep -r "ComponentName"\` or search for the nearby text.\n`;
+
+ return content;
+}
+
+function generateForensicOutput(
+ annotations: Annotation[],
+ pageTitle: string,
+ context: {
+ routeName?: string;
+ navigationPath?: string;
+ platform?: string;
+ screenDims?: { width: number; height: number };
+ pixelRatio?: number;
+ timestamp: number;
+ }
+): string {
+ let content = `## Page Feedback: ${pageTitle}\n\n`;
+
+ content += `**Environment:**\n`;
+ if (context.routeName) {
+ content += `- Route: ${context.routeName}\n`;
+ }
+ if (context.navigationPath) {
+ content += `- Navigation Path: ${context.navigationPath}\n`;
+ }
+ if (context.platform) {
+ content += `- Platform: ${context.platform}\n`;
+ }
+ if (context.screenDims) {
+ content += `- Screen: ${context.screenDims.width}x${context.screenDims.height}\n`;
+ }
+ if (context.pixelRatio) {
+ content += `- Pixel Ratio: ${context.pixelRatio}\n`;
+ }
+ content += `- Timestamp: ${new Date(context.timestamp).toISOString()}\n`;
+
+ content += `\n---\n\n`;
+
+ annotations.forEach((annotation, index) => {
+ content += `### ${index + 1}. ${annotation.element || 'Component'}\n\n`;
+
+ if (annotation.columnNumber) {
+ content += `**Source:** ${annotation.elementPath}:${annotation.columnNumber}\n`;
+ } else {
+ content += `**Source:** ${annotation.elementPath}\n`;
+ }
+
+ if (annotation.componentType) {
+ content += `**Component Type:** ${annotation.componentType}\n`;
+ }
+
+ if (annotation.fullPath) {
+ content += `**Full Hierarchy:** ${annotation.fullPath}\n`;
+ } else if (annotation.parentComponents && annotation.parentComponents.length > 0) {
+ content += `**Full Hierarchy:** ${annotation.parentComponents.join(' > ')} > ${annotation.element}\n`;
+ }
+
+ if (annotation.testID) {
+ content += `**TestID:** ${annotation.testID}\n`;
+ }
+
+ content += `\n**Position:**\n`;
+ if (annotation.boundingBox) {
+ content += `- Bounding box: x:${Math.round(annotation.boundingBox.x)}, y:${Math.round(annotation.boundingBox.y)}\n`;
+ content += `- Dimensions: ${Math.round(annotation.boundingBox.width)}x${Math.round(annotation.boundingBox.height)}px\n`;
+ }
+ content += `- Annotation at: ${Math.round(annotation.x)}px, ${Math.round(annotation.y)}px\n`;
+
+ if (annotation.selectedText) {
+ content += `\n**Selected text:** "${annotation.selectedText}"\n`;
+ }
+ if (annotation.nearbyText) {
+ content += `**Nearby text:** "${annotation.nearbyText}"\n`;
+ }
+ if (annotation.nearbyElements) {
+ content += `**Nearby elements:** ${annotation.nearbyElements}\n`;
+ }
+
+ if (annotation.accessibility) {
+ content += `**Accessibility:** ${annotation.accessibility}\n`;
+ }
+
+ content += `\n**Issue:** ${annotation.comment}\n\n`;
+ content += `---\n\n`;
+ });
+
+ return content;
+}
diff --git a/packages/agentation-rn/src/utils/navigationDetection.ts b/packages/agentation-rn/src/utils/navigationDetection.ts
new file mode 100644
index 0000000..3fd2684
--- /dev/null
+++ b/packages/agentation-rn/src/utils/navigationDetection.ts
@@ -0,0 +1,110 @@
+export interface NavigationInfo {
+ routeName?: string;
+ routeParams?: Record;
+ navigationPath?: string;
+}
+
+export type NavigationResolver = () => NavigationInfo | undefined;
+
+interface NavigationState {
+ routes: Array<{ name: string; params?: unknown; state?: NavigationState }>;
+ index: number;
+}
+
+declare global {
+ var __REACT_NAVIGATION_DEVTOOLS__: {
+ navigatorRef?: {
+ current?: {
+ getRootState?: () => NavigationState | undefined;
+ };
+ };
+ } | undefined;
+ var __expo_router_store__: {
+ getState?: () => NavigationState | undefined;
+ } | undefined;
+}
+
+export const reactNavigationResolver: NavigationResolver = () => {
+ try {
+ const globalNav = global.__REACT_NAVIGATION_DEVTOOLS__;
+ if (globalNav?.navigatorRef?.current) {
+ const state = globalNav.navigatorRef.current.getRootState?.();
+ if (state) {
+ const route = getActiveRoute(state);
+ if (route) {
+ return {
+ routeName: route.name,
+ routeParams: route.params as Record | undefined,
+ navigationPath: buildNavigationPath(state),
+ };
+ }
+ }
+ }
+ return undefined;
+ } catch {
+ return undefined;
+ }
+};
+
+export const expoRouterResolver: NavigationResolver = () => {
+ try {
+ const expoStore = global.__expo_router_store__;
+ if (expoStore) {
+ const state = expoStore.getState?.();
+ if (state?.routes) {
+ const route = getActiveRoute(state);
+ if (route) {
+ return {
+ routeName: route.name,
+ routeParams: route.params as Record | undefined,
+ navigationPath: buildNavigationPath(state),
+ };
+ }
+ }
+ }
+ return undefined;
+ } catch {
+ return undefined;
+ }
+};
+
+const defaultResolvers: NavigationResolver[] = [
+ reactNavigationResolver,
+ expoRouterResolver,
+];
+
+export function getNavigationInfo(
+ customResolver?: NavigationResolver
+): NavigationInfo | undefined {
+ if (customResolver) {
+ const result = customResolver();
+ if (result) return result;
+ }
+
+ for (const resolver of defaultResolvers) {
+ const result = resolver();
+ if (result) return result;
+ }
+
+ return undefined;
+}
+
+function getActiveRoute(state: NavigationState): { name: string; params?: unknown } | undefined {
+ if (!state || !state.routes) return undefined;
+ const route = state.routes[state.index];
+ if (route.state) {
+ return getActiveRoute(route.state);
+ }
+ return route;
+}
+
+function buildNavigationPath(state: NavigationState): string {
+ const parts: string[] = [];
+ let current: NavigationState | undefined = state;
+ while (current && current.routes) {
+ const route: { name: string; params?: unknown; state?: NavigationState } = current.routes[current.index];
+ parts.push(route.name);
+ current = route.state;
+ }
+ return parts.join('/');
+}
diff --git a/packages/agentation-rn/src/utils/storage.ts b/packages/agentation-rn/src/utils/storage.ts
new file mode 100644
index 0000000..64b4907
--- /dev/null
+++ b/packages/agentation-rn/src/utils/storage.ts
@@ -0,0 +1,73 @@
+import AsyncStorage from '@react-native-async-storage/async-storage';
+import type { Annotation, StorageKey, AgenationSettings } from '../types';
+import { DEFAULT_SETTINGS } from '../types';
+import { debugError } from './debug';
+
+const SETTINGS_KEY = '@agentation:settings';
+
+export function getStorageKey(screenName: string): StorageKey {
+ return `@agentation:${screenName}`;
+}
+
+export async function saveAnnotations(
+ screenName: string,
+ annotations: Annotation[]
+): Promise {
+ try {
+ const key = getStorageKey(screenName);
+ const json = JSON.stringify(annotations);
+ await AsyncStorage.setItem(key, json);
+ } catch (error) {
+ debugError('Failed to save annotations:', error);
+ throw error;
+ }
+}
+
+export async function loadAnnotations(
+ screenName: string
+): Promise {
+ try {
+ const key = getStorageKey(screenName);
+ const json = await AsyncStorage.getItem(key);
+
+ if (!json) {
+ return [];
+ }
+
+ const annotations = JSON.parse(json) as Annotation[];
+ return annotations;
+ } catch (error) {
+ debugError('Failed to load annotations:', error);
+ return [];
+ }
+}
+
+export async function saveSettings(
+ settings: Partial
+): Promise {
+ try {
+ const current = await loadSettings();
+ const merged = { ...current, ...settings };
+ const json = JSON.stringify(merged);
+ await AsyncStorage.setItem(SETTINGS_KEY, json);
+ } catch (error) {
+ debugError('Failed to save settings:', error);
+ throw error;
+ }
+}
+
+export async function loadSettings(): Promise {
+ try {
+ const json = await AsyncStorage.getItem(SETTINGS_KEY);
+
+ if (!json) {
+ return DEFAULT_SETTINGS;
+ }
+
+ const stored = JSON.parse(json) as Partial;
+ return { ...DEFAULT_SETTINGS, ...stored };
+ } catch (error) {
+ debugError('Failed to load settings:', error);
+ return DEFAULT_SETTINGS;
+ }
+}
diff --git a/packages/agentation-rn/tsconfig.json b/packages/agentation-rn/tsconfig.json
new file mode 100644
index 0000000..6acbf01
--- /dev/null
+++ b/packages/agentation-rn/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "module": "ESNext",
+ "lib": ["ES2020"],
+ "jsx": "react-jsx",
+ "declaration": true,
+ "declarationMap": true,
+ "outDir": "./dist",
+ "rootDir": "./src",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "forceConsistentCasingInFileNames": true,
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "allowSyntheticDefaultImports": true,
+ "isolatedModules": true
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "example"]
+}
diff --git a/packages/agentation-rn/tsup.config.ts b/packages/agentation-rn/tsup.config.ts
new file mode 100644
index 0000000..c79a48b
--- /dev/null
+++ b/packages/agentation-rn/tsup.config.ts
@@ -0,0 +1,23 @@
+import { defineConfig } from 'tsup';
+
+export default defineConfig({
+ entry: ['src/index.ts'],
+ format: ['cjs', 'esm'],
+ dts: true,
+ sourcemap: true,
+ clean: true,
+ external: [
+ 'react',
+ 'react-native',
+ '@react-native-async-storage/async-storage',
+ 'expo-clipboard',
+ '@callstack/liquid-glass',
+ 'react-native-safe-area-context',
+ 'react-native-dev-inspector',
+ 'react-native-screens',
+ 'react-native-svg',
+ ],
+ esbuildOptions(options) {
+ options.jsx = 'automatic';
+ },
+});
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1172830..8e22d22 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -21,10 +21,10 @@ importers:
version: 18.3.7(@types/react@18.3.27)
'@vitejs/plugin-react':
specifier: ^4.3.0
- version: 4.7.0(vite@5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2))
+ version: 4.7.0(vite@5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0))
esbuild-sass-plugin:
specifier: ^3.6.0
- version: 3.6.0(esbuild@0.27.2)(sass-embedded@1.97.2)
+ version: 3.6.0(esbuild@0.27.2)(sass-embedded@1.97.3)
jsdom:
specifier: ^25.0.0
version: 25.0.1
@@ -42,16 +42,16 @@ importers:
version: 18.3.1(react@18.3.1)
sass:
specifier: ^1.97.2
- version: 1.97.2
+ version: 1.97.3
tsup:
specifier: ^8.0.0
- version: 8.5.1(postcss@8.5.6)(typescript@5.9.3)
+ version: 8.5.1(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.2)
typescript:
specifier: ^5.0.0
version: 5.9.3
vitest:
specifier: ^2.0.0
- version: 2.1.9(@types/node@20.19.30)(jsdom@25.0.1)(sass-embedded@1.97.2)(sass@1.97.2)
+ version: 2.1.9(@types/node@20.19.30)(jsdom@25.0.1)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)
_package-export/example:
dependencies:
@@ -60,10 +60,10 @@ importers:
version: link:..
framer-motion:
specifier: ^12.28.1
- version: 12.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 12.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
next:
specifier: ^14.0.0
- version: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.97.2)
+ version: 14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.97.3)
prism-react-renderer:
specifier: ^2.4.1
version: 2.4.1(react@18.3.1)
@@ -85,16 +85,116 @@ importers:
version: 18.3.7(@types/react@18.3.27)
sass:
specifier: ^1.69.0
- version: 1.97.2
+ version: 1.97.3
typescript:
specifier: ^5.0.0
version: 5.9.3
+ packages/agentation-rn:
+ dependencies:
+ '@react-native-async-storage/async-storage':
+ specifier: ^1.21.0
+ version: 1.24.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))
+ expo-clipboard:
+ specifier: ^8.0.8
+ version: 8.0.8(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react:
+ specifier: '>=18.0.0'
+ version: 19.1.0
+ react-native:
+ specifier: '>=0.72.0'
+ version: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ react-native-safe-area-context:
+ specifier: '>=4.0.0'
+ version: 5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ devDependencies:
+ '@callstack/liquid-glass':
+ specifier: ^0.7.0
+ version: 0.7.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@types/react':
+ specifier: ^19.1.1
+ version: 19.1.17
+ tsup:
+ specifier: ^8.0.0
+ version: 8.5.1(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.2)
+ typescript:
+ specifier: ^5.3.0
+ version: 5.9.3
+
+ packages/agentation-rn/example:
+ dependencies:
+ '@callstack/liquid-glass':
+ specifier: ^0.7.0
+ version: 0.7.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@react-native-async-storage/async-storage':
+ specifier: ^2.2.0
+ version: 2.2.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))
+ '@react-navigation/native':
+ specifier: ^7.1.28
+ version: 7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@react-navigation/native-stack':
+ specifier: ^7.10.1
+ version: 7.10.1(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ agentation-rn:
+ specifier: workspace:*
+ version: link:..
+ expo:
+ specifier: ~54.0.32
+ version: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-clipboard:
+ specifier: ^8.0.8
+ version: 8.0.8(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-status-bar:
+ specifier: ~3.0.9
+ version: 3.0.9(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react:
+ specifier: 19.1.0
+ version: 19.1.0
+ react-native:
+ specifier: 0.81.5
+ version: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ react-native-dev-inspector:
+ specifier: ^1.1.0
+ version: 1.1.0(@babel/core@7.28.6)(metro-config@0.83.3)(metro@0.83.3)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react-native-safe-area-context:
+ specifier: ~5.6.0
+ version: 5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react-native-screens:
+ specifier: ~4.16.0
+ version: 4.16.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react-native-svg:
+ specifier: 15.12.1
+ version: 15.12.1(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ devDependencies:
+ '@babel/plugin-transform-react-jsx-source':
+ specifier: ^7.27.1
+ version: 7.27.1(@babel/core@7.28.6)
+ '@types/react':
+ specifier: ~19.1.0
+ version: 19.1.17
+ babel-preset-expo:
+ specifier: ^54.0.10
+ version: 54.0.10(@babel/core@7.28.6)(@babel/runtime@7.28.6)(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.17.0)
+ typescript:
+ specifier: ~5.9.2
+ version: 5.9.3
+
packages:
+ '@0no-co/graphql.web@1.2.0':
+ resolution: {integrity: sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw==}
+ peerDependencies:
+ graphql: ^14.0.0 || ^15.0.0 || ^16.0.0
+ peerDependenciesMeta:
+ graphql:
+ optional: true
+
'@asamuzakjp/css-color@3.2.0':
resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
+ '@babel/code-frame@7.10.4':
+ resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==}
+
'@babel/code-frame@7.28.6':
resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
engines: {node: '>=6.9.0'}
@@ -111,14 +211,39 @@ packages:
resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==}
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-compilation-targets@7.28.6':
resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
engines: {node: '>=6.9.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.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.6':
+ resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
'@babel/helper-globals@7.28.0':
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
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.28.6':
resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
engines: {node: '>=6.9.0'}
@@ -129,10 +254,30 @@ packages:
peerDependencies:
'@babel/core': ^7.0.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.28.6':
resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-remap-async-to-generator@7.27.1':
+ resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==}
+ engines: {node: '>=6.9.0'}
+ 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-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.27.1':
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
@@ -145,283 +290,651 @@ packages:
resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
engines: {node: '>=6.9.0'}
+ '@babel/helper-wrap-function@7.28.6':
+ resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==}
+ engines: {node: '>=6.9.0'}
+
'@babel/helpers@7.28.6':
resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
engines: {node: '>=6.9.0'}
+ '@babel/highlight@7.25.9':
+ resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==}
+ engines: {node: '>=6.9.0'}
+
'@babel/parser@7.28.6':
resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/plugin-transform-react-jsx-self@7.27.1':
- resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ '@babel/plugin-proposal-decorators@7.28.6':
+ resolution: {integrity: sha512-RVdFPPyY9fCRAX68haPmOk2iyKW8PKJFthmm8NeSI3paNxKWGZIn99+VbIf0FrtCpFnPgnpF/L48tadi617ULg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-react-jsx-source@7.27.1':
- resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ '@babel/plugin-proposal-export-default-from@7.27.1':
+ resolution: {integrity: sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/runtime@7.28.6':
- resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@babel/template@7.28.6':
- resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ '@babel/plugin-syntax-decorators@7.28.6':
+ resolution: {integrity: sha512-71EYI0ONURHJBL4rSFXnITXqXrrY8q4P0q006DPfN+Rk+ASM+++IBXem/ruokgBZR8YNEWZ8R6B+rCb8VcUTqA==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@babel/traverse@7.28.6':
- resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
+ '@babel/plugin-syntax-dynamic-import@7.8.3':
+ resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-export-default-from@7.28.6':
+ resolution: {integrity: sha512-Svlx1fjJFnNz0LZeUaybRukSxZI3KkpApUmIRzEdXC5k8ErTOz0OD0kNrICi5Vc3GlpP5ZCeRyRO+mfWTSz+iQ==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@babel/types@7.28.6':
- resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
+ '@babel/plugin-syntax-flow@7.28.6':
+ resolution: {integrity: sha512-D+OrJumc9McXNEBI/JmFnc/0uCM2/Y3PEBG3gfV3QIYkKv5pvnpzFrl1kYCrcHJP8nOeFB/SHi1IHz29pNGuew==}
engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@bufbuild/protobuf@2.10.2':
- resolution: {integrity: sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A==}
+ '@babel/plugin-syntax-import-attributes@7.28.6':
+ resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@csstools/color-helpers@5.1.0':
- resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
- engines: {node: '>=18'}
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@csstools/css-calc@2.1.4':
- resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
- engines: {node: '>=18'}
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
+ '@babel/core': ^7.0.0-0
- '@csstools/css-color-parser@3.1.0':
- resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
- engines: {node: '>=18'}
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+ engines: {node: '>=6.9.0'}
peerDependencies:
- '@csstools/css-parser-algorithms': ^3.0.5
- '@csstools/css-tokenizer': ^3.0.4
+ '@babel/core': ^7.0.0-0
- '@csstools/css-parser-algorithms@3.0.5':
- resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
- engines: {node: '>=18'}
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
- '@csstools/css-tokenizer': ^3.0.4
+ '@babel/core': ^7.0.0-0
- '@csstools/css-tokenizer@3.0.4':
- resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
- engines: {node: '>=18'}
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/aix-ppc64@0.21.5':
- resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [aix]
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/aix-ppc64@0.27.2':
- resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/android-arm64@0.21.5':
- resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/android-arm64@0.27.2':
- resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/android-arm@0.21.5':
- resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/android-arm@0.27.2':
- resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/android-x64@0.21.5':
- resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
+ '@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
- '@esbuild/android-x64@0.27.2':
- resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
+ '@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
- '@esbuild/darwin-arm64@0.21.5':
- resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
+ '@babel/plugin-transform-async-generator-functions@7.28.6':
+ resolution: {integrity: sha512-9knsChgsMzBV5Yh3kkhrZNxH3oCYAfMBkNNaVN4cP2RVlFPe8wYdwwcnOsAbkdDoV9UjFtOXWrWB52M8W4jNeA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/darwin-arm64@0.27.2':
- resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
+ '@babel/plugin-transform-async-to-generator@7.28.6':
+ resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/darwin-x64@0.21.5':
- resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
+ '@babel/plugin-transform-block-scoping@7.28.6':
+ resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/darwin-x64@0.27.2':
- resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
+ '@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
- '@esbuild/freebsd-arm64@0.21.5':
- resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
+ '@babel/plugin-transform-class-static-block@7.28.6':
+ resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.12.0
- '@esbuild/freebsd-arm64@0.27.2':
- resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
+ '@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
- '@esbuild/freebsd-x64@0.21.5':
- resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
+ '@babel/plugin-transform-computed-properties@7.28.6':
+ resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/freebsd-x64@0.27.2':
- resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
+ '@babel/plugin-transform-destructuring@7.28.5':
+ resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/linux-arm64@0.21.5':
- resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
+ '@babel/plugin-transform-export-namespace-from@7.27.1':
+ resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/linux-arm64@0.27.2':
- resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
+ '@babel/plugin-transform-flow-strip-types@7.27.1':
+ resolution: {integrity: sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/linux-arm@0.21.5':
- resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
+ '@babel/plugin-transform-for-of@7.27.1':
+ resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/linux-arm@0.27.2':
- resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
+ '@babel/plugin-transform-function-name@7.27.1':
+ resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/linux-ia32@0.21.5':
- resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
+ '@babel/plugin-transform-literals@7.27.1':
+ resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
- '@esbuild/linux-ia32@0.27.2':
- resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ '@babel/plugin-transform-logical-assignment-operators@7.28.6':
+ resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==}
+ engines: {node: '>=6.9.0'}
+ 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-named-capturing-groups-regex@7.27.1':
+ resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.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.28.6':
+ resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-object-rest-spread@7.28.6':
+ resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-optional-catch-binding@7.28.6':
+ resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==}
+ engines: {node: '>=6.9.0'}
+ 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.27.7':
+ resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-methods@7.28.6':
+ resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-private-property-in-object@7.28.6':
+ resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-display-name@7.28.0':
+ resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-development@7.27.1':
+ resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx@7.28.6':
+ resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-pure-annotations@7.27.1':
+ resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-regenerator@7.28.6':
+ resolution: {integrity: sha512-eZhoEZHYQLL5uc1gS5e9/oTknS0sSSAtd5TkKMUp3J+S/CaUjagc0kOUPsEbDmMeva0nC3WWl4SxVY6+OBuxfw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-runtime@7.28.5':
+ resolution: {integrity: sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==}
+ engines: {node: '>=6.9.0'}
+ 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.28.6':
+ resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-sticky-regex@7.27.1':
+ resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==}
+ engines: {node: '>=6.9.0'}
+ 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-regex@7.27.1':
+ resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/preset-react@7.28.5':
+ resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.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.28.6':
+ resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.6':
+ resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
+ engines: {node: '>=6.9.0'}
+
+ '@bufbuild/protobuf@2.11.0':
+ resolution: {integrity: sha512-sBXGT13cpmPR5BMgHE6UEEfEaShh5Ror6rfN3yEK5si7QVrtZg8LEPQb0VVhiLRUslD2yLnXtnRzG035J/mZXQ==}
+
+ '@callstack/liquid-glass@0.7.0':
+ resolution: {integrity: sha512-ztPuQnXG3z9kPWT0srf+yIbVZih/aifbynzormDzsFMWR6IQk3e0h8DEYic3sgW7PUa7A/GyaBBCpq10ZZvboA==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
+ '@csstools/color-helpers@5.1.0':
+ resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
- '@esbuild/linux-loong64@0.21.5':
- resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
+ '@csstools/css-calc@2.1.4':
+ resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- '@esbuild/linux-loong64@0.27.2':
- resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ '@csstools/css-color-parser@3.1.0':
+ resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==}
engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
+ peerDependencies:
+ '@csstools/css-parser-algorithms': ^3.0.5
+ '@csstools/css-tokenizer': ^3.0.4
- '@esbuild/linux-mips64el@0.21.5':
- resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
+ '@csstools/css-parser-algorithms@3.0.5':
+ resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@csstools/css-tokenizer': ^3.0.4
- '@esbuild/linux-mips64el@0.27.2':
- resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ '@csstools/css-tokenizer@3.0.4':
+ resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
- '@esbuild/linux-ppc64@0.21.5':
- resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'}
cpu: [ppc64]
- os: [linux]
+ os: [aix]
- '@esbuild/linux-ppc64@0.27.2':
- resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ '@esbuild/aix-ppc64@0.27.2':
+ resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
engines: {node: '>=18'}
cpu: [ppc64]
- os: [linux]
+ os: [aix]
- '@esbuild/linux-riscv64@0.21.5':
- resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
+ cpu: [arm64]
+ os: [android]
- '@esbuild/linux-riscv64@0.27.2':
- resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ '@esbuild/android-arm64@0.27.2':
+ resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
+ cpu: [arm64]
+ os: [android]
- '@esbuild/linux-s390x@0.21.5':
- resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
+ cpu: [arm]
+ os: [android]
- '@esbuild/linux-s390x@0.27.2':
- resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ '@esbuild/android-arm@0.27.2':
+ resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
+ cpu: [arm]
+ os: [android]
- '@esbuild/linux-x64@0.21.5':
- resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'}
cpu: [x64]
- os: [linux]
+ os: [android]
- '@esbuild/linux-x64@0.27.2':
- resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ '@esbuild/android-x64@0.27.2':
+ resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
engines: {node: '>=18'}
cpu: [x64]
- os: [linux]
+ os: [android]
- '@esbuild/netbsd-arm64@0.27.2':
- resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
- engines: {node: '>=18'}
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
cpu: [arm64]
- os: [netbsd]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.27.2':
+ resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.2':
+ resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.2':
+ resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.27.2':
+ resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.2':
+ resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.2':
+ resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.2':
+ resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.2':
+ resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.2':
+ resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.2':
+ resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.2':
+ resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.2':
+ resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
'@esbuild/netbsd-x64@0.21.5':
resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
@@ -507,6 +1020,159 @@ packages:
cpu: [x64]
os: [win32]
+ '@expo/cli@54.0.22':
+ resolution: {integrity: sha512-BTH2FCczhJLfj1cpfcKrzhKnvRLTOztgW4bVloKDqH+G3ZSohWLRFNAIz56XtdjPxBbi2/qWhGBAkl7kBon/Jw==}
+ hasBin: true
+ peerDependencies:
+ expo: '*'
+ expo-router: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ expo-router:
+ optional: true
+ react-native:
+ optional: true
+
+ '@expo/code-signing-certificates@0.0.6':
+ resolution: {integrity: sha512-iNe0puxwBNEcuua9gmTGzq+SuMDa0iATai1FlFTMHJ/vUmKvN/V//drXoLJkVb5i5H3iE/n/qIJxyoBnXouD0w==}
+
+ '@expo/config-plugins@54.0.4':
+ resolution: {integrity: sha512-g2yXGICdoOw5i3LkQSDxl2Q5AlQCrG7oniu0pCPPO+UxGb7He4AFqSvPSy8HpRUj55io17hT62FTjYRD+d6j3Q==}
+
+ '@expo/config-types@54.0.10':
+ resolution: {integrity: sha512-/J16SC2an1LdtCZ67xhSkGXpALYUVUNyZws7v+PVsFZxClYehDSoKLqyRaGkpHlYrCc08bS0RF5E0JV6g50psA==}
+
+ '@expo/config@12.0.13':
+ resolution: {integrity: sha512-Cu52arBa4vSaupIWsF0h7F/Cg//N374nYb7HAxV0I4KceKA7x2UXpYaHOL7EEYYvp7tZdThBjvGpVmr8ScIvaQ==}
+
+ '@expo/devcert@1.2.1':
+ resolution: {integrity: sha512-qC4eaxmKMTmJC2ahwyui6ud8f3W60Ss7pMkpBq40Hu3zyiAaugPXnZ24145U7K36qO9UHdZUVxsCvIpz2RYYCA==}
+
+ '@expo/devtools@0.1.8':
+ resolution: {integrity: sha512-SVLxbuanDjJPgc0sy3EfXUMLb/tXzp6XIHkhtPVmTWJAp+FOr6+5SeiCfJrCzZFet0Ifyke2vX3sFcKwEvCXwQ==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-native:
+ optional: true
+
+ '@expo/env@2.0.8':
+ resolution: {integrity: sha512-5VQD6GT8HIMRaSaB5JFtOXuvfDVU80YtZIuUT/GDhUF782usIXY13Tn3IdDz1Tm/lqA9qnRZQ1BF4t7LlvdJPA==}
+
+ '@expo/fingerprint@0.15.4':
+ resolution: {integrity: sha512-eYlxcrGdR2/j2M6pEDXo9zU9KXXF1vhP+V+Tl+lyY+bU8lnzrN6c637mz6Ye3em2ANy8hhUR03Raf8VsT9Ogng==}
+ hasBin: true
+
+ '@expo/image-utils@0.8.8':
+ resolution: {integrity: sha512-HHHaG4J4nKjTtVa1GG9PCh763xlETScfEyNxxOvfTRr8IKPJckjTyqSLEtdJoFNJ1vqiABEjW7tqGhqGibZLeA==}
+
+ '@expo/json-file@10.0.8':
+ resolution: {integrity: sha512-9LOTh1PgKizD1VXfGQ88LtDH0lRwq9lsTb4aichWTWSWqy3Ugfkhfm3BhzBIkJJfQQ5iJu3m/BoRlEIjoCGcnQ==}
+
+ '@expo/metro-config@54.0.14':
+ resolution: {integrity: sha512-hxpLyDfOR4L23tJ9W1IbJJsG7k4lv2sotohBm/kTYyiG+pe1SYCAWsRmgk+H42o/wWf/HQjE5k45S5TomGLxNA==}
+ peerDependencies:
+ expo: '*'
+ peerDependenciesMeta:
+ expo:
+ optional: true
+
+ '@expo/metro@54.2.0':
+ resolution: {integrity: sha512-h68TNZPGsk6swMmLm9nRSnE2UXm48rWwgcbtAHVMikXvbxdS41NDHHeqg1rcQ9AbznDRp6SQVC2MVpDnsRKU1w==}
+
+ '@expo/osascript@2.3.8':
+ resolution: {integrity: sha512-/TuOZvSG7Nn0I8c+FcEaoHeBO07yu6vwDgk7rZVvAXoeAK5rkA09jRyjYsZo+0tMEFaToBeywA6pj50Mb3ny9w==}
+ engines: {node: '>=12'}
+
+ '@expo/package-manager@1.9.10':
+ resolution: {integrity: sha512-axJm+NOj3jVxep49va/+L3KkF3YW/dkV+RwzqUJedZrv4LeTqOG4rhrCaCPXHTvLqCTDKu6j0Xyd28N7mnxsGA==}
+
+ '@expo/plist@0.4.8':
+ resolution: {integrity: sha512-pfNtErGGzzRwHP+5+RqswzPDKkZrx+Cli0mzjQaus1ZWFsog5ibL+nVT3NcporW51o8ggnt7x813vtRbPiyOrQ==}
+
+ '@expo/prebuild-config@54.0.8':
+ resolution: {integrity: sha512-EA7N4dloty2t5Rde+HP0IEE+nkAQiu4A/+QGZGT9mFnZ5KKjPPkqSyYcRvP5bhQE10D+tvz6X0ngZpulbMdbsg==}
+ peerDependencies:
+ expo: '*'
+
+ '@expo/schema-utils@0.1.8':
+ resolution: {integrity: sha512-9I6ZqvnAvKKDiO+ZF8BpQQFYWXOJvTAL5L/227RUbWG1OVZDInFifzCBiqAZ3b67NRfeAgpgvbA7rejsqhY62A==}
+
+ '@expo/sdk-runtime-versions@1.0.0':
+ resolution: {integrity: sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==}
+
+ '@expo/spawn-async@1.7.2':
+ resolution: {integrity: sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==}
+ engines: {node: '>=12'}
+
+ '@expo/sudo-prompt@9.3.2':
+ resolution: {integrity: sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==}
+
+ '@expo/vector-icons@15.0.3':
+ resolution: {integrity: sha512-SBUyYKphmlfUBqxSfDdJ3jAdEVSALS2VUPOUyqn48oZmb2TL/O7t7/PQm5v4NQujYEPLPMTLn9KVw6H7twwbTA==}
+ peerDependencies:
+ expo-font: '>=14.0.4'
+ react: '*'
+ react-native: '*'
+
+ '@expo/ws-tunnel@1.0.6':
+ resolution: {integrity: sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==}
+
+ '@expo/xcpretty@4.3.2':
+ resolution: {integrity: sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==}
+ hasBin: true
+
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/brace-expansion@5.0.0':
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/fs-minipass@4.0.1':
+ resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
+ engines: {node: '>=18.0.0'}
+
+ '@isaacs/ttlcache@1.4.1':
+ resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==}
+ engines: {node: '>=12'}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/create-cache-key-function@29.7.0':
+ resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/environment@29.7.0':
+ resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/fake-timers@29.7.0':
+ resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/schemas@29.6.3':
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/transform@29.7.0':
+ resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ '@jest/types@29.6.3':
+ resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -517,6 +1183,9 @@ packages:
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+
'@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
@@ -580,216 +1249,345 @@ packages:
cpu: [x64]
os: [win32]
- '@parcel/watcher-android-arm64@2.5.4':
- resolution: {integrity: sha512-hoh0vx4v+b3BNI7Cjoy2/B0ARqcwVNrzN/n7DLq9ZB4I3lrsvhrkCViJyfTj/Qi5xM9YFiH4AmHGK6pgH1ss7g==}
+ '@parcel/watcher-android-arm64@2.5.6':
+ resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [android]
- '@parcel/watcher-darwin-arm64@2.5.4':
- resolution: {integrity: sha512-kphKy377pZiWpAOyTgQYPE5/XEKVMaj6VUjKT5VkNyUJlr2qZAn8gIc7CPzx+kbhvqHDT9d7EqdOqRXT6vk0zw==}
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [darwin]
- '@parcel/watcher-darwin-x64@2.5.4':
- resolution: {integrity: sha512-UKaQFhCtNJW1A9YyVz3Ju7ydf6QgrpNQfRZ35wNKUhTQ3dxJ/3MULXN5JN/0Z80V/KUBDGa3RZaKq1EQT2a2gg==}
+ '@parcel/watcher-darwin-x64@2.5.6':
+ resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [darwin]
- '@parcel/watcher-freebsd-x64@2.5.4':
- resolution: {integrity: sha512-Dib0Wv3Ow/m2/ttvLdeI2DBXloO7t3Z0oCp4bAb2aqyqOjKPPGrg10pMJJAQ7tt8P4V2rwYwywkDhUia/FgS+Q==}
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [freebsd]
- '@parcel/watcher-linux-arm-glibc@2.5.4':
- resolution: {integrity: sha512-I5Vb769pdf7Q7Sf4KNy8Pogl/URRCKu9ImMmnVKYayhynuyGYMzuI4UOWnegQNa2sGpsPSbzDsqbHNMyeyPCgw==}
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
- '@parcel/watcher-linux-arm-musl@2.5.4':
- resolution: {integrity: sha512-kGO8RPvVrcAotV4QcWh8kZuHr9bXi9a3bSZw7kFarYR0+fGliU7hd/zevhjw8fnvIKG3J9EO5G6sXNGCSNMYPQ==}
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
engines: {node: '>= 10.0.0'}
cpu: [arm]
os: [linux]
- '@parcel/watcher-linux-arm64-glibc@2.5.4':
- resolution: {integrity: sha512-KU75aooXhqGFY2W5/p8DYYHt4hrjHZod8AhcGAmhzPn/etTa+lYCDB2b1sJy3sWJ8ahFVTdy+EbqSBvMx3iFlw==}
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
- '@parcel/watcher-linux-arm64-musl@2.5.4':
- resolution: {integrity: sha512-Qx8uNiIekVutnzbVdrgSanM+cbpDD3boB1f8vMtnuG5Zau4/bdDbXyKwIn0ToqFhIuob73bcxV9NwRm04/hzHQ==}
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [linux]
- '@parcel/watcher-linux-x64-glibc@2.5.4':
- resolution: {integrity: sha512-UYBQvhYmgAv61LNUn24qGQdjtycFBKSK3EXr72DbJqX9aaLbtCOO8+1SkKhD/GNiJ97ExgcHBrukcYhVjrnogA==}
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
- '@parcel/watcher-linux-x64-musl@2.5.4':
- resolution: {integrity: sha512-YoRWCVgxv8akZrMhdyVi6/TyoeeMkQ0PGGOf2E4omODrvd1wxniXP+DBynKoHryStks7l+fDAMUBRzqNHrVOpg==}
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [linux]
- '@parcel/watcher-win32-arm64@2.5.4':
- resolution: {integrity: sha512-iby+D/YNXWkiQNYcIhg8P5hSjzXEHaQrk2SLrWOUD7VeC4Ohu0WQvmV+HDJokZVJ2UjJ4AGXW3bx7Lls9Ln4TQ==}
+ '@parcel/watcher-win32-arm64@2.5.6':
+ resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
engines: {node: '>= 10.0.0'}
cpu: [arm64]
os: [win32]
- '@parcel/watcher-win32-ia32@2.5.4':
- resolution: {integrity: sha512-vQN+KIReG0a2ZDpVv8cgddlf67J8hk1WfZMMP7sMeZmJRSmEax5xNDNWKdgqSe2brOKTQQAs3aCCUal2qBHAyg==}
+ '@parcel/watcher-win32-ia32@2.5.6':
+ resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
engines: {node: '>= 10.0.0'}
cpu: [ia32]
os: [win32]
- '@parcel/watcher-win32-x64@2.5.4':
- resolution: {integrity: sha512-3A6efb6BOKwyw7yk9ro2vus2YTt2nvcd56AuzxdMiVOxL9umDyN5PKkKfZ/gZ9row41SjVmTVQNWQhaRRGpOKw==}
+ '@parcel/watcher-win32-x64@2.5.6':
+ resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
engines: {node: '>= 10.0.0'}
cpu: [x64]
os: [win32]
- '@parcel/watcher@2.5.4':
- resolution: {integrity: sha512-WYa2tUVV5HiArWPB3ydlOc4R2ivq0IDrlqhMi3l7mVsFEXNcTfxYFPIHXHXIh/ca/y/V5N4E1zecyxdIBjYnkQ==}
+ '@parcel/watcher@2.5.6':
+ resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
engines: {node: '>= 10.0.0'}
+ '@react-native-async-storage/async-storage@1.24.0':
+ resolution: {integrity: sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g==}
+ peerDependencies:
+ react-native: ^0.0.0-0 || >=0.60 <1.0
+
+ '@react-native-async-storage/async-storage@2.2.0':
+ resolution: {integrity: sha512-gvRvjR5JAaUZF8tv2Kcq/Gbt3JHwbKFYfmb445rhOj6NUMx3qPLixmDx5pZAyb9at1bYvJ4/eTUipU5aki45xw==}
+ peerDependencies:
+ react-native: ^0.0.0-0 || >=0.65 <1.0
+
+ '@react-native/assets-registry@0.81.5':
+ resolution: {integrity: sha512-705B6x/5Kxm1RKRvSv0ADYWm5JOnoiQ1ufW7h8uu2E6G9Of/eE6hP/Ivw3U5jI16ERqZxiKQwk34VJbB0niX9w==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/babel-plugin-codegen@0.81.5':
+ resolution: {integrity: sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/babel-preset@0.81.5':
+ resolution: {integrity: sha512-UoI/x/5tCmi+pZ3c1+Ypr1DaRMDLI3y+Q70pVLLVgrnC3DHsHRIbHcCHIeG/IJvoeFqFM2sTdhSOLJrf8lOPrA==}
+ engines: {node: '>= 20.19.4'}
+ peerDependencies:
+ '@babel/core': '*'
+
+ '@react-native/codegen@0.81.5':
+ resolution: {integrity: sha512-a2TDA03Up8lpSa9sh5VRGCQDXgCTOyDOFH+aqyinxp1HChG8uk89/G+nkJ9FPd0rqgi25eCTR16TWdS3b+fA6g==}
+ engines: {node: '>= 20.19.4'}
+ peerDependencies:
+ '@babel/core': '*'
+
+ '@react-native/community-cli-plugin@0.81.5':
+ resolution: {integrity: sha512-yWRlmEOtcyvSZ4+OvqPabt+NS36vg0K/WADTQLhrYrm9qdZSuXmq8PmdJWz/68wAqKQ+4KTILiq2kjRQwnyhQw==}
+ engines: {node: '>= 20.19.4'}
+ peerDependencies:
+ '@react-native-community/cli': '*'
+ '@react-native/metro-config': '*'
+ peerDependenciesMeta:
+ '@react-native-community/cli':
+ optional: true
+ '@react-native/metro-config':
+ optional: true
+
+ '@react-native/debugger-frontend@0.81.5':
+ resolution: {integrity: sha512-bnd9FSdWKx2ncklOetCgrlwqSGhMHP2zOxObJbOWXoj7GHEmih4MKarBo5/a8gX8EfA1EwRATdfNBQ81DY+h+w==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/dev-middleware@0.81.5':
+ resolution: {integrity: sha512-WfPfZzboYgo/TUtysuD5xyANzzfka8Ebni6RIb2wDxhb56ERi7qDrE4xGhtPsjCL4pQBXSVxyIlCy0d8I6EgGA==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/gradle-plugin@0.81.5':
+ resolution: {integrity: sha512-hORRlNBj+ReNMLo9jme3yQ6JQf4GZpVEBLxmTXGGlIL78MAezDZr5/uq9dwElSbcGmLEgeiax6e174Fie6qPLg==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/js-polyfills@0.81.5':
+ resolution: {integrity: sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w==}
+ engines: {node: '>= 20.19.4'}
+
+ '@react-native/normalize-colors@0.81.5':
+ resolution: {integrity: sha512-0HuJ8YtqlTVRXGZuGeBejLE04wSQsibpTI+RGOyVqxZvgtlLLC/Ssw0UmbHhT4lYMp2fhdtvKZSs5emWB1zR/g==}
+
+ '@react-native/virtualized-lists@0.81.5':
+ resolution: {integrity: sha512-UVXgV/db25OPIvwZySeToXD/9sKKhOdkcWmmf4Jh8iBZuyfML+/5CasaZ1E7Lqg6g3uqVQq75NqIwkYmORJMPw==}
+ engines: {node: '>= 20.19.4'}
+ peerDependencies:
+ '@types/react': ^19.1.0
+ react: '*'
+ react-native: '*'
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ '@react-navigation/core@7.14.0':
+ resolution: {integrity: sha512-tMpzskBzVp0E7CRNdNtJIdXjk54Kwe/TF9ViXAef+YFM1kSfGv4e/B2ozfXE+YyYgmh4WavTv8fkdJz1CNyu+g==}
+ peerDependencies:
+ react: '>= 18.2.0'
+
+ '@react-navigation/elements@2.9.5':
+ resolution: {integrity: sha512-iHZU8rRN1014Upz73AqNVXDvSMZDh5/ktQ1CMe21rdgnOY79RWtHHBp9qOS3VtqlUVYGkuX5GEw5mDt4tKdl0g==}
+ peerDependencies:
+ '@react-native-masked-view/masked-view': '>= 0.2.0'
+ '@react-navigation/native': ^7.1.28
+ react: '>= 18.2.0'
+ react-native: '*'
+ react-native-safe-area-context: '>= 4.0.0'
+ peerDependenciesMeta:
+ '@react-native-masked-view/masked-view':
+ optional: true
+
+ '@react-navigation/native-stack@7.10.1':
+ resolution: {integrity: sha512-8jt7olKysn07HuKKSjT/ahZZTV+WaZa96o9RI7gAwh7ATlUDY02rIRttwvCyjovhSjD9KCiuJ+Hd4kwLidHwJw==}
+ peerDependencies:
+ '@react-navigation/native': ^7.1.28
+ react: '>= 18.2.0'
+ react-native: '*'
+ react-native-safe-area-context: '>= 4.0.0'
+ react-native-screens: '>= 4.0.0'
+
+ '@react-navigation/native@7.1.28':
+ resolution: {integrity: sha512-d1QDn+KNHfHGt3UIwOZvupvdsDdiHYZBEj7+wL2yDVo3tMezamYy60H9s3EnNVE1Ae1ty0trc7F2OKqo/RmsdQ==}
+ peerDependencies:
+ react: '>= 18.2.0'
+ react-native: '*'
+
+ '@react-navigation/routers@7.5.3':
+ resolution: {integrity: sha512-1tJHg4KKRJuQ1/EvJxatrMef3NZXEPzwUIUZ3n1yJ2t7Q97siwRtbynRpQG9/69ebbtiZ8W3ScOZF/OmhvM4Rg==}
+
+ '@rn-dev-inspector/core@1.1.0':
+ resolution: {integrity: sha512-mX1vOFCTd2tBT8Q4Hsatp/du/8UGfDa3IDnhFCWAU1FCp3KVCfKEsWf5GLHLbdMFKoiQiP9g9Ub0DqczD5NjPg==}
+ peerDependencies:
+ react: '>=17.0.0'
+ react-native: '>=0.68.0'
+
+ '@rn-dev-inspector/metro-plugin@1.1.0':
+ resolution: {integrity: sha512-vNYIpjOo4GoVXx5BZXWrrG83M/UWwsaOl3BP8JVtPyEBZwE5b1PCca2M1x6CJ/2wegbAQxY9ydFdHYp0sGkJmA==}
+ peerDependencies:
+ '@babel/core': '>=7.0.0'
+ metro: '>=0.72.0'
+ metro-config: '>=0.72.0'
+
'@rolldown/pluginutils@1.0.0-beta.27':
resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
- '@rollup/rollup-android-arm-eabi@4.55.1':
- resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==}
+ '@rollup/rollup-android-arm-eabi@4.56.0':
+ resolution: {integrity: sha512-LNKIPA5k8PF1+jAFomGe3qN3bbIgJe/IlpDBwuVjrDKrJhVWywgnJvflMt/zkbVNLFtF1+94SljYQS6e99klnw==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.55.1':
- resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==}
+ '@rollup/rollup-android-arm64@4.56.0':
+ resolution: {integrity: sha512-lfbVUbelYqXlYiU/HApNMJzT1E87UPGvzveGg2h0ktUNlOCxKlWuJ9jtfvs1sKHdwU4fzY7Pl8sAl49/XaEk6Q==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.55.1':
- resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==}
+ '@rollup/rollup-darwin-arm64@4.56.0':
+ resolution: {integrity: sha512-EgxD1ocWfhoD6xSOeEEwyE7tDvwTgZc8Bss7wCWe+uc7wO8G34HHCUH+Q6cHqJubxIAnQzAsyUsClt0yFLu06w==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.55.1':
- resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==}
+ '@rollup/rollup-darwin-x64@4.56.0':
+ resolution: {integrity: sha512-1vXe1vcMOssb/hOF8iv52A7feWW2xnu+c8BV4t1F//m9QVLTfNVpEdja5ia762j/UEJe2Z1jAmEqZAK42tVW3g==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.55.1':
- resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==}
+ '@rollup/rollup-freebsd-arm64@4.56.0':
+ resolution: {integrity: sha512-bof7fbIlvqsyv/DtaXSck4VYQ9lPtoWNFCB/JY4snlFuJREXfZnm+Ej6yaCHfQvofJDXLDMTVxWscVSuQvVWUQ==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.55.1':
- resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==}
+ '@rollup/rollup-freebsd-x64@4.56.0':
+ resolution: {integrity: sha512-KNa6lYHloW+7lTEkYGa37fpvPq+NKG/EHKM8+G/g9WDU7ls4sMqbVRV78J6LdNuVaeeK5WB9/9VAFbKxcbXKYg==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
- resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.56.0':
+ resolution: {integrity: sha512-E8jKK87uOvLrrLN28jnAAAChNq5LeCd2mGgZF+fGF5D507WlG/Noct3lP/QzQ6MrqJ5BCKNwI9ipADB6jyiq2A==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.55.1':
- resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==}
+ '@rollup/rollup-linux-arm-musleabihf@4.56.0':
+ resolution: {integrity: sha512-jQosa5FMYF5Z6prEpTCCmzCXz6eKr/tCBssSmQGEeozA9tkRUty/5Vx06ibaOP9RCrW1Pvb8yp3gvZhHwTDsJw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.55.1':
- resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==}
+ '@rollup/rollup-linux-arm64-gnu@4.56.0':
+ resolution: {integrity: sha512-uQVoKkrC1KGEV6udrdVahASIsaF8h7iLG0U0W+Xn14ucFwi6uS539PsAr24IEF9/FoDtzMeeJXJIBo5RkbNWvQ==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.55.1':
- resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==}
+ '@rollup/rollup-linux-arm64-musl@4.56.0':
+ resolution: {integrity: sha512-vLZ1yJKLxhQLFKTs42RwTwa6zkGln+bnXc8ueFGMYmBTLfNu58sl5/eXyxRa2RarTkJbXl8TKPgfS6V5ijNqEA==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loong64-gnu@4.55.1':
- resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==}
+ '@rollup/rollup-linux-loong64-gnu@4.56.0':
+ resolution: {integrity: sha512-FWfHOCub564kSE3xJQLLIC/hbKqHSVxy8vY75/YHHzWvbJL7aYJkdgwD/xGfUlL5UV2SB7otapLrcCj2xnF1dg==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-loong64-musl@4.55.1':
- resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==}
+ '@rollup/rollup-linux-loong64-musl@4.56.0':
+ resolution: {integrity: sha512-z1EkujxIh7nbrKL1lmIpqFTc/sr0u8Uk0zK/qIEFldbt6EDKWFk/pxFq3gYj4Bjn3aa9eEhYRlL3H8ZbPT1xvA==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.55.1':
- resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==}
+ '@rollup/rollup-linux-ppc64-gnu@4.56.0':
+ resolution: {integrity: sha512-iNFTluqgdoQC7AIE8Q34R3AuPrJGJirj5wMUErxj22deOcY7XwZRaqYmB6ZKFHoVGqRcRd0mqO+845jAibKCkw==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-ppc64-musl@4.55.1':
- resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==}
+ '@rollup/rollup-linux-ppc64-musl@4.56.0':
+ resolution: {integrity: sha512-MtMeFVlD2LIKjp2sE2xM2slq3Zxf9zwVuw0jemsxvh1QOpHSsSzfNOTH9uYW9i1MXFxUSMmLpeVeUzoNOKBaWg==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.55.1':
- resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==}
+ '@rollup/rollup-linux-riscv64-gnu@4.56.0':
+ resolution: {integrity: sha512-in+v6wiHdzzVhYKXIk5U74dEZHdKN9KH0Q4ANHOTvyXPG41bajYRsy7a8TPKbYPl34hU7PP7hMVHRvv/5aCSew==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.55.1':
- resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==}
+ '@rollup/rollup-linux-riscv64-musl@4.56.0':
+ resolution: {integrity: sha512-yni2raKHB8m9NQpI9fPVwN754mn6dHQSbDTwxdr9SE0ks38DTjLMMBjrwvB5+mXrX+C0npX0CVeCUcvvvD8CNQ==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.55.1':
- resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==}
+ '@rollup/rollup-linux-s390x-gnu@4.56.0':
+ resolution: {integrity: sha512-zhLLJx9nQPu7wezbxt2ut+CI4YlXi68ndEve16tPc/iwoylWS9B3FxpLS2PkmfYgDQtosah07Mj9E0khc3Y+vQ==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.55.1':
- resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==}
+ '@rollup/rollup-linux-x64-gnu@4.56.0':
+ resolution: {integrity: sha512-MVC6UDp16ZSH7x4rtuJPAEoE1RwS8N4oK9DLHy3FTEdFoUTCFVzMfJl/BVJ330C+hx8FfprA5Wqx4FhZXkj2Kw==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.55.1':
- resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==}
+ '@rollup/rollup-linux-x64-musl@4.56.0':
+ resolution: {integrity: sha512-ZhGH1eA4Qv0lxaV00azCIS1ChedK0V32952Md3FtnxSqZTBTd6tgil4nZT5cU8B+SIw3PFYkvyR4FKo2oyZIHA==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-openbsd-x64@4.55.1':
- resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==}
+ '@rollup/rollup-openbsd-x64@4.56.0':
+ resolution: {integrity: sha512-O16XcmyDeFI9879pEcmtWvD/2nyxR9mF7Gs44lf1vGGx8Vg2DRNx11aVXBEqOQhWb92WN4z7fW/q4+2NYzCbBA==}
cpu: [x64]
os: [openbsd]
- '@rollup/rollup-openharmony-arm64@4.55.1':
- resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==}
+ '@rollup/rollup-openharmony-arm64@4.56.0':
+ resolution: {integrity: sha512-LhN/Reh+7F3RCgQIRbgw8ZMwUwyqJM+8pXNT6IIJAqm2IdKkzpCh/V9EdgOMBKuebIrzswqy4ATlrDgiOwbRcQ==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.55.1':
- resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==}
+ '@rollup/rollup-win32-arm64-msvc@4.56.0':
+ resolution: {integrity: sha512-kbFsOObXp3LBULg1d3JIUQMa9Kv4UitDmpS+k0tinPBz3watcUiV2/LUDMMucA6pZO3WGE27P7DsfaN54l9ing==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.55.1':
- resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==}
+ '@rollup/rollup-win32-ia32-msvc@4.56.0':
+ resolution: {integrity: sha512-vSSgny54D6P4vf2izbtFm/TcWYedw7f8eBrOiGGecyHyQB9q4Kqentjaj8hToe+995nob/Wv48pDqL5a62EWtg==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.55.1':
- resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==}
+ '@rollup/rollup-win32-x64-gnu@4.56.0':
+ resolution: {integrity: sha512-FeCnkPCTHQJFbiGG49KjV5YGW/8b9rrXAM2Mz2kiIoktq2qsJxRD5giEMEOD2lPdgs72upzefaUvS+nc8E3UzQ==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.55.1':
- resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==}
+ '@rollup/rollup-win32-x64-msvc@4.56.0':
+ resolution: {integrity: sha512-H8AE9Ur/t0+1VXujj90w0HrSOuv0Nq9r1vSZF2t5km20NTfosQsGGUXDaKdQZzwuLts7IyL1fYT4hM95TI9c4g==}
cpu: [x64]
os: [win32]
+ '@sinclair/typebox@0.27.8':
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
+ '@sinonjs/fake-timers@10.3.0':
+ resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
@@ -833,6 +1631,18 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/graceful-fs@4.1.9':
+ resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
'@types/node@20.19.30':
resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
@@ -850,6 +1660,29 @@ packages:
'@types/react@18.3.27':
resolution: {integrity: sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==}
+ '@types/react@19.1.17':
+ resolution: {integrity: sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==}
+
+ '@types/stack-utils@2.0.3':
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
+ '@urql/core@5.2.0':
+ resolution: {integrity: sha512-/n0ieD0mvvDnVAXEQgX/7qJiVcvYvNkOHeBvkwtylfjydar123caCXcl58PXFY11oU1oquJocVXHxLAbtv4x1A==}
+
+ '@urql/exchange-retry@1.3.2':
+ resolution: {integrity: sha512-TQMCz2pFJMfpNxmSfX1VSfTjwUIFx/mL+p1bnfM1xjjdla7Z+KnGMW/EhFbpckp3LyWAH4PgOsMwOMnIN+MBFg==}
+ peerDependencies:
+ '@urql/core': ^5.0.0
+
'@vitejs/plugin-react@4.7.0':
resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
engines: {node: ^14.18.0 || >=16.0.0}
@@ -885,6 +1718,18 @@ packages:
'@vitest/utils@2.1.9':
resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
+ '@xmldom/xmldom@0.8.11':
+ resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==}
+ engines: {node: '>=10.0.0'}
+
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
+ accepts@1.3.8:
+ resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
+ engines: {node: '>= 0.6'}
+
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
@@ -894,10 +1739,29 @@ packages:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
+ anser@1.4.10:
+ resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==}
+
+ ansi-escapes@4.3.2:
+ resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@4.1.1:
+ resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==}
+ engines: {node: '>=6'}
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
+ ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
ansi-styles@5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
@@ -905,27 +1769,154 @@ packages:
any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
+ asap@2.0.6:
+ resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+
assertion-error@2.0.1:
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
engines: {node: '>=12'}
+ async-limiter@1.0.1:
+ resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==}
+
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
- baseline-browser-mapping@2.9.17:
- resolution: {integrity: sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==}
+ babel-jest@29.7.0:
+ resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.8.0
+
+ babel-plugin-istanbul@6.1.1:
+ resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
+ engines: {node: '>=8'}
+
+ babel-plugin-jest-hoist@29.6.3:
+ resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ babel-plugin-polyfill-corejs2@0.4.15:
+ resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-corejs3@0.13.0:
+ resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==}
+ peerDependencies:
+ '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+ babel-plugin-polyfill-regenerator@0.6.6:
+ resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==}
+ 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-react-native-web@0.21.2:
+ resolution: {integrity: sha512-SPD0J6qjJn8231i0HZhlAGH6NORe+QvRSQM2mwQEzJ2Fb3E4ruWTiiicPlHjmeWShDXLcvoorOCXjeR7k/lyWA==}
+
+ babel-plugin-syntax-hermes-parser@0.29.1:
+ resolution: {integrity: sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==}
+
+ babel-plugin-transform-flow-enums@0.0.2:
+ resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==}
+
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0 || ^8.0.0-0
+
+ babel-preset-expo@54.0.10:
+ resolution: {integrity: sha512-wTt7POavLFypLcPW/uC5v8y+mtQKDJiyGLzYCjqr9tx0Qc3vCXcDKk1iCFIj/++Iy5CWhhTflEa7VvVPNWeCfw==}
+ peerDependencies:
+ '@babel/runtime': ^7.20.0
+ expo: '*'
+ react-refresh: '>=0.14.0 <1.0.0'
+ peerDependenciesMeta:
+ '@babel/runtime':
+ optional: true
+ expo:
+ optional: true
+
+ babel-preset-jest@29.6.3:
+ resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ baseline-browser-mapping@2.9.18:
+ resolution: {integrity: sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==}
hasBin: true
+ better-opn@3.0.2:
+ resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
+ engines: {node: '>=12.0.0'}
+
+ big-integer@1.6.52:
+ resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==}
+ engines: {node: '>=0.6'}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ bplist-creator@0.1.0:
+ resolution: {integrity: sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==}
+
+ bplist-parser@0.3.1:
+ resolution: {integrity: sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==}
+ engines: {node: '>= 5.10.0'}
+
+ bplist-parser@0.3.2:
+ resolution: {integrity: sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==}
+ engines: {node: '>= 5.10.0'}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
browserslist@4.28.1:
resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- buffer-builder@0.2.0:
- resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==}
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
bundle-require@5.1.0:
resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
@@ -937,6 +1928,10 @@ packages:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
@@ -945,13 +1940,29 @@ packages:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
- caniuse-lite@1.0.30001765:
- resolution: {integrity: sha512-LWcNtSyZrakjECqmpP4qdg0MMGdN368D7X8XvvAqOcqMv0RxnlqVKZl2V6/mBR68oYMxOZPLw/gO7DuisMHUvQ==}
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
+ caniuse-lite@1.0.30001766:
+ resolution: {integrity: sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==}
chai@5.3.3:
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
engines: {node: '>=18'}
+ chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
check-error@2.1.3:
resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
engines: {node: '>= 16'}
@@ -960,13 +1971,68 @@ packages:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
+ chownr@3.0.0:
+ resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
+ engines: {node: '>=18'}
+
+ chrome-launcher@0.15.2:
+ resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==}
+ engines: {node: '>=12.13.0'}
+ hasBin: true
+
+ chromium-edge-launcher@0.2.0:
+ resolution: {integrity: sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==}
+
+ ci-info@2.0.0:
+ resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ cli-cursor@2.1.0:
+ resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==}
+ engines: {node: '>=4'}
+
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+
clsx@2.1.1:
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
engines: {node: '>=6'}
+ color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ color-string@1.9.1:
+ resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+ color@4.2.3:
+ resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+ engines: {node: '>=12.5.0'}
+
colorjs.io@0.5.2:
resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
@@ -974,13 +2040,39 @@ packages:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
+ commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
+ commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+
+ compressible@2.0.18:
+ resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==}
+ engines: {node: '>= 0.6'}
+
+ compression@1.8.1:
+ resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==}
+ engines: {node: '>= 0.8.0'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+ connect@3.7.0:
+ resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==}
+ engines: {node: '>= 0.10.0'}
+
consola@3.4.2:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
@@ -988,6 +2080,28 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ core-js-compat@3.48.0:
+ resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ crypto-random-string@2.0.0:
+ resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
+ engines: {node: '>=8'}
+
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+ css-tree@1.1.3:
+ resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==}
+ engines: {node: '>=8.0.0'}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
+
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
@@ -1004,6 +2118,22 @@ packages:
resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
engines: {node: '>=18'}
+ debug@2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@3.2.7:
+ resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -1016,18 +2146,45 @@ packages:
decimal.js@10.6.0:
resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
+ decode-uri-component@0.2.2:
+ resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==}
+ engines: {node: '>=0.10'}
+
deep-eql@5.0.2:
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
engines: {node: '>=6'}
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
+ define-lazy-prop@2.0.0:
+ resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+ engines: {node: '>=8'}
+
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
+ destroy@1.2.0:
+ resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
+ engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+
detect-libc@2.1.2:
resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
@@ -1035,17 +2192,63 @@ packages:
dom-accessibility-api@0.5.16:
resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+ dotenv-expand@11.0.7:
+ resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==}
+ engines: {node: '>=12'}
+
+ dotenv@16.4.7:
+ resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
+ engines: {node: '>=12'}
+
dunder-proto@1.0.1:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
- electron-to-chromium@1.5.277:
- resolution: {integrity: sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==}
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.278:
+ resolution: {integrity: sha512-dQ0tM1svDRQOwxnXxm+twlGTjr9Upvt8UFWAgmLsxEzFQxhbti4VwxmMjsDxVC51Zo84swW7FVCXEV+VAkhuPw==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ encodeurl@1.0.2:
+ resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
+ engines: {node: '>= 0.8'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
entities@6.0.1:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'}
+ env-editor@0.4.2:
+ resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==}
+ engines: {node: '>=8'}
+
+ error-stack-parser@2.1.4:
+ resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==}
+
es-define-property@1.0.1:
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
engines: {node: '>= 0.4'}
@@ -1085,13 +2288,132 @@ packages:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
estree-walker@3.0.3:
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
+ exec-async@2.2.0:
+ resolution: {integrity: sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==}
+
expect-type@1.3.0:
resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
engines: {node: '>=12.0.0'}
+ expo-asset@12.0.12:
+ resolution: {integrity: sha512-CsXFCQbx2fElSMn0lyTdRIyKlSXOal6ilLJd+yeZ6xaC7I9AICQgscY5nj0QcwgA+KYYCCEQEBndMsmj7drOWQ==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
+ expo-clipboard@8.0.8:
+ resolution: {integrity: sha512-VKoBkHIpZZDJTB0jRO4/PZskHdMNOEz3P/41tmM6fDuODMpqhvyWK053X0ebspkxiawJX9lX33JXHBCvVsTTOA==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
+ expo-constants@18.0.13:
+ resolution: {integrity: sha512-FnZn12E1dRYKDHlAdIyNFhBurKTS3F9CrfrBDJI5m3D7U17KBHMQ6JEfYlSj7LG7t+Ulr+IKaj58L1k5gBwTcQ==}
+ peerDependencies:
+ expo: '*'
+ react-native: '*'
+
+ expo-file-system@19.0.21:
+ resolution: {integrity: sha512-s3DlrDdiscBHtab/6W1osrjGL+C2bvoInPJD7sOwmxfJ5Woynv2oc+Fz1/xVXaE/V7HE/+xrHC/H45tu6lZzzg==}
+ peerDependencies:
+ expo: '*'
+ react-native: '*'
+
+ expo-font@14.0.11:
+ resolution: {integrity: sha512-ga0q61ny4s/kr4k8JX9hVH69exVSIfcIc19+qZ7gt71Mqtm7xy2c6kwsPTCyhBW2Ro5yXTT8EaZOpuRi35rHbg==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+ react-native: '*'
+
+ expo-keep-awake@15.0.8:
+ resolution: {integrity: sha512-YK9M1VrnoH1vLJiQzChZgzDvVimVoriibiDIFLbQMpjYBnvyfUeHJcin/Gx1a+XgupNXy92EQJLgI/9ZuXajYQ==}
+ peerDependencies:
+ expo: '*'
+ react: '*'
+
+ expo-modules-autolinking@3.0.24:
+ resolution: {integrity: sha512-TP+6HTwhL7orDvsz2VzauyQlXJcAWyU3ANsZ7JGL4DQu8XaZv/A41ZchbtAYLfozNA2Ya1Hzmhx65hXryBMjaQ==}
+ hasBin: true
+
+ expo-modules-core@3.0.29:
+ resolution: {integrity: sha512-LzipcjGqk8gvkrOUf7O2mejNWugPkf3lmd9GkqL9WuNyeN2fRwU0Dn77e3ZUKI3k6sI+DNwjkq4Nu9fNN9WS7Q==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
+ expo-server@1.0.5:
+ resolution: {integrity: sha512-IGR++flYH70rhLyeXF0Phle56/k4cee87WeQ4mamS+MkVAVP+dDlOHf2nN06Z9Y2KhU0Gp1k+y61KkghF7HdhA==}
+ engines: {node: '>=20.16.0'}
+
+ expo-status-bar@3.0.9:
+ resolution: {integrity: sha512-xyYyVg6V1/SSOZWh4Ni3U129XHCnFHBTcUo0dhWtFDrZbNp/duw5AGsQfb2sVeU0gxWHXSY1+5F0jnKYC7WuOw==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
+ expo@54.0.32:
+ resolution: {integrity: sha512-yL9eTxiQ/QKKggVDAWO5CLjUl6IS0lPYgEvC3QM4q4fxd6rs7ks3DnbXSGVU3KNFoY/7cRNYihvd0LKYP+MCXA==}
+ hasBin: true
+ peerDependencies:
+ '@expo/dom-webview': '*'
+ '@expo/metro-runtime': '*'
+ react: '*'
+ react-native: '*'
+ react-native-webview: '*'
+ peerDependenciesMeta:
+ '@expo/dom-webview':
+ optional: true
+ '@expo/metro-runtime':
+ optional: true
+ react-native-webview:
+ optional: true
+
+ exponential-backoff@3.1.3:
+ resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -1101,15 +2423,41 @@ packages:
picomatch:
optional: true
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ filter-obj@1.1.0:
+ resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==}
+ engines: {node: '>=0.10.0'}
+
+ finalhandler@1.1.2:
+ resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==}
+ engines: {node: '>= 0.8'}
+
+ find-up@4.1.0:
+ resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
fix-dts-default-cjs-exports@1.0.1:
resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==}
+ flow-enums-runtime@0.0.6:
+ resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==}
+
+ fontfaceobserver@2.3.0:
+ resolution: {integrity: sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==}
+
form-data@4.0.5:
resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
engines: {node: '>= 6'}
- framer-motion@12.28.1:
- resolution: {integrity: sha512-72GkO7DS4FfcSjf26wx0v+rzkW8Fhn4Djh04aDbuEg7NYG8X8MhJZc6/5weG/YeEgIP+fCo8FS2y1HnXH8k8fQ==}
+ framer-motion@12.29.0:
+ resolution: {integrity: sha512-1gEFGXHYV2BD42ZPTFmSU9buehppU+bCuOnHU0AD18DKh9j4DuTx47MvqY5ax+NNWRtK32qIcJf1UxKo1WwjWg==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -1122,6 +2470,17 @@ packages:
react-dom:
optional: true
+ freeport-async@2.0.0:
+ resolution: {integrity: sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==}
+ engines: {node: '>=8'}
+
+ fresh@0.5.2:
+ resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
+ engines: {node: '>= 0.6'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -1137,14 +2496,38 @@ packages:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
get-intrinsic@1.3.0:
resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
engines: {node: '>= 0.4'}
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
+ getenv@2.0.0:
+ resolution: {integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==}
+ engines: {node: '>=6'}
+
+ glob@13.0.0:
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
+ engines: {node: 20 || >=22}
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ global-dirs@0.1.1:
+ resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==}
+ engines: {node: '>=4'}
+
gopd@1.2.0:
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
engines: {node: '>= 0.4'}
@@ -1152,6 +2535,10 @@ packages:
graceful-fs@4.2.11:
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+
has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
@@ -1168,10 +2555,30 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hermes-estree@0.29.1:
+ resolution: {integrity: sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==}
+
+ hermes-estree@0.32.0:
+ resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==}
+
+ hermes-parser@0.29.1:
+ resolution: {integrity: sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==}
+
+ hermes-parser@0.32.0:
+ resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==}
+
+ hosted-git-info@7.0.2:
+ resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
html-encoding-sniffer@4.0.0:
resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
engines: {node: '>=18'}
+ http-errors@2.0.1:
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
+
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
@@ -1190,24 +2597,127 @@ packages:
peerDependencies:
postcss: ^8.1.0
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ image-size@1.2.1:
+ resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==}
+ engines: {node: '>=16.x'}
+ hasBin: true
+
immutable@5.1.4:
resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==}
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+ invariant@2.2.4:
+ resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
+
+ is-arrayish@0.3.4:
+ resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==}
+
is-core-module@2.16.1:
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
engines: {node: '>= 0.4'}
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ is-docker@2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@2.1.0:
+ resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==}
+ engines: {node: '>=8'}
+
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+ is-wsl@2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ istanbul-lib-coverage@3.2.2:
+ resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
+ engines: {node: '>=8'}
+
+ istanbul-lib-instrument@5.2.1:
+ resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
+ engines: {node: '>=8'}
+
+ jest-environment-node@29.7.0:
+ resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-get-type@29.6.3:
+ resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-haste-map@29.7.0:
+ resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-message-util@29.7.0:
+ resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-mock@29.7.0:
+ resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-regex-util@29.6.3:
+ resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-util@29.7.0:
+ resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-validate@29.7.0:
+ resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jest-worker@29.7.0:
+ resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ jimp-compact@0.16.1:
+ resolution: {integrity: sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==}
+
joycon@3.1.1:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
@@ -1215,6 +2725,17 @@ packages:
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
+ hasBin: true
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ jsc-safe-url@0.2.4:
+ resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==}
+
jsdom@25.0.1:
resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
engines: {node: '>=18'}
@@ -1234,6 +2755,94 @@ packages:
engines: {node: '>=6'}
hasBin: true
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ lan-network@0.1.7:
+ resolution: {integrity: sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==}
+ hasBin: true
+
+ launch-editor@2.12.0:
+ resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==}
+
+ leven@3.1.0:
+ resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+ engines: {node: '>=6'}
+
+ lighthouse-logger@1.4.2:
+ resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==}
+
+ lightningcss-android-arm64@1.31.1:
+ resolution: {integrity: sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.31.1:
+ resolution: {integrity: sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.31.1:
+ resolution: {integrity: sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.31.1:
+ resolution: {integrity: sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ resolution: {integrity: sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-linux-x64-musl@1.31.1:
+ resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ resolution: {integrity: sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ resolution: {integrity: sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.31.1:
+ resolution: {integrity: sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==}
+ engines: {node: '>= 12.0.0'}
+
lilconfig@3.1.3:
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
engines: {node: '>=14'}
@@ -1249,9 +2858,27 @@ packages:
resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==}
engines: {node: '>= 12.13.0'}
+ locate-path@5.0.0:
+ resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+ engines: {node: '>=8'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+ lodash.debounce@4.0.8:
+ resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+ lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+
+ log-symbols@2.2.0:
+ resolution: {integrity: sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==}
+ engines: {node: '>=4'}
+
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -1262,6 +2889,10 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+ lru-cache@11.2.4:
+ resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==}
+ engines: {node: 20 || >=22}
+
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
@@ -1272,27 +2903,151 @@ packages:
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
+ marky@1.3.0:
+ resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==}
+
math-intrinsics@1.1.0:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
+ mdn-data@2.0.14:
+ resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==}
+
+ memoize-one@5.2.1:
+ resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==}
+
+ merge-options@3.0.4:
+ resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==}
+ engines: {node: '>=10'}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ metro-babel-transformer@0.83.3:
+ resolution: {integrity: sha512-1vxlvj2yY24ES1O5RsSIvg4a4WeL7PFXgKOHvXTXiW0deLvQr28ExXj6LjwCCDZ4YZLhq6HddLpZnX4dEdSq5g==}
+ engines: {node: '>=20.19.4'}
+
+ metro-cache-key@0.83.3:
+ resolution: {integrity: sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==}
+ engines: {node: '>=20.19.4'}
+
+ metro-cache@0.83.3:
+ resolution: {integrity: sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==}
+ engines: {node: '>=20.19.4'}
+
+ metro-config@0.83.3:
+ resolution: {integrity: sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==}
+ engines: {node: '>=20.19.4'}
+
+ metro-core@0.83.3:
+ resolution: {integrity: sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==}
+ engines: {node: '>=20.19.4'}
+
+ metro-file-map@0.83.3:
+ resolution: {integrity: sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==}
+ engines: {node: '>=20.19.4'}
+
+ metro-minify-terser@0.83.3:
+ resolution: {integrity: sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==}
+ engines: {node: '>=20.19.4'}
+
+ metro-resolver@0.83.3:
+ resolution: {integrity: sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==}
+ engines: {node: '>=20.19.4'}
+
+ metro-runtime@0.83.3:
+ resolution: {integrity: sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==}
+ engines: {node: '>=20.19.4'}
+
+ metro-source-map@0.83.3:
+ resolution: {integrity: sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==}
+ engines: {node: '>=20.19.4'}
+
+ metro-symbolicate@0.83.3:
+ resolution: {integrity: sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==}
+ engines: {node: '>=20.19.4'}
+ hasBin: true
+
+ metro-transform-plugins@0.83.3:
+ resolution: {integrity: sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==}
+ engines: {node: '>=20.19.4'}
+
+ metro-transform-worker@0.83.3:
+ resolution: {integrity: sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==}
+ engines: {node: '>=20.19.4'}
+
+ metro@0.83.3:
+ resolution: {integrity: sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==}
+ engines: {node: '>=20.19.4'}
+ hasBin: true
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime@1.6.0:
+ resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ mimic-fn@1.2.0:
+ resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==}
+ engines: {node: '>=4'}
+
+ minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
+ engines: {node: 20 || >=22}
+
+ minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@3.1.0:
+ resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
+ engines: {node: '>= 18'}
+
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
- motion-dom@12.28.1:
- resolution: {integrity: sha512-xqgID69syDvXwFJnUd5bW6ajGUAr/qevRoUe/EqpsXUbVIopyWrAOiwQOhpgVQD+B7Ra60zTdj5gVkmwncebMg==}
+ motion-dom@12.29.0:
+ resolution: {integrity: sha512-3eiz9bb32yvY8Q6XNM4AwkSOBPgU//EIKTZwsSWgA9uzbPBhZJeScCVcBuwwYVqhfamewpv7ZNmVKTGp5qnzkA==}
motion-utils@12.27.2:
resolution: {integrity: sha512-B55gcoL85Mcdt2IEStY5EEAsrMSVE2sI14xQ/uAdPL+mfQxhKKFaEag9JmfxedJOR4vZpBGoPeC/Gm13I/4g5Q==}
+ ms@2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -1304,6 +3059,17 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
+ negotiator@0.6.3:
+ resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+ engines: {node: '>= 0.6'}
+
+ negotiator@0.6.4:
+ resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==}
+ engines: {node: '>= 0.6'}
+
+ nested-error-stacks@2.0.1:
+ resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==}
+
next@14.2.35:
resolution: {integrity: sha512-KhYd2Hjt/O1/1aZVX3dCwGXM1QmOV4eNM2UTacK5gipDdPN/oHHK/4oVGy7X8GMfPMsUTUEmGlsy0EY1YGAkig==}
engines: {node: '>=18.17.0'}
@@ -1325,22 +3091,122 @@ packages:
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+ node-forge@1.3.3:
+ resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==}
+ engines: {node: '>= 6.13.0'}
+
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-package-arg@11.0.3:
+ resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ nullthrows@1.1.1:
+ resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==}
+
nwsapi@2.2.23:
resolution: {integrity: sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ==}
+ ob1@0.83.3:
+ resolution: {integrity: sha512-egUxXCDwoWG06NGCS5s5AdcpnumHKJlfd3HH06P3m9TEMwwScfcY35wpQxbm9oHof+dM/lVH9Rfyu1elTVelSA==}
+ engines: {node: '>=20.19.4'}
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
+ on-finished@2.3.0:
+ resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==}
+ engines: {node: '>= 0.8'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ on-headers@1.1.0:
+ resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==}
+ engines: {node: '>= 0.8'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ onetime@2.0.1:
+ resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==}
+ engines: {node: '>=4'}
+
+ open@7.4.2:
+ resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==}
+ engines: {node: '>=8'}
+
+ open@8.4.2:
+ resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
+ engines: {node: '>=12'}
+
+ ora@3.4.0:
+ resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==}
+ engines: {node: '>=6'}
+
+ p-limit@2.3.0:
+ resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+ engines: {node: '>=6'}
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@4.1.0:
+ resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+ engines: {node: '>=8'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-try@2.2.0:
+ resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+ engines: {node: '>=6'}
+
+ parse-png@2.1.0:
+ resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==}
+ engines: {node: '>=10'}
+
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
path-parse@1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ path-scurry@2.0.1:
+ resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
+ engines: {node: 20 || >=22}
+
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
@@ -1354,6 +3220,14 @@ packages:
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@3.0.1:
+ resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==}
+ engines: {node: '>=10'}
+
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
@@ -1365,6 +3239,14 @@ packages:
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+ plist@3.1.0:
+ resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==}
+ engines: {node: '>=10.4.0'}
+
+ pngjs@3.4.0:
+ resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==}
+ engines: {node: '>=4.0.0'}
+
postcss-load-config@6.0.1:
resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
engines: {node: '>= 18'}
@@ -1423,31 +3305,137 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
+ postcss@8.4.49:
+ resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ engines: {node: ^10 || ^12 || >=14}
+
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
+ pretty-bytes@5.6.0:
+ resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
+ engines: {node: '>=6'}
+
pretty-format@27.5.1:
resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+ pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
prism-react-renderer@2.4.1:
resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==}
peerDependencies:
react: '>=16.0.0'
+ proc-log@4.2.0:
+ resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
+ promise@8.3.0:
+ resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
punycode@2.3.1:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ qrcode-terminal@0.11.0:
+ resolution: {integrity: sha512-Uu7ii+FQy4Qf82G4xu7ShHhjhGahEpCWc3x8UavY3CTcWV+ufmmCtwkr7ZKsX42jdL0kr1B5FKUeqJvAn51jzQ==}
+ hasBin: true
+
+ query-string@7.1.3:
+ resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==}
+ engines: {node: '>=6'}
+
+ queue@6.0.2:
+ resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+
+ react-devtools-core@6.1.5:
+ resolution: {integrity: sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==}
+
react-dom@18.3.1:
resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
peerDependencies:
react: ^18.3.1
+ react-freeze@1.0.4:
+ resolution: {integrity: sha512-r4F0Sec0BLxWicc7HEyo2x3/2icUTrRmDjaaRyzzn+7aDyFZliszMDOgLVwSnQnYENOlL1o569Ze2HZefk8clA==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ react: '>=17.0.0'
+
react-is@17.0.2:
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+ react-is@19.2.3:
+ resolution: {integrity: sha512-qJNJfu81ByyabuG7hPFEbXqNcWSU3+eVus+KJs+0ncpGfMyYdvSmxiJxbWR65lYi1I+/0HBcliO029gc4F+PnA==}
+
+ react-native-dev-inspector@1.1.0:
+ resolution: {integrity: sha512-d9rClJUahKBPoeZTIgCvcRY5bEdscmMJpYZAgHqeryIBqaSY5QrKpYk8GVYVTm4NGtl1jw6rq72SQZ18VDOlAw==}
+ peerDependencies:
+ react: '>=17.0.0'
+ react-native: '>=0.68.0'
+
+ react-native-is-edge-to-edge@1.2.1:
+ resolution: {integrity: sha512-FLbPWl/MyYQWz+KwqOZsSyj2JmLKglHatd3xLZWskXOpRaio4LfEDEz8E/A6uD8QoTHW6Aobw1jbEwK7KMgR7Q==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
+ react-native-safe-area-context@5.6.2:
+ resolution: {integrity: sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
+ react-native-screens@4.16.0:
+ resolution: {integrity: sha512-yIAyh7F/9uWkOzCi1/2FqvNvK6Wb9Y1+Kzn16SuGfN9YFJDTbwlzGRvePCNTOX0recpLQF3kc2FmvMUhyTCH1Q==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
+ react-native-svg@15.12.1:
+ resolution: {integrity: sha512-vCuZJDf8a5aNC2dlMovEv4Z0jjEUET53lm/iILFnFewa15b4atjVxU6Wirm6O9y6dEsdjDZVD7Q3QM4T1wlI8g==}
+ peerDependencies:
+ react: '*'
+ react-native: '*'
+
+ react-native@0.81.5:
+ resolution: {integrity: sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==}
+ engines: {node: '>= 20.19.4'}
+ hasBin: true
+ peerDependencies:
+ '@types/react': ^19.1.0
+ react: ^19.1.0
+ peerDependenciesMeta:
+ '@types/react':
+ optional: true
+
+ react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+
react-refresh@0.17.0:
resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
engines: {node: '>=0.10.0'}
@@ -1456,150 +3444,217 @@ packages:
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'}
+ react@19.1.0:
+ resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
+ engines: {node: '>=0.10.0'}
+
readdirp@4.1.2:
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
engines: {node: '>= 14.18.0'}
- resolve-from@5.0.0:
- resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
- engines: {node: '>=8'}
+ regenerate-unicode-properties@10.2.2:
+ resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==}
+ engines: {node: '>=4'}
- resolve@1.22.11:
- resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
- engines: {node: '>= 0.4'}
- hasBin: true
+ regenerate@1.4.2:
+ resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
- rollup@4.55.1:
- resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
+ regenerator-runtime@0.13.11:
+ resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
- rrweb-cssom@0.7.1:
- resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
+ regexpu-core@6.4.0:
+ resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
+ engines: {node: '>=4'}
- rrweb-cssom@0.8.0:
- resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
+ regjsgen@0.8.0:
+ resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
- rxjs@7.8.2:
- resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+ regjsparser@0.13.0:
+ resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
+ hasBin: true
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
+ requireg@0.2.2:
+ resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==}
+ engines: {node: '>= 4.0.0'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-global@1.0.0:
+ resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
+ engines: {node: '>=8'}
+
+ resolve-workspace-root@2.0.1:
+ resolution: {integrity: sha512-nR23LHAvaI6aHtMg6RWoaHpdR4D881Nydkzi2CixINyg9T00KgaJdJI6Vwty+Ps8WLxZHuxsS0BseWjxSA4C+w==}
+
+ resolve.exports@2.0.3:
+ resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==}
+ engines: {node: '>=10'}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ resolve@1.7.1:
+ resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==}
+
+ restore-cursor@2.0.0:
+ resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==}
+ engines: {node: '>=4'}
+
+ rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
+ rollup@4.56.0:
+ resolution: {integrity: sha512-9FwVqlgUHzbXtDg9RCMgodF3Ua4Na6Gau+Sdt9vyCN4RhHfVKX2DCHy3BjMLTDd47ITDhYAnTwGulWTblJSDLg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rrweb-cssom@0.7.1:
+ resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
+
+ rrweb-cssom@0.8.0:
+ resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- sass-embedded-all-unknown@1.97.2:
- resolution: {integrity: sha512-Fj75+vOIDv1T/dGDwEpQ5hgjXxa2SmMeShPa8yrh2sUz1U44bbmY4YSWPCdg8wb7LnwiY21B2KRFM+HF42yO4g==}
+ sass-embedded-all-unknown@1.97.3:
+ resolution: {integrity: sha512-t6N46NlPuXiY3rlmG6/+1nwebOBOaLFOOVqNQOC2cJhghOD4hh2kHNQQTorCsbY9S1Kir2la1/XLBwOJfui0xg==}
cpu: ['!arm', '!arm64', '!riscv64', '!x64']
- sass-embedded-android-arm64@1.97.2:
- resolution: {integrity: sha512-pF6I+R5uThrscd3lo9B3DyNTPyGFsopycdx0tDAESN6s+dBbiRgNgE4Zlpv50GsLocj/lDLCZaabeTpL3ubhYA==}
+ sass-embedded-android-arm64@1.97.3:
+ resolution: {integrity: sha512-aiZ6iqiHsUsaDx0EFbbmmA0QgxicSxVVN3lnJJ0f1RStY0DthUkquGT5RJ4TPdaZ6ebeJWkboV4bra+CP766eA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [android]
- sass-embedded-android-arm@1.97.2:
- resolution: {integrity: sha512-BPT9m19ttY0QVHYYXRa6bmqmS3Fa2EHByNUEtSVcbm5PkIk1ntmYkG9fn5SJpIMbNmFDGwHx+pfcZMmkldhnRg==}
+ sass-embedded-android-arm@1.97.3:
+ resolution: {integrity: sha512-cRTtf/KV/q0nzGZoUzVkeIVVFv3L/tS1w4WnlHapphsjTXF/duTxI8JOU1c/9GhRPiMdfeXH7vYNcMmtjwX7jg==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [android]
- sass-embedded-android-riscv64@1.97.2:
- resolution: {integrity: sha512-fprI8ZTJdz+STgARhg8zReI2QhhGIT9G8nS7H21kc3IkqPRzhfaemSxEtCqZyvDbXPcgYiDLV7AGIReHCuATog==}
+ sass-embedded-android-riscv64@1.97.3:
+ resolution: {integrity: sha512-zVEDgl9JJodofGHobaM/q6pNETG69uuBIGQHRo789jloESxxZe82lI3AWJQuPmYCOG5ElfRthqgv89h3gTeLYA==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [android]
- sass-embedded-android-x64@1.97.2:
- resolution: {integrity: sha512-RswwSjURZxupsukEmNt2t6RGvuvIw3IAD5sDq1Pc65JFvWFY3eHqCmH0lG0oXqMg6KJcF0eOxHOp2RfmIm2+4w==}
+ sass-embedded-android-x64@1.97.3:
+ resolution: {integrity: sha512-3ke0le7ZKepyXn/dKKspYkpBC0zUk/BMciyP5ajQUDy4qJwobd8zXdAq6kOkdiMB+d9UFJOmEkvgFJHl3lqwcw==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [android]
- sass-embedded-darwin-arm64@1.97.2:
- resolution: {integrity: sha512-xcsZNnU1XZh21RE/71OOwNqPVcGBU0qT9A4k4QirdA34+ts9cDIaR6W6lgHOBR/Bnnu6w6hXJR4Xth7oFrefPA==}
+ sass-embedded-darwin-arm64@1.97.3:
+ resolution: {integrity: sha512-fuqMTqO4gbOmA/kC5b9y9xxNYw6zDEyfOtMgabS7Mz93wimSk2M1quQaTJnL98Mkcsl2j+7shNHxIS/qpcIDDA==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [darwin]
- sass-embedded-darwin-x64@1.97.2:
- resolution: {integrity: sha512-T/9DTMpychm6+H4slHCAsYJRJ6eM+9H9idKlBPliPrP4T8JdC2Cs+ZOsYqrObj6eOtAD0fGf+KgyNhnW3xVafA==}
+ sass-embedded-darwin-x64@1.97.3:
+ resolution: {integrity: sha512-b/2RBs/2bZpP8lMkyZ0Px0vkVkT8uBd0YXpOwK7iOwYkAT8SsO4+WdVwErsqC65vI5e1e5p1bb20tuwsoQBMVA==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [darwin]
- sass-embedded-linux-arm64@1.97.2:
- resolution: {integrity: sha512-Wh+nQaFer9tyE5xBPv5murSUZE/+kIcg8MyL5uqww6be9Iq+UmZpcJM7LUk+q8klQ9LfTmoDSNFA74uBqxD6IA==}
+ sass-embedded-linux-arm64@1.97.3:
+ resolution: {integrity: sha512-IP1+2otCT3DuV46ooxPaOKV1oL5rLjteRzf8ldZtfIEcwhSgSsHgA71CbjYgLEwMY9h4jeal8Jfv3QnedPvSjg==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
- sass-embedded-linux-arm@1.97.2:
- resolution: {integrity: sha512-yDRe1yifGHl6kibkDlRIJ2ZzAU03KJ1AIvsAh4dsIDgK5jx83bxZLV1ZDUv7a8KK/iV/80LZnxnu/92zp99cXQ==}
+ sass-embedded-linux-arm@1.97.3:
+ resolution: {integrity: sha512-2lPQ7HQQg4CKsH18FTsj2hbw5GJa6sBQgDsls+cV7buXlHjqF8iTKhAQViT6nrpLK/e8nFCoaRgSqEC8xMnXuA==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
- sass-embedded-linux-musl-arm64@1.97.2:
- resolution: {integrity: sha512-NfUqZSjHwnHvpSa7nyNxbWfL5obDjNBqhHUYmqbHUcmqBpFfHIQsUPgXME9DKn1yBlBc3mWnzMxRoucdYTzd2Q==}
+ sass-embedded-linux-musl-arm64@1.97.3:
+ resolution: {integrity: sha512-Lij0SdZCsr+mNRSyDZ7XtJpXEITrYsaGbOTz5e6uFLJ9bmzUbV7M8BXz2/cA7bhfpRPT7/lwRKPdV4+aR9Ozcw==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [linux]
- sass-embedded-linux-musl-arm@1.97.2:
- resolution: {integrity: sha512-GIO6xfAtahJAWItvsXZ3MD1HM6s8cKtV1/HL088aUpKJaw/2XjTCveiOO2AdgMpLNztmq9DZ1lx5X5JjqhS45g==}
+ sass-embedded-linux-musl-arm@1.97.3:
+ resolution: {integrity: sha512-cBTMU68X2opBpoYsSZnI321gnoaiMBEtc+60CKCclN6PCL3W3uXm8g4TLoil1hDD6mqU9YYNlVG6sJ+ZNef6Lg==}
engines: {node: '>=14.0.0'}
cpu: [arm]
os: [linux]
- sass-embedded-linux-musl-riscv64@1.97.2:
- resolution: {integrity: sha512-qtM4dJ5gLfvyTZ3QencfNbsTEShIWImSEpkThz+Y2nsCMbcMP7/jYOA03UWgPfEOKSehQQ7EIau7ncbFNoDNPQ==}
+ sass-embedded-linux-musl-riscv64@1.97.3:
+ resolution: {integrity: sha512-sBeLFIzMGshR4WmHAD4oIM7WJVkSoCIEwutzptFtGlSlwfNiijULp+J5hA2KteGvI6Gji35apR5aWj66wEn/iA==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
- sass-embedded-linux-musl-x64@1.97.2:
- resolution: {integrity: sha512-ZAxYOdmexcnxGnzdsDjYmNe3jGj+XW3/pF/n7e7r8y+5c6D2CQRrCUdapLgaqPt1edOPQIlQEZF8q5j6ng21yw==}
+ sass-embedded-linux-musl-x64@1.97.3:
+ resolution: {integrity: sha512-/oWJ+OVrDg7ADDQxRLC/4g1+Nsz1g4mkYS2t6XmyMJKFTFK50FVI2t5sOdFH+zmMp+nXHKM036W94y9m4jjEcw==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
- sass-embedded-linux-riscv64@1.97.2:
- resolution: {integrity: sha512-reVwa9ZFEAOChXpDyNB3nNHHyAkPMD+FTctQKECqKiVJnIzv2EaFF6/t0wzyvPgBKeatA8jszAIeOkkOzbYVkQ==}
+ sass-embedded-linux-riscv64@1.97.3:
+ resolution: {integrity: sha512-l3IfySApLVYdNx0Kjm7Zehte1CDPZVcldma3dZt+TfzvlAEerM6YDgsk5XEj3L8eHBCgHgF4A0MJspHEo2WNfA==}
engines: {node: '>=14.0.0'}
cpu: [riscv64]
os: [linux]
- sass-embedded-linux-x64@1.97.2:
- resolution: {integrity: sha512-bvAdZQsX3jDBv6m4emaU2OMTpN0KndzTAMgJZZrKUgiC0qxBmBqbJG06Oj/lOCoXGCxAvUOheVYpezRTF+Feog==}
+ sass-embedded-linux-x64@1.97.3:
+ resolution: {integrity: sha512-Kwqwc/jSSlcpRjULAOVbndqEy2GBzo6OBmmuBVINWUaJLJ8Kczz3vIsDUWLfWz/kTEw9FHBSiL0WCtYLVAXSLg==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [linux]
- sass-embedded-unknown-all@1.97.2:
- resolution: {integrity: sha512-86tcYwohjPgSZtgeU9K4LikrKBJNf8ZW/vfsFbdzsRlvc73IykiqanufwQi5qIul0YHuu9lZtDWyWxM2dH/Rsg==}
+ sass-embedded-unknown-all@1.97.3:
+ resolution: {integrity: sha512-/GHajyYJmvb0IABUQHbVHf1nuHPtIDo/ClMZ81IDr59wT5CNcMe7/dMNujXwWugtQVGI5UGmqXWZQCeoGnct8Q==}
os: ['!android', '!darwin', '!linux', '!win32']
- sass-embedded-win32-arm64@1.97.2:
- resolution: {integrity: sha512-Cv28q8qNjAjZfqfzTrQvKf4JjsZ6EOQ5FxyHUQQeNzm73R86nd/8ozDa1Vmn79Hq0kwM15OCM9epanDuTG1ksA==}
+ sass-embedded-win32-arm64@1.97.3:
+ resolution: {integrity: sha512-RDGtRS1GVvQfMGAmVXNxYiUOvPzn9oO1zYB/XUM9fudDRnieYTcUytpNTQZLs6Y1KfJxgt5Y+giRceC92fT8Uw==}
engines: {node: '>=14.0.0'}
cpu: [arm64]
os: [win32]
- sass-embedded-win32-x64@1.97.2:
- resolution: {integrity: sha512-DVxLxkeDCGIYeyHLAvWW3yy9sy5Ruk5p472QWiyfyyG1G1ASAR8fgfIY5pT0vE6Rv+VAKVLwF3WTspUYu7S1/Q==}
+ sass-embedded-win32-x64@1.97.3:
+ resolution: {integrity: sha512-SFRa2lED9UEwV6vIGeBXeBOLKF+rowF3WmNfb/BzhxmdAsKofCXrJ8ePW7OcDVrvNEbTOGwhsReIsF5sH8fVaw==}
engines: {node: '>=14.0.0'}
cpu: [x64]
os: [win32]
- sass-embedded@1.97.2:
- resolution: {integrity: sha512-lKJcskySwAtJ4QRirKrikrWMFa2niAuaGenY2ElHjd55IwHUiur5IdKu6R1hEmGYMs4Qm+6rlRW0RvuAkmcryg==}
+ sass-embedded@1.97.3:
+ resolution: {integrity: sha512-eKzFy13Nk+IRHhlAwP3sfuv+PzOrvzUkwJK2hdoCKYcWGSdmwFpeGpWmyewdw8EgBnsKaSBtgf/0b2K635ecSA==}
engines: {node: '>=16.0.0'}
hasBin: true
- sass@1.97.2:
- resolution: {integrity: sha512-y5LWb0IlbO4e97Zr7c3mlpabcbBtS+ieiZ9iwDooShpFKWXf62zz5pEPdwrLYm+Bxn1fnbwFGzHuCLSA9tBmrw==}
+ sass@1.97.3:
+ resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==}
engines: {node: '>=14.0.0'}
hasBin: true
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
+
saxes@6.0.0:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
engines: {node: '>=v12.22.7'}
@@ -1607,34 +3662,157 @@ packages:
scheduler@0.23.2:
resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ scheduler@0.26.0:
+ resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@0.19.2:
+ resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==}
+ engines: {node: '>= 0.8.0'}
+
+ serialize-error@2.1.0:
+ resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==}
+ engines: {node: '>=0.10.0'}
+
+ serve-static@1.16.3:
+ resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==}
+ engines: {node: '>= 0.8.0'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ sf-symbols-typescript@2.2.0:
+ resolution: {integrity: sha512-TPbeg0b7ylrswdGCji8FRGFAKuqbpQlLbL8SOle3j1iHSs5Ob5mhvMAxWN2UItOjgALAB5Zp3fmMfj8mbWvXKw==}
+ engines: {node: '>=10'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+ signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+ simple-plist@1.3.1:
+ resolution: {integrity: sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==}
+
+ simple-swizzle@0.2.4:
+ resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+
+ slugify@1.6.6:
+ resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
+ engines: {node: '>=8.0.0'}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.5.7:
+ resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
source-map@0.7.6:
resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
engines: {node: '>= 12'}
+ split-on-first@1.1.0:
+ resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
+ engines: {node: '>=6'}
+
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+ stackframe@1.3.4:
+ resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
+
+ stacktrace-parser@0.1.11:
+ resolution: {integrity: sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==}
+ engines: {node: '>=6'}
+
+ statuses@1.5.0:
+ resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
+ engines: {node: '>= 0.6'}
+
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+ stream-buffers@2.2.0:
+ resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==}
+ engines: {node: '>= 0.10.0'}
+
streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
+ strict-uri-encode@2.0.0:
+ resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
+ engines: {node: '>=4'}
+
string-hash@1.1.3:
resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==}
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ strip-ansi@5.2.0:
+ resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==}
+ engines: {node: '>=6'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+
+ structured-headers@0.4.1:
+ resolution: {integrity: sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==}
+
styled-jsx@5.1.1:
resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
engines: {node: '>= 12.0.0'}
@@ -1653,10 +3831,22 @@ packages:
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
+ supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
supports-color@8.1.1:
resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
engines: {node: '>=10'}
+ supports-hyperlinks@2.3.0:
+ resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==}
+ engines: {node: '>=8'}
+
supports-preserve-symlinks-flag@1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
@@ -1672,6 +3862,27 @@ packages:
resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==}
engines: {node: '>=16.0.0'}
+ tar@7.5.6:
+ resolution: {integrity: sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==}
+ engines: {node: '>=18'}
+
+ temp-dir@2.0.0:
+ resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
+ engines: {node: '>=8'}
+
+ terminal-link@2.1.1:
+ resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==}
+ engines: {node: '>=8'}
+
+ terser@5.46.0:
+ resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
thenify-all@1.6.0:
resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
engines: {node: '>=0.8'}
@@ -1679,6 +3890,9 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ throat@5.0.0:
+ resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==}
+
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
@@ -1708,6 +3922,17 @@ packages:
resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
hasBin: true
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
tough-cookie@5.1.2:
resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
engines: {node: '>=16'}
@@ -1745,6 +3970,18 @@ packages:
typescript:
optional: true
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
+ type-fest@0.21.3:
+ resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+ engines: {node: '>=10'}
+
+ type-fest@0.7.1:
+ resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==}
+ engines: {node: '>=8'}
+
typescript@5.9.3:
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
@@ -1756,18 +3993,72 @@ packages:
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+ undici@6.23.0:
+ resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==}
+ engines: {node: '>=18.17'}
+
+ unicode-canonical-property-names-ecmascript@2.0.1:
+ resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+ engines: {node: '>=4'}
+
+ unicode-match-property-ecmascript@2.0.0:
+ resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+ 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.2.0:
+ resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==}
+ engines: {node: '>=4'}
+
+ unique-string@2.0.0:
+ resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
+ engines: {node: '>=8'}
+
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
update-browserslist-db@1.2.3:
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
+ use-latest-callback@0.2.6:
+ resolution: {integrity: sha512-FvRG9i1HSo0wagmX63Vrm8SnlUU3LMM3WyZkQ76RnslpBrX694AdG4A0zQBx2B3ZifFA0yv/BaEHGBnEax5rZg==}
+ peerDependencies:
+ react: '>=16.8'
+
+ use-sync-external-store@1.6.0:
+ resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ utils-merge@1.0.1:
+ resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
+ engines: {node: '>= 0.4.0'}
+
+ uuid@7.0.3:
+ resolution: {integrity: sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==}
+ hasBin: true
+
+ validate-npm-package-name@5.0.1:
+ resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
varint@6.0.0:
resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
vite-node@2.1.9:
resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==}
engines: {node: ^18.0.0 || >=20.0.0}
@@ -1829,10 +4120,26 @@ packages:
jsdom:
optional: true
+ vlq@1.0.1:
+ resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==}
+
w3c-xmlserializer@5.0.0:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ warn-once@0.1.1:
+ resolution: {integrity: sha512-VkQZJbO8zVImzYFteBXvBOZEl1qL175WH8VmZcxF2fZAoudNhNDvHi+doCaAEdU2l2vtcIwa2zn0QK5+I1HQ3Q==}
+
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+ webidl-conversions@5.0.0:
+ resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==}
+ engines: {node: '>=8'}
+
webidl-conversions@7.0.0:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'}
@@ -1842,19 +4149,68 @@ packages:
engines: {node: '>=18'}
deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation
+ whatwg-fetch@3.6.20:
+ resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==}
+
whatwg-mimetype@4.0.0:
resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
engines: {node: '>=18'}
+ whatwg-url-without-unicode@8.0.0-3:
+ resolution: {integrity: sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==}
+ engines: {node: '>=10'}
+
whatwg-url@14.2.0:
resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
engines: {node: '>=18'}
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
why-is-node-running@2.3.0:
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
engines: {node: '>=8'}
hasBin: true
+ wonka@6.3.5:
+ resolution: {integrity: sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ write-file-atomic@4.0.2:
+ resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+
+ ws@6.2.3:
+ resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
ws@8.19.0:
resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==}
engines: {node: '>=10.0.0'}
@@ -1867,114 +4223,648 @@ packages:
utf-8-validate:
optional: true
+ xcode@3.0.1:
+ resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==}
+ engines: {node: '>=10.0.0'}
+
xml-name-validator@5.0.0:
resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
engines: {node: '>=18'}
- xmlchars@2.2.0:
- resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+ xml2js@0.6.0:
+ resolution: {integrity: sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==}
+ engines: {node: '>=4.0.0'}
+
+ xmlbuilder@11.0.1:
+ resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
+ engines: {node: '>=4.0'}
+
+ xmlbuilder@15.1.1:
+ resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==}
+ engines: {node: '>=8.0'}
+
+ xmlchars@2.2.0:
+ resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@5.0.0:
+ resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
+ engines: {node: '>=18'}
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@0no-co/graphql.web@1.2.0': {}
+
+ '@asamuzakjp/css-color@3.2.0':
+ dependencies:
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ lru-cache: 10.4.3
+
+ '@babel/code-frame@7.10.4':
+ dependencies:
+ '@babel/highlight': 7.25.9
+
+ '@babel/code-frame@7.28.6':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.6': {}
+
+ '@babel/core@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.6':
+ dependencies:
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ dependencies:
+ '@babel/types': 7.28.6
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@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.28.6)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.28.6
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-annotate-as-pure': 7.27.3
+ regexpu-core: 6.4.0
+ semver: 6.3.1
+
+ '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ debug: 4.4.3
+ lodash.debounce: 4.0.8
+ resolve: 1.22.11
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ dependencies:
+ '@babel/types': 7.28.6
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-wrap-function': 7.28.6
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-replace-supers@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helper-wrap-function@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+
+ '@babel/highlight@7.25.9':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/parser@7.28.6':
+ dependencies:
+ '@babel/types': 7.28.6
+
+ '@babel/plugin-proposal-decorators@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-decorators': 7.28.6(@babel/core@7.28.6)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-proposal-export-default-from@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-decorators@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-export-default-from@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-flow@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-async-generator-functions@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6)
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.6)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-classes@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@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.28.6)
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/template': 7.28.6
+
+ '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-flow-strip-types@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.28.6)
+
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6)
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
-snapshots:
+ '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@asamuzakjp/css-color@3.2.0':
+ '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
- lru-cache: 10.4.3
+ '@babel/core': 7.28.6
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
- '@babel/code-frame@7.28.6':
+ '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- js-tokens: 4.0.0
- picocolors: 1.1.1
+ '@babel/core': 7.28.6
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
- '@babel/compat-data@7.28.6': {}
+ '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/core@7.28.6':
+ '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.6)':
dependencies:
- '@babel/code-frame': 7.28.6
- '@babel/generator': 7.28.6
- '@babel/helper-compilation-targets': 7.28.6
- '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
- '@babel/helpers': 7.28.6
- '@babel/parser': 7.28.6
- '@babel/template': 7.28.6
- '@babel/traverse': 7.28.6
- '@babel/types': 7.28.6
- '@jridgewell/remapping': 2.3.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
+ '@babel/core': 7.28.6
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6)
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.28.6':
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)':
dependencies:
- '@babel/parser': 7.28.6
- '@babel/types': 7.28.6
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-compilation-targets@7.28.6':
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)':
dependencies:
- '@babel/compat-data': 7.28.6
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.1
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-globals@7.28.0': {}
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-module-imports@7.28.6':
+ '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@babel/traverse': 7.28.6
+ '@babel/core': 7.28.6
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6)
'@babel/types': 7.28.6
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)':
+ '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-regenerator@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-module-imports': 7.28.6
- '@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.28.6)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.6)
+ babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.28.6)
+ semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-plugin-utils@7.28.6': {}
-
- '@babel/helper-string-parser@7.27.1': {}
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-validator-identifier@7.28.5': {}
+ '@babel/plugin-transform-spread@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ transitivePeerDependencies:
+ - supports-color
- '@babel/helper-validator-option@7.27.1': {}
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/helpers@7.28.6':
+ '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.28.6)':
dependencies:
- '@babel/template': 7.28.6
- '@babel/types': 7.28.6
+ '@babel/core': 7.28.6
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.28.6)
+ '@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.28.6)
+ transitivePeerDependencies:
+ - supports-color
- '@babel/parser@7.28.6':
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.6)':
dependencies:
- '@babel/types': 7.28.6
+ '@babel/core': 7.28.6
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.6)
+ '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.6)':
+ '@babel/preset-react@7.28.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.6)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.6)
+ transitivePeerDependencies:
+ - supports-color
- '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.6)':
+ '@babel/preset-typescript@7.28.5(@babel/core@7.28.6)':
dependencies:
'@babel/core': 7.28.6
'@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6)
+ transitivePeerDependencies:
+ - supports-color
'@babel/runtime@7.28.6': {}
@@ -2001,7 +4891,12 @@ snapshots:
'@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.28.5
- '@bufbuild/protobuf@2.10.2': {}
+ '@bufbuild/protobuf@2.11.0': {}
+
+ '@callstack/liquid-glass@0.7.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
'@csstools/color-helpers@5.1.0': {}
@@ -2134,41 +5029,403 @@ snapshots:
'@esbuild/netbsd-x64@0.27.2':
optional: true
- '@esbuild/openbsd-arm64@0.27.2':
- optional: true
+ '@esbuild/openbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.2':
+ optional: true
+
+ '@expo/cli@54.0.22(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))':
+ dependencies:
+ '@0no-co/graphql.web': 1.2.0
+ '@expo/code-signing-certificates': 0.0.6
+ '@expo/config': 12.0.13
+ '@expo/config-plugins': 54.0.4
+ '@expo/devcert': 1.2.1
+ '@expo/env': 2.0.8
+ '@expo/image-utils': 0.8.8
+ '@expo/json-file': 10.0.8
+ '@expo/metro': 54.2.0
+ '@expo/metro-config': 54.0.14(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
+ '@expo/osascript': 2.3.8
+ '@expo/package-manager': 1.9.10
+ '@expo/plist': 0.4.8
+ '@expo/prebuild-config': 54.0.8(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
+ '@expo/schema-utils': 0.1.8
+ '@expo/spawn-async': 1.7.2
+ '@expo/ws-tunnel': 1.0.6
+ '@expo/xcpretty': 4.3.2
+ '@react-native/dev-middleware': 0.81.5
+ '@urql/core': 5.2.0
+ '@urql/exchange-retry': 1.3.2(@urql/core@5.2.0)
+ accepts: 1.3.8
+ arg: 5.0.2
+ better-opn: 3.0.2
+ bplist-creator: 0.1.0
+ bplist-parser: 0.3.2
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ compression: 1.8.1
+ connect: 3.7.0
+ debug: 4.4.3
+ env-editor: 0.4.2
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-server: 1.0.5
+ freeport-async: 2.0.0
+ getenv: 2.0.0
+ glob: 13.0.0
+ lan-network: 0.1.7
+ minimatch: 9.0.5
+ node-forge: 1.3.3
+ npm-package-arg: 11.0.3
+ ora: 3.4.0
+ picomatch: 3.0.1
+ pretty-bytes: 5.6.0
+ pretty-format: 29.7.0
+ progress: 2.0.3
+ prompts: 2.4.2
+ qrcode-terminal: 0.11.0
+ require-from-string: 2.0.2
+ requireg: 0.2.2
+ resolve: 1.22.11
+ resolve-from: 5.0.0
+ resolve.exports: 2.0.3
+ semver: 7.7.3
+ send: 0.19.2
+ slugify: 1.6.6
+ source-map-support: 0.5.21
+ stacktrace-parser: 0.1.11
+ structured-headers: 0.4.1
+ tar: 7.5.6
+ terminal-link: 2.1.1
+ undici: 6.23.0
+ wrap-ansi: 7.0.0
+ ws: 8.19.0
+ optionalDependencies:
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ transitivePeerDependencies:
+ - bufferutil
+ - graphql
+ - supports-color
+ - utf-8-validate
+
+ '@expo/code-signing-certificates@0.0.6':
+ dependencies:
+ node-forge: 1.3.3
+
+ '@expo/config-plugins@54.0.4':
+ dependencies:
+ '@expo/config-types': 54.0.10
+ '@expo/json-file': 10.0.8
+ '@expo/plist': 0.4.8
+ '@expo/sdk-runtime-versions': 1.0.0
+ chalk: 4.1.2
+ debug: 4.4.3
+ getenv: 2.0.0
+ glob: 13.0.0
+ resolve-from: 5.0.0
+ semver: 7.7.3
+ slash: 3.0.0
+ slugify: 1.6.6
+ xcode: 3.0.1
+ xml2js: 0.6.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@expo/config-types@54.0.10': {}
+
+ '@expo/config@12.0.13':
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ '@expo/config-plugins': 54.0.4
+ '@expo/config-types': 54.0.10
+ '@expo/json-file': 10.0.8
+ deepmerge: 4.3.1
+ getenv: 2.0.0
+ glob: 13.0.0
+ require-from-string: 2.0.2
+ resolve-from: 5.0.0
+ resolve-workspace-root: 2.0.1
+ semver: 7.7.3
+ slugify: 1.6.6
+ sucrase: 3.35.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@expo/devcert@1.2.1':
+ dependencies:
+ '@expo/sudo-prompt': 9.3.2
+ debug: 3.2.7
+ transitivePeerDependencies:
+ - supports-color
+
+ '@expo/devtools@0.1.8(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ chalk: 4.1.2
+ optionalDependencies:
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ '@expo/env@2.0.8':
+ dependencies:
+ chalk: 4.1.2
+ debug: 4.4.3
+ dotenv: 16.4.7
+ dotenv-expand: 11.0.7
+ getenv: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@expo/fingerprint@0.15.4':
+ dependencies:
+ '@expo/spawn-async': 1.7.2
+ arg: 5.0.2
+ chalk: 4.1.2
+ debug: 4.4.3
+ getenv: 2.0.0
+ glob: 13.0.0
+ ignore: 5.3.2
+ minimatch: 9.0.5
+ p-limit: 3.1.0
+ resolve-from: 5.0.0
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@expo/image-utils@0.8.8':
+ dependencies:
+ '@expo/spawn-async': 1.7.2
+ chalk: 4.1.2
+ getenv: 2.0.0
+ jimp-compact: 0.16.1
+ parse-png: 2.1.0
+ resolve-from: 5.0.0
+ resolve-global: 1.0.0
+ semver: 7.7.3
+ temp-dir: 2.0.0
+ unique-string: 2.0.0
+
+ '@expo/json-file@10.0.8':
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ json5: 2.2.3
+
+ '@expo/metro-config@54.0.14(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/core': 7.28.6
+ '@babel/generator': 7.28.6
+ '@expo/config': 12.0.13
+ '@expo/env': 2.0.8
+ '@expo/json-file': 10.0.8
+ '@expo/metro': 54.2.0
+ '@expo/spawn-async': 1.7.2
+ browserslist: 4.28.1
+ chalk: 4.1.2
+ debug: 4.4.3
+ dotenv: 16.4.7
+ dotenv-expand: 11.0.7
+ getenv: 2.0.0
+ glob: 13.0.0
+ hermes-parser: 0.29.1
+ jsc-safe-url: 0.2.4
+ lightningcss: 1.31.1
+ minimatch: 9.0.5
+ postcss: 8.4.49
+ resolve-from: 5.0.0
+ optionalDependencies:
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@expo/metro@54.2.0':
+ dependencies:
+ metro: 0.83.3
+ metro-babel-transformer: 0.83.3
+ metro-cache: 0.83.3
+ metro-cache-key: 0.83.3
+ metro-config: 0.83.3
+ metro-core: 0.83.3
+ metro-file-map: 0.83.3
+ metro-minify-terser: 0.83.3
+ metro-resolver: 0.83.3
+ metro-runtime: 0.83.3
+ metro-source-map: 0.83.3
+ metro-symbolicate: 0.83.3
+ metro-transform-plugins: 0.83.3
+ metro-transform-worker: 0.83.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@expo/osascript@2.3.8':
+ dependencies:
+ '@expo/spawn-async': 1.7.2
+ exec-async: 2.2.0
+
+ '@expo/package-manager@1.9.10':
+ dependencies:
+ '@expo/json-file': 10.0.8
+ '@expo/spawn-async': 1.7.2
+ chalk: 4.1.2
+ npm-package-arg: 11.0.3
+ ora: 3.4.0
+ resolve-workspace-root: 2.0.1
+
+ '@expo/plist@0.4.8':
+ dependencies:
+ '@xmldom/xmldom': 0.8.11
+ base64-js: 1.5.1
+ xmlbuilder: 15.1.1
+
+ '@expo/prebuild-config@54.0.8(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))':
+ dependencies:
+ '@expo/config': 12.0.13
+ '@expo/config-plugins': 54.0.4
+ '@expo/config-types': 54.0.10
+ '@expo/image-utils': 0.8.8
+ '@expo/json-file': 10.0.8
+ '@react-native/normalize-colors': 0.81.5
+ debug: 4.4.3
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ resolve-from: 5.0.0
+ semver: 7.7.3
+ xml2js: 0.6.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@expo/schema-utils@0.1.8': {}
+
+ '@expo/sdk-runtime-versions@1.0.0': {}
+
+ '@expo/spawn-async@1.7.2':
+ dependencies:
+ cross-spawn: 7.0.6
+
+ '@expo/sudo-prompt@9.3.2': {}
+
+ '@expo/vector-icons@15.0.3(expo-font@14.0.11(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ expo-font: 14.0.11(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ '@expo/ws-tunnel@1.0.6': {}
+
+ '@expo/xcpretty@4.3.2':
+ dependencies:
+ '@babel/code-frame': 7.10.4
+ chalk: 4.1.2
+ find-up: 5.0.0
+ js-yaml: 4.1.1
+
+ '@isaacs/balanced-match@4.0.1': {}
- '@esbuild/openbsd-x64@0.21.5':
- optional: true
+ '@isaacs/brace-expansion@5.0.0':
+ dependencies:
+ '@isaacs/balanced-match': 4.0.1
- '@esbuild/openbsd-x64@0.27.2':
- optional: true
+ '@isaacs/fs-minipass@4.0.1':
+ dependencies:
+ minipass: 7.1.2
- '@esbuild/openharmony-arm64@0.27.2':
- optional: true
+ '@isaacs/ttlcache@1.4.1': {}
- '@esbuild/sunos-x64@0.21.5':
- optional: true
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.2
+ resolve-from: 5.0.0
- '@esbuild/sunos-x64@0.27.2':
- optional: true
+ '@istanbuljs/schema@0.1.3': {}
- '@esbuild/win32-arm64@0.21.5':
- optional: true
+ '@jest/create-cache-key-function@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
- '@esbuild/win32-arm64@0.27.2':
- optional: true
+ '@jest/environment@29.7.0':
+ dependencies:
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.30
+ jest-mock: 29.7.0
- '@esbuild/win32-ia32@0.21.5':
- optional: true
+ '@jest/fake-timers@29.7.0':
+ dependencies:
+ '@jest/types': 29.6.3
+ '@sinonjs/fake-timers': 10.3.0
+ '@types/node': 20.19.30
+ jest-message-util: 29.7.0
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
- '@esbuild/win32-ia32@0.27.2':
- optional: true
+ '@jest/schemas@29.6.3':
+ dependencies:
+ '@sinclair/typebox': 0.27.8
- '@esbuild/win32-x64@0.21.5':
- optional: true
+ '@jest/transform@29.7.0':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@jest/types': 29.6.3
+ '@jridgewell/trace-mapping': 0.3.31
+ babel-plugin-istanbul: 6.1.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 29.7.0
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
- '@esbuild/win32-x64@0.27.2':
- optional: true
+ '@jest/types@29.6.3':
+ dependencies:
+ '@jest/schemas': 29.6.3
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 20.19.30
+ '@types/yargs': 17.0.35
+ chalk: 4.1.2
'@jridgewell/gen-mapping@0.3.13':
dependencies:
@@ -2182,6 +5439,11 @@ snapshots:
'@jridgewell/resolve-uri@3.1.2': {}
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
'@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/trace-mapping@0.3.31':
@@ -2218,144 +5480,345 @@ snapshots:
'@next/swc-win32-x64-msvc@14.2.33':
optional: true
- '@parcel/watcher-android-arm64@2.5.4':
+ '@parcel/watcher-android-arm64@2.5.6':
optional: true
- '@parcel/watcher-darwin-arm64@2.5.4':
+ '@parcel/watcher-darwin-arm64@2.5.6':
optional: true
- '@parcel/watcher-darwin-x64@2.5.4':
+ '@parcel/watcher-darwin-x64@2.5.6':
optional: true
- '@parcel/watcher-freebsd-x64@2.5.4':
+ '@parcel/watcher-freebsd-x64@2.5.6':
optional: true
- '@parcel/watcher-linux-arm-glibc@2.5.4':
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
optional: true
- '@parcel/watcher-linux-arm-musl@2.5.4':
+ '@parcel/watcher-linux-arm-musl@2.5.6':
optional: true
- '@parcel/watcher-linux-arm64-glibc@2.5.4':
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
optional: true
- '@parcel/watcher-linux-arm64-musl@2.5.4':
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
optional: true
- '@parcel/watcher-linux-x64-glibc@2.5.4':
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
optional: true
- '@parcel/watcher-linux-x64-musl@2.5.4':
+ '@parcel/watcher-linux-x64-musl@2.5.6':
optional: true
- '@parcel/watcher-win32-arm64@2.5.4':
+ '@parcel/watcher-win32-arm64@2.5.6':
optional: true
- '@parcel/watcher-win32-ia32@2.5.4':
+ '@parcel/watcher-win32-ia32@2.5.6':
optional: true
- '@parcel/watcher-win32-x64@2.5.4':
+ '@parcel/watcher-win32-x64@2.5.6':
optional: true
- '@parcel/watcher@2.5.4':
+ '@parcel/watcher@2.5.6':
dependencies:
detect-libc: 2.1.2
is-glob: 4.0.3
node-addon-api: 7.1.1
picomatch: 4.0.3
optionalDependencies:
- '@parcel/watcher-android-arm64': 2.5.4
- '@parcel/watcher-darwin-arm64': 2.5.4
- '@parcel/watcher-darwin-x64': 2.5.4
- '@parcel/watcher-freebsd-x64': 2.5.4
- '@parcel/watcher-linux-arm-glibc': 2.5.4
- '@parcel/watcher-linux-arm-musl': 2.5.4
- '@parcel/watcher-linux-arm64-glibc': 2.5.4
- '@parcel/watcher-linux-arm64-musl': 2.5.4
- '@parcel/watcher-linux-x64-glibc': 2.5.4
- '@parcel/watcher-linux-x64-musl': 2.5.4
- '@parcel/watcher-win32-arm64': 2.5.4
- '@parcel/watcher-win32-ia32': 2.5.4
- '@parcel/watcher-win32-x64': 2.5.4
+ '@parcel/watcher-android-arm64': 2.5.6
+ '@parcel/watcher-darwin-arm64': 2.5.6
+ '@parcel/watcher-darwin-x64': 2.5.6
+ '@parcel/watcher-freebsd-x64': 2.5.6
+ '@parcel/watcher-linux-arm-glibc': 2.5.6
+ '@parcel/watcher-linux-arm-musl': 2.5.6
+ '@parcel/watcher-linux-arm64-glibc': 2.5.6
+ '@parcel/watcher-linux-arm64-musl': 2.5.6
+ '@parcel/watcher-linux-x64-glibc': 2.5.6
+ '@parcel/watcher-linux-x64-musl': 2.5.6
+ '@parcel/watcher-win32-arm64': 2.5.6
+ '@parcel/watcher-win32-ia32': 2.5.6
+ '@parcel/watcher-win32-x64': 2.5.6
optional: true
+ '@react-native-async-storage/async-storage@1.24.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))':
+ dependencies:
+ merge-options: 3.0.4
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ '@react-native-async-storage/async-storage@2.2.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))':
+ dependencies:
+ merge-options: 3.0.4
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ '@react-native/assets-registry@0.81.5': {}
+
+ '@react-native/babel-plugin-codegen@0.81.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@react-native/codegen': 0.81.5(@babel/core@7.28.6)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
+ '@react-native/babel-preset@0.81.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-async-generator-functions': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.6)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.6)
+ '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-regenerator': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.6)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.6)
+ '@babel/template': 7.28.6
+ '@react-native/babel-plugin-codegen': 0.81.5(@babel/core@7.28.6)
+ babel-plugin-syntax-hermes-parser: 0.29.1
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.6)
+ react-refresh: 0.14.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@react-native/codegen@0.81.5(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/parser': 7.28.6
+ glob: 7.2.3
+ hermes-parser: 0.29.1
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ yargs: 17.7.2
+
+ '@react-native/community-cli-plugin@0.81.5':
+ dependencies:
+ '@react-native/dev-middleware': 0.81.5
+ debug: 4.4.3
+ invariant: 2.2.4
+ metro: 0.83.3
+ metro-config: 0.83.3
+ metro-core: 0.83.3
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@react-native/debugger-frontend@0.81.5': {}
+
+ '@react-native/dev-middleware@0.81.5':
+ dependencies:
+ '@isaacs/ttlcache': 1.4.1
+ '@react-native/debugger-frontend': 0.81.5
+ chrome-launcher: 0.15.2
+ chromium-edge-launcher: 0.2.0
+ connect: 3.7.0
+ debug: 4.4.3
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ open: 7.4.2
+ serve-static: 1.16.3
+ ws: 6.2.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@react-native/gradle-plugin@0.81.5': {}
+
+ '@react-native/js-polyfills@0.81.5': {}
+
+ '@react-native/normalize-colors@0.81.5': {}
+
+ '@react-native/virtualized-lists@0.81.5(@types/react@19.1.17)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ invariant: 2.2.4
+ nullthrows: 1.1.1
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ optionalDependencies:
+ '@types/react': 19.1.17
+
+ '@react-navigation/core@7.14.0(react@19.1.0)':
+ dependencies:
+ '@react-navigation/routers': 7.5.3
+ escape-string-regexp: 4.0.0
+ fast-deep-equal: 3.1.3
+ nanoid: 3.3.11
+ query-string: 7.1.3
+ react: 19.1.0
+ react-is: 19.2.3
+ use-latest-callback: 0.2.6(react@19.1.0)
+ use-sync-external-store: 1.6.0(react@19.1.0)
+
+ '@react-navigation/elements@2.9.5(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@react-navigation/native': 7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ color: 4.2.3
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ use-latest-callback: 0.2.6(react@19.1.0)
+ use-sync-external-store: 1.6.0(react@19.1.0)
+
+ '@react-navigation/native-stack@7.10.1(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@react-navigation/elements': 2.9.5(@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@react-navigation/native': 7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ color: 4.2.3
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ react-native-safe-area-context: 5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react-native-screens: 4.16.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ sf-symbols-typescript: 2.2.0
+ warn-once: 0.1.1
+ transitivePeerDependencies:
+ - '@react-native-masked-view/masked-view'
+
+ '@react-navigation/native@7.1.28(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ '@react-navigation/core': 7.14.0(react@19.1.0)
+ escape-string-regexp: 4.0.0
+ fast-deep-equal: 3.1.3
+ nanoid: 3.3.11
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ use-latest-callback: 0.2.6(react@19.1.0)
+
+ '@react-navigation/routers@7.5.3':
+ dependencies:
+ nanoid: 3.3.11
+
+ '@rn-dev-inspector/core@1.1.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)':
+ dependencies:
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ '@rn-dev-inspector/metro-plugin@1.1.0(@babel/core@7.28.6)(metro-config@0.83.3)(metro@0.83.3)':
+ dependencies:
+ '@babel/core': 7.28.6
+ launch-editor: 2.12.0
+ metro: 0.83.3
+ metro-config: 0.83.3
+
'@rolldown/pluginutils@1.0.0-beta.27': {}
- '@rollup/rollup-android-arm-eabi@4.55.1':
+ '@rollup/rollup-android-arm-eabi@4.56.0':
optional: true
- '@rollup/rollup-android-arm64@4.55.1':
+ '@rollup/rollup-android-arm64@4.56.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.55.1':
+ '@rollup/rollup-darwin-arm64@4.56.0':
optional: true
- '@rollup/rollup-darwin-x64@4.55.1':
+ '@rollup/rollup-darwin-x64@4.56.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.55.1':
+ '@rollup/rollup-freebsd-arm64@4.56.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.55.1':
+ '@rollup/rollup-freebsd-x64@4.56.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ '@rollup/rollup-linux-arm-gnueabihf@4.56.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ '@rollup/rollup-linux-arm-musleabihf@4.56.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ '@rollup/rollup-linux-arm64-gnu@4.56.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.55.1':
+ '@rollup/rollup-linux-arm64-musl@4.56.0':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ '@rollup/rollup-linux-loong64-gnu@4.56.0':
optional: true
- '@rollup/rollup-linux-loong64-musl@4.55.1':
+ '@rollup/rollup-linux-loong64-musl@4.56.0':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ '@rollup/rollup-linux-ppc64-gnu@4.56.0':
optional: true
- '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ '@rollup/rollup-linux-ppc64-musl@4.56.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ '@rollup/rollup-linux-riscv64-gnu@4.56.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ '@rollup/rollup-linux-riscv64-musl@4.56.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ '@rollup/rollup-linux-s390x-gnu@4.56.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.55.1':
+ '@rollup/rollup-linux-x64-gnu@4.56.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.55.1':
+ '@rollup/rollup-linux-x64-musl@4.56.0':
optional: true
- '@rollup/rollup-openbsd-x64@4.55.1':
+ '@rollup/rollup-openbsd-x64@4.56.0':
optional: true
- '@rollup/rollup-openharmony-arm64@4.55.1':
+ '@rollup/rollup-openharmony-arm64@4.56.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ '@rollup/rollup-win32-arm64-msvc@4.56.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ '@rollup/rollup-win32-ia32-msvc@4.56.0':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.55.1':
+ '@rollup/rollup-win32-x64-gnu@4.56.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.55.1':
+ '@rollup/rollup-win32-x64-msvc@4.56.0':
optional: true
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@10.3.0':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
'@swc/counter@0.1.3': {}
'@swc/helpers@0.5.5':
@@ -2409,6 +5872,20 @@ snapshots:
'@types/estree@1.0.8': {}
+ '@types/graceful-fs@4.1.9':
+ dependencies:
+ '@types/node': 20.19.30
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
'@types/node@20.19.30':
dependencies:
undici-types: 6.21.0
@@ -2426,7 +5903,33 @@ snapshots:
'@types/prop-types': 15.7.15
csstype: 3.2.3
- '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2))':
+ '@types/react@19.1.17':
+ dependencies:
+ csstype: 3.2.3
+
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.35':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
+ '@ungap/structured-clone@1.3.0': {}
+
+ '@urql/core@5.2.0':
+ dependencies:
+ '@0no-co/graphql.web': 1.2.0
+ wonka: 6.3.5
+ transitivePeerDependencies:
+ - graphql
+
+ '@urql/exchange-retry@1.3.2(@urql/core@5.2.0)':
+ dependencies:
+ '@urql/core': 5.2.0
+ wonka: 6.3.5
+
+ '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0))':
dependencies:
'@babel/core': 7.28.6
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.6)
@@ -2434,7 +5937,7 @@ snapshots:
'@rolldown/pluginutils': 1.0.0-beta.27
'@types/babel__core': 7.20.5
react-refresh: 0.17.0
- vite: 5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2)
+ vite: 5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)
transitivePeerDependencies:
- supports-color
@@ -2445,13 +5948,13 @@ snapshots:
chai: 5.3.3
tinyrainbow: 1.2.0
- '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2))':
+ '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0))':
dependencies:
'@vitest/spy': 2.1.9
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2)
+ vite: 5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)
'@vitest/pretty-format@2.1.9':
dependencies:
@@ -2472,41 +5975,290 @@ snapshots:
dependencies:
tinyspy: 3.0.2
- '@vitest/utils@2.1.9':
+ '@vitest/utils@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ loupe: 3.2.1
+ tinyrainbow: 1.2.0
+
+ '@xmldom/xmldom@0.8.11': {}
+
+ abort-controller@3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+
+ accepts@1.3.8:
+ dependencies:
+ mime-types: 2.1.35
+ negotiator: 0.6.3
+
+ acorn@8.15.0: {}
+
+ agent-base@7.1.4: {}
+
+ anser@1.4.10: {}
+
+ ansi-escapes@4.3.2:
+ dependencies:
+ type-fest: 0.21.3
+
+ ansi-regex@4.1.1: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-styles@3.2.1:
+ dependencies:
+ color-convert: 1.9.3
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@5.2.0: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@5.0.2: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
+ argparse@2.0.1: {}
+
+ aria-query@5.3.0:
+ dependencies:
+ dequal: 2.0.3
+
+ asap@2.0.6: {}
+
+ assertion-error@2.0.1: {}
+
+ async-limiter@1.0.1: {}
+
+ asynckit@0.4.0: {}
+
+ babel-jest@29.7.0(@babel/core@7.28.6):
+ dependencies:
+ '@babel/core': 7.28.6
+ '@jest/transform': 29.7.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 6.1.1
+ babel-preset-jest: 29.6.3(@babel/core@7.28.6)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@6.1.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.28.6
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 5.2.1
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@29.6.3:
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.28.0
+
+ babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.28.6):
+ dependencies:
+ '@babel/compat-data': 7.28.6
+ '@babel/core': 7.28.6
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6)
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.6):
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6)
+ core-js-compat: 3.48.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.28.6):
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.28.6)
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-react-compiler@1.0.0:
+ dependencies:
+ '@babel/types': 7.28.6
+
+ babel-plugin-react-native-web@0.21.2: {}
+
+ babel-plugin-syntax-hermes-parser@0.29.1:
+ dependencies:
+ hermes-parser: 0.29.1
+
+ babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.28.6):
+ dependencies:
+ '@babel/plugin-syntax-flow': 7.28.6(@babel/core@7.28.6)
+ transitivePeerDependencies:
+ - '@babel/core'
+
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.6):
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.6)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.6)
+ '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.6)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.6)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.6)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.6)
+
+ babel-preset-expo@54.0.10(@babel/core@7.28.6)(@babel/runtime@7.28.6)(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.14.2):
+ dependencies:
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/plugin-proposal-decorators': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.6)
+ '@babel/preset-react': 7.28.5(@babel/core@7.28.6)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6)
+ '@react-native/babel-preset': 0.81.5(@babel/core@7.28.6)
+ babel-plugin-react-compiler: 1.0.0
+ babel-plugin-react-native-web: 0.21.2
+ babel-plugin-syntax-hermes-parser: 0.29.1
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.6)
+ debug: 4.4.3
+ react-refresh: 0.14.2
+ resolve-from: 5.0.0
+ optionalDependencies:
+ '@babel/runtime': 7.28.6
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
+ babel-preset-expo@54.0.10(@babel/core@7.28.6)(@babel/runtime@7.28.6)(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.17.0):
+ dependencies:
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/plugin-proposal-decorators': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-proposal-export-default-from': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-syntax-export-default-from': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-flow-strip-types': 7.27.1(@babel/core@7.28.6)
+ '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.6)
+ '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.28.6)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.6)
+ '@babel/preset-react': 7.28.5(@babel/core@7.28.6)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.28.6)
+ '@react-native/babel-preset': 0.81.5(@babel/core@7.28.6)
+ babel-plugin-react-compiler: 1.0.0
+ babel-plugin-react-native-web: 0.21.2
+ babel-plugin-syntax-hermes-parser: 0.29.1
+ babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.28.6)
+ debug: 4.4.3
+ react-refresh: 0.17.0
+ resolve-from: 5.0.0
+ optionalDependencies:
+ '@babel/runtime': 7.28.6
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - supports-color
+
+ babel-preset-jest@29.6.3(@babel/core@7.28.6):
+ dependencies:
+ '@babel/core': 7.28.6
+ babel-plugin-jest-hoist: 29.6.3
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.6)
+
+ balanced-match@1.0.2: {}
+
+ base64-js@1.5.1: {}
+
+ baseline-browser-mapping@2.9.18: {}
+
+ better-opn@3.0.2:
dependencies:
- '@vitest/pretty-format': 2.1.9
- loupe: 3.2.1
- tinyrainbow: 1.2.0
+ open: 8.4.2
- acorn@8.15.0: {}
-
- agent-base@7.1.4: {}
+ big-integer@1.6.52: {}
- ansi-regex@5.0.1: {}
+ boolbase@1.0.0: {}
- ansi-styles@5.2.0: {}
+ bplist-creator@0.1.0:
+ dependencies:
+ stream-buffers: 2.2.0
- any-promise@1.3.0: {}
+ bplist-parser@0.3.1:
+ dependencies:
+ big-integer: 1.6.52
- aria-query@5.3.0:
+ bplist-parser@0.3.2:
dependencies:
- dequal: 2.0.3
+ big-integer: 1.6.52
- assertion-error@2.0.1: {}
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
- asynckit@0.4.0: {}
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
- baseline-browser-mapping@2.9.17: {}
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.9.17
- caniuse-lite: 1.0.30001765
- electron-to-chromium: 1.5.277
+ baseline-browser-mapping: 2.9.18
+ caniuse-lite: 1.0.30001766
+ electron-to-chromium: 1.5.278
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
- buffer-builder@0.2.0: {}
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
+ buffer-from@1.1.2: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
bundle-require@5.1.0(esbuild@0.27.2):
dependencies:
@@ -2517,6 +6269,8 @@ snapshots:
dependencies:
streamsearch: 1.1.0
+ bytes@3.1.2: {}
+
cac@6.7.14: {}
call-bind-apply-helpers@1.0.2:
@@ -2524,7 +6278,11 @@ snapshots:
es-errors: 1.3.0
function-bind: 1.1.2
- caniuse-lite@1.0.30001765: {}
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
+ caniuse-lite@1.0.30001766: {}
chai@5.3.3:
dependencies:
@@ -2534,30 +6292,163 @@ snapshots:
loupe: 3.2.1
pathval: 2.0.1
+ chalk@2.4.2:
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
check-error@2.1.3: {}
chokidar@4.0.3:
dependencies:
readdirp: 4.1.2
+ chownr@3.0.0: {}
+
+ chrome-launcher@0.15.2:
+ dependencies:
+ '@types/node': 20.19.30
+ escape-string-regexp: 4.0.0
+ is-wsl: 2.2.0
+ lighthouse-logger: 1.4.2
+ transitivePeerDependencies:
+ - supports-color
+
+ chromium-edge-launcher@0.2.0:
+ dependencies:
+ '@types/node': 20.19.30
+ escape-string-regexp: 4.0.0
+ is-wsl: 2.2.0
+ lighthouse-logger: 1.4.2
+ mkdirp: 1.0.4
+ rimraf: 3.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ ci-info@2.0.0: {}
+
+ ci-info@3.9.0: {}
+
+ cli-cursor@2.1.0:
+ dependencies:
+ restore-cursor: 2.0.0
+
+ cli-spinners@2.9.2: {}
+
client-only@0.0.1: {}
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone@1.0.4: {}
+
clsx@2.1.1: {}
+ color-convert@1.9.3:
+ dependencies:
+ color-name: 1.1.3
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.3: {}
+
+ color-name@1.1.4: {}
+
+ color-string@1.9.1:
+ dependencies:
+ color-name: 1.1.4
+ simple-swizzle: 0.2.4
+
+ color@4.2.3:
+ dependencies:
+ color-convert: 2.0.1
+ color-string: 1.9.1
+
colorjs.io@0.5.2: {}
combined-stream@1.0.8:
dependencies:
delayed-stream: 1.0.0
+ commander@12.1.0: {}
+
+ commander@2.20.3: {}
+
commander@4.1.1: {}
+ commander@7.2.0: {}
+
+ compressible@2.0.18:
+ dependencies:
+ mime-db: 1.54.0
+
+ compression@1.8.1:
+ dependencies:
+ bytes: 3.1.2
+ compressible: 2.0.18
+ debug: 2.6.9
+ negotiator: 0.6.4
+ on-headers: 1.1.0
+ safe-buffer: 5.2.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ concat-map@0.0.1: {}
+
confbox@0.1.8: {}
+ connect@3.7.0:
+ dependencies:
+ debug: 2.6.9
+ finalhandler: 1.1.2
+ parseurl: 1.3.3
+ utils-merge: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
consola@3.4.2: {}
convert-source-map@2.0.0: {}
+ core-js-compat@3.48.0:
+ dependencies:
+ browserslist: 4.28.1
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crypto-random-string@2.0.0: {}
+
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
+ css-tree@1.1.3:
+ dependencies:
+ mdn-data: 2.0.14
+ source-map: 0.6.1
+
+ css-what@6.2.2: {}
+
cssesc@3.0.0: {}
cssstyle@4.6.0:
@@ -2572,33 +6463,96 @@ snapshots:
whatwg-mimetype: 4.0.0
whatwg-url: 14.2.0
+ debug@2.6.9:
+ dependencies:
+ ms: 2.0.0
+
+ debug@3.2.7:
+ dependencies:
+ ms: 2.1.3
+
debug@4.4.3:
dependencies:
ms: 2.1.3
decimal.js@10.6.0: {}
+ decode-uri-component@0.2.2: {}
+
deep-eql@5.0.2: {}
+ deep-extend@0.6.0: {}
+
+ deepmerge@4.3.1: {}
+
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+
+ define-lazy-prop@2.0.0: {}
+
delayed-stream@1.0.0: {}
+ depd@2.0.0: {}
+
dequal@2.0.3: {}
- detect-libc@2.1.2:
- optional: true
+ destroy@1.2.0: {}
+
+ detect-libc@2.1.2: {}
dom-accessibility-api@0.5.16: {}
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dotenv-expand@11.0.7:
+ dependencies:
+ dotenv: 16.4.7
+
+ dotenv@16.4.7: {}
+
dunder-proto@1.0.1:
dependencies:
call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
- electron-to-chromium@1.5.277: {}
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.278: {}
+
+ emoji-regex@8.0.0: {}
+
+ encodeurl@1.0.2: {}
+
+ encodeurl@2.0.0: {}
+
+ entities@4.5.0: {}
entities@6.0.1: {}
+ env-editor@0.4.2: {}
+
+ error-stack-parser@2.1.4:
+ dependencies:
+ stackframe: 1.3.4
+
es-define-property@1.0.1: {}
es-errors@1.3.0: {}
@@ -2616,12 +6570,12 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- esbuild-sass-plugin@3.6.0(esbuild@0.27.2)(sass-embedded@1.97.2):
+ esbuild-sass-plugin@3.6.0(esbuild@0.27.2)(sass-embedded@1.97.3):
dependencies:
esbuild: 0.27.2
resolve: 1.22.11
- sass: 1.97.2
- sass-embedded: 1.97.2
+ sass: 1.97.3
+ sass-embedded: 1.97.3
esbuild@0.21.5:
optionalDependencies:
@@ -2680,21 +6634,176 @@ snapshots:
escalade@3.2.0: {}
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@2.0.0: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ esprima@4.0.1: {}
+
estree-walker@3.0.3:
dependencies:
'@types/estree': 1.0.8
+ etag@1.8.1: {}
+
+ event-target-shim@5.0.1: {}
+
+ exec-async@2.2.0: {}
+
expect-type@1.3.0: {}
+ expo-asset@12.0.12(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ '@expo/image-utils': 0.8.8
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-constants: 18.0.13(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ expo-clipboard@8.0.8(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ expo-constants@18.0.13(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)):
+ dependencies:
+ '@expo/config': 12.0.13
+ '@expo/env': 2.0.8
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ expo-file-system@19.0.21(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)):
+ dependencies:
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ expo-font@14.0.11(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ fontfaceobserver: 2.3.0
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ expo-keep-awake@15.0.8(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react@19.1.0):
+ dependencies:
+ expo: 54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ react: 19.1.0
+
+ expo-modules-autolinking@3.0.24:
+ dependencies:
+ '@expo/spawn-async': 1.7.2
+ chalk: 4.1.2
+ commander: 7.2.0
+ require-from-string: 2.0.2
+ resolve-from: 5.0.0
+
+ expo-modules-core@3.0.29(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ invariant: 2.2.4
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ expo-server@1.0.5: {}
+
+ expo-status-bar@3.0.9(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+
+ expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ '@babel/runtime': 7.28.6
+ '@expo/cli': 54.0.22(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))
+ '@expo/config': 12.0.13
+ '@expo/config-plugins': 54.0.4
+ '@expo/devtools': 0.1.8(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@expo/fingerprint': 0.15.4
+ '@expo/metro': 54.2.0
+ '@expo/metro-config': 54.0.14(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))
+ '@expo/vector-icons': 15.0.3(expo-font@14.0.11(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@ungap/structured-clone': 1.3.0
+ babel-preset-expo: 54.0.10(@babel/core@7.28.6)(@babel/runtime@7.28.6)(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-refresh@0.14.2)
+ expo-asset: 12.0.12(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-constants: 18.0.13(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))
+ expo-file-system: 19.0.21(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))
+ expo-font: 14.0.11(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ expo-keep-awake: 15.0.8(expo@54.0.32(@babel/core@7.28.6)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react@19.1.0)
+ expo-modules-autolinking: 3.0.24
+ expo-modules-core: 3.0.29(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ pretty-format: 29.7.0
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ react-refresh: 0.14.2
+ whatwg-url-without-unicode: 8.0.0-3
+ transitivePeerDependencies:
+ - '@babel/core'
+ - bufferutil
+ - expo-router
+ - graphql
+ - supports-color
+ - utf-8-validate
+
+ exponential-backoff@3.1.3: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ filter-obj@1.1.0: {}
+
+ finalhandler@1.1.2:
+ dependencies:
+ debug: 2.6.9
+ encodeurl: 1.0.2
+ escape-html: 1.0.3
+ on-finished: 2.3.0
+ parseurl: 1.3.3
+ statuses: 1.5.0
+ unpipe: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ find-up@4.1.0:
+ dependencies:
+ locate-path: 5.0.0
+ path-exists: 4.0.0
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
fix-dts-default-cjs-exports@1.0.1:
dependencies:
magic-string: 0.30.21
mlly: 1.8.0
- rollup: 4.55.1
+ rollup: 4.56.0
+
+ flow-enums-runtime@0.0.6: {}
+
+ fontfaceobserver@2.3.0: {}
form-data@4.0.5:
dependencies:
@@ -2704,15 +6813,21 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
- framer-motion@12.28.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ framer-motion@12.29.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
- motion-dom: 12.28.1
+ motion-dom: 12.29.0
motion-utils: 12.27.2
tslib: 2.8.1
optionalDependencies:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
+ freeport-async@2.0.0: {}
+
+ fresh@0.5.2: {}
+
+ fs.realpath@1.0.0: {}
+
fsevents@2.3.3:
optional: true
@@ -2724,6 +6839,8 @@ snapshots:
gensync@1.0.0-beta.2: {}
+ get-caller-file@2.0.5: {}
+
get-intrinsic@1.3.0:
dependencies:
call-bind-apply-helpers: 1.0.2
@@ -2737,15 +6854,40 @@ snapshots:
hasown: 2.0.2
math-intrinsics: 1.1.0
+ get-package-type@0.1.0: {}
+
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
+ getenv@2.0.0: {}
+
+ glob@13.0.0:
+ dependencies:
+ minimatch: 10.1.1
+ minipass: 7.1.2
+ path-scurry: 2.0.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ global-dirs@0.1.1:
+ dependencies:
+ ini: 1.3.8
+
gopd@1.2.0: {}
graceful-fs@4.2.11: {}
+ has-flag@3.0.0: {}
+
has-flag@4.0.0: {}
has-symbols@1.1.0: {}
@@ -2758,52 +6900,212 @@ snapshots:
dependencies:
function-bind: 1.1.2
- html-encoding-sniffer@4.0.0:
+ hermes-estree@0.29.1: {}
+
+ hermes-estree@0.32.0: {}
+
+ hermes-parser@0.29.1:
+ dependencies:
+ hermes-estree: 0.29.1
+
+ hermes-parser@0.32.0:
+ dependencies:
+ hermes-estree: 0.32.0
+
+ hosted-git-info@7.0.2:
+ dependencies:
+ lru-cache: 10.4.3
+
+ html-encoding-sniffer@4.0.0:
+ dependencies:
+ whatwg-encoding: 3.1.1
+
+ http-errors@2.0.1:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ toidentifier: 1.0.1
+
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ icss-utils@5.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ ieee754@1.2.1: {}
+
+ ignore@5.3.2: {}
+
+ image-size@1.2.1:
+ dependencies:
+ queue: 6.0.2
+
+ immutable@5.1.4: {}
+
+ imurmurhash@0.1.4: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
+ invariant@2.2.4:
+ dependencies:
+ loose-envify: 1.4.0
+
+ is-arrayish@0.3.4: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-docker@2.2.1: {}
+
+ is-extglob@2.1.1:
+ optional: true
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+ optional: true
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@2.1.0: {}
+
+ is-potential-custom-element-name@1.0.1: {}
+
+ is-wsl@2.2.0:
dependencies:
- whatwg-encoding: 3.1.1
+ is-docker: 2.2.1
- http-proxy-agent@7.0.2:
- dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
+ isexe@2.0.0: {}
- https-proxy-agent@7.0.6:
+ istanbul-lib-coverage@3.2.2: {}
+
+ istanbul-lib-instrument@5.2.1:
dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
+ '@babel/core': 7.28.6
+ '@babel/parser': 7.28.6
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 6.3.1
transitivePeerDependencies:
- supports-color
- iconv-lite@0.6.3:
+ jest-environment-node@29.7.0:
dependencies:
- safer-buffer: 2.1.2
+ '@jest/environment': 29.7.0
+ '@jest/fake-timers': 29.7.0
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.30
+ jest-mock: 29.7.0
+ jest-util: 29.7.0
- icss-utils@5.1.0(postcss@8.5.6):
+ jest-get-type@29.6.3: {}
+
+ jest-haste-map@29.7.0:
dependencies:
- postcss: 8.5.6
+ '@jest/types': 29.6.3
+ '@types/graceful-fs': 4.1.9
+ '@types/node': 20.19.30
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 29.6.3
+ jest-util: 29.7.0
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
- immutable@5.1.4: {}
+ jest-message-util@29.7.0:
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@jest/types': 29.6.3
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 29.7.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
- is-core-module@2.16.1:
+ jest-mock@29.7.0:
dependencies:
- hasown: 2.0.2
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.30
+ jest-util: 29.7.0
- is-extglob@2.1.1:
- optional: true
+ jest-regex-util@29.6.3: {}
- is-glob@4.0.3:
+ jest-util@29.7.0:
dependencies:
- is-extglob: 2.1.1
- optional: true
+ '@jest/types': 29.6.3
+ '@types/node': 20.19.30
+ chalk: 4.1.2
+ ci-info: 3.9.0
+ graceful-fs: 4.2.11
+ picomatch: 2.3.1
- is-potential-custom-element-name@1.0.1: {}
+ jest-validate@29.7.0:
+ dependencies:
+ '@jest/types': 29.6.3
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ jest-get-type: 29.6.3
+ leven: 3.1.0
+ pretty-format: 29.7.0
+
+ jest-worker@29.7.0:
+ dependencies:
+ '@types/node': 20.19.30
+ jest-util: 29.7.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jimp-compact@0.16.1: {}
joycon@3.1.1: {}
js-tokens@4.0.0: {}
+ js-yaml@3.14.2:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ jsc-safe-url@0.2.4: {}
+
jsdom@25.0.1:
dependencies:
cssstyle: 4.6.0
@@ -2836,6 +7138,73 @@ snapshots:
json5@2.2.3: {}
+ kleur@3.0.3: {}
+
+ lan-network@0.1.7: {}
+
+ launch-editor@2.12.0:
+ dependencies:
+ picocolors: 1.1.1
+ shell-quote: 1.8.3
+
+ leven@3.1.0: {}
+
+ lighthouse-logger@1.4.2:
+ dependencies:
+ debug: 2.6.9
+ marky: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ lightningcss-android-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-arm64@1.31.1:
+ optional: true
+
+ lightningcss-darwin-x64@1.31.1:
+ optional: true
+
+ lightningcss-freebsd-x64@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.31.1:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.31.1:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.31.1:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.31.1:
+ optional: true
+
+ lightningcss@1.31.1:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.31.1
+ lightningcss-darwin-arm64: 1.31.1
+ lightningcss-darwin-x64: 1.31.1
+ lightningcss-freebsd-x64: 1.31.1
+ lightningcss-linux-arm-gnueabihf: 1.31.1
+ lightningcss-linux-arm64-gnu: 1.31.1
+ lightningcss-linux-arm64-musl: 1.31.1
+ lightningcss-linux-x64-gnu: 1.31.1
+ lightningcss-linux-x64-musl: 1.31.1
+ lightningcss-win32-arm64-msvc: 1.31.1
+ lightningcss-win32-x64-msvc: 1.31.1
+
lilconfig@3.1.3: {}
lines-and-columns@1.2.4: {}
@@ -2844,8 +7213,24 @@ snapshots:
loader-utils@3.3.1: {}
+ locate-path@5.0.0:
+ dependencies:
+ p-locate: 4.1.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
lodash.camelcase@4.3.0: {}
+ lodash.debounce@4.0.8: {}
+
+ lodash.throttle@4.1.1: {}
+
+ log-symbols@2.2.0:
+ dependencies:
+ chalk: 2.4.2
+
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
@@ -2854,6 +7239,8 @@ snapshots:
lru-cache@10.4.3: {}
+ lru-cache@11.2.4: {}
+
lru-cache@5.1.1:
dependencies:
yallist: 3.1.1
@@ -2864,14 +7251,238 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
+ marky@1.3.0: {}
+
math-intrinsics@1.1.0: {}
+ mdn-data@2.0.14: {}
+
+ memoize-one@5.2.1: {}
+
+ merge-options@3.0.4:
+ dependencies:
+ is-plain-obj: 2.1.0
+
+ merge-stream@2.0.0: {}
+
+ metro-babel-transformer@0.83.3:
+ dependencies:
+ '@babel/core': 7.28.6
+ flow-enums-runtime: 0.0.6
+ hermes-parser: 0.32.0
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-cache-key@0.83.3:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
+ metro-cache@0.83.3:
+ dependencies:
+ exponential-backoff: 3.1.3
+ flow-enums-runtime: 0.0.6
+ https-proxy-agent: 7.0.6
+ metro-core: 0.83.3
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-config@0.83.3:
+ dependencies:
+ connect: 3.7.0
+ flow-enums-runtime: 0.0.6
+ jest-validate: 29.7.0
+ metro: 0.83.3
+ metro-cache: 0.83.3
+ metro-core: 0.83.3
+ metro-runtime: 0.83.3
+ yaml: 2.8.2
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ metro-core@0.83.3:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ lodash.throttle: 4.1.1
+ metro-resolver: 0.83.3
+
+ metro-file-map@0.83.3:
+ dependencies:
+ debug: 4.4.3
+ fb-watchman: 2.0.2
+ flow-enums-runtime: 0.0.6
+ graceful-fs: 4.2.11
+ invariant: 2.2.4
+ jest-worker: 29.7.0
+ micromatch: 4.0.8
+ nullthrows: 1.1.1
+ walker: 1.0.8
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-minify-terser@0.83.3:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ terser: 5.46.0
+
+ metro-resolver@0.83.3:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
+ metro-runtime@0.83.3:
+ dependencies:
+ '@babel/runtime': 7.28.6
+ flow-enums-runtime: 0.0.6
+
+ metro-source-map@0.83.3:
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/traverse--for-generate-function-map': '@babel/traverse@7.28.6'
+ '@babel/types': 7.28.6
+ flow-enums-runtime: 0.0.6
+ invariant: 2.2.4
+ metro-symbolicate: 0.83.3
+ nullthrows: 1.1.1
+ ob1: 0.83.3
+ source-map: 0.5.7
+ vlq: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-symbolicate@0.83.3:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+ invariant: 2.2.4
+ metro-source-map: 0.83.3
+ nullthrows: 1.1.1
+ source-map: 0.5.7
+ vlq: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-transform-plugins@0.83.3:
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ flow-enums-runtime: 0.0.6
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ metro-transform-worker@0.83.3:
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+ flow-enums-runtime: 0.0.6
+ metro: 0.83.3
+ metro-babel-transformer: 0.83.3
+ metro-cache: 0.83.3
+ metro-cache-key: 0.83.3
+ metro-minify-terser: 0.83.3
+ metro-source-map: 0.83.3
+ metro-transform-plugins: 0.83.3
+ nullthrows: 1.1.1
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ metro@0.83.3:
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/core': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ accepts: 1.3.8
+ chalk: 4.1.2
+ ci-info: 2.0.0
+ connect: 3.7.0
+ debug: 4.4.3
+ error-stack-parser: 2.1.4
+ flow-enums-runtime: 0.0.6
+ graceful-fs: 4.2.11
+ hermes-parser: 0.32.0
+ image-size: 1.2.1
+ invariant: 2.2.4
+ jest-worker: 29.7.0
+ jsc-safe-url: 0.2.4
+ lodash.throttle: 4.1.1
+ metro-babel-transformer: 0.83.3
+ metro-cache: 0.83.3
+ metro-cache-key: 0.83.3
+ metro-config: 0.83.3
+ metro-core: 0.83.3
+ metro-file-map: 0.83.3
+ metro-resolver: 0.83.3
+ metro-runtime: 0.83.3
+ metro-source-map: 0.83.3
+ metro-symbolicate: 0.83.3
+ metro-transform-plugins: 0.83.3
+ metro-transform-worker: 0.83.3
+ mime-types: 2.1.35
+ nullthrows: 1.1.1
+ serialize-error: 2.1.0
+ source-map: 0.5.7
+ throat: 5.0.0
+ ws: 7.5.10
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
mime-db@1.52.0: {}
+ mime-db@1.54.0: {}
+
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
+ mime@1.6.0: {}
+
+ mimic-fn@1.2.0: {}
+
+ minimatch@10.1.1:
+ dependencies:
+ '@isaacs/brace-expansion': 5.0.0
+
+ minimatch@3.1.2:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@1.2.8: {}
+
+ minipass@7.1.2: {}
+
+ minizlib@3.1.0:
+ dependencies:
+ minipass: 7.1.2
+
+ mkdirp@1.0.4: {}
+
mlly@1.8.0:
dependencies:
acorn: 8.15.0
@@ -2879,12 +7490,14 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.3
- motion-dom@12.28.1:
+ motion-dom@12.29.0:
dependencies:
motion-utils: 12.27.2
motion-utils@12.27.2: {}
+ ms@2.0.0: {}
+
ms@2.1.3: {}
mz@2.7.0:
@@ -2893,49 +7506,151 @@ snapshots:
object-assign: 4.1.1
thenify-all: 1.6.0
- nanoid@3.3.11: {}
+ nanoid@3.3.11: {}
+
+ negotiator@0.6.3: {}
+
+ negotiator@0.6.4: {}
+
+ nested-error-stacks@2.0.1: {}
+
+ next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.97.3):
+ dependencies:
+ '@next/env': 14.2.35
+ '@swc/helpers': 0.5.5
+ busboy: 1.6.0
+ caniuse-lite: 1.0.30001766
+ graceful-fs: 4.2.11
+ postcss: 8.4.31
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ styled-jsx: 5.1.1(react@18.3.1)
+ optionalDependencies:
+ '@next/swc-darwin-arm64': 14.2.33
+ '@next/swc-darwin-x64': 14.2.33
+ '@next/swc-linux-arm64-gnu': 14.2.33
+ '@next/swc-linux-arm64-musl': 14.2.33
+ '@next/swc-linux-x64-gnu': 14.2.33
+ '@next/swc-linux-x64-musl': 14.2.33
+ '@next/swc-win32-arm64-msvc': 14.2.33
+ '@next/swc-win32-ia32-msvc': 14.2.33
+ '@next/swc-win32-x64-msvc': 14.2.33
+ sass: 1.97.3
+ transitivePeerDependencies:
+ - '@babel/core'
+ - babel-plugin-macros
+
+ node-addon-api@7.1.1:
+ optional: true
+
+ node-forge@1.3.3: {}
+
+ node-int64@0.4.0: {}
+
+ node-releases@2.0.27: {}
+
+ normalize-path@3.0.0: {}
+
+ npm-package-arg@11.0.3:
+ dependencies:
+ hosted-git-info: 7.0.2
+ proc-log: 4.2.0
+ semver: 7.7.3
+ validate-npm-package-name: 5.0.1
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ nullthrows@1.1.1: {}
+
+ nwsapi@2.2.23: {}
+
+ ob1@0.83.3:
+ dependencies:
+ flow-enums-runtime: 0.0.6
+
+ object-assign@4.1.1: {}
+
+ on-finished@2.3.0:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ on-headers@1.1.0: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ onetime@2.0.1:
+ dependencies:
+ mimic-fn: 1.2.0
+
+ open@7.4.2:
+ dependencies:
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
+
+ open@8.4.2:
+ dependencies:
+ define-lazy-prop: 2.0.0
+ is-docker: 2.2.1
+ is-wsl: 2.2.0
- next@14.2.35(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.97.2):
+ ora@3.4.0:
dependencies:
- '@next/env': 14.2.35
- '@swc/helpers': 0.5.5
- busboy: 1.6.0
- caniuse-lite: 1.0.30001765
- graceful-fs: 4.2.11
- postcss: 8.4.31
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
- styled-jsx: 5.1.1(react@18.3.1)
- optionalDependencies:
- '@next/swc-darwin-arm64': 14.2.33
- '@next/swc-darwin-x64': 14.2.33
- '@next/swc-linux-arm64-gnu': 14.2.33
- '@next/swc-linux-arm64-musl': 14.2.33
- '@next/swc-linux-x64-gnu': 14.2.33
- '@next/swc-linux-x64-musl': 14.2.33
- '@next/swc-win32-arm64-msvc': 14.2.33
- '@next/swc-win32-ia32-msvc': 14.2.33
- '@next/swc-win32-x64-msvc': 14.2.33
- sass: 1.97.2
- transitivePeerDependencies:
- - '@babel/core'
- - babel-plugin-macros
+ chalk: 2.4.2
+ cli-cursor: 2.1.0
+ cli-spinners: 2.9.2
+ log-symbols: 2.2.0
+ strip-ansi: 5.2.0
+ wcwidth: 1.0.1
+
+ p-limit@2.3.0:
+ dependencies:
+ p-try: 2.2.0
- node-addon-api@7.1.1:
- optional: true
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
- node-releases@2.0.27: {}
+ p-locate@4.1.0:
+ dependencies:
+ p-limit: 2.3.0
- nwsapi@2.2.23: {}
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
- object-assign@4.1.1: {}
+ p-try@2.2.0: {}
+
+ parse-png@2.1.0:
+ dependencies:
+ pngjs: 3.4.0
parse5@7.3.0:
dependencies:
entities: 6.0.1
+ parseurl@1.3.3: {}
+
+ path-exists@4.0.0: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
path-parse@1.0.7: {}
+ path-scurry@2.0.1:
+ dependencies:
+ lru-cache: 11.2.4
+ minipass: 7.1.2
+
pathe@1.1.2: {}
pathe@2.0.3: {}
@@ -2944,6 +7659,10 @@ snapshots:
picocolors@1.1.1: {}
+ picomatch@2.3.1: {}
+
+ picomatch@3.0.1: {}
+
picomatch@4.0.3: {}
pirates@4.0.7: {}
@@ -2954,11 +7673,20 @@ snapshots:
mlly: 1.8.0
pathe: 2.0.3
- postcss-load-config@6.0.1(postcss@8.5.6):
+ plist@3.1.0:
+ dependencies:
+ '@xmldom/xmldom': 0.8.11
+ base64-js: 1.5.1
+ xmlbuilder: 15.1.1
+
+ pngjs@3.4.0: {}
+
+ postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.8.2):
dependencies:
lilconfig: 3.1.3
optionalDependencies:
postcss: 8.5.6
+ yaml: 2.8.2
postcss-modules-extract-imports@3.1.0(postcss@8.5.6):
dependencies:
@@ -3006,79 +7734,286 @@ snapshots:
picocolors: 1.1.1
source-map-js: 1.2.1
+ postcss@8.4.49:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
+ pretty-bytes@5.6.0: {}
+
pretty-format@27.5.1:
dependencies:
ansi-regex: 5.0.1
ansi-styles: 5.2.0
react-is: 17.0.2
+ pretty-format@29.7.0:
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
prism-react-renderer@2.4.1(react@18.3.1):
dependencies:
'@types/prismjs': 1.26.5
clsx: 2.1.1
react: 18.3.1
+ proc-log@4.2.0: {}
+
+ progress@2.0.3: {}
+
+ promise@8.3.0:
+ dependencies:
+ asap: 2.0.6
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
punycode@2.3.1: {}
+ qrcode-terminal@0.11.0: {}
+
+ query-string@7.1.3:
+ dependencies:
+ decode-uri-component: 0.2.2
+ filter-obj: 1.1.0
+ split-on-first: 1.1.0
+ strict-uri-encode: 2.0.0
+
+ queue@6.0.2:
+ dependencies:
+ inherits: 2.0.4
+
+ range-parser@1.2.1: {}
+
+ rc@1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+
+ react-devtools-core@6.1.5:
+ dependencies:
+ shell-quote: 1.8.3
+ ws: 7.5.10
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
react-dom@18.3.1(react@18.3.1):
dependencies:
loose-envify: 1.4.0
react: 18.3.1
scheduler: 0.23.2
+ react-freeze@1.0.4(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+
react-is@17.0.2: {}
+ react-is@18.3.1: {}
+
+ react-is@19.2.3: {}
+
+ react-native-dev-inspector@1.1.0(@babel/core@7.28.6)(metro-config@0.83.3)(metro@0.83.3)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ '@rn-dev-inspector/core': 1.1.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ '@rn-dev-inspector/metro-plugin': 1.1.0(@babel/core@7.28.6)(metro-config@0.83.3)(metro@0.83.3)
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ transitivePeerDependencies:
+ - '@babel/core'
+ - metro
+ - metro-config
+
+ react-native-is-edge-to-edge@1.2.1(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+
+ react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+ react-freeze: 1.0.4(react@19.1.0)
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ react-native-is-edge-to-edge: 1.2.1(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ warn-once: 0.1.1
+
+ react-native-svg@15.12.1(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0):
+ dependencies:
+ css-select: 5.2.2
+ css-tree: 1.1.3
+ react: 19.1.0
+ react-native: 0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0)
+ warn-once: 0.1.1
+
+ react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0):
+ dependencies:
+ '@jest/create-cache-key-function': 29.7.0
+ '@react-native/assets-registry': 0.81.5
+ '@react-native/codegen': 0.81.5(@babel/core@7.28.6)
+ '@react-native/community-cli-plugin': 0.81.5
+ '@react-native/gradle-plugin': 0.81.5
+ '@react-native/js-polyfills': 0.81.5
+ '@react-native/normalize-colors': 0.81.5
+ '@react-native/virtualized-lists': 0.81.5(@types/react@19.1.17)(react-native@0.81.5(@babel/core@7.28.6)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)
+ abort-controller: 3.0.0
+ anser: 1.4.10
+ ansi-regex: 5.0.1
+ babel-jest: 29.7.0(@babel/core@7.28.6)
+ babel-plugin-syntax-hermes-parser: 0.29.1
+ base64-js: 1.5.1
+ commander: 12.1.0
+ flow-enums-runtime: 0.0.6
+ glob: 7.2.3
+ invariant: 2.2.4
+ jest-environment-node: 29.7.0
+ memoize-one: 5.2.1
+ metro-runtime: 0.83.3
+ metro-source-map: 0.83.3
+ nullthrows: 1.1.1
+ pretty-format: 29.7.0
+ promise: 8.3.0
+ react: 19.1.0
+ react-devtools-core: 6.1.5
+ react-refresh: 0.14.2
+ regenerator-runtime: 0.13.11
+ scheduler: 0.26.0
+ semver: 7.7.3
+ stacktrace-parser: 0.1.11
+ whatwg-fetch: 3.6.20
+ ws: 6.2.3
+ yargs: 17.7.2
+ optionalDependencies:
+ '@types/react': 19.1.17
+ transitivePeerDependencies:
+ - '@babel/core'
+ - '@react-native-community/cli'
+ - '@react-native/metro-config'
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ react-refresh@0.14.2: {}
+
react-refresh@0.17.0: {}
react@18.3.1:
dependencies:
loose-envify: 1.4.0
+ react@19.1.0: {}
+
readdirp@4.1.2: {}
+ regenerate-unicode-properties@10.2.2:
+ dependencies:
+ regenerate: 1.4.2
+
+ regenerate@1.4.2: {}
+
+ regenerator-runtime@0.13.11: {}
+
+ regexpu-core@6.4.0:
+ dependencies:
+ regenerate: 1.4.2
+ regenerate-unicode-properties: 10.2.2
+ regjsgen: 0.8.0
+ regjsparser: 0.13.0
+ unicode-match-property-ecmascript: 2.0.0
+ unicode-match-property-value-ecmascript: 2.2.1
+
+ regjsgen@0.8.0: {}
+
+ regjsparser@0.13.0:
+ dependencies:
+ jsesc: 3.1.0
+
+ require-directory@2.1.1: {}
+
+ require-from-string@2.0.2: {}
+
+ requireg@0.2.2:
+ dependencies:
+ nested-error-stacks: 2.0.1
+ rc: 1.2.8
+ resolve: 1.7.1
+
resolve-from@5.0.0: {}
+ resolve-global@1.0.0:
+ dependencies:
+ global-dirs: 0.1.1
+
+ resolve-workspace-root@2.0.1: {}
+
+ resolve.exports@2.0.3: {}
+
resolve@1.22.11:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- rollup@4.55.1:
+ resolve@1.7.1:
+ dependencies:
+ path-parse: 1.0.7
+
+ restore-cursor@2.0.0:
+ dependencies:
+ onetime: 2.0.1
+ signal-exit: 3.0.7
+
+ rimraf@3.0.2:
+ dependencies:
+ glob: 7.2.3
+
+ rollup@4.56.0:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.55.1
- '@rollup/rollup-android-arm64': 4.55.1
- '@rollup/rollup-darwin-arm64': 4.55.1
- '@rollup/rollup-darwin-x64': 4.55.1
- '@rollup/rollup-freebsd-arm64': 4.55.1
- '@rollup/rollup-freebsd-x64': 4.55.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.55.1
- '@rollup/rollup-linux-arm-musleabihf': 4.55.1
- '@rollup/rollup-linux-arm64-gnu': 4.55.1
- '@rollup/rollup-linux-arm64-musl': 4.55.1
- '@rollup/rollup-linux-loong64-gnu': 4.55.1
- '@rollup/rollup-linux-loong64-musl': 4.55.1
- '@rollup/rollup-linux-ppc64-gnu': 4.55.1
- '@rollup/rollup-linux-ppc64-musl': 4.55.1
- '@rollup/rollup-linux-riscv64-gnu': 4.55.1
- '@rollup/rollup-linux-riscv64-musl': 4.55.1
- '@rollup/rollup-linux-s390x-gnu': 4.55.1
- '@rollup/rollup-linux-x64-gnu': 4.55.1
- '@rollup/rollup-linux-x64-musl': 4.55.1
- '@rollup/rollup-openbsd-x64': 4.55.1
- '@rollup/rollup-openharmony-arm64': 4.55.1
- '@rollup/rollup-win32-arm64-msvc': 4.55.1
- '@rollup/rollup-win32-ia32-msvc': 4.55.1
- '@rollup/rollup-win32-x64-gnu': 4.55.1
- '@rollup/rollup-win32-x64-msvc': 4.55.1
+ '@rollup/rollup-android-arm-eabi': 4.56.0
+ '@rollup/rollup-android-arm64': 4.56.0
+ '@rollup/rollup-darwin-arm64': 4.56.0
+ '@rollup/rollup-darwin-x64': 4.56.0
+ '@rollup/rollup-freebsd-arm64': 4.56.0
+ '@rollup/rollup-freebsd-x64': 4.56.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.56.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.56.0
+ '@rollup/rollup-linux-arm64-gnu': 4.56.0
+ '@rollup/rollup-linux-arm64-musl': 4.56.0
+ '@rollup/rollup-linux-loong64-gnu': 4.56.0
+ '@rollup/rollup-linux-loong64-musl': 4.56.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.56.0
+ '@rollup/rollup-linux-ppc64-musl': 4.56.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.56.0
+ '@rollup/rollup-linux-riscv64-musl': 4.56.0
+ '@rollup/rollup-linux-s390x-gnu': 4.56.0
+ '@rollup/rollup-linux-x64-gnu': 4.56.0
+ '@rollup/rollup-linux-x64-musl': 4.56.0
+ '@rollup/rollup-openbsd-x64': 4.56.0
+ '@rollup/rollup-openharmony-arm64': 4.56.0
+ '@rollup/rollup-win32-arm64-msvc': 4.56.0
+ '@rollup/rollup-win32-ia32-msvc': 4.56.0
+ '@rollup/rollup-win32-x64-gnu': 4.56.0
+ '@rollup/rollup-win32-x64-msvc': 4.56.0
fsevents: 2.3.3
rrweb-cssom@0.7.1: {}
@@ -3089,70 +8024,71 @@ snapshots:
dependencies:
tslib: 2.8.1
+ safe-buffer@5.2.1: {}
+
safer-buffer@2.1.2: {}
- sass-embedded-all-unknown@1.97.2:
+ sass-embedded-all-unknown@1.97.3:
dependencies:
- sass: 1.97.2
+ sass: 1.97.3
optional: true
- sass-embedded-android-arm64@1.97.2:
+ sass-embedded-android-arm64@1.97.3:
optional: true
- sass-embedded-android-arm@1.97.2:
+ sass-embedded-android-arm@1.97.3:
optional: true
- sass-embedded-android-riscv64@1.97.2:
+ sass-embedded-android-riscv64@1.97.3:
optional: true
- sass-embedded-android-x64@1.97.2:
+ sass-embedded-android-x64@1.97.3:
optional: true
- sass-embedded-darwin-arm64@1.97.2:
+ sass-embedded-darwin-arm64@1.97.3:
optional: true
- sass-embedded-darwin-x64@1.97.2:
+ sass-embedded-darwin-x64@1.97.3:
optional: true
- sass-embedded-linux-arm64@1.97.2:
+ sass-embedded-linux-arm64@1.97.3:
optional: true
- sass-embedded-linux-arm@1.97.2:
+ sass-embedded-linux-arm@1.97.3:
optional: true
- sass-embedded-linux-musl-arm64@1.97.2:
+ sass-embedded-linux-musl-arm64@1.97.3:
optional: true
- sass-embedded-linux-musl-arm@1.97.2:
+ sass-embedded-linux-musl-arm@1.97.3:
optional: true
- sass-embedded-linux-musl-riscv64@1.97.2:
+ sass-embedded-linux-musl-riscv64@1.97.3:
optional: true
- sass-embedded-linux-musl-x64@1.97.2:
+ sass-embedded-linux-musl-x64@1.97.3:
optional: true
- sass-embedded-linux-riscv64@1.97.2:
+ sass-embedded-linux-riscv64@1.97.3:
optional: true
- sass-embedded-linux-x64@1.97.2:
+ sass-embedded-linux-x64@1.97.3:
optional: true
- sass-embedded-unknown-all@1.97.2:
+ sass-embedded-unknown-all@1.97.3:
dependencies:
- sass: 1.97.2
+ sass: 1.97.3
optional: true
- sass-embedded-win32-arm64@1.97.2:
+ sass-embedded-win32-arm64@1.97.3:
optional: true
- sass-embedded-win32-x64@1.97.2:
+ sass-embedded-win32-x64@1.97.3:
optional: true
- sass-embedded@1.97.2:
+ sass-embedded@1.97.3:
dependencies:
- '@bufbuild/protobuf': 2.10.2
- buffer-builder: 0.2.0
+ '@bufbuild/protobuf': 2.11.0
colorjs.io: 0.5.2
immutable: 5.1.4
rxjs: 7.8.2
@@ -3160,32 +8096,34 @@ snapshots:
sync-child-process: 1.0.2
varint: 6.0.0
optionalDependencies:
- sass-embedded-all-unknown: 1.97.2
- sass-embedded-android-arm: 1.97.2
- sass-embedded-android-arm64: 1.97.2
- sass-embedded-android-riscv64: 1.97.2
- sass-embedded-android-x64: 1.97.2
- sass-embedded-darwin-arm64: 1.97.2
- sass-embedded-darwin-x64: 1.97.2
- sass-embedded-linux-arm: 1.97.2
- sass-embedded-linux-arm64: 1.97.2
- sass-embedded-linux-musl-arm: 1.97.2
- sass-embedded-linux-musl-arm64: 1.97.2
- sass-embedded-linux-musl-riscv64: 1.97.2
- sass-embedded-linux-musl-x64: 1.97.2
- sass-embedded-linux-riscv64: 1.97.2
- sass-embedded-linux-x64: 1.97.2
- sass-embedded-unknown-all: 1.97.2
- sass-embedded-win32-arm64: 1.97.2
- sass-embedded-win32-x64: 1.97.2
-
- sass@1.97.2:
+ sass-embedded-all-unknown: 1.97.3
+ sass-embedded-android-arm: 1.97.3
+ sass-embedded-android-arm64: 1.97.3
+ sass-embedded-android-riscv64: 1.97.3
+ sass-embedded-android-x64: 1.97.3
+ sass-embedded-darwin-arm64: 1.97.3
+ sass-embedded-darwin-x64: 1.97.3
+ sass-embedded-linux-arm: 1.97.3
+ sass-embedded-linux-arm64: 1.97.3
+ sass-embedded-linux-musl-arm: 1.97.3
+ sass-embedded-linux-musl-arm64: 1.97.3
+ sass-embedded-linux-musl-riscv64: 1.97.3
+ sass-embedded-linux-musl-x64: 1.97.3
+ sass-embedded-linux-riscv64: 1.97.3
+ sass-embedded-linux-x64: 1.97.3
+ sass-embedded-unknown-all: 1.97.3
+ sass-embedded-win32-arm64: 1.97.3
+ sass-embedded-win32-x64: 1.97.3
+
+ sass@1.97.3:
dependencies:
chokidar: 4.0.3
immutable: 5.1.4
source-map-js: 1.2.1
optionalDependencies:
- '@parcel/watcher': 2.5.4
+ '@parcel/watcher': 2.5.6
+
+ sax@1.4.4: {}
saxes@6.0.0:
dependencies:
@@ -3195,22 +8133,134 @@ snapshots:
dependencies:
loose-envify: 1.4.0
+ scheduler@0.26.0: {}
+
semver@6.3.1: {}
+ semver@7.7.3: {}
+
+ send@0.19.2:
+ dependencies:
+ debug: 2.6.9
+ depd: 2.0.0
+ destroy: 1.2.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.1
+ mime: 1.6.0
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ serialize-error@2.1.0: {}
+
+ serve-static@1.16.3:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 0.19.2
+ transitivePeerDependencies:
+ - supports-color
+
+ setprototypeof@1.2.0: {}
+
+ sf-symbols-typescript@2.2.0: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.3: {}
+
siginfo@2.0.0: {}
+ signal-exit@3.0.7: {}
+
+ simple-plist@1.3.1:
+ dependencies:
+ bplist-creator: 0.1.0
+ bplist-parser: 0.3.1
+ plist: 3.1.0
+
+ simple-swizzle@0.2.4:
+ dependencies:
+ is-arrayish: 0.3.4
+
+ sisteransi@1.0.5: {}
+
+ slash@3.0.0: {}
+
+ slugify@1.6.6: {}
+
source-map-js@1.2.1: {}
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.5.7: {}
+
+ source-map@0.6.1: {}
+
source-map@0.7.6: {}
+ split-on-first@1.1.0: {}
+
+ sprintf-js@1.0.3: {}
+
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
stackback@0.0.2: {}
+ stackframe@1.3.4: {}
+
+ stacktrace-parser@0.1.11:
+ dependencies:
+ type-fest: 0.7.1
+
+ statuses@1.5.0: {}
+
+ statuses@2.0.2: {}
+
std-env@3.10.0: {}
+ stream-buffers@2.2.0: {}
+
streamsearch@1.1.0: {}
+ strict-uri-encode@2.0.0: {}
+
string-hash@1.1.3: {}
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ strip-ansi@5.2.0:
+ dependencies:
+ ansi-regex: 4.1.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-json-comments@2.0.1: {}
+
+ structured-headers@0.4.1: {}
+
styled-jsx@5.1.1(react@18.3.1):
dependencies:
client-only: 0.0.1
@@ -3226,10 +8276,23 @@ snapshots:
tinyglobby: 0.2.15
ts-interface-checker: 0.1.13
+ supports-color@5.5.0:
+ dependencies:
+ has-flag: 3.0.0
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
+ supports-hyperlinks@2.3.0:
+ dependencies:
+ has-flag: 4.0.0
+ supports-color: 7.2.0
+
supports-preserve-symlinks-flag@1.0.0: {}
symbol-tree@3.2.4: {}
@@ -3240,6 +8303,34 @@ snapshots:
sync-message-port@1.1.3: {}
+ tar@7.5.6:
+ dependencies:
+ '@isaacs/fs-minipass': 4.0.1
+ chownr: 3.0.0
+ minipass: 7.1.2
+ minizlib: 3.1.0
+ yallist: 5.0.0
+
+ temp-dir@2.0.0: {}
+
+ terminal-link@2.1.1:
+ dependencies:
+ ansi-escapes: 4.3.2
+ supports-hyperlinks: 2.3.0
+
+ terser@5.46.0:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.15.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+
thenify-all@1.6.0:
dependencies:
thenify: 3.3.1
@@ -3248,6 +8339,8 @@ snapshots:
dependencies:
any-promise: 1.3.0
+ throat@5.0.0: {}
+
tinybench@2.9.0: {}
tinyexec@0.3.2: {}
@@ -3269,6 +8362,14 @@ snapshots:
dependencies:
tldts-core: 6.1.86
+ tmpl@1.0.5: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ toidentifier@1.0.1: {}
+
tough-cookie@5.1.2:
dependencies:
tldts: 6.1.86
@@ -3283,7 +8384,7 @@ snapshots:
tslib@2.8.1: {}
- tsup@8.5.1(postcss@8.5.6)(typescript@5.9.3):
+ tsup@8.5.1(postcss@8.5.6)(typescript@5.9.3)(yaml@2.8.2):
dependencies:
bundle-require: 5.1.0(esbuild@0.27.2)
cac: 6.7.14
@@ -3294,9 +8395,9 @@ snapshots:
fix-dts-default-cjs-exports: 1.0.1
joycon: 3.1.1
picocolors: 1.1.1
- postcss-load-config: 6.0.1(postcss@8.5.6)
+ postcss-load-config: 6.0.1(postcss@8.5.6)(yaml@2.8.2)
resolve-from: 5.0.0
- rollup: 4.55.1
+ rollup: 4.56.0
source-map: 0.7.6
sucrase: 3.35.1
tinyexec: 0.3.2
@@ -3311,29 +8412,70 @@ snapshots:
- tsx
- yaml
+ type-detect@4.0.8: {}
+
+ type-fest@0.21.3: {}
+
+ type-fest@0.7.1: {}
+
typescript@5.9.3: {}
ufo@1.6.3: {}
undici-types@6.21.0: {}
+ undici@6.23.0: {}
+
+ unicode-canonical-property-names-ecmascript@2.0.1: {}
+
+ unicode-match-property-ecmascript@2.0.0:
+ dependencies:
+ unicode-canonical-property-names-ecmascript: 2.0.1
+ unicode-property-aliases-ecmascript: 2.2.0
+
+ unicode-match-property-value-ecmascript@2.2.1: {}
+
+ unicode-property-aliases-ecmascript@2.2.0: {}
+
+ unique-string@2.0.0:
+ dependencies:
+ crypto-random-string: 2.0.0
+
+ unpipe@1.0.0: {}
+
update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies:
browserslist: 4.28.1
escalade: 3.2.0
picocolors: 1.1.1
+ use-latest-callback@0.2.6(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+
+ use-sync-external-store@1.6.0(react@19.1.0):
+ dependencies:
+ react: 19.1.0
+
util-deprecate@1.0.2: {}
+ utils-merge@1.0.1: {}
+
+ uuid@7.0.3: {}
+
+ validate-npm-package-name@5.0.1: {}
+
varint@6.0.0: {}
- vite-node@2.1.9(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2):
+ vary@1.1.2: {}
+
+ vite-node@2.1.9(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 1.1.2
- vite: 5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2)
+ vite: 5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -3345,21 +8487,23 @@ snapshots:
- supports-color
- terser
- vite@5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2):
+ vite@5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0):
dependencies:
esbuild: 0.21.5
postcss: 8.5.6
- rollup: 4.55.1
+ rollup: 4.56.0
optionalDependencies:
'@types/node': 20.19.30
fsevents: 2.3.3
- sass: 1.97.2
- sass-embedded: 1.97.2
+ lightningcss: 1.31.1
+ sass: 1.97.3
+ sass-embedded: 1.97.3
+ terser: 5.46.0
- vitest@2.1.9(@types/node@20.19.30)(jsdom@25.0.1)(sass-embedded@1.97.2)(sass@1.97.2):
+ vitest@2.1.9(@types/node@20.19.30)(jsdom@25.0.1)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0):
dependencies:
'@vitest/expect': 2.1.9
- '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2))
+ '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0))
'@vitest/pretty-format': 2.1.9
'@vitest/runner': 2.1.9
'@vitest/snapshot': 2.1.9
@@ -3375,8 +8519,8 @@ snapshots:
tinyexec: 0.3.2
tinypool: 1.1.1
tinyrainbow: 1.2.0
- vite: 5.4.21(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2)
- vite-node: 2.1.9(@types/node@20.19.30)(sass-embedded@1.97.2)(sass@1.97.2)
+ vite: 5.4.21(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)
+ vite-node: 2.1.9(@types/node@20.19.30)(lightningcss@1.31.1)(sass-embedded@1.97.3)(sass@1.97.3)(terser@5.46.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 20.19.30
@@ -3392,32 +8536,113 @@ snapshots:
- supports-color
- terser
+ vlq@1.0.1: {}
+
w3c-xmlserializer@5.0.0:
dependencies:
xml-name-validator: 5.0.0
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+
+ warn-once@0.1.1: {}
+
+ wcwidth@1.0.1:
+ dependencies:
+ defaults: 1.0.4
+
+ webidl-conversions@5.0.0: {}
+
webidl-conversions@7.0.0: {}
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
+ whatwg-fetch@3.6.20: {}
+
whatwg-mimetype@4.0.0: {}
+ whatwg-url-without-unicode@8.0.0-3:
+ dependencies:
+ buffer: 5.7.1
+ punycode: 2.3.1
+ webidl-conversions: 5.0.0
+
whatwg-url@14.2.0:
dependencies:
tr46: 5.1.1
webidl-conversions: 7.0.0
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
why-is-node-running@2.3.0:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
+ wonka@6.3.5: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrappy@1.0.2: {}
+
+ write-file-atomic@4.0.2:
+ dependencies:
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+
+ ws@6.2.3:
+ dependencies:
+ async-limiter: 1.0.1
+
+ ws@7.5.10: {}
+
ws@8.19.0: {}
+ xcode@3.0.1:
+ dependencies:
+ simple-plist: 1.3.1
+ uuid: 7.0.3
+
xml-name-validator@5.0.0: {}
+ xml2js@0.6.0:
+ dependencies:
+ sax: 1.4.4
+ xmlbuilder: 11.0.1
+
+ xmlbuilder@11.0.1: {}
+
+ xmlbuilder@15.1.1: {}
+
xmlchars@2.2.0: {}
+ y18n@5.0.8: {}
+
yallist@3.1.1: {}
+
+ yallist@5.0.0: {}
+
+ yaml@2.8.2: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yocto-queue@0.1.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index bd0c434..1060708 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,3 +1,5 @@
packages:
- '_package-export'
- '_package-export/example'
+ - 'packages/agentation-rn'
+ - 'packages/agentation-rn/example'