From c88e6f42726d7fe6cc2f51da074d361bd811050c Mon Sep 17 00:00:00 2001 From: Michael J Feher Date: Thu, 4 Jun 2026 14:51:44 -0400 Subject: [PATCH 01/16] wip: add liquid client and integrate sdk --- .gitmodules | 3 + __tests__/CollectionScreens-test.tsx | 61 - app/accounts.tsx | 122 - app/chat.tsx | 325 ++- app/identities.tsx | 104 - app/import.tsx | 361 --- app/landing.tsx | 412 +-- app/passkeys.tsx | 160 -- dialogs/DidDocumentModal.tsx | 186 -- hooks/useConnection.ts | 254 +- package.json | 3 +- packages/liquid-auth-js | 1 + pnpm-lock.yaml | 3891 +++++++++++++++++++++++++- stores/ac2Messages.ts | 79 + 14 files changed, 4483 insertions(+), 1479 deletions(-) create mode 100644 .gitmodules delete mode 100644 __tests__/CollectionScreens-test.tsx delete mode 100644 app/accounts.tsx delete mode 100644 app/identities.tsx delete mode 100644 app/import.tsx delete mode 100644 app/passkeys.tsx delete mode 100644 dialogs/DidDocumentModal.tsx create mode 160000 packages/liquid-auth-js create mode 100644 stores/ac2Messages.ts diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..f8fedb4 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "packages/liquid-auth-js"] + path = packages/liquid-auth-js + url = https://github.com/algorandfoundation/liquid-auth-js.git diff --git a/__tests__/CollectionScreens-test.tsx b/__tests__/CollectionScreens-test.tsx deleted file mode 100644 index 45d72f9..0000000 --- a/__tests__/CollectionScreens-test.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import React from 'react'; -import { render } from '@testing-library/react-native'; -import AccountsScreen from '../app/accounts'; -import PasskeysScreen from '../app/passkeys'; -import IdentitiesScreen from '../app/identities'; -import ConnectionsScreen from '../app/connections'; - -// Mock expo-router -jest.mock('expo-router', () => ({ - useRouter: () => ({ - push: jest.fn(), - back: jest.fn(), - }), - Stack: { - Screen: () => null, - }, -})); - -// Mock useProvider hook -jest.mock('@/hooks/useProvider', () => ({ - useProvider: () => ({ - identities: [{ did: 'did:key:123' }], - accounts: [{ address: 'ADDR123', balance: BigInt(100) }], - passkeys: [{ id: 'cred123', name: 'Test Passkey', createdAt: new Date().getTime() }], - sessions: [{ id: 'sess123', origin: 'example.com' }], - passkey: { - store: { - removePasskey: jest.fn(), - }, - }, - }), -})); - -// Mock MaterialIcons -jest.mock('@expo/vector-icons', () => ({ - MaterialIcons: 'MaterialIcons', -})); - -describe('Collection Screens', () => { - it('renders AccountsScreen correctly', () => { - const { getByText, getAllByText } = render(); - expect(getByText('ADDR123')).toBeTruthy(); - expect(getAllByText('$100').length).toBeGreaterThanOrEqual(1); - }); - - it('renders PasskeysScreen correctly', () => { - const { getByText } = render(); - expect(getByText('Test Passkey')).toBeTruthy(); - expect(getByText('ID: cred123')).toBeTruthy(); - }); - - it('renders IdentitiesScreen correctly', () => { - const { getByText } = render(); - expect(getByText('did:key:123')).toBeTruthy(); - }); - - it('renders ConnectionsScreen correctly', () => { - const { getByText } = render(); - expect(getByText('example.com')).toBeTruthy(); - }); -}); diff --git a/app/accounts.tsx b/app/accounts.tsx deleted file mode 100644 index 293a098..0000000 --- a/app/accounts.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import React from 'react'; -import { StyleSheet, Text, View, ScrollView, TouchableOpacity } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { Stack, useRouter } from 'expo-router'; -import { MaterialIcons } from '@expo/vector-icons'; -import { useProvider } from '@/hooks/useProvider'; - -export default function AccountsScreen() { - const router = useRouter(); - const { accounts } = useProvider(); - - return ( - - ( - router.back()} style={{ marginLeft: 10 }}> - - - ), - }} - /> - - - Total Balance - - ${accounts.reduce((acc, curr) => acc + BigInt(curr.balance || 0), BigInt(0)).toString()} - - - - - Your Accounts - - {accounts.map((account, index) => ( - - - - - - - {account.address} - - ${account.balance.toString()} - - alert('Address copied!')}> - - - - ))} - {accounts.length === 0 && No accounts found} - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F8FAFC', - }, - content: { - padding: 20, - }, - section: { - marginBottom: 32, - }, - sectionTitle: { - fontSize: 14, - color: '#64748B', - fontWeight: '600', - marginBottom: 8, - textTransform: 'uppercase', - }, - balanceAmount: { - fontSize: 36, - fontWeight: '800', - color: '#0F172A', - }, - list: { - gap: 12, - }, - card: { - backgroundColor: '#FFFFFF', - borderRadius: 20, - padding: 16, - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: '#E2E8F0', - }, - iconContainer: { - width: 48, - height: 48, - borderRadius: 24, - backgroundColor: '#E1EFFF', - justifyContent: 'center', - alignItems: 'center', - marginRight: 16, - }, - details: { - flex: 1, - }, - address: { - fontSize: 16, - fontWeight: '700', - color: '#0F172A', - marginBottom: 4, - }, - balance: { - fontSize: 14, - color: '#64748B', - }, - emptyText: { - textAlign: 'center', - color: '#94A3B8', - marginTop: 20, - }, -}); diff --git a/app/chat.tsx b/app/chat.tsx index b025e05..aacd19d 100644 --- a/app/chat.tsx +++ b/app/chat.tsx @@ -1,5 +1,6 @@ -import React, { useState, useRef, useEffect } from 'react'; +import React, { useState, useRef, useEffect, useMemo } from 'react'; import { + Alert, StyleSheet, Text, View, @@ -11,30 +12,146 @@ import { Keyboard, TouchableWithoutFeedback, } from 'react-native'; +import { Buffer } from 'buffer'; import { SafeAreaView } from 'react-native-safe-area-context'; import { Stack, useRouter, useLocalSearchParams } from 'expo-router'; import { MaterialIcons } from '@expo/vector-icons'; import { useStore } from '@tanstack/react-store'; +import { buildSigningRejected, buildSigningResponse } from '@algorandfoundation/ac2-sdk/protocol'; +import type { AC2SigningRequest as SigningRequestMessage } from '@algorandfoundation/ac2-sdk/schema'; import { messagesStore, Message, clearMessages } from '@/stores/messages'; +import { ac2MessagesStore, Ac2MessageEntry, clearAc2Messages } from '@/stores/ac2Messages'; import { useConnection } from '@/hooks/useConnection'; +import { useProvider } from '@/hooks/useProvider'; +import { keyStore } from '@/stores/keystore'; +import { decodeAddress } from '@/utils/algorand'; + +// Unified timeline entry — keeps free-text chat and AC2 protocol messages +// in the same scroll view while preserving their distinct typing/rendering. +type TimelineEntry = + | { kind: 'text'; id: string; timestamp: number; data: Message } + | { kind: 'ac2'; id: string; timestamp: number; data: Ac2MessageEntry }; export default function ChatScreen() { const router = useRouter(); const params = useLocalSearchParams<{ origin: string; requestId: string }>(); const [inputText, setInputText] = useState(''); - const { isConnected, isLoading, isError, send, lastHeartbeat, reset, address } = useConnection( - params.origin || '', - params.requestId || '', - ); + const { isConnected, isLoading, isError, send, sendAc2, lastHeartbeat, reset, address, activeStreamText } = + useConnection(params.origin || '', params.requestId || ''); + const { key } = useProvider(); - const { messages } = useStore(messagesStore, (state) => ({ - messages: state.messages.filter( + const textMessages = useStore(messagesStore, (state) => + state.messages.filter( (m) => m.origin === params.origin && m.requestId === params.requestId && (address ? m.address === address : true), ), - })); + ); + + const ac2Messages = useStore(ac2MessagesStore, (state) => + state.messages.filter((m) => m.origin === params.origin && m.requestId === params.requestId), + ); + + // A SigningRequest is "actioned" once we have a matching outbound response + // or rejection on the same `thid` (the SDK builders thread `thid = request.id`). + // This survives reloads because it's derived from the persisted ac2 store. + const actionedRequestIds = useMemo(() => { + const set = new Set(); + for (const m of ac2Messages) { + if (m.direction !== 'outbound') continue; + const t = m.envelope.type; + if (t === 'ac2/SigningResponse' || t === 'ac2/SigningRejected') { + if (m.envelope.thid) set.add(m.envelope.thid); + } + } + return set; + }, [ac2Messages]); + + const handleApprove = async (req: SigningRequestMessage) => { + try { + if (!address) throw new Error('No active address'); + const publicKey = decodeAddress(address).publicKey; + const matchedKey = keyStore.state.keys.find( + (k) => + k.publicKey && + k.publicKey.length === publicKey.length && + k.publicKey.every((v, i) => v === publicKey[i]), + ); + if (!matchedKey || !matchedKey.publicKey) { + throw new Error('No matching key for active address'); + } + + const payloadBytes = new Uint8Array(Buffer.from(req.body.payload, 'base64')); + const sigBytes: Uint8Array = await key.store.sign(matchedKey.id, payloadBytes); + + const toB64 = (bytes: Uint8Array): string => + Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64'); + + const response = buildSigningResponse({ + request: req, + body: { + signature: toB64(sigBytes), + public_key: toB64(new Uint8Array(matchedKey.publicKey)), + address, + key_type: req.body.key_type ?? 'account', + }, + }); + sendAc2(response); + } catch (err) { + console.error('Failed to approve signing request', err); + Alert.alert('Signing failed', err instanceof Error ? err.message : String(err)); + } + }; + + const handleReject = (req: SigningRequestMessage) => { + try { + const rejected = buildSigningRejected({ + request: req, + reason: 'User declined the signing request.', + }); + sendAc2(rejected); + } catch (err) { + console.error('Failed to reject signing request', err); + Alert.alert('Reject failed', err instanceof Error ? err.message : String(err)); + } + }; + + const timeline: TimelineEntry[] = [ + ...textMessages.map( + (m): TimelineEntry => ({ + kind: 'text', + id: `t-${m.id}`, + timestamp: m.timestamp, + data: m, + }), + ), + ...ac2Messages.map( + (m): TimelineEntry => ({ + kind: 'ac2', + id: `a-${m.id}`, + timestamp: m.receivedAt, + data: m, + }), + ), + ].sort((a, b) => a.timestamp - b.timestamp); + + if (activeStreamText) { + timeline.push({ + kind: 'text', + id: 'active-stream', + timestamp: Date.now(), + data: { + id: 'active-stream', + text: activeStreamText, + sender: 'peer', + timestamp: Date.now(), + address: address || '', + origin: params.origin || '', + requestId: params.requestId || '', + } + }); + } const flatListRef = useRef(null); @@ -71,23 +188,88 @@ export default function ChatScreen() { } }; - const renderItem = ({ item }: { item: Message }) => ( - - - {item.text} - - - {new Date(item.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} - - - ); + const renderItem = ({ item }: { item: TimelineEntry }) => { + if (item.kind === 'text') { + const m = item.data; + return ( + + + {m.text} + + + {new Date(m.timestamp).toLocaleTimeString([], { + hour: '2-digit', + minute: '2-digit', + })} + + + ); + } + + // AC2 protocol message — rendered as a distinct, monospaced card so the + // protocol surface is visually obvious in the reference UI. + const m = item.data; + const isOutbound = m.direction === 'outbound'; + const isInboundSigningRequest = !isOutbound && m.envelope.type === 'ac2/SigningRequest'; + const req = isInboundSigningRequest ? (m.envelope as SigningRequestMessage) : null; + const actioned = req ? actionedRequestIds.has(req.id) : false; + const expired = req?.expires_time !== undefined && req.expires_time * 1000 < Date.now(); + + return ( + + + + {m.envelope.type} + {isOutbound ? '→ peer' : 'peer →'} + + {req && {req.body.description}} + + {JSON.stringify(m.envelope.body, null, 2)} + + {req && ( + + {actioned ? ( + Actioned + ) : expired ? ( + Expired + ) : ( + <> + handleReject(req)} + disabled={!isConnected} + > + + Reject + + handleApprove(req)} + disabled={!isConnected} + > + + Approve & Sign + + + )} + + )} + + {new Date(item.timestamp).toLocaleTimeString([], { + hour: '2-digit', + minute: '2-digit', + })} + + + ); + }; return ( @@ -118,9 +300,12 @@ export default function ChatScreen() { /> )} - address && clearMessages(address, params.origin || '', params.requestId || '') - } + onPress={() => { + if (address) { + clearMessages(address, params.origin || '', params.requestId || ''); + } + clearAc2Messages(address || '', params.origin || '', params.requestId || ''); + }} style={{ marginRight: 15 }} > @@ -138,7 +323,7 @@ export default function ChatScreen() { item.id} contentContainerStyle={styles.messageList} @@ -264,4 +449,86 @@ const styles = StyleSheet.create({ sendButtonDisabled: { backgroundColor: '#CBD5E1', }, + ac2Bubble: { + alignSelf: 'stretch', + backgroundColor: '#EEF2FF', + borderRadius: 12, + padding: 12, + marginBottom: 8, + borderWidth: 1, + borderColor: '#C7D2FE', + }, + ac2Inbound: { + borderLeftWidth: 4, + borderLeftColor: '#6366F1', + }, + ac2Outbound: { + borderRightWidth: 4, + borderRightColor: '#6366F1', + }, + ac2Header: { + flexDirection: 'row', + alignItems: 'center', + gap: 6, + marginBottom: 6, + }, + ac2Type: { + fontSize: 12, + fontWeight: '700', + color: '#4338CA', + flex: 1, + }, + ac2Direction: { + fontSize: 11, + color: '#6366F1', + fontWeight: '600', + }, + ac2Body: { + fontFamily: 'monospace', + fontSize: 12, + color: '#1E1B4B', + }, + ac2Description: { + fontSize: 14, + color: '#1E1B4B', + marginBottom: 6, + fontWeight: '500', + }, + ac2Actions: { + flexDirection: 'row', + justifyContent: 'flex-end', + gap: 8, + marginTop: 8, + }, + ac2Btn: { + flexDirection: 'row', + alignItems: 'center', + gap: 4, + paddingHorizontal: 12, + paddingVertical: 8, + borderRadius: 8, + }, + ac2Approve: { + backgroundColor: '#10B981', + }, + ac2Reject: { + backgroundColor: '#EF4444', + }, + ac2BtnText: { + color: '#fff', + fontWeight: '600', + fontSize: 13, + }, + ac2Actioned: { + fontSize: 12, + fontWeight: '600', + color: '#6B7280', + fontStyle: 'italic', + }, + ac2Expired: { + fontSize: 12, + fontWeight: '600', + color: '#B91C1C', + fontStyle: 'italic', + }, }); diff --git a/app/identities.tsx b/app/identities.tsx deleted file mode 100644 index 5152ee4..0000000 --- a/app/identities.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import React from 'react'; -import { StyleSheet, Text, View, ScrollView, TouchableOpacity } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { Stack, useRouter } from 'expo-router'; -import { MaterialIcons } from '@expo/vector-icons'; -import { useProvider } from '@/hooks/useProvider'; - -export default function IdentitiesScreen() { - const router = useRouter(); - const { identities } = useProvider(); - - return ( - - ( - router.back()} style={{ marginLeft: 10 }}> - - - ), - }} - /> - - - Your Identities (DIDs) - - {identities.map((identity, index) => ( - - - - - - - {identity.did} - - - alert('DID copied!')}> - - - - ))} - {identities.length === 0 && No identities found} - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F8FAFC', - }, - content: { - padding: 20, - }, - section: { - marginBottom: 32, - }, - sectionTitle: { - fontSize: 14, - color: '#64748B', - fontWeight: '600', - marginBottom: 8, - textTransform: 'uppercase', - }, - list: { - gap: 12, - }, - card: { - backgroundColor: '#FFFFFF', - borderRadius: 20, - padding: 16, - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: '#E2E8F0', - }, - iconContainer: { - width: 48, - height: 48, - borderRadius: 24, - backgroundColor: '#FDF2F2', - justifyContent: 'center', - alignItems: 'center', - marginRight: 16, - }, - details: { - flex: 1, - }, - did: { - fontSize: 16, - fontWeight: '700', - color: '#0F172A', - }, - emptyText: { - textAlign: 'center', - color: '#94A3B8', - marginTop: 20, - }, -}); diff --git a/app/import.tsx b/app/import.tsx deleted file mode 100644 index d3b9fb1..0000000 --- a/app/import.tsx +++ /dev/null @@ -1,361 +0,0 @@ -import React, { useRef, useState } from 'react'; -import { - View, - Text, - StyleSheet, - TouchableOpacity, - ScrollView, - Alert, - TextInput, -} from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { useLocalSearchParams, useRouter } from 'expo-router'; -import Constants from 'expo-constants'; -import { MaterialIcons } from '@expo/vector-icons'; -import { wordlist } from '@scure/bip39/wordlists/english.js'; -import { validateMnemonic, mnemonicToSeed } from '@scure/bip39'; -import { useProvider } from '@/hooks/useProvider'; -import { identitiesStore } from '@/stores/identities'; -import { accountsStore } from '@/stores/accounts'; -import { passkeysStore } from '@/stores/passkeys'; -import { PreventScreenshot } from '@/components/PreventScreenshot'; -import { bootstrap } from '@/lib/bootstrap'; -import { importDidDocument } from '@/utils/did-backup'; - -// Extract provider configuration from expo-constants -const config = Constants.expoConfig?.extra?.provider || { - name: 'Rocca', - primaryColor: '#3B82F6', - secondaryColor: '#E1EFFF', -}; - -export default function ImportWalletScreen() { - const router = useRouter(); - const { backupUri } = useLocalSearchParams<{ backupUri?: string }>(); - const provider = useProvider(); - const { key, identity } = provider; - const { primaryColor } = config; - - const [importText, setImportText] = useState(''); - const [isImporting, setIsImporting] = useState(false); - const scrollViewRef = useRef(null); - - const handleImport = async () => { - // Parse the input - split by spaces or newlines - const words = importText - .toLowerCase() - .trim() - .split(/\s+/) - .filter((word) => word.length > 0); - - if (words.length !== 24) { - Alert.alert( - 'Invalid Phrase', - `Expected 24 words, but found ${words.length}. Please enter your complete recovery phrase.`, - ); - return; - } - - // Validate using BIP39 - const phrase = words.join(' '); - const isValid = validateMnemonic(phrase, wordlist); - - if (!isValid) { - Alert.alert( - 'Invalid Recovery Phrase', - 'The recovery phrase you entered is not valid. Please check your words and try again.', - ); - return; - } - - setIsImporting(true); - - try { - console.log('Starting import process...'); - - // Clear existing keys and data to prevent duplication - console.log('Clearing existing wallet data...'); - await key.store.clear(); - await provider.account.store.clear(); - await provider.identity.store.clear(); - await provider.passkey.store.clear(); - - // Load backup if present to validate early - let backupDoc = null; - if (backupUri) { - console.log('Loading backup from:', backupUri); - backupDoc = await importDidDocument(backupUri); - } - - // Import to the keystore - console.log('Importing seed phrase...'); - const seedId = await key.store.import( - { - type: 'hd-seed', - algorithm: 'raw', - extractable: true, - keyUsages: ['deriveKey', 'deriveBits'], - privateKey: await mnemonicToSeed(phrase), - }, - 'bytes', - ); - - // Generate HD Root Key - console.log('Generating HD Root Key...'); - const rootKeyId = await key.store.generate({ - type: 'hd-root-key', - algorithm: 'raw', - extractable: true, - keyUsages: ['deriveKey', 'deriveBits'], - params: { - parentKeyId: seedId, - }, - }); - - if (backupDoc) { - // Restore derived keys from backup - console.log('Restoring from backup document...'); - await identity.store.restoreFromDidDocument(backupDoc); - console.log('Backup restoration complete.'); - } else { - // Default generation if no backup - console.log('Generating default keys...'); - // Generate Ed25519 Account Key - const accountParams = { - parentKeyId: rootKeyId, - context: 0, - account: 0, - index: 0, - derivation: 9, - }; - await key.store.generate({ - type: 'hd-derived-ed25519', - algorithm: 'EdDSA', - extractable: true, - keyUsages: ['sign', 'verify'], - params: { - ...accountParams, - }, - }); - - // Generate Ed25519 Identity Key - const identityParams = { - parentKeyId: rootKeyId, - context: 1, - account: 0, - index: 0, - derivation: 9, - }; - await key.store.generate({ - type: 'hd-derived-ed25519', - algorithm: 'EdDSA', - extractable: true, - keyUsages: ['sign', 'verify'], - params: { - ...identityParams, - }, - }); - console.log('Default key generation complete.'); - } - - // Give a small moment for extensions to process state updates before navigating - // This helps prevent flickering on the landing screen as identities are populated - console.log('Waiting for state synchronization...'); - await new Promise((resolve) => setTimeout(resolve, 500)); - - // Bootstrap to ensure native side is updated with new master key and keys - await bootstrap(false); - - const { identities } = identitiesStore.state; - const { accounts } = accountsStore.state; - const { passkeys: providerPasskeys } = passkeysStore.state; - console.log( - `Import complete. Summary: identities=${identities.length}, accounts=${accounts.length}, passkeys=${providerPasskeys.length}`, - ); - - console.log('Navigating to landing...'); - router.replace('/landing'); - } catch (error) { - console.error('Import failed:', error); - Alert.alert( - 'Import Failed', - 'Failed to import wallet. Please check your recovery phrase and try again.', - ); - } finally { - setIsImporting(false); - } - }; - - return ( - - - - - - Import Wallet - - Enter your 24-word recovery phrase to restore your wallet - - - - - Recovery Phrase (24 words) - - - - - Words entered: {importText.split(/\s+/).filter((w) => w.length > 0).length} / 24 - - - - - - - Your recovery phrase is only used to restore your wallet locally. It is never sent to - any server. - - - - - - router.back()} - disabled={isImporting} - > - Cancel - - - - - {isImporting ? 'Importing...' : 'Import Wallet'} - - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F0F7FF', - }, - importContainer: { - flex: 1, - paddingHorizontal: 24, - }, - scrollContent: { - flexGrow: 1, - }, - importHeader: { - alignItems: 'center', - marginTop: 10, - marginBottom: 30, - }, - importTitle: { - fontSize: 24, - fontWeight: '700', - color: '#0F172A', - marginTop: 16, - marginBottom: 8, - }, - importSubtitle: { - fontSize: 14, - color: '#64748B', - textAlign: 'center', - paddingHorizontal: 20, - lineHeight: 20, - }, - importInputContainer: { - marginBottom: 20, - }, - importLabel: { - fontSize: 14, - fontWeight: '600', - color: '#0F172A', - marginBottom: 8, - }, - importTextInput: { - backgroundColor: '#FFFFFF', - borderRadius: 16, - borderWidth: 1, - borderColor: '#E2E8F0', - padding: 16, - minHeight: 180, - fontSize: 14, - color: '#0F172A', - lineHeight: 22, - }, - importHelper: { - fontSize: 12, - color: '#64748B', - marginTop: 8, - textAlign: 'right', - }, - importInfo: { - flexDirection: 'row', - alignItems: 'flex-start', - backgroundColor: '#F1F5F9', - padding: 16, - borderRadius: 12, - marginTop: 10, - gap: 12, - }, - importInfoText: { - flex: 1, - fontSize: 13, - color: '#64748B', - lineHeight: 18, - }, - buttonContainer: { - gap: 12, - marginTop: 20, - paddingBottom: 20, - }, - primaryButton: { - paddingVertical: 16, - borderRadius: 30, - alignItems: 'center', - }, - primaryButtonText: { - color: '#FFFFFF', - fontSize: 16, - fontWeight: '600', - }, - secondaryButton: { - backgroundColor: '#FFFFFF', - paddingVertical: 16, - borderRadius: 30, - alignItems: 'center', - borderWidth: 1, - borderColor: '#E2E8F0', - }, - secondaryButtonText: { - fontSize: 16, - fontWeight: '600', - }, -}); diff --git a/app/landing.tsx b/app/landing.tsx index 31bafae..57bc582 100644 --- a/app/landing.tsx +++ b/app/landing.tsx @@ -1,190 +1,58 @@ -import React, { useState } from 'react'; +/** + * Minimal landing screen for the AC2 reference controller. + * + * Surface is intentionally tiny: + * - identifies the controller by its first identity DID, + * - links to `scan` to pair a new Liquid Auth session, + * - links to `connections` to chat over established DataChannels. + * + * Everything else (accounts, passkeys browser, identities browser, import, + * balance/activity cards) was removed to keep this app as a reference for + * the AC2 SDK rather than a full wallet. + */ + +import React from 'react'; import { View, Text, StyleSheet, TouchableOpacity, ScrollView } from 'react-native'; import { SafeAreaView } from 'react-native-safe-area-context'; import { useRouter } from 'expo-router'; -import Constants from 'expo-constants'; import { MaterialIcons } from '@expo/vector-icons'; import Logo from '../components/Logo'; -import { DidDocumentModal } from '@/dialogs/DidDocumentModal'; import { useProvider } from '@/hooks/useProvider'; -// Extract provider configuration from expo-constants -const config = Constants.expoConfig?.extra?.provider || { - name: 'Rocca', - primaryColor: '#3B82F6', - secondaryColor: '#E1EFFF', - accentColor: '#10B981', - welcomeMessage: 'Your identity, connected.', - showAccounts: true, - showPasskeys: true, - showIdentities: true, - showConnections: true, -}; - export default function LandingScreen() { const router = useRouter(); - const { key, identity, account, identities, accounts, passkey, passkeys, sessions } = - useProvider(); - const [modalVisible, setModalVisible] = useState(false); - + const { identities, sessions, key, account, identity, passkey } = useProvider(); const activeIdentity = identities[0]; - const activeAccount = accounts[0]; - - const { - name, - primaryColor, - secondaryColor, - accentColor, - welcomeMessage, - showAccounts, - showPasskeys, - showIdentities, - showConnections, - } = config; return ( - + - - - - - {welcomeMessage} - - - {activeAccount - ? `${activeAccount.address.slice(0, 8)}...${activeAccount.address.replace('=', '').slice(-8)}` - : `${name} Wallet`} - - + + + AC2 Reference + Liquid Auth · AC2 SDK - router.push('/scan')}> - - - - - - - - Total Balance - - - - {activeAccount ? `$${activeAccount.balance.toString()}` : '$0.00'} + + Controller DID + + {activeIdentity?.did || 'No identity found'} - - - - Send - - - - Receive - - - - Swap - - - - - - - Your Identity (DID) - setModalVisible(true)}> - View Doc - - - - - - - {activeIdentity?.did || 'No identity found'} - - - alert('DID copied!')}> - - - - {(showAccounts || showPasskeys || showIdentities || showConnections) && ( - - - Provider Services - - - {showAccounts && ( - router.push('/accounts')} - > - - - - Accounts - {accounts.length} Total - - )} - {showPasskeys && ( - router.push('/passkeys')} - > - - - - Passkeys - {passkeys.length} Total - - )} - {showIdentities && ( - router.push('/identities')} - > - - - - Identities - {identities.length} Total - - )} - {showConnections && ( - router.push('/connections')} - > - - - - Connections - {sessions.length} Total - - )} - - - )} - - - - Recent Activity - - - - - - - - Onboarding Reward - Just now - - +50 pts - - + + router.push('/scan')}> + + Pair + Scan to connect + + router.push('/connections')}> + + Connections + {sessions.length} active + - Logout & Reset Onboarding + Reset Wallet - - setModalVisible(false)} - didDocument={activeIdentity?.didDocument} - /> ); } const styles = StyleSheet.create({ - container: { - flex: 1, - }, - content: { - paddingHorizontal: 20, - paddingTop: 8, - paddingBottom: 40, - }, + container: { flex: 1, backgroundColor: '#F8FAFC' }, + content: { padding: 20, paddingTop: 8 }, header: { flexDirection: 'row', - justifyContent: 'space-between', alignItems: 'center', - marginBottom: 24, gap: 12, - }, - welcomeText: { - fontSize: 14, - color: '#64748B', - fontWeight: '500', - }, - userName: { - fontSize: 24, - fontWeight: '700', - color: '#0F172A', - }, - profileButton: { - width: 44, - height: 44, - borderRadius: 22, - backgroundColor: '#FFFFFF', - justifyContent: 'center', - alignItems: 'center', - elevation: 2, - shadowColor: '#000', - shadowOffset: { width: 0, height: 1 }, - shadowOpacity: 0.1, - shadowRadius: 2, - }, - balanceCard: { - borderRadius: 24, - padding: 24, - marginBottom: 32, - elevation: 4, - shadowColor: '#3B82F6', - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.2, - shadowRadius: 12, - }, - cardHeader: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - marginBottom: 8, - }, - balanceLabel: { - color: 'rgba(255, 255, 255, 0.8)', - fontSize: 14, - fontWeight: '600', - }, - balanceAmount: { - color: '#FFFFFF', - fontSize: 34, - fontWeight: '800', marginBottom: 24, }, - actionButtons: { - flexDirection: 'row', - gap: 12, - }, - actionButton: { - flex: 1, - backgroundColor: 'rgba(255, 255, 255, 0.2)', - paddingVertical: 12, - borderRadius: 16, - alignItems: 'center', - flexDirection: 'row', - justifyContent: 'center', - gap: 6, - }, - actionButtonText: { - color: '#FFFFFF', - fontWeight: '700', - fontSize: 14, - }, - section: { - marginBottom: 32, - }, - sectionHeader: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - marginBottom: 16, - }, - sectionTitle: { - fontSize: 18, - fontWeight: '700', - color: '#0F172A', - }, - seeAll: { - fontSize: 14, - fontWeight: '600', - }, + title: { fontSize: 22, fontWeight: '800', color: '#0F172A' }, + subtitle: { fontSize: 13, color: '#64748B', marginTop: 2 }, didCard: { backgroundColor: '#FFFFFF', - borderRadius: 20, - padding: 20, - borderWidth: 1, - borderColor: '#E2E8F0', - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - }, - didInfo: { - flexDirection: 'row', - alignItems: 'center', - gap: 10, - flex: 1, - }, - didText: { - color: '#334155', - fontFamily: 'monospace', - fontSize: 14, - fontWeight: '500', - }, - serviceGrid: { - flexDirection: 'row', - flexWrap: 'wrap', - gap: 12, - }, - serviceItem: { - width: '48%', - backgroundColor: '#FFFFFF', - borderRadius: 20, + borderRadius: 16, padding: 16, - alignItems: 'center', borderWidth: 1, borderColor: '#E2E8F0', + marginBottom: 24, }, - serviceIcon: { - width: 56, - height: 56, - borderRadius: 18, - justifyContent: 'center', - alignItems: 'center', - marginBottom: 12, - }, - serviceLabel: { - fontSize: 14, - fontWeight: '700', - color: '#0F172A', - }, - serviceSubLabel: { + cardLabel: { fontSize: 12, color: '#64748B', - marginTop: 2, + textTransform: 'uppercase', + fontWeight: '700', + marginBottom: 6, }, - activityCard: { + didText: { fontFamily: 'monospace', fontSize: 14, color: '#334155' }, + actionsRow: { flexDirection: 'row', gap: 12, marginBottom: 32 }, + actionCard: { + flex: 1, backgroundColor: '#FFFFFF', - borderRadius: 20, - padding: 4, + borderRadius: 16, + padding: 16, borderWidth: 1, borderColor: '#E2E8F0', + alignItems: 'flex-start', }, - activityItem: { - flexDirection: 'row', - alignItems: 'center', - padding: 12, - }, - activityIcon: { - width: 40, - height: 40, - borderRadius: 12, - justifyContent: 'center', - alignItems: 'center', - marginRight: 12, - }, - activityDetails: { - flex: 1, - }, - activityTitle: { - fontSize: 14, - fontWeight: '600', - color: '#0F172A', - }, - activityTime: { - fontSize: 12, - color: '#94A3B8', - }, - activityAmount: { - fontSize: 14, - fontWeight: '700', - }, + actionLabel: { fontSize: 16, fontWeight: '700', color: '#0F172A', marginTop: 10 }, + actionSub: { fontSize: 12, color: '#64748B', marginTop: 2 }, resetButton: { - marginTop: 8, - padding: 16, + padding: 14, alignItems: 'center', backgroundColor: '#F1F5F9', borderRadius: 12, - marginVertical: 4, - }, - resetButtonText: { - color: '#64748B', - fontSize: 14, - fontWeight: '500', }, + resetButtonText: { color: '#64748B', fontSize: 14, fontWeight: '500' }, }); diff --git a/app/passkeys.tsx b/app/passkeys.tsx deleted file mode 100644 index fcf0cc0..0000000 --- a/app/passkeys.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import React from 'react'; -import { StyleSheet, Text, View, ScrollView, TouchableOpacity, Alert } from 'react-native'; -import { SafeAreaView } from 'react-native-safe-area-context'; -import { Stack, useRouter } from 'expo-router'; -import { MaterialIcons } from '@expo/vector-icons'; -import { useProvider } from '@/hooks/useProvider'; - -export default function PasskeysScreen() { - const router = useRouter(); - const { passkeys, passkey: passkeyApi } = useProvider(); - const handleDelete = (id: string, name: string) => { - Alert.alert('Delete Passkey', `Are you sure you want to delete "${name}"?`, [ - { text: 'Cancel', style: 'cancel' }, - { - text: 'Delete', - style: 'destructive', - onPress: async () => { - try { - await passkeyApi.store.removePasskey(id); - } catch (error) { - console.error('Failed to remove passkey:', error); - Alert.alert('Error', 'Failed to remove passkey'); - } - }, - }, - ]); - }; - - return ( - - ( - router.back()} style={{ marginLeft: 10 }}> - - - ), - }} - /> - - - Your Passkeys - - {passkeys.map((passkey, index) => ( - - - - - - - {passkey.name} - - {passkey.userHandle && ( - - User: {passkey.userHandle} - - )} - {passkey.origin && ( - - Origin: {passkey.origin} - - )} - - ID: {passkey.id} - - - Created:{' '} - {passkey.createdAt ? new Date(passkey.createdAt).toLocaleDateString() : 'N/A'} - - - handleDelete(passkey.id, passkey.name)} - style={styles.deleteButton} - > - - - - ))} - {passkeys.length === 0 && No passkeys found} - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F8FAFC', - }, - content: { - padding: 20, - }, - section: { - marginBottom: 32, - }, - sectionTitle: { - fontSize: 14, - color: '#64748B', - fontWeight: '600', - marginBottom: 8, - textTransform: 'uppercase', - }, - list: { - gap: 12, - }, - card: { - backgroundColor: '#FFFFFF', - borderRadius: 20, - padding: 16, - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: '#E2E8F0', - }, - iconContainer: { - width: 48, - height: 48, - borderRadius: 24, - backgroundColor: '#ECFDF5', - justifyContent: 'center', - alignItems: 'center', - marginRight: 16, - }, - details: { - flex: 1, - }, - passkeyName: { - fontSize: 16, - fontWeight: '700', - color: '#0F172A', - marginBottom: 2, - }, - detailText: { - fontSize: 13, - color: '#475569', - marginBottom: 2, - }, - credentialId: { - fontSize: 13, - color: '#64748B', - marginBottom: 2, - }, - date: { - fontSize: 12, - color: '#94A3B8', - }, - deleteButton: { - padding: 8, - marginLeft: 8, - }, - emptyText: { - textAlign: 'center', - color: '#94A3B8', - marginTop: 20, - }, -}); diff --git a/dialogs/DidDocumentModal.tsx b/dialogs/DidDocumentModal.tsx deleted file mode 100644 index 784d27d..0000000 --- a/dialogs/DidDocumentModal.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, StyleSheet, TouchableOpacity, Alert } from 'react-native'; -import { MaterialIcons } from '@expo/vector-icons'; -import * as DocumentPicker from 'expo-document-picker'; -import JSONTree from 'react-native-json-tree'; -import Modal from '../components/Modal'; -import type { DIDDocument } from '@algorandfoundation/identities-store'; -import { exportDidDocument, importDidDocument } from '@/utils/did-backup'; -import { useProvider } from '@/hooks/useProvider'; - -interface DidDocumentModalProps { - visible: boolean; - onClose: () => void; - didDocument: DIDDocument | undefined; - onDidDocumentUpdate?: (didDocument: DIDDocument) => void; -} - -export function DidDocumentModal({ - visible, - onClose, - didDocument, - onDidDocumentUpdate, -}: DidDocumentModalProps) { - const [isLoading, setIsLoading] = useState(false); - const { identity } = useProvider(); - - const handleExport = async () => { - if (!didDocument) { - Alert.alert('Error', 'No DID Document to export'); - return; - } - - setIsLoading(true); - try { - await exportDidDocument(didDocument); - } catch (error) { - Alert.alert('Export Failed', error instanceof Error ? error.message : 'Unknown error'); - } finally { - setIsLoading(false); - } - }; - - const handleImport = async () => { - if (!didDocument) { - Alert.alert('Error', 'No current DID Document to validate against'); - return; - } - - try { - const result = await DocumentPicker.getDocumentAsync({ - type: 'application/json', - copyToCacheDirectory: true, - }); - - if (result.canceled) { - return; - } - - const file = result.assets[0]; - - setIsLoading(true); - const importedDoc = await importDidDocument(file.uri, didDocument.id); - - Alert.alert( - 'Import Successful', - 'DID Document imported successfully. Replace current document?', - [ - { text: 'Cancel', style: 'cancel' }, - { - text: 'Replace', - style: 'default', - onPress: async () => { - try { - await identity.store.restoreFromDidDocument(importedDoc); - onDidDocumentUpdate?.(importedDoc); - } catch (error) { - Alert.alert( - 'Restore Failed', - error instanceof Error ? error.message : 'Unknown error', - ); - } - }, - }, - ], - ); - } catch (error) { - Alert.alert('Import Failed', error instanceof Error ? error.message : 'Unknown error'); - } finally { - setIsLoading(false); - } - }; - - return ( - - {didDocument ? ( - - - - - - - Export - - - - - Import - - - - ) : ( - No DID Document available - )} - - ); -} - -const styles = StyleSheet.create({ - noDocText: { - fontSize: 14, - color: '#64748B', - textAlign: 'center', - marginTop: 20, - }, - actionButtons: { - flexDirection: 'row', - justifyContent: 'space-around', - marginTop: 24, - paddingTop: 20, - borderTopWidth: 2, - borderTopColor: '#E2E8F0', - paddingBottom: 20, - }, - actionButton: { - flexDirection: 'row', - alignItems: 'center', - paddingHorizontal: 24, - paddingVertical: 14, - borderRadius: 12, - backgroundColor: '#EFF6FF', - borderWidth: 1, - borderColor: '#3B82F6', - minWidth: 120, - justifyContent: 'center', - }, - actionButtonText: { - marginLeft: 10, - fontSize: 16, - fontWeight: '700', - color: '#1D4ED8', - }, -}); - -export default DidDocumentModal; diff --git a/hooks/useConnection.ts b/hooks/useConnection.ts index 7b354df..2647ffb 100644 --- a/hooks/useConnection.ts +++ b/hooks/useConnection.ts @@ -2,6 +2,10 @@ import { useProvider } from '@/hooks/useProvider'; import { accountsStore } from '@/stores/accounts'; import { keyStore } from '@/stores/keystore'; import { addMessage } from '@/stores/messages'; +import { addAc2Message } from '@/stores/ac2Messages'; +import { Ac2Client } from '@algorandfoundation/ac2-sdk'; +import { rtcDataChannelTransport } from '@algorandfoundation/ac2-sdk/transport'; +import type { AC2BaseMessage as Ac2Message } from '@algorandfoundation/ac2-sdk/schema'; import { addSession, Session, @@ -14,11 +18,9 @@ import { toUrlSafe } from '@/utils/base64'; import type { KeyData } from '@algorandfoundation/keystore'; import { encodeAddress } from '@algorandfoundation/keystore'; import { - decodeAssertionRequestOptions, - encodeCredential, - fromBase64Url, + assertion, + encoding, SignalClient, - toBase64URL, } from '@algorandfoundation/liquid-client'; import { commit, fetchSecret, getMasterKey } from '@algorandfoundation/react-native-keystore'; import { useStore } from '@tanstack/react-store'; @@ -29,7 +31,22 @@ import { Alert, NativeModules } from 'react-native'; interface UseConnectionResult { session: Session | undefined; address: string | null; + /** Send a free-text chat message over the DataChannel. */ send: (text: string) => void; + /** + * Send an AC2 protocol message (validated DIDComm v2 envelope) over the + * same DataChannel. Use this for the signing trio and any extension + * message type. The envelope is mirrored into the `ac2Messages` store as + * `outbound`. + */ + sendAc2: (message: Ac2Message) => void; + /** + * Underlying `Ac2Client` (from `@ac2/ac2-sdk`) bound to the active + * DataChannel. `null` until the channel is open. Use this for + * `requestSignature` and other typed helpers. + */ + ac2Client: Ac2Client | null; + activeStreamText: string; error: Error | null; isError: boolean; isLoading: boolean; @@ -55,19 +72,46 @@ export function useConnection(origin: string, requestId: string): UseConnectionR const [error, setError] = useState(null); const dataChannelRef = useRef(null); + const streamChannelRef = useRef(null); const clientRef = useRef(null); const lastUserActivityRef = useRef(Date.now()); const authFlowInProgressRef = useRef(false); + const [activeStreamText, setActiveStreamText] = useState(''); + + // AC2 SDK wiring — bound to the active DataChannel once it opens. The + // SDK's `rtcDataChannelTransport` owns the channel's `onmessage` / + // `onopen` / `onclose` / `onerror` callbacks, splitting AC2 JSON + // envelopes (delivered via `transport.onMessage`) from free-text chat + // frames (delivered via `transport.onRawMessage`). + const [ac2Client, setAc2Client] = useState(null); + const ac2ClientRef = useRef(null); + const session = useStore(sessionsStore, (state) => state.sessions.find((s) => s.id === requestId && s.origin === origin), ); const reset = useCallback(() => { + if (ac2ClientRef.current) { + // Closing the client closes the underlying transport, which closes + // the DataChannel. Guard against double-close below. + try { + ac2ClientRef.current.close(); + } catch { + /* noop */ + } + ac2ClientRef.current = null; + setAc2Client(null); + } if (dataChannelRef.current) { dataChannelRef.current.close(); dataChannelRef.current = null; } + if (streamChannelRef.current) { + streamChannelRef.current.close(); + streamChannelRef.current = null; + } + setActiveStreamText(''); setIsConnected(false); setIsLoading(false); setError(null); @@ -76,13 +120,14 @@ export function useConnection(origin: string, requestId: string): UseConnectionR const send = useCallback( (text: string) => { + const channel = streamChannelRef.current || dataChannelRef.current; if ( text.trim() && - dataChannelRef.current && - dataChannelRef.current.readyState === 'open' && + channel && + channel.readyState === 'open' && address ) { - dataChannelRef.current.send(text.trim()); + channel.send(text.trim()); addMessage({ text: text.trim(), sender: 'me', @@ -97,6 +142,26 @@ export function useConnection(origin: string, requestId: string): UseConnectionR [requestId, origin, address], ); + const sendAc2 = useCallback( + (message: Ac2Message) => { + const client = ac2ClientRef.current; + if (!client) { + throw new Error('AC2 client not ready (DataChannel not open)'); + } + client.send(message); + addAc2Message({ + origin, + requestId, + address: address ?? '', + direction: 'outbound', + envelope: message, + }); + updateSessionActivity(requestId, origin); + lastUserActivityRef.current = Date.now(); + }, + [origin, requestId, address], + ); + useEffect(() => { let active = true; let heartbeatInterval: any = null; @@ -252,7 +317,7 @@ export function useConnection(origin: string, requestId: string): UseConnectionR const options = await optionsResponse.json(); if (!active) return; - const decodedOptions = decodeAssertionRequestOptions(options); + const decodedOptions = assertion.encoder.decodeOptions(options); // Ensure all relevant passkeys are allowed in the options to allow user selection in the intent if (relevantPasskeys.length > 1) { @@ -261,27 +326,27 @@ export function useConnection(origin: string, requestId: string): UseConnectionR } const existingIds = new Set( decodedOptions.allowCredentials.map((c) => - toBase64URL(new Uint8Array(c.id as ArrayBuffer)), + encoding.toBase64URL(new Uint8Array(c.id as ArrayBuffer)), ), ); relevantPasskeys.forEach((p) => { if (!existingIds.has(p.id)) { decodedOptions.allowCredentials!.push({ - id: fromBase64Url(p.id), + id: encoding.fromBase64Url(p.id), type: 'public-key', }); } }); } - const challenge = fromBase64Url(options.challenge); + const challenge = encoding.fromBase64Url(options.challenge); const liquidOptions = { requestId, origin, type: 'algorand', address: encodeAddress(foundKey?.publicKey), - signature: toBase64URL(await key.store.sign(foundKey.id, challenge)), + signature: encoding.toBase64URL(await key.store.sign(foundKey.id, challenge)), device: 'Demo Web Wallet', }; @@ -345,7 +410,7 @@ export function useConnection(origin: string, requestId: string): UseConnectionR if (selectedKey) { console.log('Found key for selected address, re-signing challenge'); - liquidOptions.signature = toBase64URL( + liquidOptions.signature = encoding.toBase64URL( await key.store.sign(selectedKey.id, challenge), ); } else { @@ -353,13 +418,11 @@ export function useConnection(origin: string, requestId: string): UseConnectionR } } - const encodedCredential = encodeCredential(credential); - //@ts-ignore + const encodedCredential = assertion.encoder.encodeCredential(credential); encodedCredential.clientExtensionResults = { - //@ts-ignore ...encodedCredential.clientExtensionResults, liquid: liquidOptions, - }; + } as any; const submitResponse = await fetch(`${origin}/assertion/response`, { method: 'POST', @@ -420,14 +483,14 @@ export function useConnection(origin: string, requestId: string): UseConnectionR const encodedAttestationOptions = await optionsResponse.json(); if (!active) return; - const challenge = fromBase64Url(encodedAttestationOptions.challenge); + const challenge = encoding.fromBase64Url(encodedAttestationOptions.challenge); const liquidOptions = { requestId, origin: origin, type: 'algorand', address: encodeAddress(foundKey?.publicKey), - signature: toBase64URL(await key.store.sign(foundKey.id, challenge)), + signature: encoding.toBase64URL(await key.store.sign(foundKey.id, challenge)), device: 'Demo Web Wallet', }; @@ -439,10 +502,10 @@ export function useConnection(origin: string, requestId: string): UseConnectionR name: liquidOptions.address, displayName: liquidOptions.address, }, - challenge: fromBase64Url(encodedAttestationOptions.challenge), + challenge: encoding.fromBase64Url(encodedAttestationOptions.challenge), excludeCredentials: encodedAttestationOptions.excludeCredentials?.map((cred: any) => ({ ...cred, - id: fromBase64Url(cred.id), + id: encoding.fromBase64Url(cred.id), })), }; @@ -462,11 +525,11 @@ export function useConnection(origin: string, requestId: string): UseConnectionR const response = credential.response; const encodedCredential = { id: credential.id, - rawId: toBase64URL(credential.rawId), + rawId: encoding.toBase64URL(credential.rawId), type: credential.type, response: { - clientDataJSON: toBase64URL(response.clientDataJSON), - attestationObject: toBase64URL(response.attestationObject), + clientDataJSON: encoding.toBase64URL(response.clientDataJSON), + attestationObject: encoding.toBase64URL(response.attestationObject), clientExtensionResults: response.clientExtensionResults || {}, }, clientExtensionResults: { @@ -548,6 +611,40 @@ export function useConnection(origin: string, requestId: string): UseConnectionR //@ts-ignore client.authenticated = true; + client.on('data-channel', (channel: RTCDataChannel) => { + console.log(`[ac2] Discovered channel: ${channel.label}`); + if (channel.label === 'ac2-stream') { + streamChannelRef.current = channel; + + let streamTimeout: ReturnType; + channel.onmessage = (event) => { + if (!active) return; + const raw = event.data; + if (typeof raw === 'string') { + setActiveStreamText((prev) => prev + raw); + if (streamTimeout) clearTimeout(streamTimeout); + streamTimeout = setTimeout(() => { + setActiveStreamText((currentText) => { + if (currentText.trim() && addressRef.current) { + addMessage({ + text: currentText.trim(), + sender: 'peer', + address: addressRef.current, + origin, + requestId, + }); + } + return ''; + }); + }, 1500); + } + }; + + channel.onopen = () => console.log('Stream channel opened'); + channel.onclose = () => console.log('Stream channel closed'); + } + }); + const datachannel = await client.peer(requestId, 'answer', { iceServers: [ { @@ -562,6 +659,11 @@ export function useConnection(origin: string, requestId: string): UseConnectionR credential: 'sqmcP4MiTKMT4TGEDSk9jgHY', }, ], + }, { + dataChannels: { + 'ac2-v1': { ordered: true }, + 'ac2-stream': { ordered: true }, + } }); if (!active) { @@ -571,44 +673,87 @@ export function useConnection(origin: string, requestId: string): UseConnectionR dataChannelRef.current = datachannel; - datachannel.onopen = () => { + // Wrap the real RTCDataChannel with the SDK's transport adapter. + // Now that liquid-auth-js (canary.6+) supports requesting channels + // by spec-mandated label (`ac2-v1`), the adapter accepts the raw + // channel directly — no wrapper, no label rewrite. `onMessage` + // delivers parsed AC2 envelopes; `onRawMessage` delivers plain-text + // chat frames; the SDK validates JSON shape internally. + // React Native's `RTCDataChannel` (from `react-native-webrtc`) + // structurally satisfies the SDK's `RtcDataChannelLike` at + // runtime, but its event-handler signatures differ slightly from + // the DOM lib types TypeScript checks against. The cast bridges + // that gap without changing behavior. + const ac2Transport = rtcDataChannelTransport( + datachannel as unknown as Parameters[0], + ); + + const ac2 = new Ac2Client(ac2Transport); + ac2ClientRef.current = ac2; + + // NOTE: Wallet-side responders (`ac2.onSigningRequest` / + // `ac2.onKeyRequest`) are intentionally NOT installed here. + // Inbound `SigningRequest` / `KeyRequest` envelopes are mirrored + // into the `ac2MessagesStore` via `ac2Transport.onMessage` below, + // and the chat UI (`app/chat.tsx`) handles approve/reject + // interactively against the user-visible store entry. Installing + // a responder here would race with that interactive flow. + + // Mirror inbound AC2 envelopes into the ac2Messages store so the + // wallet UI can render them. Responders (above) still run via the + // type-keyed dispatcher; this is a side-channel for observability. + ac2Transport.onMessage((envelope: Ac2Message) => { + addAc2Message({ + origin, + requestId, + address: addressRef.current ?? '', + direction: 'inbound', + envelope, + }); + updateSessionActivity(requestId, origin); + lastUserActivityRef.current = Date.now(); + setLastHeartbeat(Date.now()); + }); + + // Free-text chat frames bypass the AC2 framing and land here. + ac2Transport.onRawMessage?.((raw: string) => { + if (!raw.trim() || !addressRef.current) return; + addMessage({ + text: raw.trim(), + sender: 'peer', + address: addressRef.current, + origin, + requestId, + }); + updateSessionActivity(requestId, origin); + lastUserActivityRef.current = Date.now(); + setLastHeartbeat(Date.now()); + }); + + ac2Transport.onError((e: Error) => { + console.warn('[AC2] client error:', e.message); + }); + + ac2Transport.onOpen(() => { console.log('Data channel opened'); if (active) { setIsConnected(true); setIsLoading(false); + setAc2Client(ac2); updateSessionStatus(requestId, origin, 'active'); } - }; - - datachannel.onmessage = (event) => { - if (!active) return; - console.log('Received message:', event.data); - updateSessionActivity(requestId, origin); - lastUserActivityRef.current = Date.now(); - setLastHeartbeat(Date.now()); - if (event.data && event.data.trim() && addressRef.current) { - addMessage({ - text: event.data.trim(), - sender: 'peer', - address: addressRef.current, - origin, - requestId, - }); - } - }; + }); - datachannel.onclose = () => { + ac2Transport.onClose(() => { console.log('Data channel closed'); updateSessionStatus(requestId, origin, 'closed'); if (active) { setIsConnected(false); + setAc2Client(null); + ac2ClientRef.current = null; router.back(); } - }; - - datachannel.onerror = (error) => { - console.error('Data channel error:', error); - }; + }); } catch (err: any) { console.error('Failed to setup connection:', err); clientRef.current = null; @@ -631,6 +776,14 @@ export function useConnection(origin: string, requestId: string): UseConnectionR return () => { active = false; + if (ac2ClientRef.current) { + try { + ac2ClientRef.current.close(); + } catch { + /* noop */ + } + ac2ClientRef.current = null; + } if (dataChannelRef.current) { dataChannelRef.current.close(); dataChannelRef.current = null; @@ -646,6 +799,9 @@ export function useConnection(origin: string, requestId: string): UseConnectionR session, address, send, + sendAc2, + ac2Client, + activeStreamText, error, isError: !!error, isLoading, diff --git a/package.json b/package.json index d284aff..d297a5a 100644 --- a/package.json +++ b/package.json @@ -31,13 +31,14 @@ "export": "expo export" }, "dependencies": { + "@algorandfoundation/ac2-sdk": "workspace:*", "@algorandfoundation/accounts-keystore-extension": "^1.0.0-canary.4", "@algorandfoundation/accounts-store": "^1.0.0-canary.2", "@algorandfoundation/identities-extension": "^1.0.0-canary.1", "@algorandfoundation/identities-keystore-extension": "^1.0.0-canary.1", "@algorandfoundation/identities-store": "^1.0.0-canary.1", "@algorandfoundation/keystore": "^1.0.0-canary.15", - "@algorandfoundation/liquid-client": "1.0.0-canary.3", + "@algorandfoundation/liquid-client": "workspace:*", "@algorandfoundation/log-store": "^1.0.0-canary.3", "@algorandfoundation/react-native-keystore": "^1.0.0-canary.11", "@algorandfoundation/react-native-passkey-autofill": "^1.0.0-canary.15", diff --git a/packages/liquid-auth-js b/packages/liquid-auth-js new file mode 160000 index 0000000..815791b --- /dev/null +++ b/packages/liquid-auth-js @@ -0,0 +1 @@ +Subproject commit 815791bd8449fefda55723fca49182709a6b9258 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cb9b1a7..93e0092 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@algorandfoundation/ac2-sdk': + specifier: workspace:* + version: link:packages/ac2-sdk '@algorandfoundation/accounts-keystore-extension': specifier: ^1.0.0-canary.4 version: 1.0.0-canary.5(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0) @@ -27,8 +30,8 @@ importers: specifier: ^1.0.0-canary.15 version: 1.0.0-canary.16(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0) '@algorandfoundation/liquid-client': - specifier: 1.0.0-canary.3 - version: 1.0.0-canary.3 + specifier: workspace:* + version: link:packages/liquid-auth-js '@algorandfoundation/log-store': specifier: ^1.0.0-canary.3 version: 1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0) @@ -240,7 +243,113 @@ importers: version: 5.8.3 vitest: specifier: ^3.2.0 - version: 3.2.4(@types/node@22.19.19)(jsdom@20.0.3(canvas@2.11.2))(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + version: 3.2.4(@types/node@22.19.19)(@vitest/browser@3.2.6)(jsdom@20.0.3(canvas@2.11.2))(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + + packages/liquid-auth-js: + dependencies: + '@algorandfoundation/algokit-utils': + specifier: ^10.0.0-alpha.40 + version: 10.0.0-beta.4 + eventemitter3: + specifier: ^5.0.1 + version: 5.0.4 + qr-code-styling: + specifier: ^1.9.2 + version: 1.9.2 + socket.io-client: + specifier: ^4.7.5 + version: 4.8.3 + uuid: + specifier: ^10.0.0 + version: 10.0.0 + devDependencies: + '@codecov/vite-plugin': + specifier: ^1.9.0 + version: 1.9.1(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + '@semantic-release/changelog': + specifier: ^6.0.3 + version: 6.0.3(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/commit-analyzer': + specifier: ^12.0.0 + version: 12.0.0(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/git': + specifier: ^10.0.1 + version: 10.0.1(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/github': + specifier: ^10.0.3 + version: 10.3.5(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/npm': + specifier: ^12.0.0 + version: 12.0.2(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/release-notes-generator': + specifier: ^13.0.0 + version: 13.0.0(semantic-release@23.1.1(typescript@5.9.3)) + '@simplewebauthn/browser': + specifier: ^13.2.2 + version: 13.3.0 + '@types/qrcode': + specifier: ^1.5.5 + version: 1.5.6 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + '@vitest/browser': + specifier: ^3.0.8 + version: 3.2.6(playwright@1.60.0)(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.4) + '@vitest/coverage-v8': + specifier: ^3.0.8 + version: 3.2.6(@vitest/browser@3.2.6)(vitest@3.2.4) + concurrently: + specifier: ^9.1.2 + version: 9.2.1 + glob: + specifier: ^11.0.1 + version: 11.1.0 + http-server: + specifier: ^14.1.1 + version: 14.1.1 + nodemon: + specifier: ^3.1.9 + version: 3.1.14 + oxfmt: + specifier: ^0.36.0 + version: 0.36.0 + oxlint: + specifier: ^1.51.0 + version: 1.67.0 + playwright: + specifier: ^1.51.0 + version: 1.60.0 + semantic-release: + specifier: ^23.0.8 + version: 23.1.1(typescript@5.9.3) + socket.io-mock-ts: + specifier: ^1.0.2 + version: 1.0.3 + typedoc: + specifier: ^0.28.17 + version: 0.28.19(typescript@5.9.3) + typedoc-plugin-markdown: + specifier: ^4.10.0 + version: 4.12.0(typedoc@0.28.19(typescript@5.9.3)) + typescript: + specifier: ^5.9.3 + version: 5.9.3 + vite: + specifier: ^6.2.2 + version: 6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + vite-bundle-analyzer: + specifier: ^0.18.0 + version: 0.18.1 + vite-plugin-dts: + specifier: ^4.5.3 + version: 4.5.4(@types/node@22.19.19)(rollup@4.60.4)(typescript@5.9.3)(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + vitest: + specifier: ^3.0.8 + version: 3.2.4(@types/node@22.19.19)(@vitest/browser@3.2.6)(jsdom@20.0.3(canvas@2.11.2))(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + wait-on: + specifier: ^8.0.3 + version: 8.0.5 packages: @@ -252,6 +361,21 @@ packages: graphql: optional: true + '@actions/core@1.11.1': + resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} + + '@actions/exec@1.1.1': + resolution: {integrity: sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==} + + '@actions/github@6.0.1': + resolution: {integrity: sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==} + + '@actions/http-client@2.2.3': + resolution: {integrity: sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA==} + + '@actions/io@1.1.3': + resolution: {integrity: sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==} + '@algorandfoundation/accounts-keystore-extension@1.0.0-canary.5': resolution: {integrity: sha512-ExbgcGfPrIulXPlitrsXRPSnITK0OPiTVOhY6Fqwd0GJYuOadnTFXEzcrjFfWwngDbuLDR7+5tUkvp33jFeW3A==} peerDependencies: @@ -272,6 +396,10 @@ packages: '@algorandfoundation/log-store': optional: true + '@algorandfoundation/algokit-utils@10.0.0-beta.4': + resolution: {integrity: sha512-+X06PW7w2zWJWPp91pHoLMQizrq7E33Y1Mj/Hz/hkLiASXWwMKVX5QsQCbvsMYk+guqayCwB6782VngLR8d1RA==} + engines: {node: '>=22.0'} + '@algorandfoundation/dp256@1.1.0': resolution: {integrity: sha512-s+ZQG3WK6eWskfmjh0bbMImyO+SIR297s+7vQoercbM0hYvilzTBT/rEcvs4ZQxU6TxkTXLq4BRj1USjGFpsCA==} @@ -313,19 +441,12 @@ packages: '@algorandfoundation/log-store': optional: true - '@algorandfoundation/liquid-client@1.0.0-canary.3': - resolution: {integrity: sha512-QbHKeGPjx2RMNh29PSoVr9i98KVn593dppoS7jjqgum5kFobxGZ8kfpEEbOSGbt6qzw1vfL4iM2yhl4g5kAasg==} - '@algorandfoundation/log-store@1.0.0-canary.3': resolution: {integrity: sha512-5v6NqxtQJKljITNflLS4O6b5i3fhkiZjr+dLuEmeo8eDUSN6Mcwp2LbT3D1P7RpFGBu1T9FmUD0qxTJNXpn0Ew==} peerDependencies: '@tanstack/store': 0.9.3 before-after-hook: 4.0.0 - '@algorandfoundation/qr-code-styling@https://codeload.github.com/algorandfoundation/qr-code-styling/tar.gz/ce8541ee1cb3b0ab2acd9926f3092d4ab217e276': - resolution: {tarball: https://codeload.github.com/algorandfoundation/qr-code-styling/tar.gz/ce8541ee1cb3b0ab2acd9926f3092d4ab217e276} - version: 0.0.1 - '@algorandfoundation/react-native-keystore@1.0.0-canary.11': resolution: {integrity: sha512-3LpZ1EaKOm0HimnEMNclmrRIrgGEAYChPZ+eM2bAaf3nsTcKj/67Rbwe0K+eaLwYXbuN2+guozrAGRM94Lq9aw==} peerDependencies: @@ -360,6 +481,10 @@ packages: '@algorandfoundation/xhd-wallet-api@2.0.0-canary.1': resolution: {integrity: sha512-U6rSWMO6FKDLvMxWtfKyW5ctqSy2NrONWTU/jOA+BX0SGru0GPXsxwzFdcPa5w+X055V/xVVsr8eA3xA+m/5jA==} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -870,6 +995,24 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@codecov/bundler-plugin-core@1.9.1': + resolution: {integrity: sha512-dt3ic7gMswz4p/qdkYPVJwXlLiLsz55rBBn2I7mr0HTG8pCoLRqnANJIwo5WrqGBZgPyVSMPBqBra6VxLWfDyA==} + engines: {node: '>=18.0.0'} + + '@codecov/vite-plugin@1.9.1': + resolution: {integrity: sha512-S6Yne7comVulJ1jD3T7rCfYFHPR0zUjAYoLjUDPXNJCUrdzWJdf/ak/UepE7TicqQG+yBa6eb5WusqcPgg+1AQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + vite: 4.x || 5.x || 6.x + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + '@config-plugins/react-native-webrtc@13.0.0': resolution: {integrity: sha512-EtRRLXmsU4GcDA3TgIxtqg++eh/CjbI6EV8N/1EFQTtaWI2lpww0fg+S0wd+ndXE0dFWaLqUFvZuyTAaAoOSeA==} peerDependencies: @@ -889,156 +1032,312 @@ packages: resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} engines: {node: '>=0.8.0'} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + '@esbuild/android-arm64@0.27.7': resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + '@esbuild/android-arm@0.27.7': resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} engines: {node: '>=18'} cpu: [arm] os: [android] + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + '@esbuild/android-x64@0.27.7': resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} engines: {node: '>=18'} cpu: [x64] os: [android] + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + '@esbuild/darwin-arm64@0.27.7': resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + '@esbuild/darwin-x64@0.27.7': resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + '@esbuild/freebsd-arm64@0.27.7': resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + '@esbuild/freebsd-x64@0.27.7': resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + '@esbuild/linux-arm64@0.27.7': resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} engines: {node: '>=18'} cpu: [arm64] os: [linux] + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + '@esbuild/linux-arm@0.27.7': resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} engines: {node: '>=18'} cpu: [arm] os: [linux] + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + '@esbuild/linux-ia32@0.27.7': resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + '@esbuild/linux-loong64@0.27.7': resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} engines: {node: '>=18'} cpu: [loong64] os: [linux] + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + '@esbuild/linux-mips64el@0.27.7': resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + '@esbuild/linux-ppc64@0.27.7': resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + '@esbuild/linux-riscv64@0.27.7': resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + '@esbuild/linux-s390x@0.27.7': resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + '@esbuild/linux-x64@0.27.7': resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} engines: {node: '>=18'} cpu: [x64] os: [linux] + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + '@esbuild/netbsd-arm64@0.27.7': resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + '@esbuild/netbsd-x64@0.27.7': resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + '@esbuild/openbsd-arm64@0.27.7': resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + '@esbuild/openbsd-x64@0.27.7': resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/openharmony-arm64@0.27.7': resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + '@esbuild/sunos-x64@0.27.7': resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + '@esbuild/win32-arm64@0.27.7': resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + '@esbuild/win32-ia32@0.27.7': resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@esbuild/win32-x64@0.27.7': resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} engines: {node: '>=18'} @@ -1290,19 +1589,47 @@ packages: resolution: {integrity: sha512-4aQzz9vgxcNXFfo/iyNgDDYfsU5XGKKxWxZopw0cVotHiW+U8IJbIxMaxsINs6bHhtkG3StKNPcOrn3eBuxKPw==} hasBin: true + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + '@gerrit0/mini-shiki@3.23.0': resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} + '@hapi/address@5.1.1': + resolution: {integrity: sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==} + engines: {node: '>=14.0.0'} + + '@hapi/formula@3.0.2': + resolution: {integrity: sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==} + + '@hapi/hoek@11.0.7': + resolution: {integrity: sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==} + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + '@hapi/pinpoint@2.0.1': + resolution: {integrity: sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==} + + '@hapi/tlds@1.1.6': + resolution: {integrity: sha512-xdi7A/4NZokvV0ewovme3aUO5kQhW9pQ2YD1hRqZGhhSi5rBv4usHYidVocXSi9eihYsznZxLtAiEYYUL6VBGw==} + engines: {node: '>=14.0.0'} + '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + '@hapi/topo@6.0.2': + resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/cliui@9.0.0': + resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} + engines: {node: '>=18'} + '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -1439,6 +1766,19 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true + '@microsoft/api-extractor-model@7.33.8': + resolution: {integrity: sha512-aIcoQggPyer3B6Ze3usz0YWC/oBwUHfRH5ETUsr+oT2BRA6SfTJl7IKPcPZkX4UR+PohowzW4uMxsvjrn8vm+w==} + + '@microsoft/api-extractor@7.58.7': + resolution: {integrity: sha512-yK6OycD46gIzLRpj6ueVUWPk1ACSpkN1LBo05gY1qPTylbWyUCanXfH7+VgkI5LJrJoRSQR5F04XuCffCXLOBw==} + hasBin: true + + '@microsoft/tsdoc-config@0.18.1': + resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==} + + '@microsoft/tsdoc@0.16.0': + resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==} + '@noble/ciphers@2.2.0': resolution: {integrity: sha512-Z6pjIZ/8IJcCGzb2S/0Px5J81yij85xASuk1teLNeg75bfT07MV3a/O2Mtn1I2se43k3lkVEcFaR10N4cgQcZA==} engines: {node: '>= 20.19.0'} @@ -1451,6 +1791,9 @@ packages: resolution: {integrity: sha512-T/BoHgFXirb0ENSPBquzX0rcjXeM6Lo892a2jlYJkqk83LqZx0l1Of7DzlKJ6jkpvMrkHSnAcgb5JegL8SeIkQ==} engines: {node: '>= 20.19.0'} + '@noble/ed25519@3.1.0': + resolution: {integrity: sha512-pfcObRY3CtvwfaG9Mt5XqZdKmAQppl37tHUeuBhDUbiwJBCVY4/A4lbMvb1xKhMDx96AqAqZpMWuBX1HulhX4g==} + '@noble/hashes@1.8.0': resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} @@ -1487,114 +1830,324 @@ packages: resolution: {integrity: sha512-SQRIJSYue/1tIn7X55W/97gTb8UkSoHeFAcBng2r2YMJyWj8uB1DtFl28D8BDXPQXPTiPK89hQGejoT7RdkR2w==} engines: {node: '>=18.0.0'} + '@octokit/auth-token@4.0.0': + resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + engines: {node: '>= 18'} + + '@octokit/auth-token@5.1.2': + resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} + engines: {node: '>= 18'} + + '@octokit/core@5.2.2': + resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.6': + resolution: {integrity: sha512-kIU8SLQkYWGp3pVKiYzA5OSaNF5EE03P/R8zEmmrG6XwOg5oBjXyQVVIauQ0dgau4zYhpZEhJrvIYt6oM+zZZA==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.4': + resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==} + engines: {node: '>= 18'} + + '@octokit/endpoint@9.0.6': + resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==} + engines: {node: '>= 18'} + + '@octokit/graphql@7.1.1': + resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.2.2': + resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@20.0.0': + resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} + + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} + + '@octokit/openapi-types@25.1.0': + resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} + + '@octokit/plugin-paginate-rest@11.6.0': + resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-paginate-rest@9.2.2': + resolution: {integrity: sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-rest-endpoint-methods@10.4.1': + resolution: {integrity: sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '5' + + '@octokit/plugin-retry@7.2.1': + resolution: {integrity: sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-throttling@9.6.1': + resolution: {integrity: sha512-bt3EBUkeKUzDQXRCcFrR9SWVqlLFRRqcCrr6uAorWt6NXTyjMKqcGrFmXqJy9NCbnKgiIZ2OXWq04theFc76Jg==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': ^6.1.3 + + '@octokit/request-error@5.1.1': + resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==} + engines: {node: '>= 18'} + + '@octokit/request-error@6.1.8': + resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} + engines: {node: '>= 18'} + + '@octokit/request@8.4.1': + resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==} + engines: {node: '>= 18'} + + '@octokit/request@9.2.4': + resolution: {integrity: sha512-q8ybdytBmxa6KogWlNa818r0k1wlqzNC+yNkcQDECHvQo8Vmstrg18JwqJHdJdUiHD2sjlwBgSm9kHkOKe2iyA==} + engines: {node: '>= 18'} + + '@octokit/types@12.6.0': + resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} + + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + + '@octokit/types@14.1.0': + resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} + + '@oxfmt/binding-android-arm-eabi@0.36.0': + resolution: {integrity: sha512-Z4yVHJWx/swHHjtr0dXrBZb6LxS+qNz1qdza222mWwPTUK4L790+5i3LTgjx3KYGBzcYpjaiZBw4vOx94dH7MQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + '@oxfmt/binding-android-arm-eabi@0.44.0': resolution: {integrity: sha512-5UvghMd9SA/yvKTWCAxMAPXS1d2i054UeOf4iFjZjfayTwCINcC3oaSXjtbZfCaEpxgJod7XiOjTtby5yEv/BQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] + '@oxfmt/binding-android-arm64@0.36.0': + resolution: {integrity: sha512-3ElCJRFNPQl7jexf2CAa9XmAm8eC5JPrIDSjc9jSchkVSFTEqyL0NtZinBB2h1a4i4JgP1oGl/5G5n8YR4FN8Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + '@oxfmt/binding-android-arm64@0.44.0': resolution: {integrity: sha512-IVudM1BWfvrYO++Khtzr8q9n5Rxu7msUvoFMqzGJVdX7HfUXUDHwaH2zHZNB58svx2J56pmCUzophyaPFkcG/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] + '@oxfmt/binding-darwin-arm64@0.36.0': + resolution: {integrity: sha512-nak4znWCqIExKhYSY/mz/lWsqWIpdsS7o0+SRzXR1Q0m7GrMcG1UrF1pS7TLGZhhkf7nTfEF7q6oZzJiodRDuw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + '@oxfmt/binding-darwin-arm64@0.44.0': resolution: {integrity: sha512-eWCLAIKAHfx88EqEP1Ga2yz7qVcqDU5lemn4xck+07bH182hDdprOHjbogyk0In1Djys3T0/pO2JepFnRJ41Mg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] + '@oxfmt/binding-darwin-x64@0.36.0': + resolution: {integrity: sha512-V4GP96thDnpKx6ADnMDnhIXNdtV+Ql9D4HUU+a37VTeVbs5qQSF/s6hhUP1b3xUqU7iRcwh72jUU2Y12rtGHAw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + '@oxfmt/binding-darwin-x64@0.44.0': resolution: {integrity: sha512-eHTBznHLM49++dwz07MblQ2cOXyIgeedmE3Wgy4ptUESj38/qYZyRi1MPwC9olQJWssMeY6WI3UZ7YmU5ggvyQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] + '@oxfmt/binding-freebsd-x64@0.36.0': + resolution: {integrity: sha512-/xapWCADfI5wrhxpEUjhI9fnw7MV5BUZizVa8e24n3VSK6A3Y1TB/ClOP1tfxNspykFKXp4NBWl6NtDJP3osqQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + '@oxfmt/binding-freebsd-x64@0.44.0': resolution: {integrity: sha512-jLMmbj0u0Ft43QpkUVr/0v1ZfQCGWAvU+WznEHcN3wZC/q6ox7XeSJtk9P36CCpiDSUf3sGnzbIuG1KdEMEDJQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] + '@oxfmt/binding-linux-arm-gnueabihf@0.36.0': + resolution: {integrity: sha512-1lOmv61XMFIH5uNm27620kRRzWt/RK6tdn250BRDoG9W7OXGOQ5UyI1HVT+SFkoOoKztBiinWgi68+NA1MjBVQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxfmt/binding-linux-arm-gnueabihf@0.44.0': resolution: {integrity: sha512-n+A/u/ByK1qV8FVGOwyaSpw5NPNl0qlZfgTBqHeGIqr8Qzq1tyWZ4lAaxPoe5mZqE3w88vn3+jZtMxriHPE7tg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxfmt/binding-linux-arm-musleabihf@0.36.0': + resolution: {integrity: sha512-vMH23AskdR1ujUS9sPck2Df9rBVoZUnCVY86jisILzIQ/QQ/yKUTi7tgnIvydPx7TyB/48wsQ5QMr5Knq5p/aw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + '@oxfmt/binding-linux-arm-musleabihf@0.44.0': resolution: {integrity: sha512-5eax+FkxyCqAi3Rw0mrZFr7+KTt/XweFsbALR+B5ljWBLBl8nHe4ADrUnb1gLEfQCJLl+Ca5FIVD4xEt95AwIw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] + '@oxfmt/binding-linux-arm64-gnu@0.36.0': + resolution: {integrity: sha512-Hy1V+zOBHpBiENRx77qrUTt5aPDHeCASRc8K5KwwAHkX2AKP0nV89eL17hsZrE9GmnXFjsNmd80lyf7aRTXsbw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@oxfmt/binding-linux-arm64-gnu@0.44.0': resolution: {integrity: sha512-58l8JaHxSGOmOMOG2CIrNsnkRJAj0YcHQCmvNACniOa/vd1iRHhlPajczegzS5jwMENlqgreyiTR9iNlke8qCw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@oxfmt/binding-linux-arm64-musl@0.36.0': + resolution: {integrity: sha512-SPGLJkOIHSIC6ABUQ5V8NqJpvYhMJueJv26NYqfCnwi/Mn6A61amkpJJ9Suy0Nmvs+OWESJpcebrBUbXPGZyQQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + '@oxfmt/binding-linux-arm64-musl@0.44.0': resolution: {integrity: sha512-AlObQIXyVRZ96LbtVljtFq0JqH5B92NU+BQeDFrXWBUWlCKAM0wF5GLfIhCLT5kQ3Sl+U0YjRJ7Alqj5hGQaCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + '@oxfmt/binding-linux-ppc64-gnu@0.36.0': + resolution: {integrity: sha512-3EuoyB8x9x8ysYJjbEO/M9fkSk72zQKnXCvpZMDHXlnY36/1qMp55Nm0PrCwjGO/1pen5hdOVkz9WmP3nAp2IQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + '@oxfmt/binding-linux-ppc64-gnu@0.44.0': resolution: {integrity: sha512-YcFE8/q/BbrCiIiM5piwbkA6GwJc5QqhMQp2yDrqQ2fuVkZ7CInb1aIijZ/k8EXc72qXMSwKpVlBv1w/MsGO/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + '@oxfmt/binding-linux-riscv64-gnu@0.36.0': + resolution: {integrity: sha512-MpY3itLwpGh8dnywtrZtaZ604T1m715SydCKy0+qTxetv+IHzuA+aO/AGzrlzUNYZZmtWtmDBrChZGibvZxbRQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + '@oxfmt/binding-linux-riscv64-gnu@0.44.0': resolution: {integrity: sha512-eOdzs6RqkRzuqNHUX5C8ISN5xfGh4xDww8OEd9YAmc3OWN8oAe5bmlIqQ+rrHLpv58/0BuU48bxkhnIGjA/ATQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + '@oxfmt/binding-linux-riscv64-musl@0.36.0': + resolution: {integrity: sha512-mmDhe4Vtx+XwQPRPn/V25+APnkApYgZ23q+6GVsNYY98pf3aU0aI3Me96pbRs/AfJ1jIiGC+/6q71FEu8dHcHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + '@oxfmt/binding-linux-riscv64-musl@0.44.0': resolution: {integrity: sha512-YBgNTxntD/QvlFUfgvh8bEdwOhXiquX8gaofZJAwYa/Xp1S1DQrFVZEeck7GFktr24DztsSp8N8WtWCBwxs0Hw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + '@oxfmt/binding-linux-s390x-gnu@0.36.0': + resolution: {integrity: sha512-AYXhU+DmNWLSnvVwkHM92fuYhogtVHab7UQrPNaDf1sxadugg9gWVmcgJDlIwxJdpk5CVW/TFvwUKwI432zhhA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + '@oxfmt/binding-linux-s390x-gnu@0.44.0': resolution: {integrity: sha512-GLIh1R6WHWshl/i4QQDNgj0WtT25aRO4HNUWEoitxiywyRdhTFmFEYT2rXlcl9U6/26vhmOqG5cRlMLG3ocaIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + '@oxfmt/binding-linux-x64-gnu@0.36.0': + resolution: {integrity: sha512-H16QhhQ3usoakMleiAAQ2mg0NsBDAdyE9agUgfC8IHHh3jZEbr0rIKwjEqwbOHK5M0EmfhJmr+aGO/MgZPsneA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@oxfmt/binding-linux-x64-gnu@0.44.0': resolution: {integrity: sha512-gZOpgTlOsLcLfAF9qgpTr7FIIFSKnQN3hDf/0JvQ4CIwMY7h+eilNjxq/CorqvYcEOu+LRt1W4ZS7KccEHLOdA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@oxfmt/binding-linux-x64-musl@0.36.0': + resolution: {integrity: sha512-EFFGkixA39BcmHiCe2ECdrq02D6FCve5ka6ObbvrheXl4V+R0U/E+/uLyVx1X65LW8TA8QQHdnbdDallRekohw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + '@oxfmt/binding-linux-x64-musl@0.44.0': resolution: {integrity: sha512-1CyS9JTB+pCUFYFI6pkQGGZaT/AY5gnhHVrQQLhFba6idP9AzVYm1xbdWfywoldTYvjxQJV6x4SuduCIfP3W+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + '@oxfmt/binding-openharmony-arm64@0.36.0': + resolution: {integrity: sha512-zr/t369wZWFOj1qf06Z5gGNjFymfUNDrxKMmr7FKiDRVI1sNsdKRCuRL4XVjtcptKQ+ao3FfxLN1vrynivmCYg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + '@oxfmt/binding-openharmony-arm64@0.44.0': resolution: {integrity: sha512-bmEv70Ak6jLr1xotCbF5TxIKjsmQaiX+jFRtnGtfA03tJPf6VG3cKh96S21boAt3JZc+Vjx8PYcDuLj39vM2Pw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] + '@oxfmt/binding-win32-arm64-msvc@0.36.0': + resolution: {integrity: sha512-FxO7UksTv8h4olzACgrqAXNF6BP329+H322323iDrMB5V/+a1kcAw07fsOsUmqNrb9iJBsCQgH/zqcqp5903ag==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + '@oxfmt/binding-win32-arm64-msvc@0.44.0': resolution: {integrity: sha512-yWzB+oCpSnP/dmw85eFLAT5o35Ve5pkGS2uF/UCISpIwDqf1xa7OpmtomiqY/Vzg8VyvMbuf6vroF2khF/+1Vg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] + '@oxfmt/binding-win32-ia32-msvc@0.36.0': + resolution: {integrity: sha512-OjoMQ89H01M0oLMfr/CPNH1zi48ZIwxAKObUl57oh7ssUBNDp/2Vjf7E1TQ8M4oj4VFQ/byxl2SmcPNaI2YNDg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + '@oxfmt/binding-win32-ia32-msvc@0.44.0': resolution: {integrity: sha512-TcWpo18xEIE3AmIG2kpr3kz5IEhQgnx0lazl2+8L+3eTopOAUevQcmlr4nhguImNWz0OMeOZrYZOhJNCf16nlQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] + '@oxfmt/binding-win32-x64-msvc@0.36.0': + resolution: {integrity: sha512-MoyeQ9S36ZTz/4bDhOKJgOBIDROd4dQ5AkT9iezhEaUBxAPdNX9Oq0jD8OSnCj3G4wam/XNxVWKMA52kmzmPtQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@oxfmt/binding-win32-x64-msvc@0.44.0': resolution: {integrity: sha512-oj8aLkPJZppIM4CMQNsyir9ybM1Xw/CfGPTSsTnzpVGyljgfbdP0EVUlURiGM0BDrmw5psQ6ArmGCcUY/yABaQ==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1719,6 +2272,21 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@3.0.2': + resolution: {integrity: sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==} + engines: {node: '>=12'} + + '@polka/url@1.0.0-next.29': + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@radix-ui/primitive@1.1.3': resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} @@ -2056,6 +2624,15 @@ packages: '@react-navigation/routers@7.5.5': resolution: {integrity: sha512-9/hhMte12Kgu+pMnLfA4EWJ0OQmIEAMVMX06FPH2yGkEQSQ3JhhCN/GkcRikzQhtEi97VYYQA15umptBUShcOQ==} + '@rollup/pluginutils@5.4.0': + resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + '@rollup/rollup-android-arm-eabi@4.60.4': resolution: {integrity: sha512-F5QXMSiFebS9hKZj02XhWLLnRpJ3B3AROP0tWbFBSj+6kCbg5m9j5JoHKd4mmSVy5mS/IMQloYgYxCuJC0fxEQ==} cpu: [arm] @@ -2181,6 +2758,36 @@ packages: cpu: [x64] os: [win32] + '@rushstack/node-core-library@5.23.1': + resolution: {integrity: sha512-wlKmIKIYCKuCASbITvOxLZXepPbwXvrv7S6ig6XNWFchSyhL/E2txmVXspHY49Wu2dzf7nI27a2k/yV5BA3EiA==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/problem-matcher@0.2.1': + resolution: {integrity: sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.7.3': + resolution: {integrity: sha512-aAA518n6wxxjCfnTAOjQnm7ngNE0FVHxHAw2pxKlIhxrMn0XQjGcXKF0oKWpjBgJOmsaJpVob/v+zr3zxgPWuA==} + + '@rushstack/terminal@0.24.0': + resolution: {integrity: sha512-8ZQS4MMaGsv27EXCBiH7WMPkRZrffeDoIevs6z9TM5dzqiY6+Hn4evfK/G+gvgBTjfvfkHIZPQQmalmI2sM4TQ==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/ts-command-line@5.3.9': + resolution: {integrity: sha512-GIHqU+sRGQ3LGWAZu1O+9Yh++qwtyNIIGuNbcWHJjBTm2qRez0cwINUHZ+pQLR8UuzZDcMajrDaNbUYoaL/XtQ==} + '@scure/base@1.2.6': resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} @@ -2196,13 +2803,60 @@ packages: '@scure/bip39@2.2.0': resolution: {integrity: sha512-T/Bj/YvYMNkIPq6EENO6/rcs2e7qTNuyoUXf0KBFDmp0ZDu0H2X4Lq6yC3i0c8PcWkov5EbW+yQZZbdMmk154A==} + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + '@segment/ajv-human-errors@2.16.0': resolution: {integrity: sha512-cHNfZcbHrmuYOA7/Sn7HlIDHanamiRTZtngfxcAuFaKQjP7cSqsVHjLz38FI2FQ8JDLz3syGLaz10Gn2ddo7+w==} peerDependencies: - ajv: ^8.0.0 + ajv: ^8.0.0 + + '@segment/loosely-validate-event@2.0.0': + resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} + + '@semantic-release/changelog@6.0.3': + resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} + engines: {node: '>=14.17'} + peerDependencies: + semantic-release: '>=18.0.0' + + '@semantic-release/commit-analyzer@12.0.0': + resolution: {integrity: sha512-qG+md5gdes+xa8zP7lIo1fWE17zRdO8yMCaxh9lyL65TQleoSv8WHHOqRURfghTytUh+NpkSyBprQ5hrkxOKVQ==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=20.1.0' + + '@semantic-release/error@3.0.0': + resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} + engines: {node: '>=14.17'} + + '@semantic-release/error@4.0.0': + resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} + engines: {node: '>=18'} + + '@semantic-release/git@10.0.1': + resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} + engines: {node: '>=14.17'} + peerDependencies: + semantic-release: '>=18.0.0' + + '@semantic-release/github@10.3.5': + resolution: {integrity: sha512-svvRglGmvqvxjmDgkXhrjf0lC88oZowFhOfifTldbgX9Dzj0inEtMLaC+3/MkDEmxmaQjWmF5Q/0CMIvPNSVdQ==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=20.1.0' + + '@semantic-release/npm@12.0.2': + resolution: {integrity: sha512-+M9/Lb35IgnlUO6OSJ40Ie+hUsZLuph2fqXC/qrKn0fMvUU/jiCjpoL6zEm69vzcmaZJ8yNKtMBEKHWN49WBbQ==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=20.1.0' - '@segment/loosely-validate-event@2.0.0': - resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} + '@semantic-release/release-notes-generator@13.0.0': + resolution: {integrity: sha512-LEeZWb340keMYuREMyxrODPXJJ0JOL8D/mCl74B4LdzbxhtXV2LrPN2QBEcGJrlQhoqLO0RhxQb6masHytKw+A==} + engines: {node: '>=20.8.1'} + peerDependencies: + semantic-release: '>=20.1.0' '@sentry-internal/tracing@7.77.0': resolution: {integrity: sha512-8HRF1rdqWwtINqGEdx8Iqs9UOP/n8E0vXUu3Nmbqj4p5sQPA7vvCfq+4Y4rTqZFc7sNdFpDsRION5iQEh8zfZw==} @@ -2248,12 +2902,27 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@simplewebauthn/browser@13.3.0': + resolution: {integrity: sha512-BE/UWv6FOToAdVk0EokzkqQQDOWtNydYlY6+OrmiZ5SCNmb41VehttboTetUM3T/fr6EAFYVXjz4My2wg230rQ==} + '@sinclair/typebox@0.27.10': resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} '@sinclair/typebox@0.34.49': resolution: {integrity: sha512-brySQQs7Jtn0joV8Xh9ZV/hZb9Ozb0pmazDIASBkYKCjXrXU3mpcFahmK/z4YDhGkQvP9mWJbVyahdtU5wQA+A==} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} @@ -2263,6 +2932,9 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@tanstack/react-store@0.9.1': resolution: {integrity: sha512-YzJLnRvy5lIEFTLWBAZmcOjK3+2AepnBv/sr6NZmiqJvq7zTQggyK99Gw8fqYdMdHPQWXjz0epFKJXC+9V2xDA==} peerDependencies: @@ -2272,6 +2944,10 @@ packages: '@tanstack/store@0.9.1': resolution: {integrity: sha512-+qcNkOy0N1qSGsP7omVCW0SDrXtaDcycPqBDE726yryiA5eTDFpjBReaYjghVJwNf1pcPMyzIwTGlYjCSQR0Fg==} + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + '@testing-library/jest-native@5.4.3': resolution: {integrity: sha512-/sSDGaOuE+PJ1Z9Kp4u7PQScSVVXGud59I/qsBFFJvIbcn4P6yYw6cBnBmbPF+X9aRIsTJRDl6gzw5ZkJNm66w==} deprecated: |- @@ -2296,6 +2972,12 @@ packages: jest: optional: true + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@tootallnate/once@2.0.1': resolution: {integrity: sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==} engines: {node: '>= 10'} @@ -2312,6 +2994,12 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -2336,6 +3024,9 @@ packages: '@types/cli-progress@3.11.6': resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} + '@types/component-emitter@1.2.14': + resolution: {integrity: sha512-lmPil1g82wwWg/qHSxMWkSKyJGQOK+ejXeMAAWyxNtVUD0/Ycj2maL63RAqpxVfdtvTfZkRnqzB0A9ft59y69g==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -2375,6 +3066,12 @@ packages: '@types/node@22.19.19': resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/qrcode@1.5.6': + resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} + '@types/react@19.1.17': resolution: {integrity: sha512-Qec1E3mhALmaspIrhWt9jkQMNdw6bReVu64mjvhbhq2NFPftLPVr+l1SZgmw/66WwBNpDh7ao5AT6gF5v41PFA==} @@ -2387,6 +3084,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2410,6 +3110,30 @@ packages: peerDependencies: '@urql/core': ^5.0.0 + '@vitest/browser@3.2.6': + resolution: {integrity: sha512-CNjSynGBtAVOMTfQITv6Bc8da4/XTU1izorocbDStjUsynXcgx2FHVssh+10a8bKd/BxoqDdQtuSbYHfk302Wg==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: 3.2.6 + webdriverio: ^7.0.0 || ^8.0.0 || ^9.0.0 + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + '@vitest/coverage-v8@3.2.6': + resolution: {integrity: sha512-LsAdmUapA0qSN306d8+zOyawM0hFm2m2Hg9IwVNIKBm+qJV8cijiq2c+gxKZcB1HCfIWAy+0qEZDCUQA58A1cw==} + peerDependencies: + '@vitest/browser': 3.2.6 + vitest: 3.2.6 + peerDependenciesMeta: + '@vitest/browser': + optional: true + '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -2424,9 +3148,23 @@ packages: vite: optional: true + '@vitest/mocker@3.2.6': + resolution: {integrity: sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@3.2.6': + resolution: {integrity: sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==} + '@vitest/runner@3.2.4': resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} @@ -2436,9 +3174,44 @@ packages: '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@3.2.6': + resolution: {integrity: sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==} + '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@3.2.6': + resolution: {integrity: sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==} + + '@volar/language-core@2.4.28': + resolution: {integrity: sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==} + + '@volar/source-map@2.4.28': + resolution: {integrity: sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==} + + '@volar/typescript@2.4.28': + resolution: {integrity: sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==} + + '@vue/compiler-core@3.5.35': + resolution: {integrity: sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==} + + '@vue/compiler-dom@3.5.35': + resolution: {integrity: sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/shared@3.5.35': + resolution: {integrity: sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==} + '@xmldom/xmldom@0.7.13': resolution: {integrity: sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==} engines: {node: '>=10.0.0'} @@ -2455,6 +3228,10 @@ packages: '@yarnpkg/lockfile@1.1.0': resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} deprecated: Use your platform's native atob() and btoa() methods instead @@ -2494,6 +3271,22 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + aggregate-error@5.0.0: + resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} + engines: {node: '>=18'} + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -2502,9 +3295,20 @@ packages: ajv: optional: true + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@8.11.0: resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} + ajv@8.18.0: + resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} + ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} @@ -2512,6 +3316,13 @@ packages: resolution: {integrity: sha512-F1tGh056XczEaEAqu7s+hlZUDWwOBT70Eq0lfMpBP2YguSQVyxRbprLq5rELXKQOyOaixTWYhMeMQMzP0U5FoQ==} engines: {node: '>= 10'} + algorand-msgpack@1.1.0: + resolution: {integrity: sha512-08k7pBQnkaUB5p+jL7f1TRaUIlTSDE0cesFu1mD7llLao+1cAhtvvZmGE3OnisTd0xOn118QMw74SRqddqaYvw==} + engines: {node: '>= 14'} + + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} @@ -2523,6 +3334,10 @@ packages: resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} engines: {node: '>=14.16'} + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} @@ -2588,10 +3403,19 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + argv-formatter@1.0.0: + resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} + aria-hidden@1.2.6: resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} engines: {node: '>=10'} + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2606,6 +3430,9 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-v8-to-istanbul@0.3.12: + resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} + astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -2627,6 +3454,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + axios@1.17.0: + resolution: {integrity: sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==} + b4a@1.8.1: resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} peerDependencies: @@ -2725,6 +3555,16 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + before-after-hook@4.0.0: resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} @@ -2736,9 +3576,19 @@ packages: resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} engines: {node: '>=0.6'} + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + bn.js@5.2.3: resolution: {integrity: sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==} + bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + bplist-creator@0.1.0: resolution: {integrity: sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==} @@ -2845,6 +3695,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -2860,6 +3714,10 @@ packages: resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==} engines: {node: '>= 16'} + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -2890,10 +3748,18 @@ packages: cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + clean-stack@3.0.1: resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} engines: {node: '>=10'} + clean-stack@5.3.0: + resolution: {integrity: sha512-9ngPTOhYGQqNVSfeJkYXHmF7AGWp4/nN5D/QqNQs3Dvxd1Kk/WpjHfNujKHYUQ/5CoGyOyFNoWSPk5afzP0QVg==} + engines: {node: '>=14.16'} + cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} @@ -2902,6 +3768,11 @@ packages: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + cli-progress@3.12.0: resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} engines: {node: '>=4'} @@ -2910,9 +3781,16 @@ packages: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2974,6 +3852,15 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + component-type@1.2.2: resolution: {integrity: sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==} @@ -2988,6 +3875,20 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concurrently@9.2.1: + resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} + engines: {node: '>=18'} + hasBin: true + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.4: + resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + connect@3.7.0: resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} engines: {node: '>= 0.10.0'} @@ -2999,12 +3900,50 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-writer@7.0.1: + resolution: {integrity: sha512-Uo+R9neH3r/foIvQ0MKcsXkX642hdm9odUp7TqgFS7BsalTcjzRlIfWZrZR1gbxOozKucaKt5KAbjW8J8xRSmA==} + engines: {node: '>=16'} + hasBin: true + + conventional-commits-filter@4.0.0: + resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + + convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + corser@2.0.1: + resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} + engines: {node: '>= 0.4.0'} + + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3024,6 +3963,10 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -3044,6 +3987,9 @@ packages: dateformat@4.6.3: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3131,6 +4077,13 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + 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} @@ -3158,10 +4111,17 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} + diff@8.0.4: + resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -3170,6 +4130,10 @@ packages: domino@2.1.7: resolution: {integrity: sha512-3rcXhx0ixJV2nj8J0tljzejTF73A35LVVdnTQu79UAqTBFEgYPMgGtykMuu/BDqaOZphATku1ddRUn/RtqUHYQ==} + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dotenv-expand@11.0.7: resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} engines: {node: '>=12'} @@ -3190,6 +4154,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + eas-cli@18.13.1: resolution: {integrity: sha512-OlusTcdrjfpIKsieU7JXYKugXTBOklfPj56ySYTJiZBnIWV+EtwXHAL13h5RTu+I7qMAK2ZbcBYk6ig4TZWe5A==} engines: {node: '>=20.0.0'} @@ -3219,6 +4186,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} @@ -3242,6 +4212,14 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + + env-ci@11.2.0: + resolution: {integrity: sha512-D5kWfzkmaOQDioPmiviWAVtKmpPT4/iJmMVQxWxMPJTFyTkdc5JQUfc5iXEeWxcOdsYTKSAiA/Age4NUOqKsRA==} + engines: {node: ^18.17 || >=20.6.1} + env-editor@0.4.2: resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} engines: {node: '>=8'} @@ -3250,6 +4228,10 @@ packages: resolution: {integrity: sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==} engines: {node: '>=6'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + env-string@1.0.1: resolution: {integrity: sha512-/DhCJDf5DSFK32joQiWRpWrT0h7p3hVQfMKxiBb7Nt8C8IF8BYyPtclDnuGGLOoj16d/8udKeiE7JbkotDmorQ==} @@ -3258,6 +4240,10 @@ packages: engines: {node: '>=4'} hasBin: true + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} @@ -3286,6 +4272,11 @@ packages: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} engines: {node: '>= 0.4'} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} + engines: {node: '>=18'} + hasBin: true + esbuild@0.27.7: resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} engines: {node: '>=18'} @@ -3310,6 +4301,10 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} @@ -3324,6 +4319,9 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} @@ -3343,6 +4341,9 @@ packages: resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==} engines: {node: '>=10.13.0'} + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} @@ -3360,6 +4361,14 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + execa@9.6.1: + resolution: {integrity: sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==} + engines: {node: ^18.19.0 || >=20.5.0} + exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -3610,6 +4619,12 @@ packages: exponential-backoff@3.1.3: resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} + exsolve@1.0.8: + resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3620,6 +4635,10 @@ packages: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -3644,10 +4663,18 @@ packages: fetch-retry@4.1.1: resolution: {integrity: sha512-e6eB7zN6UBSwGVwrbWVH+gdLnkW9WwHhmq2YDK1Sh30pzx1onRVGBvogTlUeWxwTa+L86NYdo4hFkh7O8ZjSnA==} + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + filelist@1.0.6: resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} @@ -3663,16 +4690,37 @@ packages: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + find-versions@6.0.0: + resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} + engines: {node: '>=18'} + find-yarn-workspace-root@2.0.0: resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} flow-enums-runtime@0.0.6: resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} + follow-redirects@1.16.0: + resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + fontfaceobserver@2.3.0: resolution: {integrity: sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==} @@ -3696,6 +4744,9 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + from2@2.3.0: + resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3704,6 +4755,10 @@ packages: resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} + fs-extra@11.3.5: + resolution: {integrity: sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==} + engines: {node: '>=14.14'} + fs-extra@9.0.0: resolution: {integrity: sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g==} engines: {node: '>=10'} @@ -3719,6 +4774,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -3727,6 +4787,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-timeout@1.0.2: + resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} + engines: {node: '>=18'} + gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} @@ -3764,6 +4828,18 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-stream@7.0.1: + resolution: {integrity: sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==} + engines: {node: '>=16'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + getenv@1.0.0: resolution: {integrity: sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==} engines: {node: '>=6'} @@ -3772,6 +4848,9 @@ packages: resolution: {integrity: sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ==} engines: {node: '>=6'} + git-log-parser@1.2.1: + resolution: {integrity: sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3781,6 +4860,12 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + glob@13.0.6: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} @@ -3797,6 +4882,10 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + golden-fleece@1.0.9: resolution: {integrity: sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==} @@ -3804,6 +4893,9 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3821,6 +4913,11 @@ packages: resolution: {integrity: sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + handlebars@4.7.9: + resolution: {integrity: sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==} + engines: {node: '>=0.4.7'} + hasBin: true + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3847,6 +4944,10 @@ packages: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + hermes-estree@0.29.1: resolution: {integrity: sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==} @@ -3865,9 +4966,19 @@ packages: hermes-parser@0.35.0: resolution: {integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==} + hi-base32@0.5.1: + resolution: {integrity: sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==} + + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hook-std@3.0.0: + resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3891,6 +5002,19 @@ packages: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-server@14.1.1: + resolution: {integrity: sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A==} + engines: {node: '>=12'} + hasBin: true + https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -3903,6 +5027,14 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + hyperlinker@1.0.0: resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} engines: {node: '>=4'} @@ -3914,6 +5046,9 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} @@ -3922,16 +5057,35 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + image-size@1.2.1: resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} engines: {node: '>=16.x'} hasBin: true + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-from-esm@1.3.4: + resolution: {integrity: sha512-7EyUlPFC0HOlBDpUFGfYstsU7XHxZJKAAMzCT8wZ0hMW7b+hG51LIKTDcsgtz8Pu6YC0HqRVbX+rVUtsGMUKvg==} + engines: {node: '>=16.20'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3940,6 +5094,14 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + 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. @@ -3950,6 +5112,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + into-stream@7.0.0: + resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} + engines: {node: '>=12'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -3963,6 +5129,10 @@ packages: is-arrayish@0.3.4: resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} @@ -4007,6 +5177,14 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -4022,6 +5200,18 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -4030,16 +5220,27 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + issue-parser@7.0.2: + resolution: {integrity: sha512-7atWPjhGEIX3JEtMrOYd8TKzboYlq+5sNbdl9POiLYOI14G5HZiQbZP0Xj5EZdrufQVXfJlpTV0hys0CuxwxZw==} + engines: {node: ^18.17 || >=20.6.1} + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -4060,6 +5261,10 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + istanbul-reports@3.2.0: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} @@ -4067,11 +5272,19 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.2.3: + resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} + engines: {node: 20 || >=22} + jake@10.9.4: resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} engines: {node: '>=10'} hasBin: true + java-properties@1.0.2: + resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} + engines: {node: '>= 0.6.0'} + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -4257,6 +5470,9 @@ packages: jimp-compact@0.16.1: resolution: {integrity: sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==} + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + jks-js@1.1.0: resolution: {integrity: sha512-irWi8S2V029Vic63w0/TYa8NIZwXu9oeMtHQsX51JDIVBo0lrEaOoyM8ALEEh5PVKD6TrA26FixQK6TzT7dHqA==} @@ -4266,9 +5482,16 @@ packages: joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + joi@18.2.1: + resolution: {integrity: sha512-2/OKlogiESf2Nh3TFCrRjrr9z1DRHeW0I+KReF67+4J0Ns+8hBtHRmoWAZ2OFU6I5+TWLEe6sVlSdXPjHm5UbQ==} + engines: {node: '>= 20'} + join-component@1.1.0: resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} + js-tokens@10.0.0: + resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4304,6 +5527,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} @@ -4317,6 +5543,9 @@ packages: resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} engines: {node: '>= 0.4'} + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -4328,6 +5557,10 @@ packages: jsonify@0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + keychain@1.5.0: resolution: {integrity: sha512-liyp4r+93RI7EB2jhwaRd4MWfdgHH6shuldkaPMkELCJjMFvOOVXuTvw1pGqFfhsrgA6OqfykWWPQgBjQakVag==} @@ -4338,6 +5571,9 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + lan-network@0.2.1: resolution: {integrity: sha512-ONPnazC96VKDntab9j9JKwIWhZ4ZUceB4A9Epu4Ssg0hYFmtHZSeQ+n15nIwTFmcBUKtExOer8WTJ4GF9MO64A==} hasBin: true @@ -4483,6 +5719,18 @@ packages: linkify-it@5.0.1: resolution: {integrity: sha512-wVoTjP4Q6R0NW5hiZkVJaFZPWgtXfoGF+6LucL3/FtiNjmcHhYjEr5f1Kqjirc1nBW07J/ZuRFumqr2oqccEWg==} + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + local-pkg@1.2.1: + resolution: {integrity: sha512-++gUqRDEvcnN6Zhqrr+y/CkVEHhlrR96vZn3nZZPYzMcBUyBtTKzB9NadClFIsIVSsu+3i9tfk/erqy9kAmt7Q==} + engines: {node: '>=14'} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -4490,6 +5738,9 @@ packages: lodash-es@4.18.1: resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + lodash.capitalize@4.2.1: + resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} + lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} @@ -4499,16 +5750,28 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.escaperegexp@4.1.2: + resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.throttle@4.1.1: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + lodash.uniqby@4.7.0: + resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} + lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} @@ -4544,9 +5807,20 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + make-asynchronous@1.1.0: + resolution: {integrity: sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==} + engines: {node: '>=18'} + make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -4565,6 +5839,17 @@ packages: resolution: {integrity: sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==} hasBin: true + marked-terminal@7.3.0: + resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} + engines: {node: '>=16.0.0'} + peerDependencies: + marked: '>=1 <16' + + marked@12.0.2: + resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + engines: {node: '>= 18'} + hasBin: true + marky@1.3.0: resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} @@ -4581,6 +5866,10 @@ packages: memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4734,6 +6023,11 @@ packages: engines: {node: '>=10.0.0'} hasBin: true + mime@4.1.0: + resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==} + engines: {node: '>=16'} + hasBin: true + mimic-fn@1.2.0: resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} engines: {node: '>=4'} @@ -4742,6 +6036,10 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + mimic-response@2.1.0: resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} engines: {node: '>=8'} @@ -4750,6 +6048,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.2.3: + resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} + engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -4801,9 +6103,16 @@ packages: engines: {node: '>=10'} hasBin: true + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + moment@2.30.1: resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -4813,6 +6122,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + multipasta@0.2.7: resolution: {integrity: sha512-KPA58d68KgGil15oDqXjkUBEBYc00XvbPj5/X+dyzeo/lWm9Nc25pQRlf1D+gv4OpK7NM0J1odrbu9JNNGvynA==} @@ -4861,9 +6173,19 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nerf-dart@1.0.0: + resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} + nested-error-stacks@2.0.1: resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} + node-emoji@2.2.0: + resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} + engines: {node: '>=18'} + node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -4904,15 +6226,28 @@ packages: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} + nodemon@3.1.14: + resolution: {integrity: sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw==} + engines: {node: '>=10'} + hasBin: true + nopt@5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} engines: {node: '>=6'} hasBin: true + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@8.1.1: + resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} + engines: {node: '>=14.16'} + npm-package-arg@11.0.3: resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} engines: {node: ^16.14.0 || >=18.0.0} @@ -4921,6 +6256,88 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + npm@10.9.8: + resolution: {integrity: sha512-fYwb6ODSmHkqrJQQaCxY3M2lPf/mpgC7ik0HSzzIwG5CGtabRp4bNqikatvCoT42b5INQSqudVH0R7yVmC9hVg==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + bundledDependencies: + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/redact' + - '@npmcli/run-script' + - '@sigstore/tuf' + - abbrev + - archy + - cacache + - chalk + - ci-info + - cli-columns + - fastest-levenshtein + - fs-minipass + - glob + - graceful-fs + - hosted-git-info + - ini + - init-package-json + - is-cidr + - json-parse-even-better-errors + - libnpmaccess + - libnpmdiff + - libnpmexec + - libnpmfund + - libnpmhook + - libnpmorg + - libnpmpack + - libnpmpublish + - libnpmsearch + - libnpmteam + - libnpmversion + - make-fetch-happen + - minimatch + - minipass + - minipass-pipeline + - ms + - node-gyp + - nopt + - normalize-package-data + - npm-audit-report + - npm-install-checks + - npm-package-arg + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - p-map + - pacote + - parse-conflict-json + - proc-log + - qrcode-terminal + - read + - semver + - spdx-expression-parse + - ssri + - supports-color + - tar + - text-table + - tiny-relative-date + - treeverse + - validate-npm-package-name + - which + - write-file-atomic + npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} deprecated: This package is no longer supported. @@ -4943,6 +6360,10 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -4974,6 +6395,10 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + open@7.4.2: resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} engines: {node: '>=8'} @@ -4982,6 +6407,10 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} + opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + ora@3.4.0: resolution: {integrity: sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==} engines: {node: '>=6'} @@ -4990,6 +6419,11 @@ packages: resolution: {integrity: sha512-9tXIMPvjZ7hPTbk8DFq1f7Kow/HU/pQYB60JbNq+QnGwcyhWVZaQ4hM9zQDEsPxw/muLpgiHSaumUZxCAmod/w==} engines: {node: '>=10'} + oxfmt@0.36.0: + resolution: {integrity: sha512-/ejJ+KoSW6J9bcNT9a9UtJSJNWhJ3yOLSBLbkoFHJs/8CZjmaZVZAJe4YgO1KMJlKpNQasrn/G9JQUEZI3p0EQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + oxfmt@0.44.0: resolution: {integrity: sha512-lnncqvHewyRvaqdrnntVIrZV2tEddz8lbvPsQzG/zlkfvgZkwy0HP1p/2u1aCDToeg1jb9zBpbJdfkV73Itw+w==} engines: {node: ^20.19.0 || >=22.12.0} @@ -5008,6 +6442,26 @@ packages: vite-plus: optional: true + p-each-series@3.0.0: + resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} + engines: {node: '>=12'} + + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} + + p-is-promise@3.0.0: + resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} + engines: {node: '>=8'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -5016,10 +6470,34 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} + p-map@7.0.4: + resolution: {integrity: sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==} + engines: {node: '>=18'} + + p-reduce@2.1.0: + resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} + engines: {node: '>=8'} + + p-reduce@3.0.0: + resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} + engines: {node: '>=12'} + + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -5027,6 +6505,10 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} engines: {node: '>=4'} @@ -5035,10 +6517,27 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + parse-png@2.1.0: resolution: {integrity: sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==} engines: {node: '>=10'} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -5054,6 +6553,13 @@ packages: engines: {node: '>=14', npm: '>5'} hasBin: true + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5066,6 +6572,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -5081,6 +6591,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} @@ -5099,14 +6613,38 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.3.1: + resolution: {integrity: sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==} + + playwright-core@1.60.0: + resolution: {integrity: sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.60.0: + resolution: {integrity: sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==} + engines: {node: '>=18'} + hasBin: true + plist@3.1.1: resolution: {integrity: sha512-ZIfcLJC+7E7FBFnDxm9MPmt7D+DidyQ26lewieO75AdhA2ayMtsJSES0iWzqJQbcVRSrTufQoy0DR94xHue0oA==} engines: {node: '>=10.4.0'} @@ -5119,6 +6657,10 @@ packages: resolution: {integrity: sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==} engines: {node: '>=14.19.0'} + portfinder@1.0.38: + resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} + engines: {node: '>= 10.12'} + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -5138,6 +6680,10 @@ packages: 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} @@ -5146,10 +6692,17 @@ packages: resolution: {integrity: sha512-K6KiKMHTL4jjX4u3Kir2EW07nRfcqVTXIImx50wbjHQTcZPgg+gjVeNTIT3l3L1Rd4UefxfogquC9J37SoFyyw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + pretty-ms@9.3.0: + resolution: {integrity: sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==} + engines: {node: '>=18'} + 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} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -5175,9 +6728,19 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proxy-from-env@2.1.0: + resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} + engines: {node: '>=10'} + psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -5189,6 +6752,10 @@ packages: pure-rand@6.1.0: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + qr-code-styling@1.9.2: + resolution: {integrity: sha512-RgJaZJ1/RrXJ6N0j7a+pdw3zMBmzZU4VN2dtAZf8ZggCfRB5stEQ3IoDNGaNhYY3nnZKYlYSLl5YkfWN5dPutg==} + engines: {node: '>=18.18.0'} + qrcode-generator@1.5.2: resolution: {integrity: sha512-pItrW0Z9HnDBnFmgiNrY1uxRdri32Uh9EjNYLPVC2zZ3ZRIIEqBoDgm4DkvDwNNDHTK7FNkmr8zAa77BYc9xNw==} @@ -5200,6 +6767,13 @@ packages: resolution: {integrity: sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==} hasBin: true + qs@6.15.2: + resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} + engines: {node: '>=0.6'} + + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} + query-string@7.1.3: resolution: {integrity: sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==} engines: {node: '>=6'} @@ -5247,6 +6821,9 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + 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==} @@ -5432,6 +7009,22 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} + + read-pkg-up@11.0.0: + resolution: {integrity: sha512-LOVbvF1Q0SZdjClSefZ0Nz5z8u+tIE7mV5NibzmE9VYmDe9CaBbAVtz1veOSZbofrdsilxuDAYnFenukZVp8/Q==} + engines: {node: '>=18'} + deprecated: Renamed to read-package-up + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -5444,6 +7037,10 @@ packages: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -5465,6 +7062,10 @@ packages: resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} engines: {node: '>=4'} + registry-auth-token@5.1.1: + resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} + engines: {node: '>=14'} + regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} @@ -5494,6 +7095,10 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -5551,6 +7156,12 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -5578,6 +7189,22 @@ packages: scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + secure-compare@3.0.1: + resolution: {integrity: sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw==} + + semantic-release@23.1.1: + resolution: {integrity: sha512-qqJDBhbtHsjUEMsojWKGuL5lQFCJuPtiXKEIlFKyTzDDGTAE/oyvznaP8GeOr5PvcqBJ6LQz4JCENWPLeehSpA==} + engines: {node: '>=20.8.1'} + hasBin: true + + semver-diff@4.0.0: + resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + engines: {node: '>=12'} + + semver-regex@4.0.5: + resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} + engines: {node: '>=12'} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -5597,6 +7224,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + semver@7.8.1: resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} engines: {node: '>=10'} @@ -5646,10 +7278,30 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + shell-quote@1.8.4: resolution: {integrity: sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==} engines: {node: '>= 0.4'} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -5660,6 +7312,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} @@ -5672,9 +7328,21 @@ packages: simple-swizzle@0.2.4: resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + sirv@3.0.2: + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} + engines: {node: '>=18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} + slash@2.0.0: resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} engines: {node: '>=6'} @@ -5699,6 +7367,9 @@ packages: resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==} engines: {node: '>=10.0.0'} + socket.io-mock-ts@1.0.3: + resolution: {integrity: sha512-rK4+b+iCIRKo3nFJckCm24IkD0tBKmmzuQ/DObAxROf3/zoHQq8RdOaPIiNB7qgzBLFAAtIJolGB1YaXj6GcRQ==} + socket.io-parser@4.2.6: resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==} engines: {node: '>=10.0.0'} @@ -5725,10 +7396,32 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + spawn-error-forwarder@1.0.0: + resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + split-on-first@1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} + split2@1.0.0: + resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -5770,6 +7463,9 @@ packages: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} + stream-combiner2@1.1.1: + resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} + streamx@2.26.0: resolution: {integrity: sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A==} @@ -5777,6 +7473,10 @@ packages: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -5793,6 +7493,9 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -5808,6 +7511,10 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -5816,6 +7523,14 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -5844,6 +7559,10 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true + super-regex@1.1.0: + resolution: {integrity: sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==} + engines: {node: '>=18'} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5860,6 +7579,10 @@ packages: resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} engines: {node: '>=8'} + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -5888,6 +7611,14 @@ packages: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} + temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + + tempy@3.2.0: + resolution: {integrity: sha512-d79HhZya5Djd7am0q+W4RTsSU+D/aJzM+4Y4AGJGuGlgM2L6sx5ZvOYTmZjqPhrDrV6xJTtRSm1JCLj6V6LHLQ==} + engines: {node: '>=14.16'} + terminal-link@2.1.1: resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} engines: {node: '>=8'} @@ -5901,9 +7632,17 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + test-exclude@7.0.2: + resolution: {integrity: sha512-u9E6A+ZDYdp7a4WnarkXPZOx8Ilz46+kby6p1yZ8zsGTz9gYa6FIS7lj2oezzNKmtdyyJNNmmXDppga5GB7kSw==} + engines: {node: '>=18'} + text-decoder@1.2.7: resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -5914,6 +7653,16 @@ packages: throat@5.0.0: resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -5955,6 +7704,14 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -5966,6 +7723,14 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} + traverse@0.6.8: + resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} + engines: {node: '>= 0.4'} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + ts-deepmerge@6.2.0: resolution: {integrity: sha512-2qxI/FZVDPbzh63GwWIZYE7daWKtwXZYuyc8YNq0iTmMUwn4mL0jRLsp6hfFlgbdRSR4x2ppe+E86FnvEpN7Nw==} engines: {node: '>=14.13.1'} @@ -5999,6 +7764,10 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + turndown@7.1.2: resolution: {integrity: sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg==} @@ -6017,6 +7786,24 @@ packages: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typedoc-plugin-markdown@4.12.0: + resolution: {integrity: sha512-eJDEMAfxCmede22c/Jw7d0FA13ggAQv+KkwQYKYCdqI02cin6Rc9QRwbG/7XvvHWinuFejySnZVUWDtvGk3Vbg==} + engines: {node: '>= 18'} + peerDependencies: + typedoc: 0.28.x + typedoc@0.28.19: resolution: {integrity: sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==} engines: {node: '>= 18', pnpm: '>= 10'} @@ -6029,12 +7816,32 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + uc.micro@2.1.0: resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@5.29.0: + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} + engines: {node: '>=14.0'} + undici@6.26.0: resolution: {integrity: sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==} engines: {node: '>=18.17'} @@ -6043,6 +7850,10 @@ packages: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} + unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} @@ -6055,10 +7866,32 @@ packages: resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + union@0.5.0: + resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} + engines: {node: '>= 0.8.0'} + unique-string@2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + universal-user-agent@7.0.3: + resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} + universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -6075,6 +7908,10 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unplugin@1.16.1: + resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==} + engines: {node: '>=14.0.0'} + untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} @@ -6088,6 +7925,13 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -6158,6 +8002,9 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-name@5.0.1: resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -6172,10 +8019,63 @@ packages: react: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + vite-bundle-analyzer@0.18.1: + resolution: {integrity: sha512-VQgrvxRuiZuOhM61p85lGpxzWR3TUbgn1LYtCBL09LUVoKy+yoxPwWTq+ihuPqT5L4tp0Jiiaa/dGYIRF8Guag==} + hasBin: true + + vite-node@3.2.4: + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-plugin-dts@4.5.4: + resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} + peerDependencies: + typescript: '*' + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite@6.4.3: + resolution: {integrity: sha512-NTKlcQjlAK7MlQoyb6LgaqHc8sso/pVyUJYWMws3jg21uTJw/LddqIFPcPqP6PzpgbIcZyKI85sFE4HBrQDA8A==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true vite@7.3.3: resolution: {integrity: sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==} @@ -6248,10 +8148,21 @@ packages: vlq@1.0.1: resolution: {integrity: sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==} + vlq@2.0.4: + resolution: {integrity: sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==} + + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} engines: {node: '>=14'} + wait-on@8.0.5: + resolution: {integrity: sha512-J3WlS0txVHkhLRb2FsmRg3dkMTCV1+M6Xra3Ho7HzZDHpE7DCOnoSoCJsZotrmW3uRMhvIJGSKUKrh/MeF4iag==} + engines: {node: '>=12.0.0'} + hasBin: true + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -6261,6 +8172,9 @@ packages: wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -6272,6 +8186,9 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -6418,6 +8335,10 @@ packages: resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} engines: {node: '>=0.4.0'} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -6442,10 +8363,18 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -6458,6 +8387,13 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yoctocolors@2.1.2: + resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} + engines: {node: '>=18'} + + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -6467,6 +8403,32 @@ snapshots: optionalDependencies: graphql: 16.8.1 + '@actions/core@1.11.1': + dependencies: + '@actions/exec': 1.1.1 + '@actions/http-client': 2.2.3 + + '@actions/exec@1.1.1': + dependencies: + '@actions/io': 1.1.3 + + '@actions/github@6.0.1': + dependencies: + '@actions/http-client': 2.2.3 + '@octokit/core': 5.2.2 + '@octokit/plugin-paginate-rest': 9.2.2(@octokit/core@5.2.2) + '@octokit/plugin-rest-endpoint-methods': 10.4.1(@octokit/core@5.2.2) + '@octokit/request': 8.4.1 + '@octokit/request-error': 5.1.1 + undici: 5.29.0 + + '@actions/http-client@2.2.3': + dependencies: + tunnel: 0.0.6 + undici: 5.29.0 + + '@actions/io@1.1.3': {} + '@algorandfoundation/accounts-keystore-extension@1.0.0-canary.5(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)': dependencies: '@algorandfoundation/accounts-store': 1.0.0-canary.2(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0) @@ -6488,6 +8450,21 @@ snapshots: optionalDependencies: '@algorandfoundation/log-store': 1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0) + '@algorandfoundation/algokit-utils@10.0.0-beta.4': + dependencies: + '@algorandfoundation/xhd-wallet-api': 2.0.0-canary.1 + '@noble/curves': 2.2.0 + '@noble/ed25519': 3.1.0 + '@noble/hashes': 2.2.0 + '@scure/bip39': 2.2.0 + algorand-msgpack: 1.1.0 + buffer: 6.0.3 + dotenv: 16.4.7 + hi-base32: 0.5.1 + json-bigint: 1.0.0 + tweetnacl: 1.0.3 + vlq: 2.0.4 + '@algorandfoundation/dp256@1.1.0': dependencies: '@noble/curves': 1.9.6 @@ -6549,30 +8526,12 @@ snapshots: optionalDependencies: '@algorandfoundation/log-store': 1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0) - '@algorandfoundation/liquid-client@1.0.0-canary.3': - dependencies: - '@algorandfoundation/qr-code-styling': https://codeload.github.com/algorandfoundation/qr-code-styling/tar.gz/ce8541ee1cb3b0ab2acd9926f3092d4ab217e276 - canvas: 2.11.2 - eventemitter3: 5.0.4 - socket.io-client: 4.8.3 - tweetnacl: 1.0.3 - uuid: 10.0.0 - transitivePeerDependencies: - - bufferutil - - encoding - - supports-color - - utf-8-validate - '@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0)': dependencies: '@algorandfoundation/wallet-provider': 1.0.0-canary.5 '@tanstack/store': 0.9.1 before-after-hook: 4.0.0 - '@algorandfoundation/qr-code-styling@https://codeload.github.com/algorandfoundation/qr-code-styling/tar.gz/ce8541ee1cb3b0ab2acd9926f3092d4ab217e276': - dependencies: - qrcode-generator: 1.5.2 - '@algorandfoundation/react-native-keystore@1.0.0-canary.11(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@2.2.2(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: '@algorandfoundation/dp256': 1.1.0 @@ -6644,6 +8603,11 @@ snapshots: algo-msgpack-with-bigint: 2.1.1 bn.js: 5.2.3 + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@babel/code-frame@7.10.4': dependencies: '@babel/highlight': 7.25.9 @@ -7261,6 +9225,26 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@bcoe/v8-coverage@1.0.2': {} + + '@codecov/bundler-plugin-core@1.9.1': + dependencies: + '@actions/core': 1.11.1 + '@actions/github': 6.0.1 + chalk: 4.1.2 + semver: 7.8.1 + unplugin: 1.16.1 + zod: 3.25.76 + + '@codecov/vite-plugin@1.9.1(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))': + dependencies: + '@codecov/bundler-plugin-core': 1.9.1 + unplugin: 1.16.1 + vite: 6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + + '@colors/colors@1.5.0': + optional: true + '@config-plugins/react-native-webrtc@13.0.0(expo@54.0.35)': dependencies: expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) @@ -7289,81 +9273,159 @@ snapshots: dependencies: '@types/hammerjs': 2.0.46 + '@esbuild/aix-ppc64@0.25.12': + optional: true + '@esbuild/aix-ppc64@0.27.7': optional: true + '@esbuild/android-arm64@0.25.12': + optional: true + '@esbuild/android-arm64@0.27.7': optional: true + '@esbuild/android-arm@0.25.12': + optional: true + '@esbuild/android-arm@0.27.7': optional: true + '@esbuild/android-x64@0.25.12': + optional: true + '@esbuild/android-x64@0.27.7': optional: true + '@esbuild/darwin-arm64@0.25.12': + optional: true + '@esbuild/darwin-arm64@0.27.7': optional: true + '@esbuild/darwin-x64@0.25.12': + optional: true + '@esbuild/darwin-x64@0.27.7': optional: true + '@esbuild/freebsd-arm64@0.25.12': + optional: true + '@esbuild/freebsd-arm64@0.27.7': optional: true + '@esbuild/freebsd-x64@0.25.12': + optional: true + '@esbuild/freebsd-x64@0.27.7': optional: true + '@esbuild/linux-arm64@0.25.12': + optional: true + '@esbuild/linux-arm64@0.27.7': optional: true + '@esbuild/linux-arm@0.25.12': + optional: true + '@esbuild/linux-arm@0.27.7': optional: true + '@esbuild/linux-ia32@0.25.12': + optional: true + '@esbuild/linux-ia32@0.27.7': optional: true + '@esbuild/linux-loong64@0.25.12': + optional: true + '@esbuild/linux-loong64@0.27.7': optional: true + '@esbuild/linux-mips64el@0.25.12': + optional: true + '@esbuild/linux-mips64el@0.27.7': optional: true + '@esbuild/linux-ppc64@0.25.12': + optional: true + '@esbuild/linux-ppc64@0.27.7': optional: true + '@esbuild/linux-riscv64@0.25.12': + optional: true + '@esbuild/linux-riscv64@0.27.7': optional: true + '@esbuild/linux-s390x@0.25.12': + optional: true + '@esbuild/linux-s390x@0.27.7': optional: true + '@esbuild/linux-x64@0.25.12': + optional: true + '@esbuild/linux-x64@0.27.7': optional: true + '@esbuild/netbsd-arm64@0.25.12': + optional: true + '@esbuild/netbsd-arm64@0.27.7': optional: true + '@esbuild/netbsd-x64@0.25.12': + optional: true + '@esbuild/netbsd-x64@0.27.7': optional: true + '@esbuild/openbsd-arm64@0.25.12': + optional: true + '@esbuild/openbsd-arm64@0.27.7': optional: true + '@esbuild/openbsd-x64@0.25.12': + optional: true + '@esbuild/openbsd-x64@0.27.7': optional: true + '@esbuild/openharmony-arm64@0.25.12': + optional: true + '@esbuild/openharmony-arm64@0.27.7': optional: true + '@esbuild/sunos-x64@0.25.12': + optional: true + '@esbuild/sunos-x64@0.27.7': optional: true + '@esbuild/win32-arm64@0.25.12': + optional: true + '@esbuild/win32-arm64@0.27.7': optional: true + '@esbuild/win32-ia32@0.25.12': + optional: true + '@esbuild/win32-ia32@0.27.7': optional: true + '@esbuild/win32-x64@0.25.12': + optional: true + '@esbuild/win32-x64@0.27.7': optional: true @@ -7994,6 +10056,8 @@ snapshots: chalk: 4.1.2 js-yaml: 4.1.1 + '@fastify/busboy@2.1.1': {} + '@gerrit0/mini-shiki@3.23.0': dependencies: '@shikijs/engine-oniguruma': 3.23.0 @@ -8002,12 +10066,28 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 + '@hapi/address@5.1.1': + dependencies: + '@hapi/hoek': 11.0.7 + + '@hapi/formula@3.0.2': {} + + '@hapi/hoek@11.0.7': {} + '@hapi/hoek@9.3.0': {} + '@hapi/pinpoint@2.0.1': {} + + '@hapi/tlds@1.1.6': {} + '@hapi/topo@5.1.0': dependencies: '@hapi/hoek': 9.3.0 + '@hapi/topo@6.0.2': + dependencies: + '@hapi/hoek': 11.0.7 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -8017,6 +10097,8 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/cliui@9.0.0': {} + '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.3 @@ -8269,6 +10351,42 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true + + '@microsoft/api-extractor-model@7.33.8(@types/node@22.19.19)': + dependencies: + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.1 + '@rushstack/node-core-library': 5.23.1(@types/node@22.19.19) + transitivePeerDependencies: + - '@types/node' + + '@microsoft/api-extractor@7.58.7(@types/node@22.19.19)': + dependencies: + '@microsoft/api-extractor-model': 7.33.8(@types/node@22.19.19) + '@microsoft/tsdoc': 0.16.0 + '@microsoft/tsdoc-config': 0.18.1 + '@rushstack/node-core-library': 5.23.1(@types/node@22.19.19) + '@rushstack/rig-package': 0.7.3 + '@rushstack/terminal': 0.24.0(@types/node@22.19.19) + '@rushstack/ts-command-line': 5.3.9(@types/node@22.19.19) + diff: 8.0.4 + minimatch: 10.2.3 + resolve: 1.22.12 + semver: 7.7.4 + source-map: 0.6.1 + typescript: 5.9.3 + transitivePeerDependencies: + - '@types/node' + + '@microsoft/tsdoc-config@0.18.1': + dependencies: + '@microsoft/tsdoc': 0.16.0 + ajv: 8.18.0 + jju: 1.4.0 + resolve: 1.22.12 + + '@microsoft/tsdoc@0.16.0': {} '@noble/ciphers@2.2.0': {} @@ -8280,6 +10398,8 @@ snapshots: dependencies: '@noble/hashes': 2.2.0 + '@noble/ed25519@3.1.0': {} + '@noble/hashes@1.8.0': {} '@noble/hashes@2.0.1': {} @@ -8364,60 +10484,234 @@ snapshots: transitivePeerDependencies: - supports-color + '@octokit/auth-token@4.0.0': {} + + '@octokit/auth-token@5.1.2': {} + + '@octokit/core@5.2.2': + dependencies: + '@octokit/auth-token': 4.0.0 + '@octokit/graphql': 7.1.1 + '@octokit/request': 8.4.1 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.10.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + + '@octokit/core@6.1.6': + dependencies: + '@octokit/auth-token': 5.1.2 + '@octokit/graphql': 8.2.2 + '@octokit/request': 9.2.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.3 + + '@octokit/endpoint@10.1.4': + dependencies: + '@octokit/types': 14.1.0 + universal-user-agent: 7.0.3 + + '@octokit/endpoint@9.0.6': + dependencies: + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 + + '@octokit/graphql@7.1.1': + dependencies: + '@octokit/request': 8.4.1 + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 + + '@octokit/graphql@8.2.2': + dependencies: + '@octokit/request': 9.2.4 + '@octokit/types': 14.1.0 + universal-user-agent: 7.0.3 + + '@octokit/openapi-types@20.0.0': {} + + '@octokit/openapi-types@24.2.0': {} + + '@octokit/openapi-types@25.1.0': {} + + '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 + + '@octokit/plugin-paginate-rest@9.2.2(@octokit/core@5.2.2)': + dependencies: + '@octokit/core': 5.2.2 + '@octokit/types': 12.6.0 + + '@octokit/plugin-rest-endpoint-methods@10.4.1(@octokit/core@5.2.2)': + dependencies: + '@octokit/core': 5.2.2 + '@octokit/types': 12.6.0 + + '@octokit/plugin-retry@7.2.1(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + bottleneck: 2.19.5 + + '@octokit/plugin-throttling@9.6.1(@octokit/core@6.1.6)': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/types': 13.10.0 + bottleneck: 2.19.5 + + '@octokit/request-error@5.1.1': + dependencies: + '@octokit/types': 13.10.0 + deprecation: 2.3.1 + once: 1.4.0 + + '@octokit/request-error@6.1.8': + dependencies: + '@octokit/types': 14.1.0 + + '@octokit/request@8.4.1': + dependencies: + '@octokit/endpoint': 9.0.6 + '@octokit/request-error': 5.1.1 + '@octokit/types': 13.10.0 + universal-user-agent: 6.0.1 + + '@octokit/request@9.2.4': + dependencies: + '@octokit/endpoint': 10.1.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.1.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.3 + + '@octokit/types@12.6.0': + dependencies: + '@octokit/openapi-types': 20.0.0 + + '@octokit/types@13.10.0': + dependencies: + '@octokit/openapi-types': 24.2.0 + + '@octokit/types@14.1.0': + dependencies: + '@octokit/openapi-types': 25.1.0 + + '@oxfmt/binding-android-arm-eabi@0.36.0': + optional: true + '@oxfmt/binding-android-arm-eabi@0.44.0': optional: true + '@oxfmt/binding-android-arm64@0.36.0': + optional: true + '@oxfmt/binding-android-arm64@0.44.0': optional: true + '@oxfmt/binding-darwin-arm64@0.36.0': + optional: true + '@oxfmt/binding-darwin-arm64@0.44.0': optional: true + '@oxfmt/binding-darwin-x64@0.36.0': + optional: true + '@oxfmt/binding-darwin-x64@0.44.0': optional: true + '@oxfmt/binding-freebsd-x64@0.36.0': + optional: true + '@oxfmt/binding-freebsd-x64@0.44.0': optional: true + '@oxfmt/binding-linux-arm-gnueabihf@0.36.0': + optional: true + '@oxfmt/binding-linux-arm-gnueabihf@0.44.0': optional: true + '@oxfmt/binding-linux-arm-musleabihf@0.36.0': + optional: true + '@oxfmt/binding-linux-arm-musleabihf@0.44.0': optional: true + '@oxfmt/binding-linux-arm64-gnu@0.36.0': + optional: true + '@oxfmt/binding-linux-arm64-gnu@0.44.0': optional: true + '@oxfmt/binding-linux-arm64-musl@0.36.0': + optional: true + '@oxfmt/binding-linux-arm64-musl@0.44.0': optional: true + '@oxfmt/binding-linux-ppc64-gnu@0.36.0': + optional: true + '@oxfmt/binding-linux-ppc64-gnu@0.44.0': optional: true + '@oxfmt/binding-linux-riscv64-gnu@0.36.0': + optional: true + '@oxfmt/binding-linux-riscv64-gnu@0.44.0': optional: true + '@oxfmt/binding-linux-riscv64-musl@0.36.0': + optional: true + '@oxfmt/binding-linux-riscv64-musl@0.44.0': optional: true + '@oxfmt/binding-linux-s390x-gnu@0.36.0': + optional: true + '@oxfmt/binding-linux-s390x-gnu@0.44.0': optional: true + '@oxfmt/binding-linux-x64-gnu@0.36.0': + optional: true + '@oxfmt/binding-linux-x64-gnu@0.44.0': optional: true + '@oxfmt/binding-linux-x64-musl@0.36.0': + optional: true + '@oxfmt/binding-linux-x64-musl@0.44.0': optional: true + '@oxfmt/binding-openharmony-arm64@0.36.0': + optional: true + '@oxfmt/binding-openharmony-arm64@0.44.0': optional: true + '@oxfmt/binding-win32-arm64-msvc@0.36.0': + optional: true + '@oxfmt/binding-win32-arm64-msvc@0.44.0': optional: true + '@oxfmt/binding-win32-ia32-msvc@0.36.0': + optional: true + '@oxfmt/binding-win32-ia32-msvc@0.44.0': optional: true + '@oxfmt/binding-win32-x64-msvc@0.36.0': + optional: true + '@oxfmt/binding-win32-x64-msvc@0.44.0': optional: true @@ -8478,8 +10772,22 @@ snapshots: '@oxlint/binding-win32-x64-msvc@1.67.0': optional: true - '@pkgjs/parseargs@0.11.0': - optional: true + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@3.0.2': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@polka/url@1.0.0-next.29': {} '@radix-ui/primitive@1.1.3': {} @@ -8857,6 +11165,14 @@ snapshots: dependencies: nanoid: 3.3.12 + '@rollup/pluginutils@5.4.0(rollup@4.60.4)': + dependencies: + '@types/estree': 1.0.9 + estree-walker: 2.0.2 + picomatch: 4.0.4 + optionalDependencies: + rollup: 4.60.4 + '@rollup/rollup-android-arm-eabi@4.60.4': optional: true @@ -8932,6 +11248,45 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.4': optional: true + '@rushstack/node-core-library@5.23.1(@types/node@22.19.19)': + dependencies: + ajv: 8.18.0 + ajv-draft-04: 1.0.0(ajv@8.18.0) + ajv-formats: 3.0.1(ajv@8.18.0) + fs-extra: 11.3.5 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.12 + semver: 7.7.4 + optionalDependencies: + '@types/node': 22.19.19 + + '@rushstack/problem-matcher@0.2.1(@types/node@22.19.19)': + optionalDependencies: + '@types/node': 22.19.19 + + '@rushstack/rig-package@0.7.3': + dependencies: + jju: 1.4.0 + resolve: 1.22.12 + + '@rushstack/terminal@0.24.0(@types/node@22.19.19)': + dependencies: + '@rushstack/node-core-library': 5.23.1(@types/node@22.19.19) + '@rushstack/problem-matcher': 0.2.1(@types/node@22.19.19) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 22.19.19 + + '@rushstack/ts-command-line@5.3.9(@types/node@22.19.19)': + dependencies: + '@rushstack/terminal': 0.24.0(@types/node@22.19.19) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' + '@scure/base@1.2.6': {} '@scure/base@2.0.0': {} @@ -8948,6 +11303,8 @@ snapshots: '@noble/hashes': 2.2.0 '@scure/base': 2.2.0 + '@sec-ant/readable-stream@0.4.1': {} + '@segment/ajv-human-errors@2.16.0(ajv@8.11.0)': dependencies: ajv: 8.11.0 @@ -8957,6 +11314,100 @@ snapshots: component-type: 1.2.2 join-component: 1.1.0 + '@semantic-release/changelog@6.0.3(semantic-release@23.1.1(typescript@5.9.3))': + dependencies: + '@semantic-release/error': 3.0.0 + aggregate-error: 3.1.0 + fs-extra: 11.2.0 + lodash: 4.18.1 + semantic-release: 23.1.1(typescript@5.9.3) + + '@semantic-release/commit-analyzer@12.0.0(semantic-release@23.1.1(typescript@5.9.3))': + dependencies: + conventional-changelog-angular: 7.0.0 + conventional-commits-filter: 4.0.0 + conventional-commits-parser: 5.0.0 + debug: 4.4.3(supports-color@8.1.1) + import-from-esm: 1.3.4 + lodash-es: 4.18.1 + micromatch: 4.0.8 + semantic-release: 23.1.1(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + '@semantic-release/error@3.0.0': {} + + '@semantic-release/error@4.0.0': {} + + '@semantic-release/git@10.0.1(semantic-release@23.1.1(typescript@5.9.3))': + dependencies: + '@semantic-release/error': 3.0.0 + aggregate-error: 3.1.0 + debug: 4.4.3(supports-color@8.1.1) + dir-glob: 3.0.1 + execa: 5.1.1 + lodash: 4.18.1 + micromatch: 4.0.8 + p-reduce: 2.1.0 + semantic-release: 23.1.1(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + + '@semantic-release/github@10.3.5(semantic-release@23.1.1(typescript@5.9.3))': + dependencies: + '@octokit/core': 6.1.6 + '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.6) + '@octokit/plugin-retry': 7.2.1(@octokit/core@6.1.6) + '@octokit/plugin-throttling': 9.6.1(@octokit/core@6.1.6) + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + debug: 4.4.3(supports-color@8.1.1) + dir-glob: 3.0.1 + globby: 14.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + issue-parser: 7.0.2 + lodash-es: 4.18.1 + mime: 4.1.0 + p-filter: 4.1.0 + semantic-release: 23.1.1(typescript@5.9.3) + url-join: 5.0.0 + transitivePeerDependencies: + - supports-color + + '@semantic-release/npm@12.0.2(semantic-release@23.1.1(typescript@5.9.3))': + dependencies: + '@semantic-release/error': 4.0.0 + aggregate-error: 5.0.0 + execa: 9.6.1 + fs-extra: 11.2.0 + lodash-es: 4.18.1 + nerf-dart: 1.0.0 + normalize-url: 8.1.1 + npm: 10.9.8 + rc: 1.2.8 + read-pkg: 9.0.1 + registry-auth-token: 5.1.1 + semantic-release: 23.1.1(typescript@5.9.3) + semver: 7.8.1 + tempy: 3.2.0 + + '@semantic-release/release-notes-generator@13.0.0(semantic-release@23.1.1(typescript@5.9.3))': + dependencies: + conventional-changelog-angular: 7.0.0 + conventional-changelog-writer: 7.0.1 + conventional-commits-filter: 4.0.0 + conventional-commits-parser: 5.0.0 + debug: 4.4.3(supports-color@8.1.1) + get-stream: 7.0.1 + import-from-esm: 1.3.4 + into-stream: 7.0.0 + lodash-es: 4.18.1 + read-pkg-up: 11.0.0 + semantic-release: 23.1.1(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + '@sentry-internal/tracing@7.77.0': dependencies: '@sentry/core': 7.77.0 @@ -9012,10 +11463,18 @@ snapshots: '@sideway/pinpoint@2.0.0': {} + '@simplewebauthn/browser@13.3.0': {} + '@sinclair/typebox@0.27.10': {} '@sinclair/typebox@0.34.49': {} + '@sindresorhus/is@4.6.0': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@sindresorhus/merge-streams@4.0.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -9026,6 +11485,8 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} + '@standard-schema/spec@1.1.0': {} + '@tanstack/react-store@0.9.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@tanstack/store': 0.9.1 @@ -9035,6 +11496,17 @@ snapshots: '@tanstack/store@0.9.1': {} + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/runtime': 7.29.7 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + '@testing-library/jest-native@5.4.3(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: chalk: 4.1.2 @@ -9058,6 +11530,10 @@ snapshots: optionalDependencies: jest: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)) + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@tootallnate/once@2.0.1': {} '@tsconfig/node10@1.0.12': {} @@ -9068,6 +11544,10 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@types/argparse@1.0.38': {} + + '@types/aria-query@5.0.4': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.7 @@ -9104,6 +11584,8 @@ snapshots: dependencies: '@types/node': 22.19.19 + '@types/component-emitter@1.2.14': {} + '@types/deep-eql@4.0.2': {} '@types/estree@1.0.8': {} @@ -9147,6 +11629,12 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/normalize-package-data@2.4.4': {} + + '@types/qrcode@1.5.6': + dependencies: + '@types/node': 22.19.19 + '@types/react@19.1.17': dependencies: csstype: 3.2.3 @@ -9157,6 +11645,8 @@ snapshots: '@types/unist@3.0.3': {} + '@types/uuid@10.0.0': {} + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.35': @@ -9191,6 +11681,46 @@ snapshots: '@urql/core': 5.2.0(graphql@16.8.1) wonka: 6.3.6 + '@vitest/browser@3.2.6(playwright@1.60.0)(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.4)': + dependencies: + '@testing-library/dom': 10.4.1 + '@testing-library/user-event': 14.6.1(@testing-library/dom@10.4.1) + '@vitest/mocker': 3.2.6(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + '@vitest/utils': 3.2.6 + magic-string: 0.30.21 + sirv: 3.0.2 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/node@22.19.19)(@vitest/browser@3.2.6)(jsdom@20.0.3(canvas@2.11.2))(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + ws: 8.21.0 + optionalDependencies: + playwright: 1.60.0 + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + + '@vitest/coverage-v8@3.2.6(@vitest/browser@3.2.6)(vitest@3.2.4)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + ast-v8-to-istanbul: 0.3.12 + debug: 4.4.3(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.2.0 + magic-string: 0.30.21 + magicast: 0.3.5 + std-env: 3.10.0 + test-exclude: 7.0.2 + tinyrainbow: 2.0.0 + vitest: 3.2.4(@types/node@22.19.19)(@vitest/browser@3.2.6)(jsdom@20.0.3(canvas@2.11.2))(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + optionalDependencies: + '@vitest/browser': 3.2.6(playwright@1.60.0)(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.4) + transitivePeerDependencies: + - supports-color + '@vitest/expect@3.2.4': dependencies: '@types/chai': 5.2.3 @@ -9207,10 +11737,22 @@ snapshots: optionalDependencies: vite: 7.3.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + '@vitest/mocker@3.2.6(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 3.2.6 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 + '@vitest/pretty-format@3.2.6': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/runner@3.2.4': dependencies: '@vitest/utils': 3.2.4 @@ -9227,12 +11769,67 @@ snapshots: dependencies: tinyspy: 4.0.4 + '@vitest/spy@3.2.6': + dependencies: + tinyspy: 4.0.4 + '@vitest/utils@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 loupe: 3.2.1 tinyrainbow: 2.0.0 + '@vitest/utils@3.2.6': + dependencies: + '@vitest/pretty-format': 3.2.6 + loupe: 3.2.1 + tinyrainbow: 2.0.0 + + '@volar/language-core@2.4.28': + dependencies: + '@volar/source-map': 2.4.28 + + '@volar/source-map@2.4.28': {} + + '@volar/typescript@2.4.28': + dependencies: + '@volar/language-core': 2.4.28 + path-browserify: 1.0.1 + vscode-uri: 3.1.0 + + '@vue/compiler-core@3.5.35': + dependencies: + '@babel/parser': 7.29.7 + '@vue/shared': 3.5.35 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.35': + dependencies: + '@vue/compiler-core': 3.5.35 + '@vue/shared': 3.5.35 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/language-core@2.2.0(typescript@5.9.3)': + dependencies: + '@volar/language-core': 2.4.28 + '@vue/compiler-dom': 3.5.35 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.35 + alien-signals: 0.4.14 + minimatch: 9.0.9 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.9.3 + + '@vue/shared@3.5.35': {} + '@xmldom/xmldom@0.7.13': {} '@xmldom/xmldom@0.8.13': {} @@ -9241,9 +11838,15 @@ snapshots: '@yarnpkg/lockfile@1.1.0': {} + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + abab@2.0.6: {} - abbrev@1.1.1: {} + abbrev@1.1.1: + optional: true abort-controller@3.0.0: dependencies: @@ -9278,10 +11881,28 @@ snapshots: agent-base@7.1.4: {} + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + aggregate-error@5.0.0: + dependencies: + clean-stack: 5.3.0 + indent-string: 5.0.0 + + ajv-draft-04@1.0.0(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + ajv-formats@2.1.1(ajv@8.11.0): optionalDependencies: ajv: 8.11.0 + ajv-formats@3.0.1(ajv@8.18.0): + optionalDependencies: + ajv: 8.18.0 + ajv@8.11.0: dependencies: fast-deep-equal: 3.1.3 @@ -9289,6 +11910,13 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 + ajv@8.18.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -9298,6 +11926,10 @@ snapshots: algo-msgpack-with-bigint@2.1.1: {} + algorand-msgpack@1.1.0: {} + + alien-signals@0.4.14: {} + anser@1.4.10: {} ansi-escapes@4.3.2: @@ -9306,6 +11938,10 @@ snapshots: ansi-escapes@6.2.1: {} + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-regex@4.1.1: {} ansi-regex@5.0.1: {} @@ -9335,12 +11971,14 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.2 - aproba@2.1.0: {} + aproba@2.1.0: + optional: true are-we-there-yet@2.0.0: dependencies: delegates: 1.0.0 readable-stream: 3.6.2 + optional: true arg@4.1.0: {} @@ -9354,10 +11992,18 @@ snapshots: argparse@2.0.1: {} + argv-formatter@1.0.0: {} + aria-hidden@1.2.6: dependencies: tslib: 2.8.1 + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + array-ify@1.0.0: {} + array-union@2.1.0: {} asap@2.0.6: {} @@ -9368,6 +12014,12 @@ snapshots: assertion-error@2.0.1: {} + ast-v8-to-istanbul@0.3.12: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + estree-walker: 3.0.3 + js-tokens: 10.0.0 + astral-regex@2.0.0: {} async-limiter@1.0.1: {} @@ -9382,6 +12034,16 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + axios@1.17.0: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.5 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color + b4a@1.8.1: {} babel-jest@29.7.0(@babel/core@7.29.7): @@ -9523,6 +12185,14 @@ snapshots: baseline-browser-mapping@2.10.32: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + + before-after-hook@2.2.3: {} + + before-after-hook@3.0.2: {} + before-after-hook@4.0.0: {} better-opn@3.0.2: @@ -9531,8 +12201,14 @@ snapshots: big-integer@1.6.52: {} + bignumber.js@9.3.1: {} + + binary-extensions@2.3.0: {} + bn.js@5.2.3: {} + bottleneck@2.19.5: {} + bplist-creator@0.1.0: dependencies: stream-buffers: 2.2.0 @@ -9630,6 +12306,7 @@ snapshots: transitivePeerDependencies: - encoding - supports-color + optional: true cardinal@2.1.1: dependencies: @@ -9660,6 +12337,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.6.2: {} + char-regex@1.0.2: {} char-regex@2.0.2: {} @@ -9668,7 +12347,20 @@ snapshots: check-error@2.1.3: {} - chownr@2.0.0: {} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: + optional: true chownr@3.0.0: {} @@ -9700,10 +12392,16 @@ snapshots: cjs-module-lexer@1.4.3: {} + clean-stack@2.2.0: {} + clean-stack@3.0.1: dependencies: escape-string-regexp: 4.0.0 + clean-stack@5.3.0: + dependencies: + escape-string-regexp: 5.0.0 + cli-cursor@2.1.0: dependencies: restore-cursor: 2.0.0 @@ -9712,14 +12410,35 @@ snapshots: dependencies: restore-cursor: 3.1.0 + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + cli-progress@3.12.0: dependencies: string-width: 4.2.3 cli-spinners@2.9.2: {} + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + client-only@0.0.1: {} + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -9749,7 +12468,8 @@ snapshots: color-name: 1.1.4 simple-swizzle: 0.2.4 - color-support@1.1.3: {} + color-support@1.1.3: + optional: true color@3.2.1: dependencies: @@ -9773,6 +12493,15 @@ snapshots: commander@7.2.0: {} + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + + compare-versions@6.1.1: {} + + component-emitter@1.3.1: {} + component-type@1.2.2: {} compressible@2.0.18: @@ -9793,6 +12522,24 @@ snapshots: concat-map@0.0.1: {} + concurrently@9.2.1: + dependencies: + chalk: 4.1.2 + rxjs: 7.8.2 + shell-quote: 1.8.3 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + + confbox@0.1.8: {} + + confbox@0.2.4: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + connect@3.7.0: dependencies: debug: 2.6.9 @@ -9802,15 +12549,53 @@ snapshots: transitivePeerDependencies: - supports-color - console-control-strings@1.1.0: {} + console-control-strings@1.1.0: + optional: true content-type@1.0.5: {} + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-writer@7.0.1: + dependencies: + conventional-commits-filter: 4.0.0 + handlebars: 4.7.9 + json-stringify-safe: 5.0.1 + meow: 12.1.1 + semver: 7.8.1 + split2: 4.2.0 + + conventional-commits-filter@4.0.0: {} + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + + convert-hrtime@5.0.0: {} + convert-source-map@2.0.0: {} - core-js-compat@3.49.0: + core-js-compat@3.49.0: + dependencies: + browserslist: 4.28.2 + + core-util-is@1.0.3: {} + + corser@2.0.1: {} + + cosmiconfig@9.0.1(typescript@5.9.3): dependencies: - browserslist: 4.28.2 + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.1 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.3 create-jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)): dependencies: @@ -9839,6 +12624,10 @@ snapshots: crypto-random-string@2.0.0: {} + crypto-random-string@4.0.0: + dependencies: + type-fest: 1.4.0 + cssom@0.3.8: {} cssom@0.5.0: {} @@ -9857,6 +12646,8 @@ snapshots: dateformat@4.6.3: {} + de-indent@1.0.2: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -9869,6 +12660,12 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.4.3(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -9882,6 +12679,7 @@ snapshots: decompress-response@4.2.1: dependencies: mimic-response: 2.1.0 + optional: true dedent@1.7.2: {} @@ -9905,10 +12703,15 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: {} + delegates@1.0.0: + optional: true depd@2.0.0: {} + deprecation@2.3.1: {} + + dequal@2.0.3: {} + destroy@1.2.0: {} detect-libc@2.1.2: {} @@ -9923,16 +12726,24 @@ snapshots: diff@7.0.0: {} + diff@8.0.4: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 + dom-accessibility-api@0.5.16: {} + domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 domino@2.1.7: {} + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + dotenv-expand@11.0.7: dependencies: dotenv: 16.4.7 @@ -9952,6 +12763,10 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + duplexer2@0.1.4: + dependencies: + readable-stream: 2.3.8 + eas-cli@18.13.1(@types/node@22.19.19)(typescript@5.8.3): dependencies: '@expo/apple-utils': 2.1.19 @@ -10067,6 +12882,8 @@ snapshots: emoji-regex@9.2.2: {} + emojilib@2.4.0: {} + encodeurl@1.0.2: {} encodeurl@2.0.0: {} @@ -10089,14 +12906,25 @@ snapshots: entities@6.0.1: {} + entities@7.0.1: {} + + env-ci@11.2.0: + dependencies: + execa: 8.0.1 + java-properties: 1.0.2 + env-editor@0.4.2: {} env-paths@2.2.0: {} + env-paths@2.2.1: {} + env-string@1.0.1: {} envinfo@7.11.0: {} + environment@1.1.0: {} + err-code@2.0.3: {} error-ex@1.3.4: @@ -10124,6 +12952,35 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.4 + esbuild@0.25.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 + esbuild@0.27.7: optionalDependencies: '@esbuild/aix-ppc64': 0.27.7 @@ -10163,6 +13020,8 @@ snapshots: escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} + escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -10175,6 +13034,8 @@ snapshots: estraverse@5.3.0: {} + estree-walker@2.0.2: {} + estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 @@ -10187,6 +13048,8 @@ snapshots: event-target-shim@6.0.2: {} + eventemitter3@4.0.7: {} + eventemitter3@5.0.4: {} events-universal@1.0.1: @@ -10211,6 +13074,33 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + execa@9.6.1: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.3.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.2 + exit@0.1.2: {} expect-type@1.3.0: {} @@ -10516,6 +13406,10 @@ snapshots: exponential-backoff@3.1.3: {} + exsolve@1.0.8: {} + + fast-content-type-parse@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} @@ -10528,6 +13422,14 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-uri@3.1.2: {} @@ -10546,10 +13448,18 @@ snapshots: fetch-retry@4.1.1: {} + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + filelist@1.0.6: dependencies: minimatch: 5.1.2 @@ -10572,17 +13482,30 @@ snapshots: transitivePeerDependencies: - supports-color + find-up-simple@1.0.1: {} + + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + find-versions@6.0.0: + dependencies: + semver-regex: 4.0.5 + super-regex: 1.1.0 + find-yarn-workspace-root@2.0.0: dependencies: micromatch: 4.0.8 flow-enums-runtime@0.0.6: {} + follow-redirects@1.16.0: {} + fontfaceobserver@2.3.0: {} for-each@0.3.5: @@ -10606,6 +13529,11 @@ snapshots: fresh@0.5.2: {} + from2@2.3.0: + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.8 + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -10618,6 +13546,12 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 + fs-extra@11.3.5: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + fs-extra@9.0.0: dependencies: at-least-node: 1.0.0 @@ -10635,14 +13569,20 @@ snapshots: fs-minipass@2.1.0: dependencies: minipass: 3.3.6 + optional: true fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true function-bind@1.1.2: {} + function-timeout@1.0.2: {} + gauge@3.0.2: dependencies: aproba: 2.1.0 @@ -10654,6 +13594,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 wide-align: 1.1.5 + optional: true generator-function@2.0.1: {} @@ -10685,10 +13626,28 @@ snapshots: get-stream@6.0.1: {} + get-stream@7.0.1: {} + + get-stream@8.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + getenv@1.0.0: {} getenv@2.0.0: {} + git-log-parser@1.2.1: + dependencies: + argv-formatter: 1.0.0 + spawn-error-forwarder: 1.0.0 + split2: 1.0.0 + stream-combiner2: 1.1.1 + through2: 2.0.5 + traverse: 0.6.8 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -10702,6 +13661,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.2.3 + minimatch: 10.2.5 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.2 + glob@13.0.6: dependencies: minimatch: 10.2.5 @@ -10735,10 +13703,21 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + golden-fleece@1.0.9: {} gopd@1.2.0: {} + graceful-fs@4.2.10: {} + graceful-fs@4.2.11: {} gradle-to-js@2.0.1: @@ -10752,6 +13731,15 @@ snapshots: graphql@16.8.1: {} + handlebars@4.7.9: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -10766,12 +13754,15 @@ snapshots: dependencies: has-symbols: 1.1.0 - has-unicode@2.0.1: {} + has-unicode@2.0.1: + optional: true hasown@2.0.4: dependencies: function-bind: 1.1.2 + he@1.2.0: {} + hermes-estree@0.29.1: {} hermes-estree@0.32.0: {} @@ -10790,10 +13781,16 @@ snapshots: dependencies: hermes-estree: 0.35.0 + hi-base32@0.5.1: {} + + highlight.js@10.7.3: {} + hoist-non-react-statics@3.3.2: dependencies: react-is: 16.13.1 + hook-std@3.0.0: {} + hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -10831,6 +13828,40 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1: + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.16.0 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-server@14.1.1: + dependencies: + basic-auth: 2.0.1 + chalk: 4.1.2 + corser: 2.0.1 + he: 1.2.0 + html-encoding-sniffer: 3.0.0 + http-proxy: 1.18.1 + mime: 1.6.0 + minimist: 1.2.8 + opener: 1.5.2 + portfinder: 1.0.38 + secure-compare: 3.0.1 + union: 0.5.0 + url-join: 4.0.1 + transitivePeerDependencies: + - debug + - supports-color + https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 @@ -10847,6 +13878,10 @@ snapshots: human-signals@2.1.0: {} + human-signals@5.0.0: {} + + human-signals@8.0.1: {} + hyperlinker@1.0.0: {} iconv-lite@0.6.3: @@ -10855,23 +13890,47 @@ snapshots: ieee754@1.2.1: {} + ignore-by-default@1.0.1: {} + ignore@5.3.0: {} ignore@5.3.2: {} + ignore@7.0.5: {} + image-size@1.2.1: dependencies: queue: 6.0.2 + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-from-esm@1.3.4: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + import-meta-resolve: 4.2.0 + transitivePeerDependencies: + - supports-color + + import-lazy@4.0.0: {} + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + import-meta-resolve@4.2.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} + indent-string@5.0.0: {} + + index-to-position@1.2.0: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -10881,6 +13940,11 @@ snapshots: ini@1.3.8: {} + into-stream@7.0.0: + dependencies: + from2: 2.3.0 + p-is-promise: 3.0.0 + invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -10894,6 +13958,10 @@ snapshots: is-arrayish@0.3.4: {} + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + is-buffer@1.1.6: {} is-callable@1.2.7: {} @@ -10926,6 +13994,10 @@ snapshots: is-number@7.0.0: {} + is-obj@2.0.0: {} + + is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: {} is-regex@1.2.1: @@ -10939,20 +14011,40 @@ snapshots: is-stream@2.0.1: {} + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.21 is-unicode-supported@0.1.0: {} + is-unicode-supported@2.1.0: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 + isarray@1.0.0: {} + isarray@2.0.5: {} isexe@2.0.0: {} + issue-parser@7.0.2: + dependencies: + lodash.capitalize: 4.2.1 + lodash.escaperegexp: 4.1.2 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.uniqby: 4.7.0 + istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@5.2.1: @@ -10989,6 +14081,14 @@ snapshots: transitivePeerDependencies: - supports-color + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + debug: 4.4.3(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + istanbul-reports@3.2.0: dependencies: html-escaper: 2.0.2 @@ -11000,12 +14100,18 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.2.3: + dependencies: + '@isaacs/cliui': 9.0.0 + jake@10.9.4: dependencies: async: 3.2.6 filelist: 1.0.6 picocolors: 1.1.1 + java-properties@1.0.2: {} + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -11423,6 +14529,8 @@ snapshots: jimp-compact@0.16.1: {} + jju@1.4.0: {} + jks-js@1.1.0: dependencies: node-forge: 1.4.0 @@ -11445,8 +14553,20 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + joi@18.2.1: + dependencies: + '@hapi/address': 5.1.1 + '@hapi/formula': 3.0.2 + '@hapi/hoek': 11.0.7 + '@hapi/pinpoint': 2.0.1 + '@hapi/tlds': 1.1.6 + '@hapi/topo': 6.0.2 + '@standard-schema/spec': 1.1.0 + join-component@1.1.0: {} + js-tokens@10.0.0: {} + js-tokens@4.0.0: {} js-tokens@9.0.1: {} @@ -11501,6 +14621,10 @@ snapshots: jsesc@3.1.0: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + json-parse-better-errors@1.0.2: {} json-parse-even-better-errors@2.3.1: {} @@ -11515,6 +14639,8 @@ snapshots: jsonify: 0.0.1 object-keys: 1.1.1 + json-stringify-safe@5.0.1: {} + json5@2.2.3: {} jsonfile@6.2.1: @@ -11525,6 +14651,8 @@ snapshots: jsonify@0.0.1: {} + jsonparse@1.3.1: {} + keychain@1.5.0: {} klaw-sync@6.0.0: @@ -11533,6 +14661,8 @@ snapshots: kleur@3.0.3: {} + kolorist@1.8.0: {} + lan-network@0.2.1: {} lefthook-darwin-arm64@2.1.9: @@ -11644,24 +14774,52 @@ snapshots: dependencies: uc.micro: 2.1.0 + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + + local-pkg@1.2.1: + dependencies: + mlly: 1.8.2 + pkg-types: 2.3.1 + quansync: 0.2.11 + + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + locate-path@5.0.0: dependencies: p-locate: 4.1.0 lodash-es@4.18.1: {} + lodash.capitalize@4.2.1: {} + lodash.clonedeep@4.5.0: {} lodash.curry@4.1.1: {} lodash.debounce@4.0.8: {} + lodash.escaperegexp@4.1.2: {} + lodash.get@4.4.2: {} + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + lodash.merge@4.6.2: {} lodash.throttle@4.1.1: {} + lodash.uniqby@4.7.0: {} + lodash@4.18.1: {} log-symbols@2.2.0: @@ -11693,13 +14851,28 @@ snapshots: lunr@2.3.9: {} + lz-string@1.5.0: {} + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + source-map-js: 1.2.1 + + make-asynchronous@1.1.0: + dependencies: + p-event: 6.0.1 + type-fest: 4.41.0 + web-worker: 1.5.0 + make-dir@3.1.0: dependencies: semver: 6.3.1 + optional: true make-dir@4.0.0: dependencies: @@ -11720,6 +14893,19 @@ snapshots: punycode.js: 2.3.1 uc.micro: 2.1.0 + marked-terminal@7.3.0(marked@12.0.2): + dependencies: + ansi-escapes: 7.3.0 + ansi-regex: 6.2.2 + chalk: 5.6.2 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 + marked: 12.0.2 + node-emoji: 2.2.0 + supports-hyperlinks: 3.2.0 + + marked@12.0.2: {} + marky@1.3.0: {} math-intrinsics@1.1.0: {} @@ -11734,6 +14920,8 @@ snapshots: memoize-one@5.2.1: {} + meow@12.1.1: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -12108,14 +15296,23 @@ snapshots: mime@3.0.0: {} + mime@4.1.0: {} + mimic-fn@1.2.0: {} mimic-fn@2.1.0: {} - mimic-response@2.1.0: {} + mimic-fn@4.0.0: {} + + mimic-response@2.1.0: + optional: true min-indent@1.0.1: {} + minimatch@10.2.3: + dependencies: + brace-expansion: 5.0.6 + minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 @@ -12137,8 +15334,10 @@ snapshots: minipass@3.3.6: dependencies: yallist: 4.0.0 + optional: true - minipass@5.0.0: {} + minipass@5.0.0: + optional: true minipass@7.1.3: {} @@ -12146,6 +15345,7 @@ snapshots: dependencies: minipass: 3.3.6 yallist: 4.0.0 + optional: true minizlib@3.0.1: dependencies: @@ -12163,15 +15363,26 @@ snapshots: mkdirp@1.0.4: {} + mlly@1.8.2: + dependencies: + acorn: 8.16.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + moment@2.30.1: optional: true + mrmime@2.0.1: {} + ms@2.0.0: {} ms@2.1.2: {} ms@2.1.3: {} + muggle-string@0.4.1: {} + multipasta@0.2.7: {} mute-stream@0.0.8: {} @@ -12189,7 +15400,8 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.27.0: {} + nan@2.27.0: + optional: true nanoid@3.3.12: {} @@ -12208,8 +15420,19 @@ snapshots: negotiator@1.0.0: {} + neo-async@2.6.2: {} + + nerf-dart@1.0.0: {} + nested-error-stacks@2.0.1: {} + node-emoji@2.2.0: + dependencies: + '@sindresorhus/is': 4.6.0 + char-regex: 1.0.2 + emojilib: 2.4.0 + skin-tone: 2.0.0 + node-fetch@2.6.7: dependencies: whatwg-url: 5.0.0 @@ -12232,12 +15455,34 @@ snapshots: node-stream-zip@1.15.0: {} + nodemon@3.1.14: + dependencies: + chokidar: 3.6.0 + debug: 4.4.3(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 10.2.5 + pstree.remy: 1.1.8 + semver: 7.8.1 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.1 + undefsafe: 2.0.5 + nopt@5.0.0: dependencies: abbrev: 1.1.1 + optional: true + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.8.1 + validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} + normalize-url@8.1.1: {} + npm-package-arg@11.0.3: dependencies: hosted-git-info: 7.0.2 @@ -12249,12 +15494,24 @@ snapshots: dependencies: path-key: 3.1.1 + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + npm@10.9.8: {} + npmlog@5.0.1: dependencies: are-we-there-yet: 2.0.0 console-control-strings: 1.1.0 gauge: 3.0.2 set-blocking: 2.0.0 + optional: true nullthrows@1.1.1: {} @@ -12270,6 +15527,8 @@ snapshots: object-assign@4.1.1: {} + object-inspect@1.13.4: {} + object-keys@1.1.1: {} object-treeify@1.1.33: {} @@ -12296,6 +15555,10 @@ snapshots: dependencies: mimic-fn: 2.1.0 + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + open@7.4.2: dependencies: is-docker: 2.2.1 @@ -12307,6 +15570,8 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 + opener@1.5.2: {} + ora@3.4.0: dependencies: chalk: 2.4.2 @@ -12327,6 +15592,30 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + oxfmt@0.36.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.36.0 + '@oxfmt/binding-android-arm64': 0.36.0 + '@oxfmt/binding-darwin-arm64': 0.36.0 + '@oxfmt/binding-darwin-x64': 0.36.0 + '@oxfmt/binding-freebsd-x64': 0.36.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.36.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.36.0 + '@oxfmt/binding-linux-arm64-gnu': 0.36.0 + '@oxfmt/binding-linux-arm64-musl': 0.36.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.36.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.36.0 + '@oxfmt/binding-linux-riscv64-musl': 0.36.0 + '@oxfmt/binding-linux-s390x-gnu': 0.36.0 + '@oxfmt/binding-linux-x64-gnu': 0.36.0 + '@oxfmt/binding-linux-x64-musl': 0.36.0 + '@oxfmt/binding-openharmony-arm64': 0.36.0 + '@oxfmt/binding-win32-arm64-msvc': 0.36.0 + '@oxfmt/binding-win32-ia32-msvc': 0.36.0 + '@oxfmt/binding-win32-x64-msvc': 0.36.0 + oxfmt@0.44.0: dependencies: tinypool: 2.1.0 @@ -12373,6 +15662,22 @@ snapshots: '@oxlint/binding-win32-ia32-msvc': 1.67.0 '@oxlint/binding-win32-x64-msvc': 1.67.0 + p-each-series@3.0.0: {} + + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + + p-filter@4.1.0: + dependencies: + p-map: 7.0.4 + + p-is-promise@3.0.0: {} + + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -12381,14 +15686,32 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 + p-map@7.0.4: {} + + p-reduce@2.1.0: {} + + p-reduce@3.0.0: {} + + p-timeout@6.1.4: {} + + p-try@1.0.0: {} + p-try@2.2.0: {} package-json-from-dist@1.0.1: {} + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + parse-json@4.0.0: dependencies: error-ex: 1.3.4 @@ -12401,10 +15724,26 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.7 + index-to-position: 1.2.0 + type-fest: 4.41.0 + + parse-ms@4.0.0: {} + parse-png@2.1.0: dependencies: pngjs: 3.4.0 + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5@5.1.1: {} + + parse5@6.0.1: {} + parse5@7.3.0: dependencies: entities: 6.0.1 @@ -12433,12 +15772,18 @@ snapshots: tmp: 0.2.7 yaml: 2.9.0 + path-browserify@1.0.1: {} + + path-exists@3.0.0: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} path-key@3.1.1: {} + path-key@4.0.0: {} + path-parse@1.0.7: {} path-scurry@1.11.1: @@ -12453,6 +15798,8 @@ snapshots: path-type@4.0.0: {} + path-type@6.0.0: {} + pathe@2.0.3: {} pathval@2.0.1: {} @@ -12463,12 +15810,39 @@ snapshots: picomatch@4.0.4: {} + pify@3.0.0: {} + pirates@4.0.7: {} + pkg-conf@2.1.0: + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + pkg-types@2.3.1: + dependencies: + confbox: 0.2.4 + exsolve: 1.0.8 + pathe: 2.0.3 + + playwright-core@1.60.0: {} + + playwright@1.60.0: + dependencies: + playwright-core: 1.60.0 + optionalDependencies: + fsevents: 2.3.2 + plist@3.1.1: dependencies: '@xmldom/xmldom': 0.9.10 @@ -12479,6 +15853,13 @@ snapshots: pngjs@7.0.0: {} + portfinder@1.0.38: + dependencies: + async: 3.2.6 + debug: 4.4.3(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + possible-typed-array-names@1.1.0: {} postcss@8.4.49: @@ -12497,6 +15878,12 @@ snapshots: 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 @@ -12510,8 +15897,14 @@ snapshots: react-is-18: react-is@18.3.1 react-is-19: react-is@19.2.6 + pretty-ms@9.3.0: + dependencies: + parse-ms: 4.0.0 + proc-log@4.2.0: {} + process-nextick-args@2.0.1: {} + process@0.11.10: {} progress@2.0.3: {} @@ -12538,22 +15931,38 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + proto-list@1.2.4: {} + + proxy-from-env@2.1.0: {} + psl@1.15.0: dependencies: punycode: 2.3.1 + pstree.remy@1.1.8: {} + punycode.js@2.3.1: {} punycode@2.3.1: {} pure-rand@6.1.0: {} + qr-code-styling@1.9.2: + dependencies: + qrcode-generator: 1.5.2 + qrcode-generator@1.5.2: {} qrcode-terminal@0.11.0: {} qrcode-terminal@0.12.0: {} + qs@6.15.2: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.11: {} + query-string@7.1.3: dependencies: decode-uri-component: 0.2.2 @@ -12615,6 +16024,8 @@ snapshots: react-is@16.13.1: {} + react-is@17.0.2: {} + react-is@18.3.1: {} react-is@19.2.6: {} @@ -12842,11 +16253,42 @@ snapshots: react@19.1.0: {} + read-package-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.41.0 + + read-pkg-up@11.0.0: + dependencies: + find-up-simple: 1.0.1 + read-pkg: 9.0.1 + type-fest: 4.41.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + optional: true readable-stream@4.5.2: dependencies: @@ -12864,6 +16306,10 @@ snapshots: process: 0.11.10 string_decoder: 1.3.0 + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + redent@3.0.0: dependencies: indent-string: 4.0.0 @@ -12890,6 +16336,10 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.1 + registry-auth-token@5.1.1: + dependencies: + '@pnpm/npm-conf': 3.0.2 + regjsgen@0.8.0: {} regjsparser@0.13.1: @@ -12914,6 +16364,8 @@ snapshots: dependencies: resolve-from: 5.0.0 + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} resolve-workspace-root@2.0.1: {} @@ -12993,6 +16445,12 @@ snapshots: dependencies: queue-microtask: 1.2.3 + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safe-json-stringify@1.2.0: @@ -13016,6 +16474,49 @@ snapshots: scheduler@0.27.0: {} + secure-compare@3.0.1: {} + + semantic-release@23.1.1(typescript@5.9.3): + dependencies: + '@semantic-release/commit-analyzer': 12.0.0(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/error': 4.0.0 + '@semantic-release/github': 10.3.5(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/npm': 12.0.2(semantic-release@23.1.1(typescript@5.9.3)) + '@semantic-release/release-notes-generator': 13.0.0(semantic-release@23.1.1(typescript@5.9.3)) + aggregate-error: 5.0.0 + cosmiconfig: 9.0.1(typescript@5.9.3) + debug: 4.4.3(supports-color@8.1.1) + env-ci: 11.2.0 + execa: 9.6.1 + figures: 6.1.0 + find-versions: 6.0.0 + get-stream: 6.0.1 + git-log-parser: 1.2.1 + hook-std: 3.0.0 + hosted-git-info: 7.0.2 + import-from-esm: 1.3.4 + lodash-es: 4.18.1 + marked: 12.0.2 + marked-terminal: 7.3.0(marked@12.0.2) + micromatch: 4.0.8 + p-each-series: 3.0.0 + p-reduce: 3.0.0 + read-package-up: 11.0.0 + resolve-from: 5.0.0 + semver: 7.8.1 + semver-diff: 4.0.0 + signale: 1.4.0 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + - typescript + + semver-diff@4.0.0: + dependencies: + semver: 7.8.1 + + semver-regex@4.0.5: {} + semver@6.3.1: {} semver@7.5.2: @@ -13028,6 +16529,8 @@ snapshots: semver@7.6.3: {} + semver@7.7.4: {} + semver@7.8.1: {} send@0.19.2: @@ -13061,7 +16564,8 @@ snapshots: server-only@0.0.1: {} - set-blocking@2.0.0: {} + set-blocking@2.0.0: + optional: true set-function-length@1.2.2: dependencies: @@ -13086,21 +16590,59 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.3: {} + shell-quote@1.8.4: {} + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} signal-exit@4.1.0: {} - simple-concat@1.0.1: {} + signale@1.4.0: + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + + simple-concat@1.0.1: + optional: true simple-get@3.1.1: dependencies: decompress-response: 4.2.1 once: 1.4.0 simple-concat: 1.0.1 + optional: true simple-plist@1.3.1: dependencies: @@ -13112,8 +16654,22 @@ snapshots: dependencies: is-arrayish: 0.3.4 + simple-update-notifier@2.0.0: + dependencies: + semver: 7.8.1 + + sirv@3.0.2: + dependencies: + '@polka/url': 1.0.0-next.29 + mrmime: 2.0.1 + totalist: 3.0.1 + sisteransi@1.0.5: {} + skin-tone@2.0.0: + dependencies: + unicode-emoji-modifier-base: 1.0.0 + slash@2.0.0: {} slash@3.0.0: {} @@ -13139,6 +16695,11 @@ snapshots: - supports-color - utf-8-validate + socket.io-mock-ts@1.0.3: + dependencies: + '@types/component-emitter': 1.2.14 + component-emitter: 1.3.1 + socket.io-parser@4.2.6: dependencies: '@socket.io/component-emitter': 3.1.2 @@ -13164,8 +16725,30 @@ snapshots: source-map@0.6.1: {} + spawn-error-forwarder@1.0.0: {} + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.23 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 + + spdx-license-ids@3.0.23: {} + split-on-first@1.1.0: {} + split2@1.0.0: + dependencies: + through2: 2.0.5 + + split2@4.2.0: {} + sprintf-js@1.0.3: {} stack-generator@2.0.10: @@ -13203,6 +16786,11 @@ snapshots: stream-buffers@2.2.0: {} + stream-combiner2@1.1.1: + dependencies: + duplexer2: 0.1.4 + readable-stream: 2.3.8 + streamx@2.26.0: dependencies: events-universal: 1.0.1 @@ -13214,6 +16802,8 @@ snapshots: strict-uri-encode@2.0.0: {} + string-argv@0.3.2: {} + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -13236,6 +16826,10 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.2.0 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -13252,10 +16846,16 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-bom@3.0.0: {} + strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} + strip-final-newline@3.0.0: {} + + strip-final-newline@4.0.0: {} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -13290,6 +16890,12 @@ snapshots: tinyglobby: 0.2.16 ts-interface-checker: 0.1.13 + super-regex@1.1.0: + dependencies: + function-timeout: 1.0.2 + make-asynchronous: 1.1.0 + time-span: 5.1.0 + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -13307,6 +16913,11 @@ snapshots: has-flag: 4.0.0 supports-color: 7.2.0 + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} symbol-tree@3.2.4: {} @@ -13328,6 +16939,7 @@ snapshots: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 + optional: true tar@7.5.15: dependencies: @@ -13347,6 +16959,15 @@ snapshots: temp-dir@2.0.0: {} + temp-dir@3.0.0: {} + + tempy@3.2.0: + dependencies: + is-stream: 3.0.0 + temp-dir: 3.0.0 + type-fest: 2.19.0 + unique-string: 3.0.0 + terminal-link@2.1.1: dependencies: ansi-escapes: 4.3.2 @@ -13365,12 +16986,20 @@ snapshots: glob: 7.2.3 minimatch: 3.1.5 + test-exclude@7.0.2: + dependencies: + '@istanbuljs/schema': 0.1.6 + glob: 10.5.0 + minimatch: 10.2.5 + text-decoder@1.2.7: dependencies: b4a: 1.8.1 transitivePeerDependencies: - react-native-b4a + text-extensions@2.4.0: {} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -13381,6 +17010,17 @@ snapshots: throat@5.0.0: {} + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + through@2.3.8: {} + + time-span@5.1.0: + dependencies: + convert-hrtime: 5.0.0 + tinybench@2.9.0: {} tinyexec@0.3.2: {} @@ -13408,6 +17048,10 @@ snapshots: toidentifier@1.0.1: {} + totalist@3.0.1: {} + + touch@3.1.1: {} + tough-cookie@4.1.4: dependencies: psl: 1.15.0 @@ -13421,6 +17065,10 @@ snapshots: dependencies: punycode: 2.3.1 + traverse@0.6.8: {} + + tree-kill@1.2.2: {} + ts-deepmerge@6.2.0: {} ts-interface-checker@0.1.13: {} @@ -13453,6 +17101,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + tunnel@0.0.6: {} + turndown@7.1.2: dependencies: domino: 2.1.7 @@ -13465,6 +17115,16 @@ snapshots: type-fest@0.7.1: {} + type-fest@1.4.0: {} + + type-fest@2.19.0: {} + + type-fest@4.41.0: {} + + typedoc-plugin-markdown@4.12.0(typedoc@0.28.19(typescript@5.9.3)): + dependencies: + typedoc: 0.28.19(typescript@5.9.3) + typedoc@0.28.19(typescript@5.8.3): dependencies: '@gerrit0/mini-shiki': 3.23.0 @@ -13474,16 +17134,40 @@ snapshots: typescript: 5.8.3 yaml: 2.9.0 + typedoc@0.28.19(typescript@5.9.3): + dependencies: + '@gerrit0/mini-shiki': 3.23.0 + lunr: 2.3.9 + markdown-it: 14.2.0 + minimatch: 10.2.5 + typescript: 5.9.3 + yaml: 2.9.0 + typescript@5.8.3: {} + typescript@5.9.3: {} + uc.micro@2.1.0: {} + ufo@1.6.4: {} + + uglify-js@3.19.3: + optional: true + + undefsafe@2.0.5: {} + undici-types@6.21.0: {} + undici@5.29.0: + dependencies: + '@fastify/busboy': 2.1.1 + undici@6.26.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} + unicode-emoji-modifier-base@1.0.0: {} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 @@ -13493,10 +17177,26 @@ snapshots: unicode-property-aliases-ecmascript@2.2.0: {} + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + union@0.5.0: + dependencies: + qs: 6.15.2 + unique-string@2.0.0: dependencies: crypto-random-string: 2.0.0 + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 + + universal-user-agent@6.0.1: {} + + universal-user-agent@7.0.3: {} + universalify@0.2.0: {} universalify@1.0.0: {} @@ -13505,6 +17205,11 @@ snapshots: unpipe@1.0.0: {} + unplugin@1.16.1: + dependencies: + acorn: 8.16.0 + webpack-virtual-modules: 0.6.2 + untildify@4.0.0: {} update-browserslist-db@1.2.3(browserslist@4.28.2): @@ -13517,6 +17222,10 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@4.0.1: {} + + url-join@5.0.0: {} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -13573,6 +17282,11 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + validate-npm-package-name@5.0.1: {} vary@1.1.2: {} @@ -13586,13 +17300,15 @@ snapshots: - '@types/react' - '@types/react-dom' + vite-bundle-analyzer@0.18.1: {} + vite-node@3.2.4(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0): dependencies: cac: 6.7.14 debug: 4.4.3(supports-color@8.1.1) es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.3.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + vite: 6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) transitivePeerDependencies: - '@types/node' - jiti @@ -13607,6 +17323,40 @@ snapshots: - tsx - yaml + vite-plugin-dts@4.5.4(@types/node@22.19.19)(rollup@4.60.4)(typescript@5.9.3)(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + dependencies: + '@microsoft/api-extractor': 7.58.7(@types/node@22.19.19) + '@rollup/pluginutils': 5.4.0(rollup@4.60.4) + '@volar/typescript': 2.4.28 + '@vue/language-core': 2.2.0(typescript@5.9.3) + compare-versions: 6.1.1 + debug: 4.4.3(supports-color@8.1.1) + kolorist: 1.8.0 + local-pkg: 1.2.1 + magic-string: 0.30.21 + typescript: 5.9.3 + optionalDependencies: + vite: 6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + + vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0): + dependencies: + esbuild: 0.25.12 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.15 + rollup: 4.60.4 + tinyglobby: 0.2.16 + optionalDependencies: + '@types/node': 22.19.19 + fsevents: 2.3.3 + lightningcss: 1.32.0 + terser: 5.48.0 + yaml: 2.9.0 + vite@7.3.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0): dependencies: esbuild: 0.27.7 @@ -13622,7 +17372,7 @@ snapshots: terser: 5.48.0 yaml: 2.9.0 - vitest@3.2.4(@types/node@22.19.19)(jsdom@20.0.3(canvas@2.11.2))(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0): + vitest@3.2.4(@types/node@22.19.19)(@vitest/browser@3.2.6)(jsdom@20.0.3(canvas@2.11.2))(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0): dependencies: '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 @@ -13649,6 +17399,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.19.19 + '@vitest/browser': 3.2.6(playwright@1.60.0)(vite@6.4.3(@types/node@22.19.19)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(vitest@3.2.4) jsdom: 20.0.3(canvas@2.11.2) transitivePeerDependencies: - jiti @@ -13666,10 +17417,25 @@ snapshots: vlq@1.0.1: {} + vlq@2.0.4: {} + + vscode-uri@3.1.0: {} + w3c-xmlserializer@4.0.0: dependencies: xml-name-validator: 4.0.0 + wait-on@8.0.5: + dependencies: + axios: 1.17.0 + joi: 18.2.1 + lodash: 4.18.1 + minimist: 1.2.8 + rxjs: 7.8.2 + transitivePeerDependencies: + - debug + - supports-color + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -13680,12 +17446,16 @@ snapshots: dependencies: defaults: 1.0.4 + web-worker@1.5.0: {} + webidl-conversions@3.0.1: {} webidl-conversions@5.0.0: {} webidl-conversions@7.0.0: {} + webpack-virtual-modules@0.6.2: {} + whatwg-encoding@2.0.0: dependencies: iconv-lite: 0.6.3 @@ -13732,6 +17502,7 @@ snapshots: wide-align@1.1.5: dependencies: string-width: 4.2.3 + optional: true widest-line@3.1.0: dependencies: @@ -13798,6 +17569,8 @@ snapshots: xmlhttprequest-ssl@2.1.2: {} + xtend@4.0.2: {} + y18n@5.0.8: {} yallist@3.1.1: {} @@ -13810,8 +17583,20 @@ snapshots: yaml@2.9.0: {} + yargs-parser@20.2.9: {} + yargs-parser@21.1.1: {} + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + 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: 20.2.9 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -13826,4 +17611,8 @@ snapshots: yocto-queue@0.1.0: {} + yoctocolors@2.1.2: {} + + zod@3.25.76: {} + zod@4.4.3: {} diff --git a/stores/ac2Messages.ts b/stores/ac2Messages.ts new file mode 100644 index 0000000..72a1f98 --- /dev/null +++ b/stores/ac2Messages.ts @@ -0,0 +1,79 @@ +/** + * Typed store for AC2 protocol messages (the signing trio and any other + * `Ac2Message` the wallet observes on a DataChannel). + * + * Kept separate from the free-text chat store (`./messages.ts`) so the + * protocol surface stays unambiguous: anything that flows through here is + * a DIDComm v2 envelope validated by `@ac2/ac2-sdk`, never user-typed + * text. The chat screen renders both stores in one timeline. + */ + +import type { Ac2Message } from '@ac2/ac2-sdk'; +import { Store } from '@tanstack/react-store'; +import { createMMKV } from 'react-native-mmkv'; + +export type Ac2Direction = 'inbound' | 'outbound'; + +export interface Ac2MessageEntry { + /** Local id for list rendering; not part of the wire envelope. */ + id: string; + /** Local receive/send timestamp (ms). */ + receivedAt: number; + /** Connection scoping — mirrors `messages.ts`. */ + origin: string; + requestId: string; + /** Local controller address (when known), used for filtering. */ + address: string; + direction: Ac2Direction; + /** The validated DIDComm v2 envelope. */ + envelope: Ac2Message; +} + +export interface Ac2MessagesState { + messages: Ac2MessageEntry[]; +} + +const ac2LocalStorage = createMMKV({ id: 'ac2-messages' }); + +const loadInitial = (): Ac2MessagesState => { + try { + const stored = ac2LocalStorage.getString('messages'); + if (stored) return { messages: JSON.parse(stored) }; + } catch (error) { + console.error('Failed to load ac2 messages from storage:', error); + } + return { messages: [] }; +}; + +export const ac2MessagesStore = new Store(loadInitial()); + +ac2MessagesStore.subscribe(() => { + try { + ac2LocalStorage.set('messages', JSON.stringify(ac2MessagesStore.state.messages)); + } catch (error) { + console.error('Failed to save ac2 messages to storage:', error); + } +}); + +export function addAc2Message(entry: Omit) { + ac2MessagesStore.setState((state) => ({ + ...state, + messages: [ + ...state.messages, + { + ...entry, + id: Math.random().toString(36).slice(2, 10), + receivedAt: Date.now(), + }, + ], + })); +} + +export function clearAc2Messages(address: string, origin: string, requestId: string) { + ac2MessagesStore.setState((state) => ({ + ...state, + messages: state.messages.filter( + (m) => m.address !== address || m.origin !== origin || m.requestId !== requestId, + ), + })); +} From 8c23e9ec66fab8104b982b210708de283a452284 Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Fri, 5 Jun 2026 18:16:18 +0700 Subject: [PATCH 02/16] feat: add unistyles --- babel.config.js | 27 +++++++++++++++++++++++++++ index.ts | 2 ++ package.json | 5 +++-- pnpm-lock.yaml | 42 ++++++++++++++++++++++++++++++++++++++++-- unistyles.ts | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 118 insertions(+), 4 deletions(-) create mode 100644 babel.config.js create mode 100644 index.ts create mode 100644 unistyles.ts diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..688475a --- /dev/null +++ b/babel.config.js @@ -0,0 +1,27 @@ +const path = require('path'); + +module.exports = function (api) { + api.cache(true); + + return { + // use the expo preset + presets: ['babel-preset-expo'], + // Ignore sibling workspace projects under /packages for this app build. + ignore: [ + (filename) => { + if (!filename) return false; + return filename.includes(`${path.sep}packages${path.sep}`); + }, + ], + // other config + plugins: [ + [ + 'react-native-unistyles/plugin', + { + // pass root folder of your application + root: 'app', + }, + ], + ], + }; +}; diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..1df3241 --- /dev/null +++ b/index.ts @@ -0,0 +1,2 @@ +import 'expo-router/entry'; +import './unistyles'; diff --git a/package.json b/package.json index d284aff..d11d3f5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "workspaces": [ "packages/*" ], - "main": "expo-router/entry", + "main": "index.ts", "scripts": { "start": "expo start", "android": "expo run:android --port 8082", @@ -79,13 +79,14 @@ "react-native-json-tree": "^1.5.0", "react-native-keychain": "^10.0.0", "react-native-mmkv": "^4.3.1", - "react-native-nitro-modules": "^0.35.0", + "react-native-nitro-modules": "^0.35.9", "react-native-passkey": "^3.3.2", "react-native-quick-base64": "^2.2.2", "react-native-quick-crypto": "^1.0.15", "react-native-reanimated": "~3.19.5", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", + "react-native-unistyles": "^3.2.5", "react-native-webrtc": "^124.0.7" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95b2ae0..c9fff2b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -153,7 +153,7 @@ importers: specifier: ^4.3.1 version: 4.3.1(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-nitro-modules: - specifier: ^0.35.0 + specifier: ^0.35.9 version: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-passkey: specifier: ^3.3.2 @@ -173,6 +173,9 @@ importers: react-native-screens: specifier: ~4.16.0 version: 4.16.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-unistyles: + specifier: ^3.2.5 + version: 3.2.5(@react-native/normalize-colors@0.81.5)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-webrtc: specifier: ^124.0.7 version: 124.0.7(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) @@ -860,6 +863,10 @@ packages: resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} @@ -1048,7 +1055,7 @@ packages: '@expo/bunyan@4.0.1': resolution: {integrity: sha512-+Lla7nYSiHZirgK+U/uYzsLv/X+HaJienbD5AKX1UQZHYfWaP+9uuQluRB4GrEVWF0GZ7vEVp/jzaOT9k/SQlg==} - engines: {'0': node >=0.10.0} + engines: {node: '>=0.10.0'} '@expo/cli@54.0.25': resolution: {integrity: sha512-WnUqIb8oMBhtwSfIqdCHCzcaDIpLNXItRVd5miuvWi4GO0SGo89PSsAkbVJ+LJgcaY+v5rbgMELJS9I/CqOulA==} @@ -5320,6 +5327,22 @@ packages: react: '*' react-native: '*' + react-native-unistyles@3.2.5: + resolution: {integrity: sha512-IiNhQfv98Rhis+fu1CIlTqp1wqAcADkpUmNVSW2stxHkMOU1EkLIyBC50mT/mVTgZugyBJdP9ytUiNJVJkHiWg==} + engines: {node: '>= 20.18.0'} + peerDependencies: + '@react-native/normalize-colors': '*' + react: '*' + react-native: '>=0.76.0' + react-native-edge-to-edge: '*' + react-native-nitro-modules: '*' + react-native-reanimated: '*' + peerDependenciesMeta: + react-native-edge-to-edge: + optional: true + react-native-reanimated: + optional: true + react-native-webrtc@124.0.7: resolution: {integrity: sha512-gnXPdbUS8IkKHq9WNaWptW/yy5s6nMyI6cNn90LXdobPVCgYSk6NA2uUGdT4c4J14BRgaFA95F+cR28tUPkMVA==} peerDependencies: @@ -7196,6 +7219,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/types@7.29.0': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/types@7.29.7': dependencies: '@babel/helper-string-parser': 7.29.7 @@ -12630,6 +12658,16 @@ snapshots: react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) warn-once: 0.1.1 + react-native-unistyles@3.2.5(@react-native/normalize-colors@0.81.5)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/types': 7.29.0 + '@react-native/normalize-colors': 0.81.5 + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + optionalDependencies: + react-native-reanimated: 3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-webrtc@124.0.7(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)): dependencies: base64-js: 1.5.1 diff --git a/unistyles.ts b/unistyles.ts new file mode 100644 index 0000000..f74cc38 --- /dev/null +++ b/unistyles.ts @@ -0,0 +1,46 @@ +import { StyleSheet } from 'react-native-unistyles'; + +const lightTheme = { + colors: { + primary: '#ff1ff4', + secondary: '#1ff4ff', + }, + gap: (v: number) => v * 8, +}; + +const otherTheme = { + colors: { + primary: '#aa12ff', + secondary: 'pink', + }, + gap: (v: number) => v * 8, +}; + +const appThemes = { + light: lightTheme, + other: otherTheme, +}; + +const breakpoints = { + xs: 0, + sm: 300, + md: 500, + lg: 800, + xl: 1200, +}; + +type AppBreakpoints = typeof breakpoints; +type AppThemes = typeof appThemes; + +declare module 'react-native-unistyles' { + export interface UnistylesThemes extends AppThemes {} + export interface UnistylesBreakpoints extends AppBreakpoints {} +} + +StyleSheet.configure({ + settings: { + initialTheme: 'light', + }, + breakpoints, + themes: appThemes, +}); From dda11b11ebf7e1dc8d13886996806d9c5481991e Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Fri, 5 Jun 2026 18:48:54 +0700 Subject: [PATCH 03/16] base components & styles, add+load fonts --- app.config.js | 9 ++ app/index.tsx | 22 ++- ...usJakartaSans-Italic-VariableFont_wght.ttf | Bin 0 -> 178708 bytes .../PlusJakartaSans-VariableFont_wght.ttf | Bin 0 -> 173760 bytes components/Button.tsx | 129 +++++++++++++++ components/Text.tsx | 107 +++++++++++++ unistyles.ts | 150 +++++++++++++++++- 7 files changed, 404 insertions(+), 13 deletions(-) create mode 100644 assets/fonts/PlusJakartaSans-Italic-VariableFont_wght.ttf create mode 100644 assets/fonts/PlusJakartaSans-VariableFont_wght.ttf create mode 100644 components/Button.tsx create mode 100644 components/Text.tsx diff --git a/app.config.js b/app.config.js index efe1f71..929b630 100644 --- a/app.config.js +++ b/app.config.js @@ -65,6 +65,15 @@ module.exports = { }, plugins: [ 'expo-router', + [ + 'expo-font', + { + fonts: [ + './assets/fonts/PlusJakartaSans-VariableFont_wght.ttf', + './assets/fonts/PlusJakartaSans-Italic-VariableFont_wght.ttf', + ], + }, + ], [ 'expo-splash-screen', { diff --git a/app/index.tsx b/app/index.tsx index a247f8a..43e332d 100644 --- a/app/index.tsx +++ b/app/index.tsx @@ -1,12 +1,20 @@ -import React from 'react'; -import { View, Text, StyleSheet, ActivityIndicator } from 'react-native'; -import { Redirect } from 'expo-router'; -import Constants from 'expo-constants'; -import { useStore } from '@tanstack/react-store'; -import { logsStore } from '@/stores/logs'; import Logo from '@/components/Logo'; import { useProvider } from '@/hooks/useProvider'; +import { logsStore } from '@/stores/logs'; +import { useStore } from '@tanstack/react-store'; +import Constants from 'expo-constants'; +import { useFonts } from 'expo-font'; +import { Redirect } from 'expo-router'; +import React from 'react'; +import { ActivityIndicator, StyleSheet, Text, View } from 'react-native'; export default function Index() { + const [fontsLoaded] = useFonts({ + 'PlusJakartaSans-Regular': require('../assets/fonts/PlusJakartaSans-VariableFont_wght.ttf'), + 'PlusJakartaSans-Medium': require('../assets/fonts/PlusJakartaSans-VariableFont_wght.ttf'), + 'PlusJakartaSans-SemiBold': require('../assets/fonts/PlusJakartaSans-VariableFont_wght.ttf'), + 'PlusJakartaSans-Bold': require('../assets/fonts/PlusJakartaSans-VariableFont_wght.ttf'), + 'PlusJakartaSans-Italic': require('../assets/fonts/PlusJakartaSans-Italic-VariableFont_wght.ttf'), + }); const { keys, status } = useProvider(); const logs = useStore(logsStore, (state) => state.logs); const lastLog = logs.length > 0 ? logs[0].message : 'Initializing...'; @@ -15,7 +23,7 @@ export default function Index() { primaryColor: '#3B82F6', }; - if (status === 'loading') { + if (status === 'loading' || !fontsLoaded) { return ( diff --git a/assets/fonts/PlusJakartaSans-Italic-VariableFont_wght.ttf b/assets/fonts/PlusJakartaSans-Italic-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1ccaf53d38aba48d9aa5f6a000ccf93bc2f6c8a0 GIT binary patch literal 178708 zcmeFa2Yi%8w?95@H_2`q>77kTqi;#2r_y^U(vuJ%kb)^R6;S~Jv5R6y1PdZIM8$@P zh^PqIupwQ9sDKbU`G04gXEz%_ufFf=z4!P3-0Ww{nRBMkoS8Y#%n6}{kRVusbnBj* zmw#>ClpTcd8W?l;0sRNxw|wQ(gxoThkkOmE4<3>odXCN^q|5b$1h4KfG;7eP6P5#n zH2;JU@A$re51!j@BZTfks`>o~x3_Ny9kY`V26{4Xa6wkV$q75B0RA5E(&F;Msqc(= zHh~bI3xs&ipD?Yk>h3Q~mjG`8e$>Rm>Zx%3kzN5@&xvI-C#+t58`9g`gOCq?oe27( z!}CWF`g8`N0pCw5DI6c?7m^A3WuQ-+gaEG&W)4{9A3v$QW=1OewvLe2#|Q~nR90DB zn9z4<7$G63pI49a!WmP=D`X?+M}gi_QCMEGzb5zwLX2|=@t8HWvbyHW+aH3zAeoT% zBc@iBOr2z0JP-7JK=1K7ZJ76>xE&y&4GqK(E)h?X@x+6SA_fV${c%YJyl+DsA%x zFxsD%nYA!b1kxFkCZb=Z55`;BQLxztvO$KDZuqJAG7Va9I%kwFj6Xst2|_(Q zr%#+zL$)CJE{qThaD;Ly;K(ooOdA-)lX&U@a}vfA$qt9>1@|quCOxiTeL#m;Y!MsY zaEkPnF0s)uB$;N*w4HxX5Yo_%jJwVW7xeGlpWH-z&NIFJ{ONcLq4!EW3u8aSu@J3= zWeZ@06O@6(6DG?~F(OK93d>MVin>LSWRgL0$pG}yBvoHR&9Xka-&@uRsUd0VBkLvW zpyPaH{dB*dtfTJtccW>h+DY}cYDY=KkrRd>4F1qQzG#Jflp~ph;fL1d8N8E3VP10D zLG^3jImjAujD)jQDx@t!I31$=ec;!q7b|$6qK-gVHcT#g6!zojXo~T@5%wnhDA|me zLg{k)8SEW&2kg&TD4{Hp#lmjETEI?ZU14W2q{DLASlGpEF6{YiKJ0~TA?(}O^RQpw z>3Yc-@65Zv{}cZS_Ce^C;2J#Ljw=xVPdnmC>jJ6+;HB&j2DgE=xOvaCL3FN zeB*J^2GT+F()~u#M#SiTPvS3pb-x#h;wN;!iEQHS zbibKc*(KfY?dJEParApV+?S-$r*wZfX@wO_2`ML~F1Rn? z@qlX)Itc!W@RcE673qV}iQsWHq%pOtg*j8Uke;9|MC?*h>`K3B=;gUL#k!ZJDW);s zrr}pBSyPH(sFSlEGL;I{X^N_!g=C?uHNaOPv{3n~QR`a3wWJz-b9Hw#pEuf#IXa}QIeE|1I zStPA{%CgOhRcJNrHoy&qTcye-bGHy1N+^xRtz=E}b(W@(Ohfr(oeDAT%aD!*B`#Iv zupmt4n?(k~mA%mc?!VSTm&clpT&AOhHE5+NFg0YRs%bmatP>4yk!=5o zfVGyBIN55>{M|2FvNt3w=blzu8CTY-ROKM&y`<}o{wPOTWE;r(4}v`j zW+uWdNTUkW z<|^?kLtBkRcsr5_SZ%ePmfYC}$rV7k!m|qQJ~9Wp$Rgqc&XGxGlhw2bolWng_s}Qk zi}Vxv6FrJOVq50G-r^eeA^U*~?#=yp0FUJHJejxSHhv#}mT&Ow8sin?7ZVy29TOXq z5YsxQeN1{x$C#cmgJVXI(=yw#&~k_63Cjx08q2Ge^_F*I17kyC<6;wI+r<{dj){FRc2(>vaV*Xl z=NA_c7aSK67ZcYyu1DOsxRQh?5?)DoE#d8i_Yyu#_&DLSL}P2;*8b-iPH8xNqLr=S z7|X~S+Dp}O8GV6nqKD`adXBYXR#nH%Y!@foh&nby9b53kCUx|T@s0_KiHfnr#K*LX zX%~|g(;+51rcca>m@zSBF*9Q3#M}{ckE-J`3$u8jjscc1OO(Z;>S(uQsyfzKW?AM~ z7NL$$TAs4JWO?24mRlVM$BvA>EB4vg7g0w8>evi*40qLWe8RGXmlM_{yp^yaVROP( z)X|{oh?6Lvi(`U*)*$54TGkD{@zY3;2rqAx!=6+^?l*{ zf&o9hZ~4AdxbZmWABXF|&#-sz-ggPv{kAjKZj@*D!XG~SrpGtkJv*q8y9c-nbS`~_ zZI@I$g{R>R)r0rqefS+*FF(fQWBe(Jzw(bi0^AC|im&Et_>25yzLu}!uk+3P3;q?a z<0tqT!Gw_Uggl=}ca2ypUKjE-D53SbyAFPYiH%~D_(FUy_GsZwTkO*54uD2CddO~s z>=t{(zNX<4%NOtm_;&sz|5ar0U3`Zs-EtAk@8!?%dr+Gk#$pcNOcs!P$bC2kZp7JdGfrCj$j|C55lv%gGJlId#orNa`AcFcZA;?8N=DmTNxS2c9R(tt+(TXqROZib8 zTYnLP@8jQ!`}ub`4Q>&w`S)TO-z}2(9Db8{P^9s1_@m+pek1R~xAF=;g;(;2u>)nq zi-co`8j3xt1zfx>){6{q!y>F0lSylwWS_@eT~6L6&x&yJCOJ)xlHbVhv^ja7t)bUa z8|_PPr=@fry_-HjH_#PyHC@ll^gL}~oIb%uvuoLSHi6y5%0(o*k$u57vMp>I_hSoq zC<&%F;7pxLLg-B-hAzSG{z1}$K17<+`$-~wge1{NNf)}Aw8Lp2lfFf==qIE-eTMYI zNudY*iWJa&WFY;KjHbuQNP3i9&w|Me){Km&7s)IZNGj-AQiwD592P_7;e?$)7O|FO zF>6n5V{ORo%ueoRoyh&H2U*Jckq20B@)#ROUSrphCs+x2mCYpYv3X<*yMuhf?ju{- z-Q;Vwf_%@OCEu}U$T#dMa*(}B4zO3qe)bX#WS6L!oglxk4`?%Xo_er4>c`H|2<|~G zJdnoHmOO>F=4rGQPbDv~YI2@^OA>ItSw+jMYgdA$WHbsInF+&UhFsW1Edy**lT1J zs~{U7L3oZ;(nQ``JSrX#kBQ~taq*C-5S5S+%oI0>X`&1ggPX*3ajmGq8F49OLXVM_ z^l{P+l7g;u3$fBwWEee2#y|!$ivCKem9tAXvI@w^3X z!JE?roy@zeYazW~|7&!UgW7d=ET(NFXjeMNWC zQ}hlQyqt0)%D<0_hE*w zCT~Fs_XXKQ>c|<$KKyAEO{OWd8|_1f)A4jMT}pQ_Bjg-0Sfx9#d^U*9U<=rN?0xnb z`;Hyu5m*Jff&UNZlXwld&RyW~&wz7oK#h0t1E|jh;fZ=%L>rMIa>cC}hd&sa8%7&S z4Yh`w47VE|G^{kdWO&=~k>N|jUc)bjvqpolnK9bf(wJ)OZ>%!jU|eWiVq9)qZ`^F$ zY20l*VyuVs#MdLjBhka|(Z!>e$54+Vj|z{O9&~ z_om-he*64>@jK(s{eAt@{CoKi^)K?T@So*B-~S%}$NX3Muk+vNzs>(!|3m&K{4X^# zHS5`|rrDfki<>QNwxZdK&E9IZrP&wF_B5+&b|yds_y|(I6XK!xNq?A;Nswl;F-a5gYOMq9{f`9hTxBbzY5+P zTo-&ggoXHogoVV1SVKC6^avRoGA5)nq$cFXkVPR&LY9TR5b{pQry<{m{1kE`3dEn%OB?GF1n>||I&xG6k1+!Ee8 zJS{vcyifS%@SPDp5#1vCL=1~4j;M~99kD3lgNPlG!I80%Z6Z5G-WmCE6p8YV3X5tH z)h;SCDmQ9S)VQcAQPZMsidr1?aMY@(SEDvWeH`^w)ZVDNsMFCb+9x_JIzHMO-6^_9 z^x)_*(WTKf(Kkjfie3`EEc&_Vb*x6=TMqtPOoaGbCNlQblDKzP44U8KV zHz}?i?}^;N8?Vnh;EV6Vswk^TP$v|rp5Xen_KK`aXj8X zJ~BQrJ}-Vyd{O+Y`1$eo#6K3lD*n~@4e=kxe-*zsfh5Ew^iCL>P?%7bFeBlXggX)* zOn4z-OTy2IZ4$dDPDz}ecuV4)iLWJooOn3#WD-g8P6|zmOKO{xk(86vFKI;5grusZ z*-49%?oV2tv?ghN(g#V~lfFwjlyp4lLUMZYnB?1&-%I{9c~|oO0XWOi8^KP51ZN6-?r_Iqe^=)Ze@3x_B zZNIkHv>o5Jvh53P*SGzk?e@0cwLR4Kc-sr@JlX}cv$UJoZb`cr+O2Q* zLAxF8erR{N-S6!#wfAZt)V_K9R_#;UcWd9feQo=N?O$yFR{JgOzi9ts`y=g7S&7wb z4Y9^r+gQ`B+19?+;nwliO6zsj`PRFwk653!zHEKlde&yKjkHa)RoiZ~-DZ2h_M~l% z?G4)|+h?|KZ3k_~Z0GGpdoz2KJ;`pjceeMi54Ml7m)dLWH`*83@3%i;Uu}QQzR~`v zeV2W|{a5>0hj92gS~zkX{T(A56C72JI~;E~K6e~RNlLM&bWZ7!Qjjt>WpYYw%AAzj zQtnTAB4u^TYbhI3K27;1KmzFr2d$CB=uApN$Z=oJneLPa{4vt52b&cekda`qiaTW#w{5yXB^2iXZFav zCG-BwUputyFr>re4of?1?{K`MwPSh5IURR(3hLCY(|}I1I<4-swNpc9Tj!k4cXWQQ z^RJy7y0q#ty36%lUhZAy{pDnj$S%*mE&Ji@7qT~H zf0|>+>5|huryyrkPF2pGIS=H#nsX@URL;d*b8cX+B{w-YHMetauiQboBXWy!C+AMj zy(f2d?v~u`xplcG^V;U6=2hfP%UhUtcixJ;)p;N0?ae!r-#ov2er5ix`H$tlmj7=4 zuKYdu$MVl~_w4T9y+wCx_sQL#>;8WCBR$6UnAGEg9zXOP*z=WM#$NVb<9e0%n$zo! zUMqUN)$3&Mklw|;D|_G5`(U5gJ|p`)(dSs-&VA?g{jl%Bey#h>?)OB$z5PS_ckN%^ z|IYqz^*=VC#ent$#t&FB;QawV3?u`S2M!omHt@QEcMV)Q@STC*3_LZ+Yf#Lfj6ns1 zss`;GJYw*~!L@^L8+`BJWrLp?{NCV?1|Jw)S3nEA3K9$273383E+{N0EtprZykJAY zmLYyaQitRZ={KZk$ZJE+4sA8mKD5Ko!9#0?-aYi4VTNH-hFusQIK0*H+~H$~UqAfr z;ZG0WIDGf;3)hUg=HN9ABO*tnjTkhde8j>LPmb6y;^&b8BfE{P7iSWON39&Sanxs{_K!L?>e6WQ=EHPo zs5mDsF)C*KC3~B2{%$i;Q6;4Pub7vyx0B{|W)xrQ_UEFj_}ukd0pDCP7{Bde1B~-VVG zdgagH`okATgLnb<|KqL!2NZEy{ObP07s-K`QTU0w#mC|-zM1}W=0UMk?8WcEU$WOi zwzLtlr>olwL>F-lWI=ys{)}dbSS;?sIb7P4bo&wUu#n~su|SN*2~M*^JbgX=b^lN? zRE*U9Lv+_)5MdM_K??STZoeqji8sZc+mj&ynC(tuB;qykzBuyl{|sK}<$W+m#SZa< z_zE(HzizLAyzk22R>&%@m&P;LGsx+0;=U^Wm0w?+q5rGj-%a;hoWPyG60sWR@M7li zA9KeD=kJ)fVBq3y@e^(u{4CCk-ysPo5aA+E%oCl(GBIBa5S>JY5uX??|B1tpf&Ped z_!99QWIs2Hcf}%cSlj}s=zR$LM1{S9uoTf;_&}!MEqrl;4}<(75VF&W;seN$9>BU( z4k^;phPkeIsq@GmBKd>H8 zFVPM1htF_t!z7-^Z>*<}ILXZ7El;yBi8N175rf}KPY*H8U=+v22(>bw!rJ_dxZmI@ z4vOEzCGo6y&Ok(+h``G5gm^`)7pugbVv9H-4q@%sCH%xzPd~_FridCyrfcCA39~4L zsTFY|QrsvO0`qr&^#%`-i5@;@y_mPdg$EXdS}{kw15<-sydcB#L`b}d5>}B8 zNlTVU7HN*z4-9+8X#C!p>?IOa)97ZgJpRi=-gy)|1!PlcjHw+dm|C zY$XdmCbxY|-u#3-u#GJIj6AiS%=wC}|BC#ui`?`LS@8{-^DVjMTQYAqxpg;rU^lt{ zM{>(PvS6P|O|CtJJdC?&`i-bnky{3QG;-UpowIgc_eJCvgv!2U2H}L$~^B(8T=L60sp3lB;@dCRLav}UeJZ@|GUktw( zaWU#*^hL|16PE%mMPEw4lyRveZfFHG1T{oAG;ipHFCxcrBg>BlQ5*Y#?PG`8dECXq zWh#tRKNifQ@U0|?C9_T}3o=#%w_=ZZ5cBXPc$U?0(ok=RHdu{2j7M?%iW;Lm&UlzS z{5|45kKxwUB~R{U_6jr^O;P6a-Ujbh-o0>z>{q`}{0#v=2gU?u2OkOkHRSV76 zejOcxdp+vz)!|bO9wu{O+qCqIOpG5HMo!Bcj%)+j0FaPw_(3*&BU{{X@SisPn}&nZ z;2xxdN0EVlWKbT5c#b%v3zMk3&agy$^KkrAhIb=!2fm@TcH$I#3&LdhzvA9X+OWT948EYno!mb#oiJy5u=i1p|AdSAr_%YW z?!S}oV$zTAy3(*A-~*MU-(NC48;-NfO=s{0X$I-;|H1#G?SVc{lm@$?WHz2;{GoZ2 zr1Nl+j&Hy&BgVqNh785G%?y0w%=mxMO{I(R{dN&a!S`)DOr~!BGyX1U)6Tl-LPFrz zOw({Lglonvocx4u$?oL0Wjj^GN42q<0Q*B3=_>l$g1M50A}+l$9Q`s1W_rVJdWnSp zRl`Q(HqLz9p_m6VA9pY2!CVi&G>zd-{8e4_i4AQp+u!<+`wNg)0rDz9UjL5&pDwe3 z*m(4nh91G19oFzA%x)Hjx?~am|7|ec*l_%E!_6dxe+cs%_;U}Kso>RHa4YL98OMg= zOmZtp#k-|WY&XJcND=NTwPb}P26t*=u^z>kGR6ptFLm4d~i}&I&pQ=-Ps=6X^Pp zRX8ZZ;7%3ckj0^HgvKE3QHH#zBx?yk`>K3gV>1XsdGMAhpb7>t3Q)k;M(v?f|B{A@Lcjt+7haILhUrB=Ho}8{H#q?am8NAx<3^NL4?M6Ss*pP5N z+V?%Q*=gKzd=KURh(zLyo-ZOvKJY#1*SPmL7Ihg*y25ma84i;QlMmwzPlI3LoNhAw znJ_b87Q(cEk@5UtVqxN7dc(;0qhMz72T32k0OdJ~`^<6<%efqjo0Q`KS7WYr!G7p| z(uw~}MjMvl_N6TU7L4};WSnwkz3MUV-a}naqs|*)J|Z32VNxO@FedLJ*=!N+5bi*^ zo1KL+I@7x!ewj{^ZY*#UVcNm8hmkJ@iY_x<0Z()@<8YVp zVa%zA={WKt%)|6&m_5q8NWUkm=*{FQz>nar=woy?(wC`A`KF1+unvUf=JzQehsz3U zD)46QW#XANBF{n=2SEkGmlchWjb zdNtbM!oso|8dNN8-{QjR66#r8Tt1atQuc}Q6_w?rZbDUIG1*sEIK0J5&Sv|<8zvAWu7BTvD$lSg1X$UW7yMb%_+b?ww@GQUPr z&QZ0ARJOmeebJ_rSkT1sojE1V;iJlj^+9$eEI(yOz-A;Arw|#Y)m3{7s>v!%Dm)rC zS3MG}VA*>@^_~~bC=w@oQu^d=c4^1LX3E#1Su#G2czXqSp23aD4a#)$Y~yM2*oOO+ zz3?*`PZ$pvx5HjwoMr4}j4+%r>@n;#^e_m1AKQr8QG^?(ve*=-ABM5Q@P!I*p9#Z# z_GeHpnO7Xb@iNAEAHucKh4-HDQ&7n8>#qnmAw*A;`jdHhTh)v7#ao=gc>8t@xslw2 z_2X9Z0r?Q8sE@I#enxhX&&ik6ikqz&v=eT(=HjhQA3A^*;FjwsIu18oC($xGmDbQ1 z^m;l6ZyXlj?(1FjNxG6gO`oOD(dY4A1Xsyx{H2CchkM}0ABALp}){$^mkeh8Fg#cj@eiWUb%E+U04?0cz0*LSYI}P4Q4~} zx(EE16|wi&CcN|6%06Y=+2`yl_6_@<{RqkTLCC(3vR~P8c9NZD=h#KOlHuGJFM&dE z|2Brl;iXI~yp^$|UFMNIw0UprG6s?YGK|c|D7zV<@-@O1vXy*7w&6YOPVxobAJ}Lr z&7_@a7R{qQaif1A9YU|ciXVM$!O}OX35cmC;EnP=nr|aok^c}nc*oYTBo9Pz16|a}J;Z4I=^c(s;{gLjY2O-TrN`Hk!|0JaL zEm<4Zp4nL{%Y^j4E6c`&FJN0yd0|!25x5>|MMW_yDg4K4#n44!j`vnthA! z0DIVec8LAV>ez4W1Utpf;H$tTPVqXzj|bxAbtG?&mqSUsHE-WIO7N<|O50NhO{X1c zSDHh+<860;I+zZlBk5SY!if z{p>;Z2z#6@=RSC$6wJeUG>_#8yd`hTZOF~~_uCY2J|c0qT6^tr2fG_Ls~=zwu}9gm zKdq6*6DZc0roBBDGj2R;I|;8i%CH-pN~-W`Z5o+@FKO4Saqu%aN`Apxj^pHa?6FRh zv*bLvNFc+e953HJs24Tk^}8Q!MgwW^->;8)%W~Czr>F78{ye_u$d~jS-*G(f-O-F! z^nR=vUeO2ZEfI_N8h>?!+{T);7~aaf#9m>qve(!f>`nIee_#X&@GZ%^C?q@5HDFbZ zAz|QC-q@8emWcfcqo;WW>>b!^aNL$pU(hVDoBlD_=D;V)DwIqe;RN1 zp5xE+SNUuF4gMy7o4?CH;ve%*`DgrV5rXgS5%`uHgPZel_^O*M+90JEy!&~WKZ^GR zEAW!&8THygdqcGzZ;RgHTky&UFAext_=+A1UK@#T>CN$lwFSPMw{n$)(nRoFXSpzz z8tTD^DQ@u(L0RScsnuDk5|DKl&@jPSF~0|XigyFfm<+4FkXk4-O%#X;{TH+?_S70@ zkJmUmS&wihXV<>tJ`Ni2cDz8i97C~dccxEC7nDp(OO{y12!L_!YeH11hw`x~vBXJD zE6#j0+&JtTWo;;*4BJ^RW5Z?@w!$qe2)hfLa8)T`Q4!I)FEq(^#*YH|CjZfz@_)I>FU&pWK zH^`SD>P?6j?jm^LwtzRjVfx}Wfj_?7%NmEHBsn~n=ka{r9WU;B;>}%e`9AH6eonxB zjU?Q3$aLjOAz_re31{tPkNUz;{wTsjfT7si$)1(Ae5(n4BobD(f?f4Tf0G~Z!e|xV z7-3wH@9+}p8TP7*r;QaOc7ceC(XZ_yWNuN|&sBjRO~Bie5m=S_VTH=ZYZN)B%mgo? z80bhVkAI2*xM(&e-jK$fo7byP%<&Rg`c-qP> ze^-t1HjL4;V$oG`UJ5tgRTs5ip=VhnLNLdXhqDbCIYjnhJ)NWG$|#b7v7@!5Y-4$q zMYbli6{&WUehC?_O5@ptM(P%lJ<>ECZALoNk^46@ZsAPCt+_H$1{*KBU|$Q}FBJE> zYG6+j(_zmPGhyE#Zh(E0fIb=A4Z0P3u!UkV(!hlq@MLf)c>@IVJ5aU`xUe=uWeI=> zE)XG&JmFjH7GEc8aMHOMvtcOo64=2HIaFLNIPj;%>k*#a*y(5_iI`5O*jFNm~nF8A{@$T>^NfxDWPC;$GMl;vU#& z3D8c34=n>TYp8O9q%843)2 z47r9*h7>~^L%bo%5MuDh{TqS1L}zeos1ElP_K0tBcW)bR5p5K2;qKmxxKp$Ox3iYw zKJjAQ5HTtjiMs~2wfbio|A+S1)IT})`L^5!D_J_YtQ|7p|uEn>w55^GCrP<;sxOQxx5qJaV7I8?#~7GRCU;A zeSy8#TWlSB5wm?c_9XXUA9ORD#j4n3>{Ul#r`8Ye!MfpONy*~N_957D{tJ7DKiDzK zxu^MC{|(l*6q)@FvBgUJdChr0vcn$&yz(CAU}}}+ZSI2I5>U0 z=myst>wH(ZX7p$mxE|)f*UCB;=v8UiqR1Vfmg79cn|K&*hy@_ z$?930uo$1rSHgY_G7|$I!pHJbtTMO4U%?KKz6EXg(1u&^-7DVI)kzdNddQ zfqWz{!RmAi`~&z1jFK6Uvl)1Qehn|i%5@X`{qW+i2ms~^yWb8fe-gZZ5YRSl{H{eGO3jb_E~lgc0H48#P94R>|>D3G4>1l74{K!6!uS$ zKQVTI9fZA??Ss9W{RsOzXvkx17yAbGm+ULpJ0Xc;c-Occ_9u`;G4>JL3VSpA5cd0Q z6YLG_J=p88{xS9hTMqj%_BiZ^*(0!*vIk)=fs~A4zJM#SJ0bOAY%#kXb|EW*JqEHi z#zwMHu!pm2U=LwKVGm-1VfSYPVE18tVfSRcVCS>$uya^0>~1Uzc4yWFb_a&NCre}L zupKM~ww2jnw}rfu;k9OK*tj1ByE&xo4ELp?VTZE_tY&AJ2kcXj)-h_5w zI6p0bdoxZ_&>aP>7B|v4aA)Ck1)WZG8qQfW;8x+pRRgyIXRoPnC*u@W26qC^W0T+( z;bb-*?iifW#=#wd)7mJwLvd~!4tEeva0PJt;Vd@*ZZDkb`oPV{`K|}tY@GBk>u498 z`7pz12b}&egJ>Ggff;b^I1#2`m1~Eyp_O;WiZ~x~14eFv{D6_+kR>oO1Zy0F-WT)@ z^qrt@u;QU_po0Z{L-HYeaP1Ch9JvFjj3ZJXkJKPC1-fA>$+gfiQVabyGs$)21}U9@ z*0w8T6LMEYj*vR?D>+6^;7e~kIYZ8o3*-`(eLU!(M(PQ@WZu-5`qKd1i3|CgvWcD0 zZ+3xRVi*E=Ng(ggnV2{8W&U{E8^l6b9E;~&)LC~GIR49QEqk4<2mgOZTz&636mxz! z_`wM9ic#PrW58qN+2#qHYvifs$`g$|zuW=y=Vw$YuXy}QX@%TrlD~I${d>}i9skAY zRGv#UtqjlT=S=;S2}xETaKL`xjsw6s2Z5^=fa8t>M=avS;GHGls}sRsSJbz60`;6lkhQh31Q;^g;R% zba*^MAEl4c$LTWY?pcnRxdPw$pv#UvO%Bj!$azQ*S3!oj8dAhH`2P3;WM?lydiDw= z`Wf_9$l}&Ps`xr2ly5+m_9mGGdD`31X7Ckcj2j?j+z2`2CP*4LL)N$j(#EZjH+}+% z<2J|~x8sDg6S6jNV#wRTl_7Hjhlbqk2i!X80BPipihFm&dFv?MN8Xei9r8GEcX}A# zdVVHS2hUM_eFE=?hKEwQ5 zDc~n&a1^N((GOgunbM6I1i4NK3&s8o>kjsCSc4$#!g>TvCvlij@%S2)px@(dsn)E? zkPTu5gM1LH8DxZ5*&rvxDu}ZU4OzBa8Cf1Fm+K_!L6)(e*o)>% zzDX(}W9`lQ;7e0qO0ip&YwHo*`x^*75Lj)ogT=}VdE;(&HkDnAy>KiQaAAZs9VT*jV&=8xsj2(yArXDiuL>}j05pT*w%IebA|&7Nm#z?WWx1ngzV zz}7+vCif_P!NuPIAAb{^{B8CQdlz3zv4eqR^?lMG(&i83-Uj=8>~kPz#hwSUR_uQu zZ^d2+Cjjh=Aa~sbJtyBlXUPD$XMzk??wqc;@DS9!D``gB~r%nn_g&w1H$RLJ6n^7k3AmtBAs?`;mEwUPS{$#k6z2G~gCVc_d zCvzJ4KGt=O^J8TsH(s$eUTr;?41GLhyc~LYD*04?EwAF$SCtOUzFgvjoyiDDofbe3 z&>}LDjN-TP#kg%%2Q5r@;(T{Ev=!Zpuc+(!5}fxQz`FAwG!{LK)%j6*B7pSp37iF= z#OY-vR->nJhItli(sNjqp2s=y1u~kyNPglkDg7jC`Kx3Dc@G+a9)qr?*YFiH5NG{h zoYzBf?hl9lph#%^d>!lkddM)}f)w)|$T2tY_n`meeWd|qGjySBfn;+lWSgHry15PV z&F#>xw3B}hy-#041IbBffBG8I=z5%4zv16Pm(ln92b^GkmMT_X!%Hx0H~V1tqWGH4T?9g-AAD(|JI?;z_)P7a1c=WSlUQF2b91 z(`0hkn|wgll2`G)_%&!p@+YfAGx83kbnl8l$aqZTDV)!OMF?qubC?%oYV*l$WD!ot zw?LvBj@{2;ax=b$Z-i_%3ewpa(VWZ`7HC@XfSfjtoQAA69xuoeA;n9^JEvB7Db+^3 zZfY;AWS)BUL#A#J;l+$;K!r=iVoh3HGN$UUMTc?55#29SrygJdOMW-f*FcQfAR493f{A&@)_ z!@Hwv@G@#7EdULb5Ma+e4YCc|7Er4`tk+=<#kK6GQ@=m;uyc=?m zd)3Rd`|;{*DYRNWq+Uus3K_}cVj13HEf-HhVzLr%iJr!5t!E)Wc}}dxUh{isc)Xqb zNOqCE*gyV2z9HX|-DHn3tEj4ET8T$(MX4<>D^GK?({$IWyLR18(cCPjo1?=zeO87J zXGzy;x9ah;oUTd-;dYO#^1|Y($_kIH%88W~B~wgURizaZ3yW)ON<6aiG*=bLnqkf< zF0CrAEuTTmo`VQb&jenN}XcLYm&V!FI%s0wzI-%9(j7jROxMclC~6& zJguTy*4Zj+t1Tnn*u99yAt03t|w8kd#ck?U4%L5!* z%h~PTvX5+byP|Rj9H#EBdiphb72Rd9O3apLx61g^btUEm9HK{2VU<>GdzQIJV@dU} z6k|^niS_Jd?x}iSfySPyDa@Lqg8X|nMpgl;CU$FvDm+{j=-YFAX-QQ{b!oMW24%_9 z3z(+@{d&48=th*2r4i+1sX%kjiB*NuO56!lPPV)pEhjyD6$`^di{;T%8vx$At3~gr z^}e_6sz77Un$oiIC1%ahf_h2EVeZvfQGYkTLK=H(q{`7d(~+i{z~)F(ICns&$VoT$ zQH^Wto;ZTDWvqc}&4mGH4c`4egwdG_P`)Nt^b4wy6Rg0aXW(laB zsbuTn89c9IqOrdlo5|HDSgxK?u0GLn^(1n&B<$KWw%YCb>~c6Krap0V@(leaRaRAK z8RhE5&2y%vQ|0Q@JJ0IVe^M=&OjT`pSz)cJGHV;yc9;8j+L5-7EmfC7d)q5^g^_g$mG% zlA^}2-Ik&PeTQ6SPUk5aTV9?3BfVp6s%D`53Wo!2<2ZF%`R zL(A6~n$`n(dJp93GhMN~yd15u^K#tN)O#RLV>doS+y`Dj6UY?{ZK#a}xLV*4os;OU zi_(^tu9qZTFUb&{z38r@Gz^hTs!7=@z&J$XH=5&~n%)BGS_>G5X~TC|W6yXEbGE;6 zm}+J7HH}EEaWeF2mY-t0Mv-X2`TAUT=wm5A!#F}EZyMoZ!5U?z-B_rVQ#m^1Fc&tC zA2+|<&F?T4YU4_CR3hd^KS&i?hU+sVD_`rhtb9f64yXx*X|FIkd3L%+k)7^Ft^qo^ z1~|!WI=RiATmepU1vtqaI=RE0TmepU1vtr5b@Ehqas@ca72xnMZ0sXNdU=5T@&G-D zEIo%T_Z&1p&p`v6jPWjhW@%m>S?DR~RRGrk;AHd+G{sk}JST zo~@H-yOS%xNv;4z4)(9QO1ds`C!olkfWx=YIRg}7Q_$WNbQVP)23d`1V_dlp0}a3s zZ{%EVevDgJxHCz8sARbh6%BCKu5qZK?225v?zK~ZvvxXpq0VY_S0i@=?A~sG!=q5= zH@d5nYk?8~c_ZL36-rK|h#I~2Mz2nw=DDAuZJhF#!S>5ww4GvVDseYI+Rhb@;+Cic zH9lj_G#58c3{$a-4H?I~)-@a0(oqW>h;thgnNYX6P`MXnaR=^dN1aFKN2a z+wyGsEU{^G!M~)j3@W0QUAE4cvfbHFjy_{@+~-A(KDu(;SxJsQK5`mI0d}kUbk5P( zf~t?*ssb@Iv_Rhy_u=g@mAG2PuhHvXPJLEpYje+Ba`{Nj*5_e%li8*!f=u;_l<1>Q zciqyr=~cG5SJ|dl#HLrIL?4B^>lQs*Z|v+w#$&aoW*R3*8k_C4vzaqRmK;t$xyEY%;Dk{mTZ~)W#$~3XD$s4_j&aWw~^8&j* z0PODUMFSkhNh+e|IK(9E+PtKtLR~&*LV8!(-C3pvILwpWYU$=z3He_Z;7m{NCcFFc zp#ctKsfy`?x|WqxS8I^Dv~j*0OSLJbIa)TQjb%^)`UqA-5Q9lu7<^0JN3czsPIi4d z*|l}vtF)cGr;Z!^zAm3DMNAaEA#${aFqgUpwVqs#KI(I{EcJ4zSSW`U%cE2u)Viys zU#bsP-Bp3cQf)t`IVy;iPBu=~kjhb;Cac|{&l`uD4f>L$0e17`#@6w7^Q%-Y53n1j zsBl$so1QFO73e)>VpT~=MOk6R_|jrynN|$tIE-bghs>IzFm8UJwW*>xI=U$X#932q zl%=cXrUt(TI7Ar+gqO4w&gIiblvYq%p0l88u`tOg%0$_D93v=kBl|=f=^c>c-T@lmOhX^vDcbnfc2XMPFju%1 zRGXXM!AmM8dcvrxIXwCs*&JTs^y7U38F}uFoX3=Hk4sL{*UBj2M^o1j|RQuWxWDleS(v(1%PocHyV zQ?$K+-JWZlDywTZUaL78Uo|SnZo~^2h%wEYqxE>BA82hrXpW9{4G3+*+fua&4_6Ur z3xx*gEWxI80b3*Y#{p6S`bjHQp9-n&Q$YiqY3SQSTjL-{8VYcxq4UpFjelwbLIdo^ zYE@6I8PoKxOiMRcH}WH`$!&VKr|I39rZ;(7rcs;jqDHPy(o(fG)@UuHIVwmcWJ}YR z&or&Pdg?m+wdw3v@rF!&GGuD)rs){Pe&F?VQ zYKxTS=xEn2!r@=r*aQlBd4OsFG_}45)AlpY4plSU;al5eIco~)4Vb4hg*F%}D08r?A0o~Qpa62y_2D zoX6R!e!+i{BfPNy@0G&KvpECLGQ$_=Hat&}8XR4Mk zYmU~=jebr*PfaoAwUE5MnuHoqj_!P=(tUWYsH)d2lyt^v-}^&ZW4?@*O9$4RGV zx`aGyCSg+ukH>_{+A8Ii;+qKY)ul5ez8YT-E2O8S6#wd05>%9`1iVyw^3|xPOi_7c zn$ly^Qk7mWm9FNKDJwdewxZKgS6(fBMW}L6K9z@jb*l1E9+`*q=y^!5mWSq(c_=!W zhoaN+P+lz$MX2(SKG{xS)v6=lrg)(?if)p(s)gpSHcvpxy5CzRsRJs$HABhN@r_C? zf^gLe3s+0mnxXmuuv$prD!D0KwKsyRWbkm+Vu};A_I<*dtzfG)TU*nu*?M~EdV1-4 zdg*$4>3VwUdV1-4eC-o0zS!#J(l{Alo!+X`TlM^{O5P7V?i>yBE16MTR#-m1a(YEO z`Ea<|wY4SHHKmmmu8_c~B~_)B52e487us6s9alSeZ=z&01vmX(#%C=!#lOP6W- z78MpxX#~xaW=@@ifhSSsl8W*8LZkc3U4GMq(uuXm4LGe6YHRF zIQo=K(DLEHACVp43=fQjAVf zWwF^DUb2(Q3u{W8A^I3`j-hNVJ!^KVPjO{gWkoqgeobN3OfkN)Vxq{at*X>&rHwrt zfb}t#rPne$Pn4Bb73xI#fYCmE<7;V}acW65($mrUyvWw$YF7!6ras=XoYD1hs9jY+ zG8*2lZ8Ghcpjvtv>N^zXNsfPcZCOp})Uug)i7p3WmGAh{X{F;!oS=V2WlhPowS{HQ z06!dq(I{AhHF|F)snCHS9oZyCGfB}jWNKM$wQO|x{$1tjhtV#FzY~@-qGnQMZM8gZ z>oj`N)xicu&-Rk3XcIxDrMy1Q`e@@_tBgjZil7lWE2SWBz0eBql7&@1UsoX&=vRoX zyDp57gWj{Gd}_^1bdf5S&903OJ4TfpZ5S1LarK@_&vLaip7p!8v=el-v@^ij(oR^l zv=eC3($2ufmUe}>D&Y)qwzLy=Z)sdacKvoAX+Q@E&3uATj+uZy)Zhke{L7T3JrNf`%rM5-ImE}cVY9AtfI^HH} zWtrh->tQ+Vplm`9(-ts?)tN_*8@)E<9M&v7UKVgRFSQeP%fW%rj6hfD*vm^G@y=4G z=qaVhIBtGt&1JaFXHsS5l)|FQX<(b>MS3|kA%MfCx0_8bw=LTnTdty#vdZa=#CAP9 zZSGhdcD(`Yii-i(ZV)&eHZRpMj?{KFdSTLJ0o?q~g30hqw{V>FRFmQ(kBeUVo%GW0 zq?djN?#;_r8YbLx??*H}D89NL6#24IY760th7n#owHp69dP+%E1&JsxteS$`jxx6P znpJ!2K?omR5G&t?yWT}wc17c5Q}kB63y+HSjTTWS|F_vu2co`!B5lpy6tx!q6;b#7 zMSE^k4JiNI9v@YJ|A_U!!A^;aM`?qi&^wVQBaguTHgfBKZ%E|&Na+6gLwi}|U6FGl zr$$bQ94f~j{B9xttNr9s|BnA3EOXd_urKh>r8b4F z{S$jd*nPmx4XgQ=?eSp+i2Fx&ZdgiKe3-O@l&$&Q?f(n^zxMh2<3WU;#Hdqt=z-8L z2npR9y8bWPt3sE7@{jDhLg$1|4VCsdW&fXlTg*>$Z3cE zheD7Zb{()c!>kK=D&+o<`61In%Ki!eKarP~X2__JKJax4X#+bd1X}#A3<bHw*MpxyzDt7_z}EaTf+xX0Cb%DLcYl{)Xl)9P4-SHDlFA5! z|CfaX9Sb@X^wmFXZ&vC5x&5Cg!#c@PgH{JU0{b30PIUX`AneEfheIX>LEmxEzhn0c z>Vg#hIXflP7!)7eB`6}uUyjlsW6=M?kidF<2BCz3hhz!=xsd-&tr7TDAozUXy1=LY z#J)dpKCsgQCtPL^4a~nRM5FotM|fIbB5Lfuc+3!sBTtN&^<;>asEhUvV@rfnk==v?^O8i5+4gKHRL7*Z*$?t zD%h^@+ku}VVQ77ImSVWVM=Jb_zzXog3<`b+(nV8`6NukZ!9EZh+6hvEmJTE*ebBk7X?o|-3GYmOOsDkTQ zSog=8A4VEaxG=XV%r7!#^KFQEorIyq#~BmqhXB_>tGbpGy9^(689qwE*uxm)SmtD% zE9NwX0c?0(VXz<5(=3%3I+DwgF6Y8136o(BPPmtXH>om8T`zeGj&tEhD|oKL%NaFB z!EIgmkqUlD;$w~gKSaT`1WO?dhqfVSNn#adoub?T%0LAVcHt8h+|>mSQt%>0FZ(}V z!PPE&yn@jhdd)^CSoX43)5QvIY@^yHc<2{(;>CT413j~@I^8WXv`Xb1f}H0o%4ML^ zQm$5b=zq}RLIu~j@NZrQzopT;@M{%3Ql=lh4(YE^Fy;W84;oIFx>8=HFzpbk<-AeB z!x6J4TI#Gya$#OonEPEZUs3R87ydH|L;H!$GaGqsQTP=u{2Q0SuS;0X87=2U3a@5C zG*qpSnF`-PoF&_)@RM94@>2x|xbSx<_&OKX&voIKDOl#Gr8iE&x9WI8)YzmUF8pf>f1@k@It4f4 z=Uj%rQNfYKnf^ir&vnILpx~#0*J^sNPDzNT!d!4szM$aVI-ZdS6uj1jzhA+PoPL0U zp$l8DS$_pL&eB{3H*?`r6-@A_wZuabChr6PE5bOnx-gGR41LfQ^Dzatci|sV@KP84 zVFkyz@Us1%B5dlY6aLba5t6#R=T=Cul*4*UTaPQTYN z&^bCs!ZQ%6#e7e}dtEU%NEq66(Z`gsbL z{i@|ZSHX>I<*f?d;ljVH;KmttpGNP(->cvciL<;9N*LOioarxBu)~EPCShs;k2NBU z(?(8F1`LD77z!bss zc@z3}_dr+7KKeNM8alQXF(+(yK##1x&491k3k#V7Ki$H54!T(Aj^mUkLV3xw%Oen2_ zDS{aUgH;1NM@r*hz}G25Yn{;Deemzp%|^H{V=VnH*BYGi8R;=cj;(VF-VE5`2FvxY zje<8S{8NCv6}(@tAbxgD{AM3p@10)kfF4dELHF^z+nnjyUyS}fc;dgpA~*PV7tOcD|iFo zBn4x)jQB4C_E&I(f|mhKR&W~y-vu~9!dfe$0T^ko@G^g`R9yk%e{ZPJK`Pb=z+AyS z6x<7NJ2zOKsDy;cC54y!zi@?@`j$<>(8)=N!oQ+mx&LdW@bMB3ItRF!f`b$+_kSG} z{W}W&7I2!vtMr1l0!~qIdxc*QxV3^+s|2kA?BfPM1lZRt{vyC8z$i7e`dmv0^h(c# zR;2mR932h4JWDWh8SX!@h|L%oEHDf+n1s{?je{=lX!1Az8tOVpPIbj!Lw(2kD*~?) z03GrF+FwwR-)Tasn>viCblv(n($eAb(YxvJ| z9Y9_GdHx0CW86=t^vgX#?xbs}|1JLlx3oF~kEe7?_`u^ii{z`o8>7o#;Kh_y(IxP> ze3vuFa{K4M98PKY{DJ=+AzM37CFS$lR%DDW!%C{vzN6wvNs)f=|KES!l+ypd5sr>6 z@N~+&p#Q)}{ z7KKByA}vlgaN*nH2i|R2L~Ju@ikQ_11XhcB1f~o6nv&&d)6)7_c@)diej+ zKcurW@Udz`K9{{Mu?3!P`8aq_;0@IVf4=g2avA?uY<;SGL;5`cT_0~bi}kRyhY#Qf z{oue|DV7weOKC4PZ%V)1E8&9w$m5T|AgFp*@;K-K7jmnp!b~B|X7^|6ALJ?+>Rr$o*S?7puO+ zzg6aE2^*fcKloX<2EUiSSkSh?zD%&}2g3w^GoOo--$1Qi(m*ZW{-YdbOS z>kf+4wDHN-yH0QJ_WmN#%$@NP5CyG}j6 z86EoH^H(rkpI4gIcAxj2e>L2{BhFLF2>dDemsTAEAD?18JbZGwwch)g*9O+PbZsTV zt;Pz|N}Rcoh4VMEab81){N)}Pc`nvyX|w0`|)P`LgPWa*S^Gf2yeBoFdng0*=mf(@ht4x1=M(#p>>jZiYRBfWoi!0E#~8ys~&vpIOSn6@Em+5L+H7{ zuj4)ScB~aV0el|s{Eo*deQ)D^@bBOgjdM@m1O6GGXzjo7iN+bI9{~S~Pc+^>{}J$S z_(WqZ_V2)d;1i8?nh{_CpJ<$siWK4O6`Yuivr;2~4(#oS#`!DJz!*IS7>83>qHzLC z0x(HW0w&`WmT2UADi9?=OGXKBX^A*X1?Sb_RFNyR82w89mze9vNgmoHoaONruHVMl zOffins*|x5rcCz z3bhEVg|y=|`VO2t6@gWd^RSqJQz&qKzHvUn;4BI-7vdbN2%Ic&hn9ddBp%XYjfZj4 zmYm0c)Ano;wrDL?%B2>GGl%2BqjchW63^yB8O3!P&+9@-#dQYH@IraTb+%2;^+Kt| zb)F5oJ*4d7y2vKyf1w29x|C;vp&aA7lIMh>G~>F~CTEAaaWX?1&ShxDJNr9q9hw7Y zGIZk9(JosTp0&d{2U-fwIJg>!^9F#A+aA|4Y){yJq-EmVfhTbdAHeyUDE+t#rC&=x z>3<8a9)lLj6Mm#U2Tu@xm_&a_qdz!t63V-{OT5B~bEp1@Z~a4r7h#OYO^ z;#$1OiF2&}iEHsCCw2n)aV;L@XCC1UTY8UcX+O zf-`?^&?00_65)RdPmZ7`=hKI6^x-)AZ~}c;PCT9jPZJ-GqYo$0hvVSGIa(6Dw@}N5 z-bfwM01`Mk~SjFb`=s>k%FvNe`c9dbsj!<<-icl_x77R^F@pR(Y)Q zRq@g(@X|&tA1A0ZX>mA3rCE!?Nh&S4ZiV;8oaDWU^i>yqwV1x@qOTT7d!^-AJT}?% z*mrF2fET|_rQc4b-=@-UBj~r2(58K$70`QQrDcOZkKoLYWSbu+e#FzC)9BAx^koDc&ar$_jN}i4pP1b->&N-5j9D482p{?VfAv`u(~eKWDL^%5V=57HeaxbqW4S0DF_p*- z*fsgXnDuB$N>L9^L4QZukSS;n3e0vRlP$(Hv=xidwj4n_;9(2U&bq&cHGLoI__uL- zSvvX>UqoGX1y0_+0sV&?S<^hrI_6c@E^nZ2I3FiC-DKRU%c)9EJykqaPlHEx>gjT> zv_3`7l-4tGrnFC=Dy^!XEv>4agR_IatmoqFplkFzoOF7Ro{zJB?$--&($5d{LTPh# z`m0_n{;HSY1fLi6QfX)PGC8eBFPD>g^h)V#;*3S~GWA+`p? z{(<;M;#Brhm zeF`yym`ThcW+TiNXeyXP%q8X#^N9t-LShloC1|&a1ZaV4XpzB~TZlgb>b9Q1pW-h< zkIRb?wKmRc+b+i_x!iUI@oM6u#K#2T7Y6VD888a>J&^f^Z92Zua5rY$aQBOlbOrHh z;-kdJ1aY^{cztpQ;`c&7`Q6Xoujv)?TdyQm5vz$c#9E@8SVycUHV{3;Mq(4Onb<;X zCAJae?0QY_AYzRJ*ImSJVh^#G*hi$6`gC4XQ+)=n2Z%o6AaN#!i5rL;iDwcw z5jPXJ5VsP~B5osYC+;BbB<>>aChj5bCGI1hP25jBKs-o1hj@s1F7Yt&2=OTK81X#f zapD(<=Myg=o*-UGyoh))@r%Suh?f#CBVJCtQp%ow6;aB!rhkd}W#U(eUnO2c{2K9E z;&sHY6R#)UK)jK76Y*x^H;A_oze&86_$}gX#BURCC*DE4llUFtUBvGa?F?dL0m^%PuxJ$B5?*{9Zi!~N7JO$(KKmw zG_8l&N0b&s)20*qi8F`;L?3aGIFmSwI7A#K&L++w&Lz$x&L=J)E+j4@E+!r#ew}zd z@do0J#G8mW6Td;ch4@Y4t;BB;ZzF!2csub9;+@3r5bq*>mv}evd&GN)_Y&_TexG3-O!8TZ!Ky-bVa3@pj@J#5;-D6OFhqlMehY@owVx zi1!fhCEiE;KJk9ye-N>nj(Z;@{($(O#D|Cv6Msm2g!m}&G2-LICx|~HK1uvB@h8Ne z5`RW~iuiLP`Yed|7evfIs{~O{<#NQHMCcZ*^ zmG~O*cf{9;$XDF^d*YkKKM?;&e2X}ud84-Lequn-!0rQ}PQ=qdxV91P#0X*}F@cy! zOd?JqrV`hPd;@g?@O0uC#C62=#0|ua#50MTh?|L9h+Bzg5wRB)(zX+K5O)%H5qA^! z5cd-I5zi*>CmtXkB%VV&L_C*xn0SPElz5DI9`OR=3F1wxBX1^tgUEK+U^{HE9X8kw z8*GOSw!;S7VT0|k@g3osYdx`fEzfZiM_#eavhz}BfK>SbQLqwG4 z)KUZG8Hn->M0p0HJOdvmqCDdoM0p1O ziueo>PsBeH-zWYT@xO^55dT8_EAd0(M?~ZkB>#>03Gwg5 zPl^8^{*yRD^b-SuHjStg;aXro0qx@Zwur#TQJZX$L$M zHW>$Mn8z1h#(|oxm{>wAC11wta$*Isl6)1ftBEzlTJjiI!6q120Wq!uVq68pxC+?G zkQ_zXp64}tbGCPRja-h}Yx@(gk;}OLi(I4U(RQw&gP2J?#8D*rGWa4%(*uvk4Qd7v zBWhe@L=B7}MiL#wC}K1bJsE_FA;uEpi1EY(Vj?k#IEk1{Od+Nc(}6Z?rXhyz3)agaEZ$X#375U+=cvx#$v zbBXha^N90MdSEI76_(kLRMdSEI76_(kLRMdSEI76_(kLRMdSEI76 z_(kLRMSGaq{*d?x@p0l4f|x@baXE1XaV2pTaW!!baV_z5;u*ws#P!4t#Erx=iJOR@1_HN7}2wqM667kE#uModVyoUHS;p>~h!G1ABNiY=EI^D{fEcj=F=7E?!~(pXh!G2}F=7E?!~(>K z1&9#~5F-{KMl3*#Sb!L@05M_#V#ET(hy{od3lJj~AVw@ej97peu>dh*0b;}g#E1om z5ex89;$uXNUcg}V0{jv2N#c)*KOz2<_%q^D#GezNCjNr>OCoyYv0J1^4*WHlXNk`d z(cU1I7l%3#8-%~5?>?!j`%w94dU;KZxa7N{3G!#;)u33c0GFJf&oE8 zBkDxF7XgfoXeUMxBZ&#bL}C(g5;2v?HrwcscF|yKYIO0so7h9_CH4`$#OcI-;tb*d z(MKF4&LncYZ4B{xm^hor@wPFS*Yk+;i3^AeiHnGfiA#v55tkB|5tkEJ5LXgc5myt} zi1m!M#M6mq5Z4jc6E_ey63--VB5o#bA#Np}MchW*PTWDDKLA;R6MZ}AVUnE{ayp(tu@p9r7#4Cwc z5w9kGiTGvWSBPIFUPJsE@mk__#IF;tC*DB3k$98zr;MA4-yq&X{3h{M;2^iEQK-45a)FeREBtX<8K-45a)FeREBtX<8K-45a)Fi;yh`%GgPJDy- zd*YkKKM?;&e2e%t@g3s3#P^7QBL129KJmYZ|4saW_!r_|i60U_B7RK#8}Sq3--(|R z|3UmGafIk61_W&yQ70Ni8__O(D$ETE#*>*uOe1Cxvx#}cB4R1Al2}W0Q$iiFp4dS2 z5HY%l-6Eq4AVwEJj4pr}T>v|zr;Ra&=%B_JmrKdSDwE*V#7Bvb5uayBtS{o*w|Vco zWMJXgyD<(CIj}IU|037;r=N=-%?6a&(7W)xdWOTm3Y~;z`uQFH0{1cY?HJlm%kHfx0>k9EN+NXrVUydDRr_#%M-z}E=t_a?T z_^+|A2+6zB!dvya3U757&t6Bc;~~u78F?NIoG+AcHR3}dw=-V^!??CCbkfjuP@e$S}%ZV2&vt-S4*A%35>O#788 zg|`1fDNN9kr4;5ma&6|1M@nOIK1!o;xzm4Ep?<*WKUSz;>h$MK@xOqwnb3T|c*o}- z@%jJZV*$NZ>1F#b<~Qbbq) z%bUEL+I+?RRgJy@ z$7Lr^8;&n;M@Sx0YLhanx$3kpZ*B8cFFt$5?A@KB8}iS7KlauZVQ-M8xomF8 zmHgdl+(g|af1jf6@;!KMKl2^4a)#(&LkY`7Es0X4kE=Vr2Qm$e>u3`RFv<)m6#b1P7s-Kw(==guAElQ-=NZy8p`X1#!OXA+J() zH}=!6XnmwCXfLu1QI>_@t*siD--*3jQs&%&42v9;Exg}GXo@4MA<-xb08An#h%(@Nfz7Jfh555-@FckVDAv6&^EN3cUJ%uAV9 z;n!(9#^pC@KM(86lA^*>-*N1_MO$Z)BlWime;B*1!|_V}t@xv(>@M}U;ty(j!r|He zD*jyTObW@d@Q1WB6fgN?(es47Q7ojV)Za?ZK4~{lrUnBa+G0`5fsM#3Dypw*fQRLJ zA|qA()^2zjq`pHvE7e~%sy)U+(lxa!!rz+0a@xd&l$z7tNi~Sx`Sz?p}Uu_S~zscS&DK zO5-||>}YGrM!9~9O~!Jk|3?O5r z8!sN3xqDW^K>As8dd`|%-o1O)z;0hu#5Dhl(fXW7N89RiVr!Ql9bWvUv)UWxSLOH4 zs#|)tcflcV=ULNB3cT$z_AjXsU8lohQHZ_l^Tck;X9IC%-`=Hlts5_zZ7MJu3RLv% z85r0%6djo+3e2sao|=%o@XXknWyj_&zIv;vf_v%y=}XS(?%3k3DDe6ZU7b|koo`wo z0Xh^1b8XzVslnqgOE$ zH!VO*6*j<@G4#B<7ouNi+!YKQF1ov`IdAEujFjPo7%$Z5?;yKq*sObB=+c( zoP%afr0gs;g_3hn`*A3I0>djg2l19w@o@32p9NbDw=Fl>ZOg|n!M%RCO24#f7{B~y z!Mpt5)rUsX^&$Uv(elHyY{_P;8*Fn!ca}Jf-#JH0N8exR^Nl=Xl>!U71BntdG+lz6 zkF;NSX0Rsu8OwvP(xcx*{oQDb!=W7*QDBu->94&jes|y(lxb>jJlj!rw?@wjC<`hQK#N;h!L{!fyz? z915Rok-tfc423_>B7c+CLOwpwEjfmK7x|I)<8O(TBLdx$TVO>x*euib+9#H@ZV7Ol zqw>~bn=OIoLb^2Bq+M0I9}fK1qKoiK_rrL?DVSHgE%J|A^6J|b`A5yX5?h`@FH-Uk zVs=C1NLjdsypn$qBWdt~hXWa-(t6@DqzeBsMy2({uY%?5D92Dr_P&7XqloPL$t&6W z0_by~d}AeC--z-Wi&jwvH69dybiXIXWVg(A3=R)QwXbR$?rAo%M&9gLie+bAn}#t< z1@1`1=@@xME{__b@V37!-WEL=J>cn_8#Oq4W>ov>v8#tBHFXR&8wDdTHZAiYjS}BW zv&S zUX?SvA*9r|6EgF&;+&DuQ(J5Qa5-LR8B*`btinmEu0Y)d$tX`pnCA2GB%9=68F=Uo z{;0`cNxn7|{+P*Mh2N}w^%tNa@>puGT(Qk^eZYxStoA{kJMf{s3*Q&v*$AnV4&hm< zU|D&AHYbldDO{f4VymP0?V%A%qQnEegpahJe>w~-bw6W|L5-&AdD6YZC=TOhjG>^5 zzHCZv?v%;7x&DWgR(cEnoIEAh|3p~BZi{58moHKp1`3S7gf%xN2Q?2Yu!N7aU(_g? zxB!I+jVDeu&EqMQQ5-aI#p)|#{hzAX-=6d1IsReBt1M@eclTm$43Vt1bUe1< zK^x%xZHd0XyMB0aw*R~K=h7A<3peUlkE9z1o&FvA#mZLcJmxF( zV7)Vn-x+G1d~&sLFXE3iEr)(6%%^})#XXH2sS zf02~akbLR?D}Eo!33~^~MTD29chLVwjUn}nCtdfz*lyhc)1be9rDKZ2nVMSC6qOj` zzdmg-Or$TwudPun^ItZM0b51w+Fs)V`v~gyk&Erdo`3$qGw4FDOP{R`{nTWcvkA|l zs9}UFIE!G;rs#JL99mJ|y6Lj{KKyRmbot!AoeQdZ_RW!Bz58P8mLD6Mf7SNRx)n$H z+t;vsZ_n_#gYs+W@SvoU@zHC(&K%#W&!82@^1JcoQL*k=eus8Xi1%^yspMRaCpuO5 zZoFevMsLDn)>EIxc&zueS?;?cbRX=%QLB=72vXiu~D*Rzx%@7GcXxoQ5vN}utn)7ci zH>c(>A*bezCeH6?<1;5YB9}U%ye)+>UA~F4K4xlWVs2t$Zc>*oy6Wl`QW_>G1%u3` z?~Ex0-J&g0p?GVmt>LYy9%Nrbg=eZwD-E)}R{TEgm*HFpl@5n}8=emi<&K3vI;!+Z zPhMH|U?_K_w8)&h;?KqD6(Knm{t$Y|iq8-)3xz+S{Tk`EX;sLbRq#F==I_v>ccXp& zEFY{ge!707K~F!WC&J0oKaV#uey01uG5LV>(S9m@qwHr%-+rrI?HfYrJ9`xG3-Jep zSG7)rjL@fP7_f&^EOWOqxq)VfKc4i+$cf8j|NiA!iCHqUwyjX#@ARKns9%Dq>r`jM zwadn@mnu)|j{dPZpZ(=H-{9DisoG<_t66$<*v%N6QH_ku&$nSt)11C`um7-jZA162 zp&t~x@2wxM80xvrc&A}ickiZl|Ev1uvVrRE0claC2X#7R#Y^u8vK(rDR-`$?Q{ZLm zhg0rX@_v~z?I)CncH=T7@UoYcI2&rhTS7H8%1YR3v+K1pl*oPwuFkLtlcWU<%#=5|%70 z84fIHIpCiPI^bjklx9D;t z+_N=#rAvrM4=5~K`kyzN{m&q;!iV@V@{ek2^gLGg5RV>HSU&ozvy|>ZR_P8FebRD_ zgqEOYsSpn-3J$Pj*~#VNwXL>|5EjO;ivSi$e-!)EN*dlho(D+4#f8C9MC`X zI~!(KRLpMBKlVorglE_92--%?0CE(%eL1JnRvXu0It|(|UZ(RMrgJOapAz)?JIKFl z@*j{N8-BNC&B7Xfw|4fp;dkJz0OQHup)DOZ{1H46Jzn@DW|>v`NLf?*uQS&-#q;lA znNs?%!w6R7^rL2hokQV|<2^HC2bqb4y}+yR$FUb-Jo{|Hn{LL_XNz{OMStlvD}4@Y z_glgXujC)bnGn)%f&O^U$Y$hw(F8e6%&H3}KCODQtGK1!-8Q;;enCOlgLKem)9lgHC0;W-{q;rEAaZ`?s%h2JmXQE#G&HsnMcX#>zd z#hi}*@vXy`CF!#k`H!QBE;nxEx&gx36A>;U6pmrBcA)=Y%h1wfecIfWsd~m-|D*F) zrT8&DIC8pi4S&*6$XBCOQ-b8Oj=r~)Ui|thnauEb+lhq_%h{sGNJ_X% z>nJqD%xb=lq_{8_BmGW2Q+IuT-mQgyTj_u6fqAzT`TwRL&^P<;-MZ{q%FX$|Fmn8Nm6_0Q+so1-VK@IO(lFVQdY-(=Sp`?vXTk-X#`Oc9=&qCcut zrLp`Dlzhoc#Y>7*_;uQvarsR$S1jRCr$VDp_~Urf*Ld-6(H2_dz)wy2hcSm2ju++J zkRArlP+(I=?r^=_xL(sGePOu()oD+f|b1$*Eb;R z?JPMH>H>R>AHTQ;uAx&jYldnFB$6E|d`H}YBnI}uPvSHa)R!I=aRyN&s zUr6p3R|VxNRnr{J^G3zmZG^2d-nU`>$NM&%j+4KIA6n9L z$?9NwQpu|HgxLhLDm`IVNl@vrvd@O>bZN*=sWxGi+%TI!R>=*sHnK`?n04BIYRYxk zFEhtiQl3)Dt8!!I6UeJ_W95|`kv>|E-BNCLjD+nWrAg@>X2W)mw1-(OR3feHmA3wn zJua78mR_J(C3h^V>@k*A_6V}w$iHAY59e-Bm+{L@_}j4l)!)$D*+(g>1niI5txYStLaG9~P zN`jIbmJqgor2WYAVY%V*5@y5pwuTMc*~;3DH$!$?`8yhyk5QlA9NW2AjcZb)ykO7AdhwMUq> z+9S-`Z8@gik@mw&!*YdHa>Hx_!zz1(S&gi+N0_zhdvx4(BFtL#4YO8#!>rwSDWvbg znvlL^mA+v%fvnOu%wo@|Y2iqFkj)sCe$sNloxnUNs&I`%iHzjOmVU^r4 zo4~M2ZkSaPlw7cwhevy2y9qtDHf@GBC)_*gFh+OK(p?Rl>cmz8M{am0e7-CptDc*S zomthf)pOO|k!E-9DI+4MG1Pf2AE zgy@vEfgI`cM%;tmuRe@nj%!AxduDC0ubVq5)We-xS76k)_ik=WEQ)EKSJ6~jP|#M; z)tGp2{iN*j$-U?eyRz9Y)@_voWyLd0tJ!X%mtIDn-YU;XU`C`EZR;A$HKwZ7YbFhI zaiOHg8%2-Kclr_UUl2r7SDnjj1U?TYdLZtN6i6^e(oT+FIPQxP|?4& zy=>;Xmb!(V34KYk>RXo9VVuygU~+fr^rf-AyL}y-=Tzjkm*ke!cbw6JNIVs;;R)bUE%CcFV! z?Cn9yudvt~qa*HXO_yy57!JsC-57gU_Mg>JI=HTFVB=J0)!+tSV%oHw9W5&wD~H`J z%j(N##rEv-wQrtV)!vY(&mW1|8{6Ctd&3kp?d#g==T^fKh!tn2Vn!M7M3x$TyU~E( zHfr-ecpLUclwi0dLr0F-K1(O;RhsPd4}6AZ+?V*J&rnZn?7>J9R)MvYe#fA0GE!fjUYV4cjISYoC=Pa&es&*O+nW_b_@j+WAR_tpvq%$I%A}m`pR2tmsExs-5 zZYLW&S$6Ks8Q9)gK5JupzOO4KEvj&MTX%Nbw75cV&hm?vR`#5?ym>`q`A|di%Es#1 zh8=H7l?ll9jl&g_%3Y;hyO%XMV|rp^XB@b8-o|gP^tG*RcF(D9S=~}UugZvP+1x54 zQz@Nw@Bxg^tQxYmK|YwZiS-ejn*Ou8N_=ZuRVC6Ap?|d~K7XdWb5TY0tV**!iS5}v z*tThIm8u=QQ|lMjwQrqKKUAt}2}`_rpB*pO9sB0&>mEPOnuU#zMNb%=*Yv+Sdd`i^ zpRL-hA^%hSO%w1E9-}h0tF#lPNa&MU6?SKG(6hsm;n^meVTAQ4vR|;>Dku1zNFVzh zaww!fdi&$X5oT{=pIPa1IZLYOu2`jeknOg}b)laor9Lb__^sS?^0yxvdoA%?5sF8# zDxNUAnf-00)0LsHidA95Y#sa1D(qG3!}gRBnF?!Vr5~um9{E!^tgtGqg=Iac!mjHH zg(a)Pj%6jRtcSs`gXJg`+RDRHtg%&i+L7UdyhxY+E9@JTW694gp3$t*#mY+WQ|Wzp zdpNAHDy)?a+vDiC<<`Qo=cnWzoF0-(R>`%n9FwcC=W^{$`NMr79mcXM?4gE`TuM-K zgDlFt#cn6G>rMLvc?s>Xhk2=~q{pRX@2d*QCaYwFMeS0L5?^Dj)y!vY)Y_iek5CWV zs2x-KR90vD6A}J1isJHSy1N!ysBBIlWWs7D;v1FiWbl!qx(_vO~Ps zo27pPEgAQTU{=dxwqWYP9tWn{Y|A@0#%zp?Zk<~epXrQnq}yu-q9cyR9PQM9?kjE^ zF18uHILW)Kz~{&0zLI#0nxB@{R_so8or!}p zqKEh9HZE%{pXF{?)>tv?<@{FH)cpFqzJ_zr>UV7OwQLx!Xmh9R9r;V&`X;@qWu?bG zr>b#9t9v$b$IzNg{n9xr=*dkUN2{?qd1Le)#V2X9@mE$g@E-Cp@yCvdJRJ8_&I@y| z_jpEunUcp?rN#M+dF!H6PSRm8?(*G5qtqDgym*WrZ>-uiS`*X*%q7+XzeYJni_$OU znYJPO?6~Z67Iv(Jou%VR7|SXNiXAIq$G8&4vPyztm4r#~N=b#oeoT8nOAMt$cuB{2 zyhsW2l*8Ip$=QVcp`p}}S8`6~m7E~2n#DVbj7D92#q!N|JihL!F9yL4aI z%pz~K|1pkk06CC|(|@r4K3S&vW&6E;qSODY82xOYf9}S?jd1^ww~dcRuw6pw5Q94s zsRQ?$nF{11_Q7cvb}e>cF1#|jt@DyjRyOfuRER~~U}ar1$Rc-)c&C$e+J%Z34bJzDd7Wu1K(f?e%bo&uR?G5iiDm5jeir8 z9ckb6l(1rz2#e%Rp9rfXUC2?S6Pm(;$6pe*2+wOF|G<8tSR8Z|5D(KHvZQfK;0$U3 z$=bW2G-CeqatSS31UUC7I%D?o24O{uGO|kJ!#@Wb_y^cli{ztb-e3%3R|N{tbzPI5jZ6G1b%_1wZc}xw@5JdIEb!z z0!q_ouqUVD*%v@{jQFubN8d$W#k22(u*HD_{RxzLWl0B0?ORB<5jY$u&|U?fD0(}_ zJeei_Gdn6fDl#TDs5T8cjql&X_mf6TSK7M5 zRx&l69gHEUrQ{hj)N7^081O&(EoL&oBW^v5e3r>$vH?8e#PgXFeyYhIz;9jpftaWI zNQ+l>5;jqA^RL6>aBUnMDAE_M|KR)c?Q^PT#az#u?rPSxIvc+R|0FxgYz^&i1G!gG=mFr#Yh|J6epxBZsGD zb%}T2rtQ))VW*Ge%U0+vdpg2AY-Zsh-wZE0jt+kq@do8=$9_Apj>y?TUgSjDw{u)7 zQWPsvOg8ZAK%(ew>H_`LiB?z<1 zDq~q?6~(F=FqAham2c6>AV$LN_c ze-IPL&$(fae>O|5vaSk?wmKLV<<|@?1`UN*wk(D%)g8!9-eIvJ?^|KDAMf^sOb7Ez z>9Z}v__l<#g+r|p1lLJa2iNSWOP@X1Y4`c!qO+E`JC?+yWNvP0oL3fI<*SUGQeRZq zR~=cYE?s@nkDt6Ip|aN7qIY(hefjc^{JhQz|9!d-SE^gjI?J{dR)f9NUSwdAPXWa~qp)XD5xe%SUFUTUcKSc; zG$y;3cl#gIXLR(La>N4z-C_fHRR=xxxa@KP?*b34z;~MbJmsS`JtMtmpxD4JCj@dcleo!LZap zdWmLQHkr>pQw#DcEt||IfvE?1m6l+5HR1?r5*}HgG+1;I{zR}eShNX;N1bBJl3tb4 z2l}=v+k!75Pkq4mn{oB2gS)iM`xcCZ+%)iNrqvJ7VX zOxvoJRAm=om2LNBhjK@Hh^B32eO1@8Fw111Wao2*!4-T$KRAfTL$~45jwf%ms0`IF z>~=H+%ec={^gU5cb3$F9{pRT22syz4bQ>jB7h;w2kKSj5rT3}o2SgKNMpNGD=!ZuP z!Z+rHBsWy+BYro$L^`4LPDqP|H1w{l(#-loZJM(PE$w#Hb4p-Pe5lx2ACg>GtM8N9 z0fXN31rcv>?dLRDC`m)l2l9iffPDAZNeh6@{k!_ghc>hh?CPx;Uf(85f3w|KfT|ph z?b$o4?abMgJ-cUO(Wf%B%-Ys4KQsq@8a;50>486BDUmtkFpn9qKFQ6o><(9ueMnXu z43QCOzkHWs<=u!<7YOS@`Th>S4c~K-<(@0ddpB{Z-%Jyw?^ zVZG^vN|$vDgBqS@I~I~~=D6(U(?WXFKa@qN_c&?a!aWR13(WUZH;4VOb{wfx`M1ir z73YN1x$w%yvGqt{aEFQ>EP->+ z%}Pt}U*2%?u9SwQJ(JQV&sx=JsciI>;Y}%Ky)%EhUfEYXW+#ekdbLqG-8HH*`ls56 zVra2}M(j5!P&t+!ZVC9(MX9!JV`u+k*9|6xH=4A`=9BXGE!$0gZ2WF-c&7>Wp7?*L zJ4Wp{kx@h=-b7n~XT;HtrOOOkumzep-s)uo&a2~M@=tG7TU;dO#EQ`|f7QD@xunwE z|isebSLWw&xuRU?hvBw50Pnlxdcm3Z#b&?UU2Wj3Fv~W7UdyJAq`@;@w(KBEC=z+mM6I?5X(obVbQa~3yRa=-xsnb z-P$H~8%m_f;+-?7Ull7cs<0PZSdnn8MZ(TogAx?0Bq&xSC{{@zE2Dq0P)LW+=wH$g zR!Ja>dALMLHCQF#{5K>v(cvtM4o40Lb>Qr>DM7Kc8^bCIip5xaln$Y>_9z_`Yapyu zhvU&f9d5MfaP&t(9Tcllp;*yDu}TNBGAbXXLugb!N(aThim+B4F1i;YaqiED`qL=q zrJNZGJ|{i;G3j)^NLQYF2|gtKo_j%ST-T)8_3mz0iLbr0Zc+X8^@-hy-BmU1xrGZ_ zyXu$57W9;7)HK!?XBNh!CQYxY^i>SBXH-_#7G)O1WK8O>tsE#vK1lqp(*`%G62h4v zVV`5qOR;CgiDiU+#u9etD?#>Y*|#b0r$x!z^=rjuNV-Do1+C$*Qg&6?9j1iDQDM(- z4~1nfO@-aW=YXdmC#`aipRU3R`=%+k$PN~o;0{J1qc=OzKld3$0JryIv(54l$CubU0%7_5H47>zP zEn(xG6sRxMv&$ZA1^r}3ud{SbOnP38J#sKS?g$kY`~S3?*`Jnp6)&MJJXQ;k){yKAhDCO3h*h$KY~rY} z=d&Nzin>EdP+^1Yr}_!o%8=Z3KRF8py&Xe=)ERyis-9L-!6>si~Q zd;Ry8b;?|n-Zt{K%)~%u78*X0>EK)r*O;>~@uH_;m}yLwxg#v|AzZZ?cj~xt#~UAa zEtQ3BMBG$b+EX4`HCP?peR^!est$dYL|ahMS*H8^cXq6(gWZ@CdiBH1z2JNdwITn* zQ9NTO|HvqQv>c2Exlewylps4=MvxsVK|O;qR)S*3N>J=r3F@heu@V$JR)S(Ffi;O( zBhs#(iJ%0sVv8V431r0*LAC~SHpoSkPGwI%rv*D_g?J_7_#r7>)ge|{GZ=boO4KtB zV^gBou_;lkk{}~7l@j$dgOVVu(n7IHg0LzjV9heV2fJdW$9Ym2SG#Lm>djRSyade? z8F^BPFHFozij15Q>F91u@%o~t&Kq0y2@q--2N8Xe=W;Z%~ZVtv(ARQ|zz! z-;UxX2NeJEC|*hvv`5Y;Il=NFrAhHhPLP-KqC{`pWR!LASC2$@>`IUO=h7!ms35ulzvPyztl@8Kl zQWDN7lM3jyZw%q)|qQS29kxRUH!ytz?{N3YO3`c?!qW zLOq3}v=CNFP^{8ISS3NR$`UeftI`q9&ot(ok`T^M#VQHm{Nz)yriA_6-6J|ER!LB- z=%8370j$(f2%BTJnerwBJpO;*dBa;W{<;XSBbe+j)t^^wCc@bo5e{oseB*(l|}x{W3p>IPRIh9P?3RgAqwDptm@^FRrMt@4~F zmPA29x_`cZ>yN!R2XC9E+6r|KRuR)fcMP5z4*zaAxQ-o$1x5zat6G+@-sVQqliuU= z+u@B#UT06U%Uk1^G%0gcOVj+4sPe(`$SEFntx5-HM)$6Jd9XP%uP&>t=BQfP(p&vM zF*{i$Bd_!QFOnl~!1#m~3pAMIDYbkwv})!z$g$V(p7H`;}4>PLjOi z-SH%oJxQ`+X_b&eTlXNm0ZOt zxxy;B`!dDXFSJqY@orS^vIpK)fKlgUsq59acJ!`%zNC`l z-O;>^eaGFcuUEwQf8D9OKmSgC44F^b+i#<0cT%$~yjSZKy2+cwWIR4vKhgUX`Wc(C z3(0@>cuJZHI7unBK7W#`O4C37-)VXr+e-Ya{zsZ(Z_hYJWo{c)rlu2GRCe;6!gBA! za3>2FB4Wj@1~rX?34FE`AYKgjAO72yoB#AEraDTI~829 zR!>kmTyC7FW1g3lr_K#achtw+J*jI}+vdyX4IEltUop2O@%|Y9%Q1cHoBQ?;_v~0u zUA?F!#urz9+46ZfBByTo;aUBMHx$JAe96nt^UXQzt6#dOr)S$xl23Xmtx)|!RkKOX z%N%_^-WIi@Yi*3t8?&~{*Y(FPWGklY)qWpCn}=TKH&I%W@EoXh)y!ODR}+V(vijoT z-5nJR56qgqtD}7WfuXkLow=(P2$s)@9lm_^!s`#t7`_z0&KdA^oOxc~w&NXV9_z!p z5Hwp2_4;W~RVHnhthmVe@_HO*h!=6;dz2+SJ@t{~r`zLcw_%2uWhgkI8E-foxsH;E zx9exsPU&m!T0Nyd#kan#eMLihWna~c`u6DBKh)1`Z!7S04ti7C7FJixX)5aN9jy4J z7t*tl%6i0}uhJOokcA$!^2qC;94_^SSv{tCbx(Xx(z0$mCtc#LjGGo4^QQmSX#L)( zXX87Uxl0Dt#1;>@vzvR$hwEzk3T?K+fYIl|_^RCYGuoO~_7_9<2E;rWx~EI;HNx~Q^jNWs#AEL)4+EPn zrYCf*ZkSq^|K3{vZ&D_e)?~J>@J!!3y>?FRtd82bHM3$pt2%3zE-2BH{C7l6$&9IA z(LS)Z&s)2ozGJ9nenW@M8)JP3IrOd;iTu|kH*}Z&9secK`jgTAImXR6xn-$ZF*S8qDv`38?$Q~aq|}tv-96iSy%j^XUB0SW z)txi-a|_!F-7N)eMYZCJczdO0v_oIo5@%xI%#JaY74|Nw$sbd#{kkh9sjNDSCLHKq zMY}F> T!Q8Tx8mOeLXa+Vm-x2Mmvs{gi!)Bf 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/PlusJakartaSans-VariableFont_wght.ttf b/assets/fonts/PlusJakartaSans-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..080a38691d987b5f7e6d0d1be00e5f0ce75069ac GIT binary patch literal 173760 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 literal 0 HcmV?d00001 diff --git a/components/Button.tsx b/components/Button.tsx new file mode 100644 index 0000000..97a730b --- /dev/null +++ b/components/Button.tsx @@ -0,0 +1,129 @@ +import React from 'react'; +import { ActivityIndicator, StyleProp, TouchableOpacity, ViewStyle } from 'react-native'; +import { StyleSheet, useUnistyles } from 'react-native-unistyles'; +import { AppText } from './Text'; + +// ─── Types ──────────────────────────────────────────────────────────────────── + +type ButtonVariant = 'primary' | 'outline' | 'ghost' | 'pill' | 'pillLight'; +type ButtonSize = 'sm' | 'md' | 'lg'; + +interface ButtonProps { + label: string; + onPress: () => void; + variant?: ButtonVariant; + size?: ButtonSize; + fullWidth?: boolean; + disabled?: boolean; + loading?: boolean; + leftIcon?: React.ReactNode; + style?: StyleProp; +} + +// ─── Component ──────────────────────────────────────────────────────────────── + +export function Button({ + label, + onPress, + variant = 'primary', + size = 'md', + fullWidth = false, + disabled = false, + loading = false, + leftIcon, + style, +}: ButtonProps) { + const { theme } = useUnistyles(); + stylesheet.useVariants({ variant, size }); + + const isLight = variant === 'primary' || variant === 'pill'; + const spinnerColor = isLight ? theme.colors.textInverse : theme.colors.primary; + + return ( + + {loading ? ( + + ) : ( + <> + {leftIcon} + + {label} + + + )} + + ); +} + +// ─── Styles ─────────────────────────────────────────────────────────────────── + +const stylesheet = StyleSheet.create((theme) => ({ + base: { + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'center', + gap: theme.spacing.sm, + variants: { + variant: { + primary: { + backgroundColor: theme.colors.primary, + borderRadius: theme.radii.md, + ...theme.shadows.primary, + }, + outline: { + backgroundColor: 'transparent', + borderRadius: theme.radii.md, + borderWidth: 1, + borderColor: theme.colors.border, + }, + ghost: { + backgroundColor: 'transparent', + borderRadius: theme.radii.md, + }, + pill: { + backgroundColor: theme.colors.primary, + borderRadius: theme.radii.full, + ...theme.shadows.md, + }, + pillLight: { + backgroundColor: theme.colors.bgWhite, + borderRadius: theme.radii.full, + ...theme.shadows.md, + }, + }, + size: { + sm: { + paddingVertical: theme.spacing.sm, + paddingHorizontal: theme.spacing.md, + }, + md: { + paddingVertical: theme.spacing.md, + paddingHorizontal: theme.spacing.base, + }, + lg: { + paddingVertical: theme.spacing.base, + paddingHorizontal: theme.spacing.xl, + }, + }, + }, + }, + fullWidth: { + width: '100%', + }, + disabled: { + opacity: 0.5, + }, +})); diff --git a/components/Text.tsx b/components/Text.tsx new file mode 100644 index 0000000..e0181f8 --- /dev/null +++ b/components/Text.tsx @@ -0,0 +1,107 @@ +import React from 'react'; +import { Text, TextProps } from 'react-native'; +import { StyleSheet } from 'react-native-unistyles'; + +// ─── Types ──────────────────────────────────────────────────────────────────── + +type TextVariant = 'h1' | 'h2' | 'h3' | 'body' | 'label' | 'caption' | 'micro'; +type TextColor = 'neutral' | 'muted' | 'inverse' | 'primary' | 'success' | 'danger' | 'warning'; + +interface AppTextProps extends TextProps { + variant?: TextVariant; + color?: TextColor; + bold?: boolean; + children: React.ReactNode; +} + +// ─── Component ──────────────────────────────────────────────────────────────── + +export function AppText({ + variant = 'body', + color = 'neutral', + bold = false, + style, + children, + ...rest +}: AppTextProps) { + stylesheet.useVariants({ variant, color }); + + return ( + + {children} + + ); +} + +// ─── Styles ─────────────────────────────────────────────────────────────────── + +const stylesheet = StyleSheet.create((theme) => ({ + base: { + variants: { + variant: { + h1: { + fontSize: theme.typography.fontSizes['2xl'], + fontFamily: theme.typography.fonts.bold, + fontWeight: theme.typography.fontWeights.bold, + lineHeight: theme.typography.fontSizes['2xl'] * theme.typography.lineHeights.tight, + color: theme.colors.textPrimary, + }, + h2: { + fontSize: theme.typography.fontSizes.xl, + fontFamily: theme.typography.fonts.bold, + fontWeight: theme.typography.fontWeights.bold, + lineHeight: theme.typography.fontSizes.xl * theme.typography.lineHeights.tight, + color: theme.colors.textPrimary, + }, + h3: { + fontSize: theme.typography.fontSizes.lg, + fontFamily: theme.typography.fonts.semiBold, + fontWeight: theme.typography.fontWeights.semiBold, + lineHeight: theme.typography.fontSizes.lg * theme.typography.lineHeights.normal, + color: theme.colors.textPrimary, + }, + body: { + fontSize: theme.typography.fontSizes.base, + fontFamily: theme.typography.fonts.regular, + fontWeight: theme.typography.fontWeights.regular, + lineHeight: theme.typography.fontSizes.base * theme.typography.lineHeights.normal, + color: theme.colors.textPrimary, + }, + label: { + fontSize: theme.typography.fontSizes.md, + fontFamily: theme.typography.fonts.semiBold, + fontWeight: theme.typography.fontWeights.semiBold, + lineHeight: theme.typography.fontSizes.md * theme.typography.lineHeights.normal, + color: theme.colors.textPrimary, + }, + caption: { + fontSize: theme.typography.fontSizes.sm, + fontFamily: theme.typography.fonts.medium, + fontWeight: theme.typography.fontWeights.medium, + lineHeight: theme.typography.fontSizes.sm * theme.typography.lineHeights.relaxed, + color: theme.colors.textSecondary, + }, + micro: { + fontSize: theme.typography.fontSizes.xs, + fontFamily: theme.typography.fonts.medium, + fontWeight: theme.typography.fontWeights.medium, + lineHeight: theme.typography.fontSizes.xs * theme.typography.lineHeights.relaxed, + color: theme.colors.textSecondary, + }, + }, + color: { + neutral: { color: theme.colors.textPrimary }, + muted: { color: theme.colors.textSecondary }, + inverse: { color: theme.colors.textInverse }, + primary: { color: theme.colors.primary }, + success: { color: theme.colors.success }, + danger: { color: theme.colors.danger }, + warning: { color: theme.colors.warning }, + }, + }, + }, + bold: { + fontFamily: theme.typography.fonts.bold, + fontWeight: theme.typography.fontWeights.bold, + }, +})); diff --git a/unistyles.ts b/unistyles.ts index f74cc38..c602170 100644 --- a/unistyles.ts +++ b/unistyles.ts @@ -1,26 +1,162 @@ import { StyleSheet } from 'react-native-unistyles'; +// ─── Design Tokens ──────────────────────────────────────────────────────────── + +const typography = { + fonts: { + regular: 'PlusJakartaSans-Regular', + medium: 'PlusJakartaSans-Medium', + semiBold: 'PlusJakartaSans-SemiBold', + bold: 'PlusJakartaSans-Bold', + }, + fontSizes: { + xs: 9, + sm: 11, + md: 13, + base: 14, + lg: 17, + xl: 18, + '2xl': 22, + '3xl': 36, + }, + lineHeights: { + tight: 1.2, + normal: 1.4, + relaxed: 1.6, + }, + fontWeights: { + regular: '400' as const, + medium: '500' as const, + semiBold: '600' as const, + bold: '700' as const, + }, +}; + +const spacing = { + gap: (v: number) => v * 8, + xs: 4, + sm: 8, + md: 12, + base: 16, + lg: 20, + xl: 24, + '2xl': 32, + '3xl': 40, + '4xl': 48, +}; + +const radii = { + xs: 4, + sm: 8, + md: 12, + lg: 16, + xl: 20, + '2xl': 24, + full: 9999, +}; + +const shadows = { + sm: { + shadowColor: '#000', + shadowOffset: { width: 0, height: 1 }, + shadowOpacity: 0.08, + shadowRadius: 2, + elevation: 1, + }, + md: { + shadowColor: '#000', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.15, + shadowRadius: 6, + elevation: 3, + }, + lg: { + shadowColor: '#000', + shadowOffset: { width: 0, height: 4 }, + shadowOpacity: 0.2, + shadowRadius: 12, + elevation: 6, + }, + primary: { + shadowColor: '#1a73e8', + shadowOffset: { width: 0, height: 2 }, + shadowOpacity: 0.3, + shadowRadius: 6, + elevation: 3, + }, +} as const; + +// ─── Themes ─────────────────────────────────────────────────────────────────── + const lightTheme = { colors: { - primary: '#ff1ff4', - secondary: '#1ff4ff', + // Brand + primary: '#1a73e8', + primaryHover: '#1557b0', + primaryLight: '#e3f2fd', + success: '#34a853', + danger: '#ea4335', + warning: '#fbbc05', + // Backgrounds + bgApp: '#f1f3f4', + bgWhite: '#ffffff', + bgChat: '#f8f9fa', + bgDark: '#111111', + bgDarkAlt: '#202124', + // Text + textPrimary: '#202124', + textSecondary: '#5f6368', + textInverse: '#ffffff', + // UI + border: '#dadce0', + headerBg: '#111111', + // Chat bubbles + bubbleUser: '#e3f2fd', + bubbleBot: '#ffffff', }, + typography, + spacing, + radii, + shadows, + // Kept for backwards compatibility gap: (v: number) => v * 8, }; -const otherTheme = { +const darkTheme: typeof lightTheme = { colors: { - primary: '#aa12ff', - secondary: 'pink', + primary: '#4da3f7', + primaryHover: '#81c0ff', + primaryLight: '#1c2f4d', + success: '#5dba71', + danger: '#f28b82', + warning: '#fdd663', + bgApp: '#1e1e1e', + bgWhite: '#2d2d2d', + bgChat: '#242424', + bgDark: '#111111', + bgDarkAlt: '#202124', + textPrimary: '#e8eaed', + textSecondary: '#9aa0a6', + textInverse: '#111111', + border: '#3c4043', + headerBg: '#111111', + bubbleUser: '#1c2f4d', + bubbleBot: '#2d2d2d', }, + typography, + spacing, + radii, + shadows, gap: (v: number) => v * 8, }; const appThemes = { light: lightTheme, - other: otherTheme, + dark: darkTheme, }; +// ─── Breakpoints ────────────────────────────────────────────────────────────── + const breakpoints = { xs: 0, sm: 300, @@ -29,6 +165,8 @@ const breakpoints = { xl: 1200, }; +// ─── Module Augmentation ────────────────────────────────────────────────────── + type AppBreakpoints = typeof breakpoints; type AppThemes = typeof appThemes; From f4be0ff9500e6c562b7784639ee271cf4013923a Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Mon, 8 Jun 2026 14:15:30 +0700 Subject: [PATCH 04/16] convert unistyles theme to use semantics/primatives format --- components/Button.tsx | 63 ++++++++++------ components/Text.tsx | 103 ++++++++++++++----------- unistyles.ts | 170 +++++++++++++++++++++++++++--------------- 3 files changed, 210 insertions(+), 126 deletions(-) diff --git a/components/Button.tsx b/components/Button.tsx index 97a730b..fc06fe1 100644 --- a/components/Button.tsx +++ b/components/Button.tsx @@ -5,7 +5,7 @@ import { AppText } from './Text'; // ─── Types ──────────────────────────────────────────────────────────────────── -type ButtonVariant = 'primary' | 'outline' | 'ghost' | 'pill' | 'pillLight'; +type ButtonVariant = 'primary' | 'outline' | 'ghost' | 'pill' | 'pillLight' | 'link'; type ButtonSize = 'sm' | 'md' | 'lg'; interface ButtonProps { @@ -37,7 +37,7 @@ export function Button({ stylesheet.useVariants({ variant, size }); const isLight = variant === 'primary' || variant === 'pill'; - const spinnerColor = isLight ? theme.colors.textInverse : theme.colors.primary; + const spinnerColor = isLight ? theme.semantic.fg.inverse : theme.primitives.color.brand.hover; return ( {label} @@ -75,47 +84,53 @@ const stylesheet = StyleSheet.create((theme) => ({ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', - gap: theme.spacing.sm, + gap: theme.primitives.spacing.sm, variants: { variant: { primary: { - backgroundColor: theme.colors.primary, - borderRadius: theme.radii.md, - ...theme.shadows.primary, + backgroundColor: theme.primitives.color.brand.primary, + borderRadius: theme.primitives.radii.md, + ...theme.primitives.shadows.primary, }, outline: { backgroundColor: 'transparent', - borderRadius: theme.radii.md, + borderRadius: theme.primitives.radii.md, borderWidth: 1, - borderColor: theme.colors.border, + borderColor: theme.semantic.stroke.default, }, ghost: { backgroundColor: 'transparent', - borderRadius: theme.radii.md, + borderRadius: theme.primitives.radii.md, }, pill: { - backgroundColor: theme.colors.primary, - borderRadius: theme.radii.full, - ...theme.shadows.md, + backgroundColor: theme.primitives.color.brand.primary, + borderRadius: theme.primitives.radii.full, + ...theme.primitives.shadows.md, }, pillLight: { - backgroundColor: theme.colors.bgWhite, - borderRadius: theme.radii.full, - ...theme.shadows.md, + backgroundColor: theme.semantic.bg.surface, + borderRadius: theme.primitives.radii.full, + ...theme.primitives.shadows.md, + }, + link: { + backgroundColor: 'transparent', + borderRadius: 0, + paddingVertical: 0, + paddingHorizontal: 0, }, }, size: { sm: { - paddingVertical: theme.spacing.sm, - paddingHorizontal: theme.spacing.md, + paddingVertical: theme.primitives.spacing.sm, + paddingHorizontal: theme.primitives.spacing.md, }, md: { - paddingVertical: theme.spacing.md, - paddingHorizontal: theme.spacing.base, + paddingVertical: theme.primitives.spacing.md, + paddingHorizontal: theme.primitives.spacing.base, }, lg: { - paddingVertical: theme.spacing.base, - paddingHorizontal: theme.spacing.xl, + paddingVertical: theme.primitives.spacing.base, + paddingHorizontal: theme.primitives.spacing.xl, }, }, }, @@ -123,6 +138,10 @@ const stylesheet = StyleSheet.create((theme) => ({ fullWidth: { width: '100%', }, + linkReset: { + borderRadius: 0, + paddingVertical: 0, + }, disabled: { opacity: 0.5, }, diff --git a/components/Text.tsx b/components/Text.tsx index e0181f8..95d3bc2 100644 --- a/components/Text.tsx +++ b/components/Text.tsx @@ -40,68 +40,83 @@ const stylesheet = StyleSheet.create((theme) => ({ variants: { variant: { h1: { - fontSize: theme.typography.fontSizes['2xl'], - fontFamily: theme.typography.fonts.bold, - fontWeight: theme.typography.fontWeights.bold, - lineHeight: theme.typography.fontSizes['2xl'] * theme.typography.lineHeights.tight, - color: theme.colors.textPrimary, + fontSize: theme.primitives.typography.fontSizes.xl * 1.22, + fontFamily: theme.primitives.typography.fonts.bold, + fontWeight: theme.primitives.typography.fontWeights.bold, + lineHeight: + theme.primitives.typography.fontSizes.xl * + 1.22 * + theme.primitives.typography.lineHeights.tight, + color: theme.semantic.fg.highEmphasis, }, h2: { - fontSize: theme.typography.fontSizes.xl, - fontFamily: theme.typography.fonts.bold, - fontWeight: theme.typography.fontWeights.bold, - lineHeight: theme.typography.fontSizes.xl * theme.typography.lineHeights.tight, - color: theme.colors.textPrimary, + fontSize: theme.primitives.typography.fontSizes.xl, + fontFamily: theme.primitives.typography.fonts.bold, + fontWeight: theme.primitives.typography.fontWeights.bold, + lineHeight: + theme.primitives.typography.fontSizes.xl * + theme.primitives.typography.lineHeights.tight, + color: theme.semantic.fg.highEmphasis, }, h3: { - fontSize: theme.typography.fontSizes.lg, - fontFamily: theme.typography.fonts.semiBold, - fontWeight: theme.typography.fontWeights.semiBold, - lineHeight: theme.typography.fontSizes.lg * theme.typography.lineHeights.normal, - color: theme.colors.textPrimary, + fontSize: theme.primitives.typography.fontSizes.lg, + fontFamily: theme.primitives.typography.fonts.semiBold, + fontWeight: theme.primitives.typography.fontWeights.semiBold, + lineHeight: + theme.primitives.typography.fontSizes.lg * + theme.primitives.typography.lineHeights.normal, + color: theme.semantic.fg.highEmphasis, }, body: { - fontSize: theme.typography.fontSizes.base, - fontFamily: theme.typography.fonts.regular, - fontWeight: theme.typography.fontWeights.regular, - lineHeight: theme.typography.fontSizes.base * theme.typography.lineHeights.normal, - color: theme.colors.textPrimary, + fontSize: theme.primitives.typography.fontSizes.base, + fontFamily: theme.primitives.typography.fonts.regular, + fontWeight: theme.primitives.typography.fontWeights.regular, + lineHeight: + theme.primitives.typography.fontSizes.base * + theme.primitives.typography.lineHeights.normal, + color: theme.semantic.fg.highEmphasis, }, label: { - fontSize: theme.typography.fontSizes.md, - fontFamily: theme.typography.fonts.semiBold, - fontWeight: theme.typography.fontWeights.semiBold, - lineHeight: theme.typography.fontSizes.md * theme.typography.lineHeights.normal, - color: theme.colors.textPrimary, + fontSize: theme.primitives.typography.fontSizes.md, + fontFamily: theme.primitives.typography.fonts.semiBold, + fontWeight: theme.primitives.typography.fontWeights.semiBold, + lineHeight: + theme.primitives.typography.fontSizes.md * + theme.primitives.typography.lineHeights.normal, + color: theme.semantic.fg.highEmphasis, }, caption: { - fontSize: theme.typography.fontSizes.sm, - fontFamily: theme.typography.fonts.medium, - fontWeight: theme.typography.fontWeights.medium, - lineHeight: theme.typography.fontSizes.sm * theme.typography.lineHeights.relaxed, - color: theme.colors.textSecondary, + fontSize: theme.primitives.typography.fontSizes.sm, + fontFamily: theme.primitives.typography.fonts.medium, + fontWeight: theme.primitives.typography.fontWeights.medium, + lineHeight: + theme.primitives.typography.fontSizes.sm * + theme.primitives.typography.lineHeights.relaxed, + color: theme.semantic.fg.mediumEmphasis, }, micro: { - fontSize: theme.typography.fontSizes.xs, - fontFamily: theme.typography.fonts.medium, - fontWeight: theme.typography.fontWeights.medium, - lineHeight: theme.typography.fontSizes.xs * theme.typography.lineHeights.relaxed, - color: theme.colors.textSecondary, + fontSize: theme.primitives.typography.fontSizes.xs, + fontFamily: theme.primitives.typography.fonts.medium, + fontWeight: theme.primitives.typography.fontWeights.medium, + lineHeight: + theme.primitives.typography.fontSizes.xs * + theme.primitives.typography.lineHeights.relaxed, + color: theme.semantic.fg.mediumEmphasis, }, }, color: { - neutral: { color: theme.colors.textPrimary }, - muted: { color: theme.colors.textSecondary }, - inverse: { color: theme.colors.textInverse }, - primary: { color: theme.colors.primary }, - success: { color: theme.colors.success }, - danger: { color: theme.colors.danger }, - warning: { color: theme.colors.warning }, + neutral: { color: theme.semantic.fg.highEmphasis }, + muted: { color: theme.semantic.fg.mediumEmphasis }, + inverse: { color: theme.semantic.fg.inverse }, + primary: { color: theme.semantic.fg.primary }, + success: { color: theme.semantic.fg.success }, + danger: { color: theme.semantic.fg.danger }, + warning: { color: theme.semantic.fg.warning }, }, }, }, bold: { - fontFamily: theme.typography.fonts.bold, - fontWeight: theme.typography.fontWeights.bold, + fontFamily: theme.primitives.typography.fonts.bold, + fontWeight: theme.primitives.typography.fontWeights.bold, }, })); diff --git a/unistyles.ts b/unistyles.ts index c602170..46826fa 100644 --- a/unistyles.ts +++ b/unistyles.ts @@ -16,8 +16,6 @@ const typography = { base: 14, lg: 17, xl: 18, - '2xl': 22, - '3xl': 36, }, lineHeights: { tight: 1.2, @@ -40,9 +38,6 @@ const spacing = { base: 16, lg: 20, xl: 24, - '2xl': 32, - '3xl': 40, - '4xl': 48, }; const radii = { @@ -51,7 +46,6 @@ const radii = { md: 12, lg: 16, xl: 20, - '2xl': 24, full: 9999, }; @@ -86,70 +80,126 @@ const shadows = { }, } as const; -// ─── Themes ─────────────────────────────────────────────────────────────────── - -const lightTheme = { - colors: { - // Brand - primary: '#1a73e8', - primaryHover: '#1557b0', - primaryLight: '#e3f2fd', - success: '#34a853', - danger: '#ea4335', - warning: '#fbbc05', - // Backgrounds - bgApp: '#f1f3f4', - bgWhite: '#ffffff', - bgChat: '#f8f9fa', - bgDark: '#111111', - bgDarkAlt: '#202124', - // Text - textPrimary: '#202124', - textSecondary: '#5f6368', - textInverse: '#ffffff', - // UI - border: '#dadce0', - headerBg: '#111111', - // Chat bubbles - bubbleUser: '#e3f2fd', - bubbleBot: '#ffffff', - }, +const primitiveFoundation = { typography, spacing, radii, shadows, - // Kept for backwards compatibility - gap: (v: number) => v * 8, +} as const; + +type PrimitiveTokens = typeof primitiveFoundation & { + color: { + brand: { + primary: string; + hover: string; + soft: string; + }; + neutral: { + '0': string; + '10': string; + '20': string; + '70': string; + '90': string; + '100': string; + }; + state: { + success: string; + danger: string; + warning: string; + }; + border: string; + }; }; -const darkTheme: typeof lightTheme = { - colors: { - primary: '#4da3f7', - primaryHover: '#81c0ff', - primaryLight: '#1c2f4d', - success: '#5dba71', - danger: '#f28b82', - warning: '#fdd663', - bgApp: '#1e1e1e', - bgWhite: '#2d2d2d', - bgChat: '#242424', - bgDark: '#111111', - bgDarkAlt: '#202124', - textPrimary: '#e8eaed', - textSecondary: '#9aa0a6', - textInverse: '#111111', +// ─── Themes ─────────────────────────────────────────────────────────────────── + +const lightPrimitives: PrimitiveTokens = { + ...primitiveFoundation, + color: { + brand: { + primary: '#1a73e8', + hover: '#1557b0', + soft: '#e3f2fd', + }, + neutral: { + '0': '#ffffff', + '10': '#f8f9fa', + '20': '#f1f3f4', + '70': '#5f6368', + '90': '#202124', + '100': '#111111', + }, + state: { + success: '#34a853', + danger: '#ea4335', + warning: '#fbbc05', + }, + border: '#dadce0', + }, +}; + +const darkPrimitives: PrimitiveTokens = { + ...primitiveFoundation, + color: { + brand: { + primary: '#4da3f7', + hover: '#81c0ff', + soft: '#1c2f4d', + }, + neutral: { + '0': '#2d2d2d', + '10': '#242424', + '20': '#1e1e1e', + '70': '#9aa0a6', + '90': '#e8eaed', + '100': '#111111', + }, + state: { + success: '#5dba71', + danger: '#f28b82', + warning: '#fdd663', + }, border: '#3c4043', - headerBg: '#111111', - bubbleUser: '#1c2f4d', - bubbleBot: '#2d2d2d', }, - typography, - spacing, - radii, - shadows, - gap: (v: number) => v * 8, }; +const createSemanticTokens = (primitives: PrimitiveTokens) => ({ + fg: { + highEmphasis: primitives.color.neutral['90'], + mediumEmphasis: primitives.color.neutral['70'], + inverse: primitives.color.neutral['0'], + primary: primitives.color.brand.primary, + success: primitives.color.state.success, + danger: primitives.color.state.danger, + warning: primitives.color.state.warning, + }, + bg: { + app: primitives.color.neutral['20'], + surface: primitives.color.neutral['0'], + chat: primitives.color.neutral['10'], + dark: primitives.color.neutral['100'], + darkAlt: primitives.color.neutral['90'], + header: primitives.color.neutral['100'], + bubbleUser: primitives.color.brand.soft, + bubbleBot: primitives.color.neutral['0'], + }, + stroke: { + default: primitives.color.border, + }, +}); + +const createTheme = (primitives: PrimitiveTokens) => { + const semantic = createSemanticTokens(primitives); + + return { + primitives, + semantic, + }; +}; + +const lightTheme = createTheme(lightPrimitives); +const darkTheme = createTheme(darkPrimitives); + const appThemes = { light: lightTheme, dark: darkTheme, From 69db931863ed1f57566f9e9ca3868459bb74336f Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Mon, 8 Jun 2026 16:29:31 +0700 Subject: [PATCH 05/16] feat: add gorhom rn bottomsheet --- app/_layout.tsx | 34 +- babel.config.js | 1 + package.json | 3 +- pnpm-lock.yaml | 916 +++++++++++++++++++++++++++++++++++------------- 4 files changed, 689 insertions(+), 265 deletions(-) diff --git a/app/_layout.tsx b/app/_layout.tsx index 34e2311..7b4b987 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -1,19 +1,21 @@ -import { useEventListener } from 'expo'; -import { Stack } from 'expo-router'; -import { install } from 'react-native-quick-crypto'; -import { keyStore } from '@/stores/keystore'; -import { keyStoreHooks } from '@/stores/before-after'; +import { bootstrap } from '@/lib/bootstrap'; +import { globalPolyfill, setupNavigatorPolyfill } from '@/lib/polyfill'; +import { PreventScreenshotProvider } from '@/providers/PreventScreenshotProvider'; +import { ReactNativeProvider, WalletProvider } from '@/providers/ReactNativeProvider'; import { accountsStore } from '@/stores/accounts'; +import { keyStoreHooks } from '@/stores/before-after'; import { identitiesStore } from '@/stores/identities'; -import { ReactNativeProvider, WalletProvider } from '@/providers/ReactNativeProvider'; +import { keyStore } from '@/stores/keystore'; import { passkeysStore } from '@/stores/passkeys'; -import { registerGlobals } from 'react-native-webrtc'; -import { globalPolyfill, setupNavigatorPolyfill } from '@/lib/polyfill'; +import { ReactKeystoreOptions } from '@algorandfoundation/react-native-keystore'; import ReactNativePasskeyAutofill from '@algorandfoundation/react-native-passkey-autofill'; -import { bootstrap } from '@/lib/bootstrap'; -import { PreventScreenshotProvider } from '@/providers/PreventScreenshotProvider'; +import { BottomSheetModalProvider } from '@gorhom/bottom-sheet'; +import { useEventListener } from 'expo'; +import { Stack } from 'expo-router'; import React from 'react'; -import { ReactKeystoreOptions } from '@algorandfoundation/react-native-keystore'; +import { GestureHandlerRootView } from 'react-native-gesture-handler'; +import { install } from 'react-native-quick-crypto'; +import { registerGlobals } from 'react-native-webrtc'; globalPolyfill(); registerGlobals(); @@ -83,10 +85,14 @@ export default function RootLayout() { }); return ( - + - + + + + + - + ); } diff --git a/babel.config.js b/babel.config.js index 688475a..78ff301 100644 --- a/babel.config.js +++ b/babel.config.js @@ -22,6 +22,7 @@ module.exports = function (api) { root: 'app', }, ], + 'react-native-worklets/plugin', ], }; }; diff --git a/package.json b/package.json index 4e0093a..8083c2e 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "@algorandfoundation/wallet-provider": "1.0.0-canary.5", "@config-plugins/react-native-webrtc": "^13.0.0", "@expo/vector-icons": "^15.0.3", + "@gorhom/bottom-sheet": "^5.2.14", "@noble/hashes": "^1.8.0", "@react-navigation/bottom-tabs": "^7.4.0", "@react-navigation/elements": "^2.6.3", @@ -86,7 +87,7 @@ "react-native-passkey": "^3.3.2", "react-native-quick-base64": "3.0.0", "react-native-quick-crypto": "1.1.5", - "react-native-reanimated": "~3.19.5", + "react-native-reanimated": "~4.1.7", "react-native-safe-area-context": "~5.6.0", "react-native-screens": "~4.16.0", "react-native-unistyles": "^3.2.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c99d4aa..3016dd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,10 +37,10 @@ importers: version: 1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0) '@algorandfoundation/react-native-keystore': specifier: ^1.0.0-canary.12 - version: 1.0.0-canary.12(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.0.0-canary.12(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@algorandfoundation/react-native-passkey-autofill': specifier: ^1.0.0-canary.17 - version: 1.0.0-canary.17(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.0.0-canary.17(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@algorandfoundation/wallet-provider': specifier: 1.0.0-canary.5 version: 1.0.0-canary.5 @@ -49,19 +49,22 @@ importers: version: 13.0.0(expo@54.0.35) '@expo/vector-icons': specifier: ^15.0.3 - version: 15.1.1(expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 15.1.1(expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@gorhom/bottom-sheet': + specifier: ^5.2.14 + version: 5.2.14(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@noble/hashes': specifier: ^1.8.0 version: 1.8.0 '@react-navigation/bottom-tabs': specifier: ^7.4.0 - version: 7.16.2(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 7.16.2(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@react-navigation/elements': specifier: ^2.6.3 - version: 2.9.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 2.9.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@react-navigation/native': specifier: ^7.1.8 - version: 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@scure/base': specifier: ^2.0.0 version: 2.2.0 @@ -82,13 +85,13 @@ importers: version: 6.0.3 expo: specifier: ^54.0.33 - version: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-camera: specifier: ~17.0.10 - version: 17.0.10(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 17.0.10(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-constants: specifier: ~18.0.13 - version: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + version: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) expo-dev-client: specifier: ~6.0.20 version: 6.0.21(expo@54.0.35) @@ -97,22 +100,22 @@ importers: version: 14.0.8(expo@54.0.35) expo-file-system: specifier: ~19.0.21 - version: 19.0.23(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + version: 19.0.23(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) expo-font: specifier: ~14.0.11 - version: 14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-haptics: specifier: ~15.0.8 version: 15.0.8(expo@54.0.35) expo-image: specifier: ~3.0.11 - version: 3.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 3.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-linking: specifier: ~8.0.11 - version: 8.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 8.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-router: specifier: ~6.0.23 - version: 6.0.24(ace148d1f520ff029f39906dc9ee7269) + version: 6.0.24(dd0a7c8e3f182341a3ec8c6aaba81ae4) expo-screen-capture: specifier: ~8.0.9 version: 8.0.9(expo@54.0.35)(react@19.1.0) @@ -124,19 +127,19 @@ importers: version: 31.0.13(expo@54.0.35)(typescript@5.8.3) expo-status-bar: specifier: ~3.0.9 - version: 3.0.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 3.0.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-symbols: specifier: ~1.0.8 - version: 1.0.8(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + version: 1.0.8(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) expo-system-ui: specifier: ~6.0.9 - version: 6.0.9(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + version: 6.0.9(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) expo-updates: specifier: ~29.0.16 - version: 29.0.18(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 29.0.18(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-web-browser: specifier: ~15.0.10 - version: 15.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + version: 15.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) react: specifier: 19.1.0 version: 19.1.0 @@ -148,56 +151,56 @@ importers: version: 19.1.0(react@19.1.0) react-native: specifier: 0.81.5 - version: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + version: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) react-native-gesture-handler: specifier: ~2.28.0 - version: 2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-json-tree: specifier: ^1.5.0 - version: 1.5.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.5.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-keychain: specifier: 10.0.0 version: 10.0.0 react-native-mmkv: specifier: ^4.3.1 - version: 4.3.1(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 4.3.1(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-nitro-modules: specifier: ^0.35.9 - version: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-passkey: specifier: ^3.3.2 - version: 3.4.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 3.4.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-quick-base64: specifier: 3.0.0 - version: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-quick-crypto: specifier: 1.1.5 - version: 1.1.5(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 1.1.5(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-reanimated: - specifier: ~3.19.5 - version: 3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + specifier: ~4.1.7 + version: 4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 5.6.2(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 4.16.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-unistyles: specifier: ^3.2.5 - version: 3.2.5(@react-native/normalize-colors@0.81.5)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + version: 3.2.5(@react-native/normalize-colors@0.81.5)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) react-native-webrtc: specifier: ^124.0.7 - version: 124.0.7(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + version: 124.0.7(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) devDependencies: '@babel/runtime': specifier: ^7.29.7 version: 7.29.7 '@testing-library/jest-native': specifier: ^5.4.3 - version: 5.4.3(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0) + version: 5.4.3(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0) '@testing-library/react-native': specifier: ^13.3.3 - version: 13.3.3(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0) + version: 13.3.3(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0) '@types/jest': specifier: ^30.0.0 version: 30.0.0 @@ -215,7 +218,7 @@ importers: version: 29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)) jest-expo: specifier: ^55.0.9 - version: 55.0.18(@babel/core@7.29.7)(canvas@2.11.2)(expo@54.0.35)(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + version: 55.0.18(@babel/core@7.29.7)(canvas@2.11.2)(expo@54.0.35)(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) lefthook: specifier: ^2.1.2 version: 2.1.9 @@ -1312,6 +1315,27 @@ packages: '@gerrit0/mini-shiki@3.23.0': resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==} + '@gorhom/bottom-sheet@5.2.14': + resolution: {integrity: sha512-uLQFlDjp9z+jrOFcMSEldPqL5JdaXL3vXOh+juhwoNvXgTsEorJLjHTugXu+YccAG/0KJnShzKCrb71MHBsvJg==} + peerDependencies: + '@types/react': '*' + '@types/react-native': '*' + react: '*' + react-native: '*' + react-native-gesture-handler: '>=2.16.1' + react-native-reanimated: '>=3.16.0 || >=4.0.0-' + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-native': + optional: true + + '@gorhom/portal@1.0.14': + resolution: {integrity: sha512-MXyL4xvCjmgaORr/rtryDNFy3kU4qUbKlwtQqqsygd0xX3mhKjOLn6mQK8wfu0RkoE0pBE0nAasRoHua+/QZ7A==} + peerDependencies: + react: '*' + react-native: '*' + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -1977,18 +2001,34 @@ packages: resolution: {integrity: sha512-oF71cIH6je3fSLi6VPjjC3Sgyyn57JLHXs+mHWc9MoCiJJcM4nqsS5J38zv1XQ8d3zOW2JtHro+LF0tagj2bfQ==} engines: {node: '>= 20.19.4'} + '@react-native/babel-plugin-codegen@0.85.3': + resolution: {integrity: sha512-Wc94zGfeFG8Njf9SHMPfYZP04kjigkOps6F1TYTvd7ZVXuGxqseCDgxc50LWcOhOCLypI9n3oVVqz81C3p44ZA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + '@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/babel-preset@0.85.3': + resolution: {integrity: sha512-fD7fxEhkJB/aF57tWoXjaAWpklfrExYZS3k6aXPP3BQ77DZY7gvf/b7dbirwjID6NVnP1JDRJyTuPBGr0K/vlw==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + 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/codegen@0.85.3': + resolution: {integrity: sha512-/JkS1lGLyzBWP1FbgDwaqEf7qShIC6pUC1M0a/YMAd/v4iqR24MRkQWe7jkYvcBQ2LpEhs5NGE9InhxSv21zCA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + 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'} @@ -2017,6 +2057,20 @@ packages: resolution: {integrity: sha512-fB7M1CMOCIUudTRuj7kzxIBTVw2KXnsgbQ6+4cbqSxo8NmRRhA0Ul4ZUzZj3rFd3VznTL4Brmocv1oiN0bWZ8w==} engines: {node: '>= 20.19.4'} + '@react-native/js-polyfills@0.85.3': + resolution: {integrity: sha512-U2+aMshIXf1uFn77tpBb/xhHWB9vkVrMpt7kkucAugF8hJKYTDGB587X7WwelHduK2KBfhl4giSv0rzZGoef9A==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + + '@react-native/metro-babel-transformer@0.85.3': + resolution: {integrity: sha512-omuKq+r7jM4XvCMIlNMPP7Up3SyB8o5EAdZtF7YXniKyq7UOMBqhYHFqgsdOXr0lT+3ADf7VCJG3sb82jlBrrQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + peerDependencies: + '@babel/core': '*' + + '@react-native/metro-config@0.85.3': + resolution: {integrity: sha512-sVo6HepUmCcpdfozEf91lA0FjpLNNZYu/Zi9FiYiAQTK8pzATXDVTqhvdxpFrQn435p5eUTSbllvbH/KN+bnyA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + '@react-native/normalize-colors@0.76.2': resolution: {integrity: sha512-ICoOpaTLPsFQjNLSM00NgQr6wal300cZZonHVSDXKntX+BfkLeuCHRtr/Mn+klTtW+/1v2/2FRm9dXjvyGf9Dw==} @@ -2699,6 +2753,9 @@ packages: babel-plugin-syntax-hermes-parser@0.29.1: resolution: {integrity: sha512-2WFYnoWGdmih1I1J5eIqxATOeycOqRwYxAQBu3cUu/rhwInwHUg7k60AFNbuGjSDL8tje5GDrAnxzRLcu2pYcA==} + babel-plugin-syntax-hermes-parser@0.33.3: + resolution: {integrity: sha512-/Z9xYdaJ1lC0pT9do6TqCqhOSLfZ5Ot8D5za1p+feEfWYupCOfGbhhEXN9r2ZgJtDNUNRw/Z+T2CvAGKBqtqWA==} + babel-plugin-transform-flow-enums@0.0.2: resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} @@ -3882,6 +3939,9 @@ packages: hermes-estree@0.32.0: resolution: {integrity: sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==} + hermes-estree@0.33.3: + resolution: {integrity: sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==} + hermes-estree@0.35.0: resolution: {integrity: sha512-xVx5Opwy8Oo1I5yGpVRhCvWL/iV3M+ylksSKVNlxxD90cpDpR/AR1jLYqK8HWihm065a6UI3HeyAmYzwS8NOOg==} @@ -3891,6 +3951,9 @@ packages: hermes-parser@0.32.0: resolution: {integrity: sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==} + hermes-parser@0.33.3: + resolution: {integrity: sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==} + hermes-parser@0.35.0: resolution: {integrity: sha512-9JLjeHxBx8T4CAsydZR49PNZUaix+WpQJwu9p2010lu+7Kwl6D/7wYFFJxoz+aXkaaClp9Zfg6W6/zVlSJORaA==} @@ -4631,6 +4694,10 @@ packages: resolution: {integrity: sha512-sBqBkt6kNut/88bv+Ucvm4yqdPetbvAEsHzi3MAgJEifOSYYzX5Z5Kgw3TFOrwf/mHJTOBG2ONlaMHoyfP15TA==} engines: {node: '>=20.19.4'} + metro-babel-transformer@0.84.4: + resolution: {integrity: sha512-rvCfz8snl9h20VcvpOHxZuHP1SlAkv4HXbzw7nyyVwu6Eqo5PRerbakQ9XmUCOsRy70spJ37O+G1TK8oMzo48g==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-cache-key@0.83.3: resolution: {integrity: sha512-59ZO049jKzSmvBmG/B5bZ6/dztP0ilp0o988nc6dpaDsU05Cl1c/lRf+yx8m9WW/JVgbmfO5MziBU559XjI5Zw==} engines: {node: '>=20.19.4'} @@ -4639,6 +4706,10 @@ packages: resolution: {integrity: sha512-W1c2Nmx8MiJTJt+eWhMO08z9VKi3kZOaz99IYGdqeqDgY9j+yZjXl62rUav4Di0heZfh4/n2s722PqRL1OODeg==} engines: {node: '>=20.19.4'} + metro-cache-key@0.84.4: + resolution: {integrity: sha512-wVO79aGrkYImpnaVS4+d5RrRBRPX31QtvKB3wKGBuiNSznduZTQHzsrJZRroFJSwnygrzdsGUtDQPuqqFjFdvw==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-cache@0.83.3: resolution: {integrity: sha512-3jo65X515mQJvKqK3vWRblxDEcgY55Sk3w4xa6LlfEXgQ9g1WgMh9m4qVZVwgcHoLy0a2HENTPCCX4Pk6s8c8Q==} engines: {node: '>=20.19.4'} @@ -4647,6 +4718,10 @@ packages: resolution: {integrity: sha512-E9SRePXQ1Zvlj79VcOk57q7VC7rMHMFQ+jhmPHBiq+dJ0bJB5BL87lWZF6oh5X76Cci5tpDuQNaDwwuSCToEeg==} engines: {node: '>=20.19.4'} + metro-cache@0.84.4: + resolution: {integrity: sha512-gpcFQdSLUwUCk71saKoE64jLFbx2nwTfVCcPSULMNT8QYq0p1eZZE29Jvd0HtT/UlhC3ZOutLxJME5xqD2JUZg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-config@0.83.3: resolution: {integrity: sha512-mTel7ipT0yNjKILIan04bkJkuCzUUkm2SeEaTads8VfEecCh+ltXchdq6DovXJqzQAXuR2P9cxZB47Lg4klriA==} engines: {node: '>=20.19.4'} @@ -4655,6 +4730,10 @@ packages: resolution: {integrity: sha512-83mjWFbFOt2GeJ6pFIum5mSnc1uTsZJAtD8o4ej0s4NVsYsA7fB+pHvTfHhFrpeMONaobu2riKavkPei05Er/Q==} engines: {node: '>=20.19.4'} + metro-config@0.84.4: + resolution: {integrity: sha512-PMotGDjXcXLWo2TMRH+VR99phFNgYTwqh4OoieIKK3yTJa1Jmkl+fZJxDO0jfBvNF+WESHciHvpNuBtXaF3B0Q==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-core@0.83.3: resolution: {integrity: sha512-M+X59lm7oBmJZamc96usuF1kusd5YimqG/q97g4Ac7slnJ3YiGglW5CsOlicTR5EWf8MQFxxjDoB6ytTqRe8Hw==} engines: {node: '>=20.19.4'} @@ -4663,6 +4742,10 @@ packages: resolution: {integrity: sha512-6yn3w1wnltT6RQl7p7YES2l95ArC+mWrOssEiH8p5/DDrJS65/szf9LsC9JrBv8c5DdvSY3V3f0GRYg0Ox7hCg==} engines: {node: '>=20.19.4'} + metro-core@0.84.4: + resolution: {integrity: sha512-HONpWC5LGXZn3ffkd4Hu6AIrfE7j4Z0g0wMo/goV24WOB3lhuFZ40KgvaDiSw8iyQHloMYay5N/wPX+z8oN/PQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-file-map@0.83.3: resolution: {integrity: sha512-jg5AcyE0Q9Xbbu/4NAwwZkmQn7doJCKGW0SLeSJmzNB9Z24jBe0AL2PHNMy4eu0JiKtNWHz9IiONGZWq7hjVTA==} engines: {node: '>=20.19.4'} @@ -4671,6 +4754,10 @@ packages: resolution: {integrity: sha512-+j0F1m+FQYVAQ6syf+mwhIPV5GoFQrkInX8bppuc50IzNsZbMrp8R5H/Sx/K2daQ3YEa9F/XwkeZT8gzJfgeCw==} engines: {node: '>=20.19.4'} + metro-file-map@0.84.4: + resolution: {integrity: sha512-KSVDi/u60hKPx++NLu3MTIvyjzNoJnFAF8PQFxaj1jiSka/wjw+Ua6sNuJ0TDHQv+7AAoFQxeMgaRAe8Yic5wQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-minify-terser@0.83.3: resolution: {integrity: sha512-O2BmfWj6FSfzBLrNCXt/rr2VYZdX5i6444QJU0fFoc7Ljg+Q+iqebwE3K0eTvkI6TRjELsXk1cjU+fXwAR4OjQ==} engines: {node: '>=20.19.4'} @@ -4679,6 +4766,10 @@ packages: resolution: {integrity: sha512-MfJar2IS4tBRuLb9svwb0Gu5l9BsH+pcRm8eGcEi/wy8MzZinfinh5dFLt2nWkocnulIgtGB5NkFDdbXqMXKhQ==} engines: {node: '>=20.19.4'} + metro-minify-terser@0.84.4: + resolution: {integrity: sha512-5qpbaVOMC7CPitIpuewzVeGw7E+C3ykbv2mqTjQLl85Z3annSVGlSCTcsZjqXZzjupfK4Ztj3dDc4kc44NZwtQ==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-resolver@0.83.3: resolution: {integrity: sha512-0js+zwI5flFxb1ktmR///bxHYg7OLpRpWZlBBruYG8OKYxeMP7SV0xQ/o/hUelrEMdK4LJzqVtHAhBm25LVfAQ==} engines: {node: '>=20.19.4'} @@ -4687,6 +4778,10 @@ packages: resolution: {integrity: sha512-WSJIENlMcoSsuz66IfBHOkgfp3KJt2UW2TnEHPf1b8pIG2eEXNOVmo2+03A0H17WY2XGXWgxL0CG7FAopqgB1A==} engines: {node: '>=20.19.4'} + metro-resolver@0.84.4: + resolution: {integrity: sha512-1qLgbxQ5ZGhhutuPot1Yp348ofDsATL2WkrHF65TobqTT9K3P9qJXw38bomk7ncp5B7OYMfWwtyBZo1lCV792A==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-runtime@0.83.3: resolution: {integrity: sha512-JHCJb9ebr9rfJ+LcssFYA2x1qPYuSD/bbePupIGhpMrsla7RCwC/VL3yJ9cSU+nUhU4c9Ixxy8tBta+JbDeZWw==} engines: {node: '>=20.19.4'} @@ -4695,6 +4790,10 @@ packages: resolution: {integrity: sha512-9GKkJURaB2iyYoEExKnedzAHzxmKtSi+k0tsZUvMoU27tBZJElchYt7JH/Ai/XzYAI9lCAaV7u5HZSI8J5Z+wQ==} engines: {node: '>=20.19.4'} + metro-runtime@0.84.4: + resolution: {integrity: sha512-Jibypds4g7AhzdRKY+kDoj51s5EXMwgyp5ddtlreDAsWefMdOx+agWqgm0H2XSZ/ueanHHVM89fnf5OJnlxa8Q==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-source-map@0.83.3: resolution: {integrity: sha512-xkC3qwUBh2psVZgVavo8+r2C9Igkk3DibiOXSAht1aYRRcztEZNFtAMtfSB7sdO2iFMx2Mlyu++cBxz/fhdzQg==} engines: {node: '>=20.19.4'} @@ -4703,6 +4802,10 @@ packages: resolution: {integrity: sha512-JgA1h7oc1a1jydBe1GhVFsUoMYo3wLPk7oRA32rjlDsq+sP2JLt9x2p2lWbNSxTm/u8NV4VRid3hvEJgcX8tKw==} engines: {node: '>=20.19.4'} + metro-source-map@0.84.4: + resolution: {integrity: sha512-jbWkPxIesVuo1IWkvezmMJld6iu8nD62GsrZiV6jP37AOdbo4OBq1FJ+qkOg8sV05wAHB//jAbziuW0SlJfW4g==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-symbolicate@0.83.3: resolution: {integrity: sha512-F/YChgKd6KbFK3eUR5HdUsfBqVsanf5lNTwFd4Ca7uuxnHgBC3kR/Hba/RGkenR3pZaGNp5Bu9ZqqP52Wyhomw==} engines: {node: '>=20.19.4'} @@ -4713,6 +4816,11 @@ packages: engines: {node: '>=20.19.4'} hasBin: true + metro-symbolicate@0.84.4: + resolution: {integrity: sha512-OnfpacxUqGPZQ27t8qK9mFa7uqHIlVWeqRqkCbvMvreEBiamEeOn8krKtcwgP5M4cYDPwuSmCTopHMVthqG4zA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + hasBin: true + metro-transform-plugins@0.83.3: resolution: {integrity: sha512-eRGoKJU6jmqOakBMH5kUB7VitEWiNrDzBHpYbkBXW7C5fUGeOd2CyqrosEzbMK5VMiZYyOcNFEphvxk3OXey2A==} engines: {node: '>=20.19.4'} @@ -4721,6 +4829,10 @@ packages: resolution: {integrity: sha512-Ss0FpBiZDjX2kwhukMDl5sNdYK8T/06IPqxNE4H6PTlRlfs9q11cef13c/xESY/Pm4VCkp1yJUZO3kXzvMxQFA==} engines: {node: '>=20.19.4'} + metro-transform-plugins@0.84.4: + resolution: {integrity: sha512-kehr6HbAecqD0/a3xLXobELdPaAmRAl8bel0qagPF4vhZtux93nS8S4eq2kgKt6J2GnQpVjSoW1PXdst04mwow==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro-transform-worker@0.83.3: resolution: {integrity: sha512-Ztekew9t/gOIMZX1tvJOgX7KlSLL5kWykl0Iwu2cL2vKMKVALRl1hysyhUw0vjpAvLFx+Kfq9VLjnHIkW32fPA==} engines: {node: '>=20.19.4'} @@ -4729,6 +4841,10 @@ packages: resolution: {integrity: sha512-UegCo7ygB2fT64mRK2nbAjQVJ1zSwIIHy8d96jJv2nKZFDaViYBiughEdu5HM/Ceq0WN3LZrZk3zhl9aoiLYFw==} engines: {node: '>=20.19.4'} + metro-transform-worker@0.84.4: + resolution: {integrity: sha512-W1IYMvvXTu4MxYr7d9h7CeG2vpIr3bmLLIavkPY4O1ilzDrvS8z/NEe6y+pC44Ff7raMXQgYSfdqDUwN/i39gg==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + metro@0.83.3: resolution: {integrity: sha512-+rP+/GieOzkt97hSJ0MrPOuAH/jpaS21ZDvL9DJ35QYRDlQcwzcvUlGUf79AnQxq/2NPiS/AULhhM4TKutIt8Q==} engines: {node: '>=20.19.4'} @@ -4739,6 +4855,11 @@ packages: engines: {node: '>=20.19.4'} hasBin: true + metro@0.84.4: + resolution: {integrity: sha512-8ETTubqfD6ornDy2zYDvRcKnVDOXdFJsjetYDBsY4oAsb6NJkiwFR+FaMESyGppFmQUyBQA4H4sFGxzcQSGtFA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + hasBin: true + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -4974,6 +5095,10 @@ packages: resolution: {integrity: sha512-9M5kpuOLyTPogMtZiQUIxdAZxl7Dxs6tVBbJErSumsqGMuhVSoUbkfeZ3XNPpLpwBBtqY5QDUzGwggLHX3slQg==} engines: {node: '>=20.19.4'} + ob1@0.84.4: + resolution: {integrity: sha512-eJXMpz4aQHXF/YBB9ddqZDIS+ooO91hObo9FoW/xBkr54/zCwYYCDqT/O54vNo8kOkWs5Ou/y28NgdrV0edQNA==} + engines: {node: ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -5298,12 +5423,6 @@ packages: react: '*' react-native: '*' - react-native-is-edge-to-edge@1.1.7: - resolution: {integrity: sha512-EH6i7E8epJGIcu7KpfXYXiV2JFIYITtq+rVS8uEb+92naMRBdxhTuS8Wn2Q7j9sqyO0B+Xbaaf9VdipIAmGW4w==} - peerDependencies: - react: '*' - react-native: '*' - react-native-is-edge-to-edge@1.3.1: resolution: {integrity: sha512-NIXU/iT5+ORyCc7p0z2nnlkouYKX425vuU1OEm6bMMtWWR9yvb+Xg5AZmImTKoF9abxCPqrKC3rOZsKzUYgYZA==} peerDependencies: @@ -5388,12 +5507,12 @@ packages: expo-build-properties: optional: true - react-native-reanimated@3.19.5: - resolution: {integrity: sha512-bd4AwIkBAaY4BjrgpSoKjEaRG/tXD756F5nGuiH5IMBSKN8tRdUEA8hWZCyIo/R6/kha/tVSoCqodVUACh7ZWw==} + react-native-reanimated@4.1.7: + resolution: {integrity: sha512-Q4H6xA3Tn7QL0/E/KjI86I1KK4tcf+ErRE04LH34Etka2oVQhW6oXQ+Q8ZcDCVxiWp5vgbBH6XcH8BOo4w/Rhg==} peerDependencies: - '@babel/core': ^7.0.0-0 react: '*' - react-native: '*' + react-native: 0.78 - 0.82 + react-native-worklets: 0.5 - 0.8 react-native-safe-area-context@5.6.2: resolution: {integrity: sha512-4XGqMNj5qjUTYywJqpdWZ9IG8jgkS3h06sfVjfw5yZQZfWnRFXczi0GnYyFyCc2EBps/qFmoCH8fez//WumdVg==} @@ -5428,6 +5547,14 @@ packages: peerDependencies: react-native: '>=0.60.0' + react-native-worklets@0.8.3: + resolution: {integrity: sha512-oCBJROyLU7yG/1R8s0INMflygTH71bx+5XcYkH0CM938TlhSoVbiunE1WVW5FZa51vwYqfLie/IXMX2s1Kh3eg==} + peerDependencies: + '@babel/core': '*' + '@react-native/metro-config': '*' + react: '*' + react-native: 0.81 - 0.85 + react-native@0.81.5: resolution: {integrity: sha512-1w+/oSjEXZjMqsIvmkCRsOc8UBYv163bTWKTI8+1mxztvQPhCRYGTvZ/PL1w16xXHneIj/SLGfxWg2GWN2uexw==} engines: {node: '>= 20.19.4'} @@ -6640,7 +6767,7 @@ snapshots: '@tanstack/store': 0.9.1 before-after-hook: 4.0.0 - '@algorandfoundation/react-native-keystore@1.0.0-canary.11(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@algorandfoundation/react-native-keystore@1.0.0-canary.11(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: '@algorandfoundation/dp256': 1.1.0 '@algorandfoundation/keystore': 1.0.0-canary.15(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0) @@ -6651,8 +6778,8 @@ snapshots: '@tanstack/store': 0.9.1 before-after-hook: 4.0.0 react-native-keychain: 10.0.0 - react-native-mmkv: 4.1.2(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-quick-crypto: 1.0.18(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-mmkv: 4.1.2(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-quick-crypto: 1.0.18(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) optionalDependencies: '@algorandfoundation/log-store': 1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0) transitivePeerDependencies: @@ -6663,7 +6790,7 @@ snapshots: - react-native-nitro-modules - react-native-quick-base64 - '@algorandfoundation/react-native-keystore@1.0.0-canary.12(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@algorandfoundation/react-native-keystore@1.0.0-canary.12(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: '@algorandfoundation/dp256': 1.1.0 '@algorandfoundation/keystore': 1.0.0-canary.16(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0) @@ -6674,8 +6801,8 @@ snapshots: '@tanstack/store': 0.9.1 before-after-hook: 4.0.0 react-native-keychain: 10.0.0 - react-native-mmkv: 4.1.2(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-quick-crypto: 1.0.18(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-mmkv: 4.1.2(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-quick-crypto: 1.0.18(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) optionalDependencies: '@algorandfoundation/log-store': 1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0) transitivePeerDependencies: @@ -6686,12 +6813,12 @@ snapshots: - react-native-nitro-modules - react-native-quick-base64 - '@algorandfoundation/react-native-passkey-autofill@1.0.0-canary.17(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@algorandfoundation/react-native-passkey-autofill@1.0.0-canary.17(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@algorandfoundation/react-native-keystore': 1.0.0-canary.11(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@algorandfoundation/react-native-keystore': 1.0.0-canary.11(@algorandfoundation/log-store@1.0.0-canary.3(@tanstack/store@0.9.1)(before-after-hook@4.0.0))(@tanstack/store@0.9.1)(before-after-hook@4.0.0)(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - '@algorandfoundation/log-store' - '@tanstack/store' @@ -7335,20 +7462,20 @@ snapshots: '@config-plugins/react-native-webrtc@13.0.0(expo@54.0.35)': dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@craftzdog/react-native-buffer@6.1.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@craftzdog/react-native-buffer@6.1.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: ieee754: 1.2.1 - react-native-quick-base64: 2.2.2(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-quick-base64: 2.2.2(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - react - react-native - '@craftzdog/react-native-buffer@6.1.2(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@craftzdog/react-native-buffer@6.1.2(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: ieee754: 1.2.1 - react-native-quick-base64: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-quick-base64: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - react - react-native @@ -7445,7 +7572,7 @@ snapshots: dependencies: uuid: 8.3.2 - '@expo/cli@54.0.25(expo-router@6.0.24)(expo@54.0.35)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(typescript@5.8.3)': + '@expo/cli@54.0.25(expo-router@6.0.24)(expo@54.0.35)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(typescript@5.8.3)': dependencies: '@0no-co/graphql.web': 1.2.0(graphql@16.8.1) '@expo/code-signing-certificates': 0.0.6 @@ -7479,7 +7606,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3(supports-color@8.1.1) env-editor: 0.4.2 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-server: 1.0.7 freeport-async: 2.0.0 getenv: 2.0.0 @@ -7512,8 +7639,8 @@ snapshots: wrap-ansi: 7.0.0 ws: 8.21.0 optionalDependencies: - expo-router: 6.0.24(ace148d1f520ff029f39906dc9ee7269) - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + expo-router: 6.0.24(dd0a7c8e3f182341a3ec8c6aaba81ae4) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - bufferutil - graphql @@ -7686,12 +7813,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@0.1.8(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/devtools@0.1.8(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) '@expo/eas-build-job@18.13.1': dependencies: @@ -7834,19 +7961,19 @@ snapshots: postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@expo/metro-runtime@6.1.2(expo@54.0.35)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/metro-runtime@6.1.2(expo@54.0.35)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: anser: 1.4.10 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) pretty-format: 29.7.0 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) stacktrace-parser: 0.1.11 whatwg-fetch: 3.6.20 optionalDependencies: @@ -7967,7 +8094,7 @@ snapshots: '@expo/json-file': 10.2.0 '@react-native/normalize-colors': 0.81.5 debug: 4.4.3(supports-color@8.1.1) - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) resolve-from: 5.0.0 semver: 7.8.1 xml2js: 0.6.0 @@ -8052,11 +8179,11 @@ snapshots: '@expo/logger': 18.5.0 '@expo/spawn-async': 1.8.0 - '@expo/vector-icons@15.1.1(expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@expo/vector-icons@15.1.1(expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - expo-font: 14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-font: 14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) '@expo/ws-tunnel@1.0.6': {} @@ -8074,6 +8201,23 @@ snapshots: '@shikijs/types': 3.23.0 '@shikijs/vscode-textmate': 10.0.2 + '@gorhom/bottom-sheet@5.2.14(@types/react@19.1.17)(react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + dependencies: + '@gorhom/portal': 1.0.14(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + invariant: 2.2.4 + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-reanimated: 4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.17 + + '@gorhom/portal@1.0.14(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + dependencies: + nanoid: 3.3.12 + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': @@ -8758,6 +8902,14 @@ snapshots: - '@babel/core' - supports-color + '@react-native/babel-plugin-codegen@0.85.3(@babel/core@7.29.7)': + dependencies: + '@babel/traverse': 7.29.7 + '@react-native/codegen': 0.85.3(@babel/core@7.29.7) + transitivePeerDependencies: + - '@babel/core' + - supports-color + '@react-native/babel-preset@0.81.5(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -8808,6 +8960,44 @@ snapshots: transitivePeerDependencies: - supports-color + '@react-native/babel-preset@0.85.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-proposal-export-default-from': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-export-default-from': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-flow-strip-types': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-display-name': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) + '@react-native/babel-plugin-codegen': 0.85.3(@babel/core@7.29.7) + babel-plugin-syntax-hermes-parser: 0.33.3 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.29.7) + react-refresh: 0.14.2 + transitivePeerDependencies: + - supports-color + '@react-native/codegen@0.81.5(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -8818,7 +9008,17 @@ snapshots: nullthrows: 1.1.1 yargs: 17.7.2 - '@react-native/community-cli-plugin@0.81.5': + '@react-native/codegen@0.85.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/parser': 7.29.7 + hermes-parser: 0.33.3 + invariant: 2.2.4 + nullthrows: 1.1.1 + tinyglobby: 0.2.16 + yargs: 17.7.2 + + '@react-native/community-cli-plugin@0.81.5(@react-native/metro-config@0.85.3(@babel/core@7.29.7))': dependencies: '@react-native/dev-middleware': 0.81.5 debug: 4.4.3(supports-color@8.1.1) @@ -8827,6 +9027,8 @@ snapshots: metro-config: 0.83.7 metro-core: 0.83.7 semver: 7.8.1 + optionalDependencies: + '@react-native/metro-config': 0.85.3(@babel/core@7.29.7) transitivePeerDependencies: - bufferutil - supports-color @@ -8856,28 +9058,51 @@ snapshots: '@react-native/js-polyfills@0.81.5': {} + '@react-native/js-polyfills@0.85.3': {} + + '@react-native/metro-babel-transformer@0.85.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@react-native/babel-preset': 0.85.3(@babel/core@7.29.7) + hermes-parser: 0.33.3 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + '@react-native/metro-config@0.85.3(@babel/core@7.29.7)': + dependencies: + '@react-native/js-polyfills': 0.85.3 + '@react-native/metro-babel-transformer': 0.85.3(@babel/core@7.29.7) + metro-config: 0.84.4 + metro-runtime: 0.84.4 + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - supports-color + - utf-8-validate + '@react-native/normalize-colors@0.76.2': {} '@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-native/virtualized-lists@0.81.5(@types/react@19.1.17)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) optionalDependencies: '@types/react': 19.1.17 - '@react-navigation/bottom-tabs@7.16.2(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/bottom-tabs@7.16.2(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@react-navigation/elements': 2.9.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/elements': 2.9.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) sf-symbols-typescript: 2.2.0 transitivePeerDependencies: - '@react-native-masked-view/masked-view' @@ -8894,38 +9119,38 @@ snapshots: 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.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/elements@2.9.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.16.0(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/native-stack@7.16.0(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: - '@react-navigation/elements': 2.9.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/elements': 2.9.19(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.2.5(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': + '@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)': dependencies: '@react-navigation/core': 7.17.5(react@19.1.0) escape-string-regexp: 4.0.0 fast-deep-equal: 3.1.3 nanoid: 3.3.12 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) use-latest-callback: 0.2.6(react@19.1.0) '@react-navigation/routers@7.5.5': @@ -9110,24 +9335,24 @@ snapshots: '@tanstack/store@0.9.1': {} - '@testing-library/jest-native@5.4.3(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)': + '@testing-library/jest-native@5.4.3(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: chalk: 4.1.2 jest-diff: 29.7.0 jest-matcher-utils: 29.7.0 pretty-format: 29.7.0 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) react-test-renderer: 19.1.0(react@19.1.0) redent: 3.0.0 - '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)': + '@testing-library/react-native@13.3.3(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: jest-matcher-utils: 30.4.1 picocolors: 1.1.1 pretty-format: 30.4.1 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) react-test-renderer: 19.1.0(react@19.1.0) redent: 3.0.0 optionalDependencies: @@ -9528,6 +9753,10 @@ snapshots: dependencies: hermes-parser: 0.29.1 + babel-plugin-syntax-hermes-parser@0.33.3: + dependencies: + hermes-parser: 0.33.3 + babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.29.7): dependencies: '@babel/plugin-syntax-flow': 7.29.7(@babel/core@7.29.7) @@ -9580,7 +9809,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.29.7 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) transitivePeerDependencies: - '@babel/core' - supports-color @@ -10320,13 +10549,13 @@ snapshots: jest-mock: 30.4.1 jest-util: 30.4.1 - expo-asset@12.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + expo-asset@12.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@expo/image-utils': 0.8.14(typescript@5.8.3) - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - supports-color - typescript @@ -10334,29 +10563,29 @@ snapshots: expo-build-properties@55.0.14(expo@54.0.35): dependencies: '@expo/schema-utils': 55.0.4 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) resolve-from: 5.0.0 semver: 7.8.1 - expo-camera@17.0.10(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-camera@17.0.10(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) invariant: 2.2.4 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - expo-constants@18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)): + expo-constants@18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)): dependencies: '@expo/config': 12.0.13 '@expo/env': 2.0.11 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - supports-color expo-dev-client@6.0.21(expo@54.0.35): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-dev-launcher: 6.0.21(expo@54.0.35) expo-dev-menu: 7.0.19(expo@54.0.35) expo-dev-menu-interface: 2.0.0(expo@54.0.35) @@ -10368,7 +10597,7 @@ snapshots: expo-dev-launcher@6.0.21(expo@54.0.35): dependencies: ajv: 8.20.0 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-dev-menu: 7.0.19(expo@54.0.35) expo-manifests: 1.0.11(expo@54.0.35) transitivePeerDependencies: @@ -10376,54 +10605,54 @@ snapshots: expo-dev-menu-interface@2.0.0(expo@54.0.35): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-dev-menu@7.0.19(expo@54.0.35): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-dev-menu-interface: 2.0.0(expo@54.0.35) expo-document-picker@14.0.8(expo@54.0.35): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-eas-client@1.0.8: {} - expo-file-system@19.0.23(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)): + expo-file-system@19.0.23(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) fontfaceobserver: 2.3.0 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) expo-haptics@15.0.8(expo@54.0.35): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - expo-image@3.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-image@3.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) expo-json-utils@0.15.0: {} expo-keep-awake@15.0.8(expo@54.0.35)(react@19.1.0): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react: 19.1.0 - expo-linking@8.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-linking@8.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) + expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) invariant: 2.2.4 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - expo - supports-color @@ -10431,7 +10660,7 @@ snapshots: expo-manifests@1.0.11(expo@54.0.35): dependencies: '@expo/config': 12.0.13 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-json-utils: 0.15.0 transitivePeerDependencies: - supports-color @@ -10444,27 +10673,27 @@ snapshots: require-from-string: 2.0.2 resolve-from: 5.0.0 - expo-modules-core@3.0.30(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-modules-core@3.0.30(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - expo-router@6.0.24(ace148d1f520ff029f39906dc9ee7269): + expo-router@6.0.24(dd0a7c8e3f182341a3ec8c6aaba81ae4): dependencies: - '@expo/metro-runtime': 6.1.2(expo@54.0.35)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.2(expo@54.0.35)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@expo/schema-utils': 0.1.8 '@radix-ui/react-slot': 1.2.0(@types/react@19.1.17)(react@19.1.0) '@radix-ui/react-tabs': 1.1.13(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@react-navigation/bottom-tabs': 7.16.2(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - '@react-navigation/native-stack': 7.16.0(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/bottom-tabs': 7.16.2(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native': 7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-navigation/native-stack': 7.16.0(@react-navigation/native@7.2.5(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) client-only: 0.0.1 debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) - expo-linking: 8.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) + expo-linking: 8.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-server: 1.0.7 fast-deep-equal: 3.1.3 invariant: 2.2.4 @@ -10472,10 +10701,10 @@ snapshots: query-string: 7.1.3 react: 19.1.0 react-fast-compare: 3.2.2 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) semver: 7.6.3 server-only: 0.0.1 sf-symbols-typescript: 2.2.0 @@ -10483,10 +10712,10 @@ snapshots: use-latest-callback: 0.2.6(react@19.1.0) vaul: 1.1.2(@types/react@19.1.17)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) optionalDependencies: - '@testing-library/react-native': 13.3.3(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0) + '@testing-library/react-native': 13.3.3(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react-test-renderer@19.1.0(react@19.1.0))(react@19.1.0) react-dom: 19.1.0(react@19.1.0) - react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-reanimated: 3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-gesture-handler: 2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-reanimated: 4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@react-native-masked-view/masked-view' - '@types/react' @@ -10495,51 +10724,51 @@ snapshots: expo-screen-capture@8.0.9(expo@54.0.35)(react@19.1.0): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) react: 19.1.0 expo-server@1.0.7: {} expo-sharing@14.0.8(expo@54.0.35): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-splash-screen@31.0.13(expo@54.0.35)(typescript@5.8.3): dependencies: '@expo/prebuild-config': 54.0.8(expo@54.0.35)(typescript@5.8.3) - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) transitivePeerDependencies: - supports-color - typescript - expo-status-bar@3.0.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-status-bar@3.0.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-structured-headers@5.0.0: {} - expo-symbols@1.0.8(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)): + expo-symbols@1.0.8(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) sf-symbols-typescript: 2.2.0 - expo-system-ui@6.0.9(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)): + expo-system-ui@6.0.9(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)): dependencies: '@react-native/normalize-colors': 0.81.5 debug: 4.4.3(supports-color@8.1.1) - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) transitivePeerDependencies: - supports-color expo-updates-interface@2.0.0(expo@54.0.35): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - expo-updates@29.0.18(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + expo-updates@29.0.18(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@expo/code-signing-certificates': 0.0.6 '@expo/plist': 0.4.9 @@ -10547,7 +10776,7 @@ snapshots: arg: 4.1.0 chalk: 4.1.2 debug: 4.4.3(supports-color@8.1.1) - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-eas-client: 1.0.8 expo-manifests: 1.0.11(expo@54.0.35) expo-structured-headers: 5.0.0 @@ -10556,43 +10785,43 @@ snapshots: glob: 13.0.6 ignore: 5.3.2 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) resolve-from: 5.0.0 transitivePeerDependencies: - supports-color - expo-web-browser@15.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)): + expo-web-browser@15.0.11(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)): dependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - expo@54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + expo@54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@babel/runtime': 7.29.7 - '@expo/cli': 54.0.25(expo-router@6.0.24)(expo@54.0.35)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(typescript@5.8.3) + '@expo/cli': 54.0.25(expo-router@6.0.24)(expo@54.0.35)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(typescript@5.8.3) '@expo/config': 12.0.13 '@expo/config-plugins': 54.0.4 - '@expo/devtools': 0.1.8(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/devtools': 0.1.8(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@expo/fingerprint': 0.15.5 '@expo/metro': 54.2.0 '@expo/metro-config': 54.0.16(expo@54.0.35) - '@expo/vector-icons': 15.1.1(expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/vector-icons': 15.1.1(expo-font@14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) '@ungap/structured-clone': 1.3.1 babel-preset-expo: 54.0.11(@babel/core@7.29.7)(@babel/runtime@7.29.7)(expo@54.0.35)(react-refresh@0.14.2) - expo-asset: 12.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) - expo-file-system: 19.0.23(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)) - expo-font: 14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-asset: 12.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo-constants: 18.0.13(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) + expo-file-system: 19.0.23(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)) + expo-font: 14.0.12(expo@54.0.35)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) expo-keep-awake: 15.0.8(expo@54.0.35)(react@19.1.0) expo-modules-autolinking: 3.0.26 - expo-modules-core: 3.0.30(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + expo-modules-core: 3.0.30(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) react-refresh: 0.14.2 whatwg-url-without-unicode: 8.0.0-3 optionalDependencies: - '@expo/metro-runtime': 6.1.2(expo@54.0.35)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@expo/metro-runtime': 6.1.2(expo@54.0.35)(react-dom@19.1.0(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) transitivePeerDependencies: - '@babel/core' - bufferutil @@ -10867,6 +11096,8 @@ snapshots: hermes-estree@0.32.0: {} + hermes-estree@0.33.3: {} + hermes-estree@0.35.0: {} hermes-parser@0.29.1: @@ -10877,6 +11108,10 @@ snapshots: dependencies: hermes-estree: 0.32.0 + hermes-parser@0.33.3: + dependencies: + hermes-estree: 0.33.3 + hermes-parser@0.35.0: dependencies: hermes-estree: 0.35.0 @@ -11233,21 +11468,21 @@ snapshots: jest-mock: 29.7.0 jest-util: 29.7.0 - jest-expo@55.0.18(@babel/core@7.29.7)(canvas@2.11.2)(expo@54.0.35)(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + jest-expo@55.0.18(@babel/core@7.29.7)(canvas@2.11.2)(expo@54.0.35)(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3)))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3): dependencies: '@expo/config': 55.0.17(typescript@5.8.3) '@expo/json-file': 10.2.0 '@jest/create-cache-key-function': 29.7.0 '@jest/globals': 29.7.0 babel-jest: 29.7.0(@babel/core@7.29.7) - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) jest-environment-jsdom: 29.7.0(canvas@2.11.2) jest-snapshot: 29.7.0 jest-watch-select-projects: 2.0.0 jest-watch-typeahead: 2.2.1(jest@29.7.0(@types/node@22.19.19)(ts-node@10.9.2(@types/node@22.19.19)(typescript@5.8.3))) json5: 2.2.3 lodash: 4.18.1 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) react-test-renderer: 19.2.0(react@19.1.0) server-only: 0.0.1 stacktrace-js: 2.0.2 @@ -11855,6 +12090,16 @@ snapshots: transitivePeerDependencies: - supports-color + metro-babel-transformer@0.84.4: + dependencies: + '@babel/core': 7.29.7 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.35.0 + metro-cache-key: 0.84.4 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-cache-key@0.83.3: dependencies: flow-enums-runtime: 0.0.6 @@ -11863,6 +12108,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + metro-cache-key@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + metro-cache@0.83.3: dependencies: exponential-backoff: 3.1.3 @@ -11881,6 +12130,15 @@ snapshots: transitivePeerDependencies: - supports-color + metro-cache@0.84.4: + dependencies: + exponential-backoff: 3.1.3 + flow-enums-runtime: 0.0.6 + https-proxy-agent: 7.0.6 + metro-core: 0.84.4 + transitivePeerDependencies: + - supports-color + metro-config@0.83.3: dependencies: connect: 3.7.0 @@ -11911,6 +12169,21 @@ snapshots: - supports-color - utf-8-validate + metro-config@0.84.4: + dependencies: + connect: 3.7.0 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.84.4 + metro-cache: 0.84.4 + metro-core: 0.84.4 + metro-runtime: 0.84.4 + yaml: 2.9.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro-core@0.83.3: dependencies: flow-enums-runtime: 0.0.6 @@ -11923,6 +12196,12 @@ snapshots: lodash.throttle: 4.1.1 metro-resolver: 0.83.7 + metro-core@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.84.4 + metro-file-map@0.83.3: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -11951,6 +12230,20 @@ snapshots: transitivePeerDependencies: - supports-color + metro-file-map@0.84.4: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + 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 @@ -11961,6 +12254,11 @@ snapshots: flow-enums-runtime: 0.0.6 terser: 5.48.0 + metro-minify-terser@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.48.0 + metro-resolver@0.83.3: dependencies: flow-enums-runtime: 0.0.6 @@ -11969,6 +12267,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + metro-resolver@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + metro-runtime@0.83.3: dependencies: '@babel/runtime': 7.29.7 @@ -11979,6 +12281,11 @@ snapshots: '@babel/runtime': 7.29.7 flow-enums-runtime: 0.0.6 + metro-runtime@0.84.4: + dependencies: + '@babel/runtime': 7.29.7 + flow-enums-runtime: 0.0.6 + metro-source-map@0.83.3: dependencies: '@babel/traverse': 7.29.7 @@ -12008,6 +12315,20 @@ snapshots: transitivePeerDependencies: - supports-color + metro-source-map@0.84.4: + dependencies: + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.84.4 + nullthrows: 1.1.1 + ob1: 0.84.4 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.83.3: dependencies: flow-enums-runtime: 0.0.6 @@ -12030,6 +12351,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.84.4 + 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.29.7 @@ -12052,6 +12384,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.84.4: + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-worker@0.83.3: dependencies: '@babel/core': 7.29.7 @@ -12092,6 +12435,26 @@ snapshots: - supports-color - utf-8-validate + metro-transform-worker@0.84.4: + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + flow-enums-runtime: 0.0.6 + metro: 0.84.4 + metro-babel-transformer: 0.84.4 + metro-cache: 0.84.4 + metro-cache-key: 0.84.4 + metro-minify-terser: 0.84.4 + metro-source-map: 0.84.4 + metro-transform-plugins: 0.84.4 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.83.3: dependencies: '@babel/code-frame': 7.29.7 @@ -12185,6 +12548,52 @@ snapshots: - supports-color - utf-8-validate + metro@0.84.4: + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + accepts: 2.0.0 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 4.4.3(supports-color@8.1.1) + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.35.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.84.4 + metro-cache: 0.84.4 + metro-cache-key: 0.84.4 + metro-config: 0.84.4 + metro-core: 0.84.4 + metro-file-map: 0.84.4 + metro-resolver: 0.84.4 + metro-runtime: 0.84.4 + metro-source-map: 0.84.4 + metro-symbolicate: 0.84.4 + metro-transform-plugins: 0.84.4 + metro-transform-worker: 0.84.4 + mime-types: 3.0.2 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + throat: 5.0.0 + ws: 7.5.11 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -12373,6 +12782,10 @@ snapshots: dependencies: flow-enums-runtime: 0.0.6 + ob1@0.84.4: + dependencies: + flow-enums-runtime: 0.0.6 + object-assign@4.1.1: {} object-keys@1.1.1: {} @@ -12728,159 +13141,162 @@ snapshots: react-is@19.2.6: {} - react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-gesture-handler@2.28.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@egjs/hammerjs': 2.0.17 hoist-non-react-statics: 3.3.2 invariant: 2.2.4 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) - - react-native-is-edge-to-edge@1.1.7(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge@1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-is-edge-to-edge@1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - react-native-json-tree@1.5.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-json-tree@1.5.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: prop-types: 15.8.1 react: 19.1.0 react-base16-styling: 0.8.2 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) react-native-keychain@10.0.0: {} - react-native-mmkv@4.1.2(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-mmkv@4.1.2(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-mmkv@4.3.1(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-mmkv@4.3.1(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - react-native-passkey@3.4.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-passkey@3.4.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - react-native-quick-base64@2.2.2(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-quick-base64@2.2.2(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - react-native-quick-crypto@1.0.18(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-quick-crypto@1.0.18(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - '@craftzdog/react-native-buffer': 6.1.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@craftzdog/react-native-buffer': 6.1.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) events: 3.3.0 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-quick-base64: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-quick-base64: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) readable-stream: 4.5.2 safe-buffer: 5.2.1 string_decoder: 1.3.0 util: 0.12.5 optionalDependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-build-properties: 55.0.14(expo@54.0.35) - react-native-quick-crypto@1.1.5(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-quick-crypto@1.1.5(expo-build-properties@55.0.14(expo@54.0.35))(expo@54.0.35)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-quick-base64@3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - '@craftzdog/react-native-buffer': 6.1.2(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@craftzdog/react-native-buffer': 6.1.2(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) events: 3.3.0 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-quick-base64: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-quick-base64: 3.0.0(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) readable-stream: 4.7.0 safe-buffer: 5.2.1 string_decoder: 1.3.0 util: 0.12.5 optionalDependencies: - expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + expo: 54.0.35(@babel/core@7.29.7)(@expo/metro-runtime@6.1.2)(expo-router@6.0.24)(graphql@16.8.1)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0)(typescript@5.8.3) expo-build-properties: 55.0.14(expo@54.0.35) - react-native-reanimated@3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-reanimated@4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) - '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - convert-source-map: 2.0.0 - invariant: 2.2.4 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.1.7(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - transitivePeerDependencies: - - supports-color + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-worklets: 0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + semver: 7.8.1 - react-native-safe-area-context@5.6.2(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) - react-native-screens@4.16.0(react-native@0.81.5(@babel/core@7.29.7)(@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.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-is-edge-to-edge: 1.3.1(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) warn-once: 0.1.1 - react-native-unistyles@3.2.5(@react-native/normalize-colors@0.81.5)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + react-native-unistyles@3.2.5(@react-native/normalize-colors@0.81.5)(react-native-nitro-modules@0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native-reanimated@4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): dependencies: '@babel/types': 7.29.0 '@react-native/normalize-colors': 0.81.5 react: 19.1.0 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) - react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + react-native-nitro-modules: 0.35.9(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) optionalDependencies: - react-native-reanimated: 3.19.5(@babel/core@7.29.7)(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + react-native-reanimated: 4.1.7(react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) - react-native-webrtc@124.0.7(react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0)): + react-native-webrtc@124.0.7(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0)): dependencies: base64-js: 1.5.1 debug: 4.3.4 event-target-shim: 6.0.2 - react-native: 0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0) + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + transitivePeerDependencies: + - supports-color + + react-native-worklets@0.8.3(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0))(react@19.1.0): + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) + '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) + '@react-native/metro-config': 0.85.3(@babel/core@7.29.7) + convert-source-map: 2.0.0 + react: 19.1.0 + react-native: 0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@types/react@19.1.17)(react@19.1.0) + semver: 7.8.1 transitivePeerDependencies: - supports-color - react-native@0.81.5(@babel/core@7.29.7)(@types/react@19.1.17)(react@19.1.0): + react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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.29.7) - '@react-native/community-cli-plugin': 0.81.5 + '@react-native/community-cli-plugin': 0.81.5(@react-native/metro-config@0.85.3(@babel/core@7.29.7)) '@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.29.7)(@types/react@19.1.17)(react@19.1.0))(react@19.1.0) + '@react-native/virtualized-lists': 0.81.5(@types/react@19.1.17)(react-native@0.81.5(@babel/core@7.29.7)(@react-native/metro-config@0.85.3(@babel/core@7.29.7))(@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 From 39ac49a095cb8d6c909c6ccdb761dd07f0c36894 Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Mon, 8 Jun 2026 17:52:52 +0700 Subject: [PATCH 06/16] fix font name refs --- unistyles.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/unistyles.ts b/unistyles.ts index 46826fa..0fb1232 100644 --- a/unistyles.ts +++ b/unistyles.ts @@ -5,9 +5,9 @@ import { StyleSheet } from 'react-native-unistyles'; const typography = { fonts: { regular: 'PlusJakartaSans-Regular', - medium: 'PlusJakartaSans-Medium', - semiBold: 'PlusJakartaSans-SemiBold', - bold: 'PlusJakartaSans-Bold', + medium: 'PlusJakartaSans-Regular_Medium', + semiBold: 'PlusJakartaSans-Regular_SemiBold', + bold: 'PlusJakartaSans-Regular_Bold', }, fontSizes: { xs: 9, From 75c23cff816f9652b8d7d44d7488357822c9d3b6 Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Mon, 8 Jun 2026 17:53:37 +0700 Subject: [PATCH 07/16] feat: `Button` color prop --- components/Button.tsx | 52 +++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/components/Button.tsx b/components/Button.tsx index fc06fe1..973bc24 100644 --- a/components/Button.tsx +++ b/components/Button.tsx @@ -7,12 +7,14 @@ import { AppText } from './Text'; type ButtonVariant = 'primary' | 'outline' | 'ghost' | 'pill' | 'pillLight' | 'link'; type ButtonSize = 'sm' | 'md' | 'lg'; +type ButtonColor = 'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning'; interface ButtonProps { label: string; onPress: () => void; variant?: ButtonVariant; size?: ButtonSize; + color?: ButtonColor; fullWidth?: boolean; disabled?: boolean; loading?: boolean; @@ -27,6 +29,7 @@ export function Button({ onPress, variant = 'primary', size = 'md', + color = 'primary', fullWidth = false, disabled = false, loading = false, @@ -36,8 +39,27 @@ export function Button({ const { theme } = useUnistyles(); stylesheet.useVariants({ variant, size }); - const isLight = variant === 'primary' || variant === 'pill'; - const spinnerColor = isLight ? theme.semantic.fg.inverse : theme.primitives.color.brand.hover; + const colorValue = getColorValue(theme, color); + const isFilled = + variant === 'primary' || variant === 'pill' || variant === 'outline' || variant === 'pillLight'; + const spinnerColor = isFilled ? theme.semantic.fg.inverse : colorValue; + + const textColorMap: Record = { + primary: 'inverse', + outline: 'inverse', + ghost: 'muted', + pill: 'inverse', + pillLight: 'inverse', + link: 'primary', + }; + + const colorStyle = { + ...(variant === 'primary' || variant === 'pill' || variant === 'pillLight' + ? { backgroundColor: colorValue } + : {}), + ...(variant === 'outline' ? { borderColor: colorValue, backgroundColor: colorValue } : {}), + ...(variant === 'link' || variant === 'ghost' ? { backgroundColor: 'transparent' } : {}), + }; return ( {leftIcon} - + {label} @@ -79,6 +91,18 @@ export function Button({ // ─── Styles ─────────────────────────────────────────────────────────────────── +const getColorValue = (theme: any, colorName: ButtonColor) => { + const colorMap: Record = { + primary: theme.primitives.color.brand.primary, + secondary: theme.primitives.color.brand.soft, + success: theme.primitives.color.state.success, + error: theme.primitives.color.state.danger, + info: theme.primitives.color.brand.primary, + warning: theme.primitives.color.state.warning, + }; + return colorMap[colorName]; +}; + const stylesheet = StyleSheet.create((theme) => ({ base: { flexDirection: 'row', From 1ca484982851a317674395a7de8d3b2d612ee3c6 Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Mon, 8 Jun 2026 18:02:09 +0700 Subject: [PATCH 08/16] fix: `Button` text should be bold --- components/Button.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/Button.tsx b/components/Button.tsx index 973bc24..b48b99a 100644 --- a/components/Button.tsx +++ b/components/Button.tsx @@ -80,7 +80,7 @@ export function Button({ ) : ( <> {leftIcon} - + {label} From 54b330c2254c889f569691ff848b83baa92cf5f5 Mon Sep 17 00:00:00 2001 From: Blair McIlroy Date: Mon, 8 Jun 2026 19:49:44 +0700 Subject: [PATCH 09/16] feat: TelemetryTracelModal base --- components/ac2/TelemetryTraceModal.tsx | 216 +++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 components/ac2/TelemetryTraceModal.tsx diff --git a/components/ac2/TelemetryTraceModal.tsx b/components/ac2/TelemetryTraceModal.tsx new file mode 100644 index 0000000..d28f393 --- /dev/null +++ b/components/ac2/TelemetryTraceModal.tsx @@ -0,0 +1,216 @@ +import { BottomSheetBackdrop, BottomSheetFlatList, BottomSheetModal } from '@gorhom/bottom-sheet'; +import { Button } from '../Button'; +import { AppText as Text } from '../Text'; + +import { AC2Message } from '@algorandfoundation/ac2-sdk/schema'; +import { MaterialIcons } from '@expo/vector-icons'; +import { forwardRef, useCallback, useState } from 'react'; +import { Platform, Pressable, ScrollView, View } from 'react-native'; +import { StyleSheet } from 'react-native-unistyles'; + +interface AC2TelemetryTraceModalProps { + /** + * Array of AC2 messages to display in the telemetry trace. + */ + messages: AC2Message[]; + onDismiss?: () => void; +} + +function formatTimestamp(unix: number): string { + return new Date(unix * 1000).toLocaleString(undefined, { + year: 'numeric', + month: 'short', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + }); +} + +function shortType(type: string): string { + const slash = type.lastIndexOf('/'); + return slash >= 0 ? type.slice(slash + 1) : type; +} + +function MessageCard({ message }: { message: AC2Message }) { + const [jsonVisible, setJsonVisible] = useState(false); + const styles = stylesheet; + + return ( + + + [{formatTimestamp(message.created_time)}] {shortType(message.type)} + + {message.type} + + From: {message.from} + + {message.id && ID: {message.id.slice(0, 16)}...} +