From 297e95e7c820b5c9d56004fce1407f76d1749949 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 25 Oct 2024 12:41:29 -0400 Subject: [PATCH 01/32] add/remove button --- apps/tlon-mobile/ios/Podfile.lock | 2 +- packages/shared/src/api/contactsApi.test.ts | 4 +- packages/shared/src/api/contactsApi.ts | 46 +++++++++++++++++-- ..._gauntlet.sql => 0000_unusual_jazinda.sql} | 3 +- .../src/db/migrations/meta/0000_snapshot.json | 9 +++- .../src/db/migrations/meta/_journal.json | 4 +- .../shared/src/db/migrations/migrations.js | 2 +- packages/shared/src/db/schema.ts | 1 + packages/shared/src/store/contactActions.ts | 27 +++++++++++ packages/shared/src/store/sync.ts | 2 + .../src/components/UserProfileScreenView.tsx | 12 +++++ 11 files changed, 101 insertions(+), 11 deletions(-) rename packages/shared/src/db/migrations/{0000_concerned_gauntlet.sql => 0000_unusual_jazinda.sql} (99%) diff --git a/apps/tlon-mobile/ios/Podfile.lock b/apps/tlon-mobile/ios/Podfile.lock index 06412313e2..716c600b86 100644 --- a/apps/tlon-mobile/ios/Podfile.lock +++ b/apps/tlon-mobile/ios/Podfile.lock @@ -1880,7 +1880,7 @@ SPEC CHECKSUMS: sqlite3: f163dbbb7aa3339ad8fc622782c2d9d7b72f7e9c tentap: 2cf2e387dd284bf867010eb7d0f91618fb35b673 UMAppLoader: 5df85360d65cabaef544be5424ac64672e648482 - Yoga: 4dbfeceb9bb0f62899d0a53d37a1ddd58898d3f2 + Yoga: fb61b2337c7688c81a137e5560b3cbb515289f91 PODFILE CHECKSUM: 0cb7a78e5777e69c86c1bf4bb5135fd660376dbe diff --git a/packages/shared/src/api/contactsApi.test.ts b/packages/shared/src/api/contactsApi.test.ts index 1a48d62fca..9f9d04538f 100644 --- a/packages/shared/src/api/contactsApi.test.ts +++ b/packages/shared/src/api/contactsApi.test.ts @@ -20,6 +20,8 @@ const inputContact: [string, any] = [ }, ]; +const inputContactBook = {}; + const outputContact = { id: 'test', avatarImage: null, @@ -42,6 +44,6 @@ test('converts a contact from server to client format', () => { test('converts an array of contacts from server to client format', () => { expect( - toClientContacts({ [inputContact[0]]: inputContact[1] }) + toClientContacts({ [inputContact[0]]: inputContact[1] }, inputContactBook) ).toStrictEqual([outputContact]); }); diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 754872ac23..a0fb1b889a 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -1,14 +1,27 @@ import * as db from '../db'; +import { createDevLogger } from '../debug'; import { normalizeUrbitColor } from '../logic'; import * as ub from '../urbit'; import { poke, scry, subscribe } from './urbit'; +const logger = createDevLogger('contactsApi', true); + export const getContacts = async () => { const results = await scry({ app: 'contacts', path: '/all', }); - return toClientContacts(results); + + // new book + // - are they a contact + // - if yes, do they have nickname override + const contactBook = await scry>({ + app: 'contacts', + path: '/v1/book', + }); + logger.log('contactBook', contactBook); + + return toClientContacts(results, contactBook); }; export const addContacts = async (contactIds: string[]) => { @@ -19,6 +32,24 @@ export const addContacts = async (contactIds: string[]) => { }); }; +export const addContact = async (contactId: string) => { + return poke({ + app: 'contacts', + mark: 'contact-action-1', + json: { + page: { kip: contactId }, + }, + }); +}; + +export const removeContact = async (contactId: string) => { + return poke({ + app: 'contacts', + mark: 'contact-action-1', + json: { wipe: [contactId] }, + }); +}; + export interface ProfileUpdate { nickname?: string; bio?: string; @@ -97,15 +128,21 @@ export const subscribeToContactUpdates = ( ); }; -export const toClientContacts = (contacts: ub.ContactRolodex): db.Contact[] => { +export const toClientContacts = ( + contacts: ub.ContactRolodex, + contactBook: Record +): db.Contact[] => { return Object.entries(contacts).flatMap(([ship, contact]) => - contact === null ? [] : [toClientContact(ship, contact)] + contact === null + ? [] + : [toClientContact(ship, contact, ship in contactBook)] ); }; export const toClientContact = ( id: string, - contact: ub.Contact | null + contact: ub.Contact | null, + isContact?: boolean ): db.Contact => { return { id, @@ -120,5 +157,6 @@ export const toClientContact = ( groupId, contactId: id, })) ?? [], + isContact, }; }; diff --git a/packages/shared/src/db/migrations/0000_concerned_gauntlet.sql b/packages/shared/src/db/migrations/0000_unusual_jazinda.sql similarity index 99% rename from packages/shared/src/db/migrations/0000_concerned_gauntlet.sql rename to packages/shared/src/db/migrations/0000_unusual_jazinda.sql index a7a0763e2f..f6afbaebe3 100644 --- a/packages/shared/src/db/migrations/0000_concerned_gauntlet.sql +++ b/packages/shared/src/db/migrations/0000_unusual_jazinda.sql @@ -101,7 +101,8 @@ CREATE TABLE `contacts` ( `color` text, `avatarImage` text, `coverImage` text, - `blocked` integer + `blocked` integer, + `isContact` integer ); --> statement-breakpoint CREATE TABLE `group_flagged_posts` ( diff --git a/packages/shared/src/db/migrations/meta/0000_snapshot.json b/packages/shared/src/db/migrations/meta/0000_snapshot.json index 8f9719f033..187ada5e4e 100644 --- a/packages/shared/src/db/migrations/meta/0000_snapshot.json +++ b/packages/shared/src/db/migrations/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "5", "dialect": "sqlite", - "id": "839147fe-9b23-480c-ac07-bcdee93e4828", + "id": "4a17aac9-4286-40c3-8716-1f1f9bc09604", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "activity_events": { @@ -681,6 +681,13 @@ "primaryKey": false, "notNull": false, "autoincrement": false + }, + "isContact": { + "name": "isContact", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false } }, "indexes": {}, diff --git a/packages/shared/src/db/migrations/meta/_journal.json b/packages/shared/src/db/migrations/meta/_journal.json index f4566ce114..c203168dff 100644 --- a/packages/shared/src/db/migrations/meta/_journal.json +++ b/packages/shared/src/db/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "5", - "when": 1729284974586, - "tag": "0000_concerned_gauntlet", + "when": 1729813588218, + "tag": "0000_unusual_jazinda", "breakpoints": true } ] diff --git a/packages/shared/src/db/migrations/migrations.js b/packages/shared/src/db/migrations/migrations.js index 7d2491ac8e..4dc2a6d3ef 100644 --- a/packages/shared/src/db/migrations/migrations.js +++ b/packages/shared/src/db/migrations/migrations.js @@ -1,7 +1,7 @@ // This file is required for Expo/React Native SQLite migrations - https://orm.drizzle.team/quick-sqlite/expo import journal from './meta/_journal.json'; -import m0000 from './0000_concerned_gauntlet.sql'; +import m0000 from './0000_unusual_jazinda.sql'; export default { journal, diff --git a/packages/shared/src/db/schema.ts b/packages/shared/src/db/schema.ts index a2996baf84..b9fb955f4e 100644 --- a/packages/shared/src/db/schema.ts +++ b/packages/shared/src/db/schema.ts @@ -62,6 +62,7 @@ export const contacts = sqliteTable('contacts', { avatarImage: text('avatarImage'), coverImage: text('coverImage'), isBlocked: boolean('blocked'), + isContact: boolean('isContact'), // TODO: figure out naming }); export const contactsRelations = relations(contacts, ({ many }) => ({ diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index c32cd307a6..af4de2d1eb 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -4,6 +4,33 @@ import { createDevLogger } from '../debug'; const logger = createDevLogger('ContactActions', false); +export async function addContact(contactId: string) { + // Optimistic update + // await db.addContact({ id: contactId }); + await db.updateContact({ id: contactId, isContact: true }); + + try { + await api.addContact(contactId); + } catch (e) { + console.error('Error adding contact', e); + // Rollback the update + await db.updateContact({ id: contactId, isContact: false }); + } +} + +export async function removeContact(contactId: string) { + // Optimistic update + await db.updateContact({ id: contactId, isContact: false }); + + try { + await api.removeContact(contactId); + } catch (e) { + console.error('Error removing contact', e); + // Rollback the update + await db.updateContact({ id: contactId, isContact: true }); + } +} + export async function updateCurrentUserProfile(update: api.ProfileUpdate) { const currentUserId = api.getCurrentUserId(); const currentUserContact = await db.getContact({ id: currentUserId }); diff --git a/packages/shared/src/store/sync.ts b/packages/shared/src/store/sync.ts index 681b54a50c..715fdbcd51 100644 --- a/packages/shared/src/store/sync.ts +++ b/packages/shared/src/store/sync.ts @@ -211,6 +211,8 @@ export const syncContacts = async (ctx?: SyncCtx) => { } catch (e) { logger.error('error getting contacts from db', e); } + + // get book }; export const syncPinnedItems = async (ctx?: SyncCtx) => { diff --git a/packages/ui/src/components/UserProfileScreenView.tsx b/packages/ui/src/components/UserProfileScreenView.tsx index 17355e0803..9998a2ff56 100644 --- a/packages/ui/src/components/UserProfileScreenView.tsx +++ b/packages/ui/src/components/UserProfileScreenView.tsx @@ -297,6 +297,14 @@ function ProfileButtons(props: { userId: string; contact: db.Contact | null }) { } }, [props]); + const handleToggleContact = useCallback(() => { + if (props.contact && props.contact.isContact) { + store.removeContact(props.userId); + } else { + store.addContact(props.userId); + } + }, [props]); + const isBlocked = useMemo(() => { return props.contact?.isBlocked ?? false; }, [props.contact]); @@ -304,6 +312,10 @@ function ProfileButtons(props: { userId: string; contact: db.Contact | null }) { return ( + Date: Mon, 28 Oct 2024 19:12:04 -0400 Subject: [PATCH 02/32] wire up sub, add ub -> client transformers, fix add contact, add update contact metadata --- packages/shared/src/api/contactsApi.test.ts | 11 +- packages/shared/src/api/contactsApi.ts | 163 +++++++++++++++--- ...jazinda.sql => 0000_lush_bruce_banner.sql} | 4 +- .../src/db/migrations/meta/0000_snapshot.json | 16 +- .../src/db/migrations/meta/_journal.json | 4 +- .../shared/src/db/migrations/migrations.js | 2 +- packages/shared/src/db/queries.ts | 20 +++ packages/shared/src/db/schema.ts | 3 + packages/shared/src/store/sync.ts | 14 +- packages/shared/src/urbit/contact.ts | 87 ++++++++++ 10 files changed, 282 insertions(+), 42 deletions(-) rename packages/shared/src/db/migrations/{0000_unusual_jazinda.sql => 0000_lush_bruce_banner.sql} (99%) diff --git a/packages/shared/src/api/contactsApi.test.ts b/packages/shared/src/api/contactsApi.test.ts index 9f9d04538f..2dd95aaaec 100644 --- a/packages/shared/src/api/contactsApi.test.ts +++ b/packages/shared/src/api/contactsApi.test.ts @@ -1,6 +1,6 @@ import { expect, test } from 'vitest'; -import { toClientContact, toClientContacts } from './contactsApi'; +import { v0PeerToClientProfile, v0PeersToClientProfiles } from './contactsApi'; const inputContact: [string, any] = [ 'test', @@ -20,8 +20,6 @@ const inputContact: [string, any] = [ }, ]; -const inputContactBook = {}; - const outputContact = { id: 'test', avatarImage: null, @@ -36,14 +34,17 @@ const outputContact = { { groupId: '~nibset-napwyn/tlon', contactId: 'test' }, { groupId: '~ravmel-ropdyl/crate', contactId: 'test' }, ], + isContact: false, + customNickname: null, + customAvatarImage: null, }; test('converts a contact from server to client format', () => { - expect(toClientContact(...inputContact)).toStrictEqual(outputContact); + expect(v0PeerToClientProfile(...inputContact)).toStrictEqual(outputContact); }); test('converts an array of contacts from server to client format', () => { expect( - toClientContacts({ [inputContact[0]]: inputContact[1] }, inputContactBook) + v0PeersToClientProfiles({ [inputContact[0]]: inputContact[1] }) ).toStrictEqual([outputContact]); }); diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index a0fb1b889a..b7b42d8980 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -7,23 +7,27 @@ import { poke, scry, subscribe } from './urbit'; const logger = createDevLogger('contactsApi', true); export const getContacts = async () => { - const results = await scry({ + // this is all peers we know about, with merged profile data for + // contacts + const peersResponse = await scry({ app: 'contacts', path: '/all', }); - // new book - // - are they a contact - // - if yes, do they have nickname override - const contactBook = await scry>({ + // this is all of your contacts, with unmerged profile data + user overrides + const contactsResponse = await scry({ app: 'contacts', path: '/v1/book', }); - logger.log('contactBook', contactBook); + const skipContacts = new Set(Object.keys(contactsResponse)); - return toClientContacts(results, contactBook); + const peerProfiles = v0PeersToClientProfiles(peersResponse, skipContacts); + const contactProfiles = contactsToClientProfiles(contactsResponse); + + return [...peerProfiles, ...contactProfiles]; }; +// TODO: use new method export const addContacts = async (contactIds: string[]) => { return poke({ app: 'contacts', @@ -32,12 +36,36 @@ export const addContacts = async (contactIds: string[]) => { }); }; +export const updateContactMetadata = async ( + contactId: string, + metadata: { nickname?: string; avatarImage?: string } +) => { + if (!metadata.nickname && !metadata.avatarImage) { + return; + } + + const contactUpdate: ub.ContactBookProfile = {}; + if (metadata.nickname) { + contactUpdate.nickname = { type: 'text', value: metadata.nickname }; + } + + if (metadata.avatarImage) { + contactUpdate.avatar = { type: 'look', value: metadata.avatarImage }; + } + + return poke({ + app: 'contacts', + mark: 'contact-action-1', + json: { page: { kip: contactId, contact: contactUpdate } }, + }); +}; + export const addContact = async (contactId: string) => { return poke({ app: 'contacts', mark: 'contact-action-1', json: { - page: { kip: contactId }, + page: { kip: contactId, contact: {} }, }, }); }; @@ -104,8 +132,8 @@ export const removePinnedGroup = async (groupId: string) => { }; export type ContactsUpdate = - | { type: 'add'; contact: db.Contact } - | { type: 'delete'; contactId: string }; + | { type: 'upsertContact'; contact: db.Contact } + | { type: 'removeContact'; contactId: string }; export const subscribeToContactUpdates = ( handler: (update: ContactsUpdate) => void @@ -113,36 +141,49 @@ export const subscribeToContactUpdates = ( subscribe( { app: 'contacts', - path: '/news', + path: '/v1/news', }, - (event: ub.ContactNews) => { - if (event.con) { + (event: ub.ContactsNewsResponse1) => { + console.log(`bl: got v1/news event`, event); + + // received when someone is marked as a contact or when a contact's profile is updated + if (ub.isPageResponse(event) && event.kip.startsWith('~')) { + const contactBookEntry = [event.con, event.mod] as ub.ContactBookEntry; + handler({ + type: 'upsertContact', + contact: contactToClientProfile(event.kip, contactBookEntry), + }); + } + + if (ub.isWipeResponse(event) && event.kip.startsWith('~')) { + handler({ type: 'removeContact', contactId: event.kip }); + } + + // received when we get initial or updated profile info for a non-contact + if (ub.isPeerResponse(event) && event.who.startsWith('~')) { handler({ - type: 'add', - contact: toClientContact(event.who, event.con), + type: 'upsertContact', + contact: v1PeerToClientProfile(event.who, event.con), }); - } else { - handler({ type: 'delete', contactId: event.who }); } } ); }; -export const toClientContacts = ( +export const v0PeersToClientProfiles = ( contacts: ub.ContactRolodex, - contactBook: Record + userIdsToOmit?: Set ): db.Contact[] => { - return Object.entries(contacts).flatMap(([ship, contact]) => - contact === null - ? [] - : [toClientContact(ship, contact, ship in contactBook)] - ); + return Object.entries(contacts) + .filter(([ship]) => (userIdsToOmit ? !userIdsToOmit.has(ship) : true)) + .flatMap(([ship, contact]) => + contact === null ? [] : [v0PeerToClientProfile(ship, contact)] + ); }; -export const toClientContact = ( +export const v0PeerToClientProfile = ( id: string, - contact: ub.Contact | null, - isContact?: boolean + contact: ub.Contact | null ): db.Contact => { return { id, @@ -157,6 +198,72 @@ export const toClientContact = ( groupId, contactId: id, })) ?? [], - isContact, + + isContact: false, + customNickname: null, + customAvatarImage: null, + }; +}; + +export const v1PeersToClientProfiles = (peers: ub.ContactsAllScryResult1) => { + return Object.entries(peers).map(([ship, contact]) => + v1PeerToClientProfile(ship, contact) + ); +}; + +export const v1PeerToClientProfile = ( + id: string, + contact: ub.ContactBookProfile +) => { + return { + id, + nickname: contact.nickname?.value ?? null, + bio: contact.bio?.value ?? null, + status: contact.status?.value ?? null, + color: contact.color ? normalizeUrbitColor(contact.color.value) : null, + coverImage: contact.cover?.value ?? null, + avatarImage: contact.avatar?.value ?? null, + pinnedGroups: + contact.groups?.value.map((group) => ({ + groupId: group.value, + contactId: id, + })) ?? [], + + isContact: false, + customNickname: null, + customAvatarImage: null, + }; +}; + +export const contactsToClientProfiles = ( + contacts: ub.ContactBookScryResult1 +): db.Contact[] => { + return Object.entries(contacts).flatMap(([userId, contact]) => + contact === null ? [] : [contactToClientProfile(userId, contact)] + ); +}; + +export const contactToClientProfile = ( + userId: string, + contact: ub.ContactBookEntry +): db.Contact => { + const [base, overrides] = contact; + + return { + id: userId, + nickname: base.nickname?.value ?? null, + bio: base.bio?.value ?? null, + avatarImage: base.avatar?.value ?? null, + coverImage: base.cover?.value ?? null, + color: base.color ? normalizeUrbitColor(base.color.value) : null, + pinnedGroups: + base.groups?.value.map((group) => ({ + groupId: group.value, + contactId: userId, + })) ?? [], + + isContact: true, + customNickname: overrides.nickname?.value ?? null, + customAvatarImage: overrides.avatar?.value ?? null, }; }; diff --git a/packages/shared/src/db/migrations/0000_unusual_jazinda.sql b/packages/shared/src/db/migrations/0000_lush_bruce_banner.sql similarity index 99% rename from packages/shared/src/db/migrations/0000_unusual_jazinda.sql rename to packages/shared/src/db/migrations/0000_lush_bruce_banner.sql index f6afbaebe3..8f0b311aa0 100644 --- a/packages/shared/src/db/migrations/0000_unusual_jazinda.sql +++ b/packages/shared/src/db/migrations/0000_lush_bruce_banner.sql @@ -102,7 +102,9 @@ CREATE TABLE `contacts` ( `avatarImage` text, `coverImage` text, `blocked` integer, - `isContact` integer + `isContact` integer, + `customNickname` text, + `customAvatarImage` text ); --> statement-breakpoint CREATE TABLE `group_flagged_posts` ( diff --git a/packages/shared/src/db/migrations/meta/0000_snapshot.json b/packages/shared/src/db/migrations/meta/0000_snapshot.json index 187ada5e4e..88dfc5f506 100644 --- a/packages/shared/src/db/migrations/meta/0000_snapshot.json +++ b/packages/shared/src/db/migrations/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "5", "dialect": "sqlite", - "id": "4a17aac9-4286-40c3-8716-1f1f9bc09604", + "id": "728d5219-1faa-47d2-9585-57c101631611", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "activity_events": { @@ -688,6 +688,20 @@ "primaryKey": false, "notNull": false, "autoincrement": false + }, + "customNickname": { + "name": "customNickname", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "customAvatarImage": { + "name": "customAvatarImage", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false } }, "indexes": {}, diff --git a/packages/shared/src/db/migrations/meta/_journal.json b/packages/shared/src/db/migrations/meta/_journal.json index c203168dff..62e4951440 100644 --- a/packages/shared/src/db/migrations/meta/_journal.json +++ b/packages/shared/src/db/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "5", - "when": 1729813588218, - "tag": "0000_unusual_jazinda", + "when": 1730150882894, + "tag": "0000_lush_bruce_banner", "breakpoints": true } ] diff --git a/packages/shared/src/db/migrations/migrations.js b/packages/shared/src/db/migrations/migrations.js index 4dc2a6d3ef..84fe6cb5d7 100644 --- a/packages/shared/src/db/migrations/migrations.js +++ b/packages/shared/src/db/migrations/migrations.js @@ -1,7 +1,7 @@ // This file is required for Expo/React Native SQLite migrations - https://orm.drizzle.team/quick-sqlite/expo import journal from './meta/_journal.json'; -import m0000 from './0000_unusual_jazinda.sql'; +import m0000 from './0000_lush_bruce_banner.sql'; export default { journal, diff --git a/packages/shared/src/db/queries.ts b/packages/shared/src/db/queries.ts index 5ccb282ba8..6962473831 100644 --- a/packages/shared/src/db/queries.ts +++ b/packages/shared/src/db/queries.ts @@ -2704,6 +2704,26 @@ export const updateContact = createWriteQuery( ['contacts'] ); +export const upsertContact = createWriteQuery( + 'upsertContact', + async (contact: Contact, ctx: QueryCtx) => { + // TODO: is there a better way to do this? + const existingContact = await ctx.db.query.contacts.findFirst({ + where: (contacts, { eq }) => eq(contacts.id, contact.id), + }); + + if (existingContact) { + return ctx.db + .update($contacts) + .set(contact) + .where(eq($contacts.id, contact.id)); + } + + return ctx.db.insert($contacts).values(contact); + }, + ['contacts'] +); + export const addPinnedGroup = createWriteQuery( 'addPinnedGroup', async ({ groupId }: { groupId: string }, ctx: QueryCtx) => { diff --git a/packages/shared/src/db/schema.ts b/packages/shared/src/db/schema.ts index b9fb955f4e..18627ec0b7 100644 --- a/packages/shared/src/db/schema.ts +++ b/packages/shared/src/db/schema.ts @@ -62,7 +62,10 @@ export const contacts = sqliteTable('contacts', { avatarImage: text('avatarImage'), coverImage: text('coverImage'), isBlocked: boolean('blocked'), + isContact: boolean('isContact'), // TODO: figure out naming + customNickname: text('customNickname'), + customAvatarImage: text('customAvatarImage'), }); export const contactsRelations = relations(contacts, ({ many }) => ({ diff --git a/packages/shared/src/store/sync.ts b/packages/shared/src/store/sync.ts index 715fdbcd51..ae749b4b84 100644 --- a/packages/shared/src/store/sync.ts +++ b/packages/shared/src/store/sync.ts @@ -682,11 +682,17 @@ const createActivityUpdateHandler = (queueDebounce: number = 100) => { export const handleContactUpdate = async (update: api.ContactsUpdate) => { switch (update.type) { - case 'add': - await db.insertContacts([update.contact]); + case 'upsertContact': + await db.upsertContact(update.contact); break; - case 'delete': - await db.deleteContact(update.contactId); + + case 'removeContact': + await db.updateContact({ + id: update.contactId, + isContact: false, + customNickname: null, + customAvatarImage: null, + }); break; } }; diff --git a/packages/shared/src/urbit/contact.ts b/packages/shared/src/urbit/contact.ts index 3a3ba8f24e..44d073f87e 100644 --- a/packages/shared/src/urbit/contact.ts +++ b/packages/shared/src/urbit/contact.ts @@ -48,3 +48,90 @@ export interface ContactNews { who: string; con: Contact | null; } + +export interface ContactFieldText { + type: 'text'; + value: string; +} + +export interface ContactImageField { + type: 'look'; + value: string; +} + +export interface ContactFieldColor { + type: 'tint'; + value: string; +} + +export interface ContactFieldGroups { + type: 'set'; + value: { type: 'flag'; value: string }[]; +} + +export interface ContactBookProfile { + nickname?: ContactFieldText; + bio?: ContactFieldText; + avatar?: ContactImageField; + cover?: ContactImageField; + color?: ContactFieldColor; + groups?: ContactFieldGroups; + status?: ContactFieldText; +} + +// first element is the contact's profile, second is any user overrides +export type ContactBookEntry = [ContactBookProfile, ContactBookProfile]; + +export type ContactsAllScryResult1 = Record; +export type ContactBookScryResult1 = Record; + +export type ContactsSelfResponse1 = { + self: ContactBookProfile; +}; + +// received when someone is marked as a contact or when a contact's profile is updated +export type ContactsPageResponse1 = { + kip: string; + con: ContactBookProfile; + mod: ContactBookProfile; +}; + +export type ContactsWipeResponse1 = { + kip: string; +}; + +// received when we get non-contact initial info +export type ContactsPeerResponse1 = { + who: string; + con: ContactBookProfile; +}; + +export type ContactsNewsResponse1 = + | ContactsSelfResponse1 + | ContactsPageResponse1 + | ContactsWipeResponse1 + | ContactsPeerResponse1; + +export function isPageResponse( + response: ContactsNewsResponse1 +): response is ContactsPageResponse1 { + return 'kip' in response && 'con' in response && 'mod' in response; +} + +export function isWipeResponse( + response: ContactsNewsResponse1 +): response is ContactsWipeResponse1 { + return 'kip' in response && !('con' in response); +} + +export function isPeerResponse( + response: ContactsNewsResponse1 +): response is ContactsPeerResponse1 { + return 'who' in response && 'con' in response; +} + +export function isSelfResponse( + response: ContactsNewsResponse1 +): response is ContactsSelfResponse1 { + return 'self' in response; +} From ef8ca66457ea61f1dae801032b32697c81cbc21c Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Mon, 28 Oct 2024 23:02:13 -0400 Subject: [PATCH 03/32] editable nickname & avatar --- .../app/features/top/UserProfileScreen.tsx | 32 ++- packages/shared/src/api/contactsApi.ts | 2 +- packages/shared/src/store/contactActions.ts | 33 +++ packages/ui/src/components/Avatar.tsx | 7 +- packages/ui/src/components/ContactNameV2.tsx | 7 +- .../src/components/UserProfileScreenView.tsx | 214 ++++++++++++++---- packages/ui/src/utils/channelUtils.tsx | 6 +- 7 files changed, 237 insertions(+), 64 deletions(-) diff --git a/packages/app/features/top/UserProfileScreen.tsx b/packages/app/features/top/UserProfileScreen.tsx index ae92cfb193..ac985b783d 100644 --- a/packages/app/features/top/UserProfileScreen.tsx +++ b/packages/app/features/top/UserProfileScreen.tsx @@ -4,6 +4,7 @@ import type * as db from '@tloncorp/shared/dist/db'; import * as store from '@tloncorp/shared/dist/store'; import { AppDataContextProvider, + AttachmentProvider, GroupPreviewSheet, NavigationProvider, UserProfileScreenView, @@ -53,24 +54,31 @@ export function UserProfileScreen({ route: { params }, navigation }: Props) { navigation.push('EditProfile'); }, [navigation]); + const canUpload = store.useCanUpload(); + return ( - navigation.goBack()} - connectionStatus={connectionStatus} - onPressGroup={setSelectedGroup} - onPressEdit={handlePressEdit} - /> - + + navigation.goBack()} + connectionStatus={connectionStatus} + onPressGroup={setSelectedGroup} + onPressEdit={handlePressEdit} + /> + + ); diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index b7b42d8980..b5ee099081 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -56,7 +56,7 @@ export const updateContactMetadata = async ( return poke({ app: 'contacts', mark: 'contact-action-1', - json: { page: { kip: contactId, contact: contactUpdate } }, + json: { edit: { kip: contactId, contact: contactUpdate } }, }); }; diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index af4de2d1eb..ffa1f84848 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -31,6 +31,39 @@ export async function removeContact(contactId: string) { } } +export async function updateContactMetadata( + contactId: string, + metadata: { + nickname?: string; + avatarImage?: string; + } +) { + const { nickname, avatarImage } = metadata; + if (!nickname && !avatarImage) { + return; + } + + const existingContact = await db.getContact({ id: contactId }); + + // optimistic update + await db.updateContact({ + id: contactId, + customNickname: nickname, + customAvatarImage: avatarImage, + }); + + try { + await api.updateContactMetadata(contactId, metadata); + } catch (e) { + // rollback the update + await db.updateContact({ + id: contactId, + customNickname: existingContact?.customNickname, + customAvatarImage: existingContact?.customAvatarImage, + }); + } +} + export async function updateCurrentUserProfile(update: api.ProfileUpdate) { const currentUserId = api.getCurrentUserId(); const currentUserContact = await db.getContact({ id: currentUserId }); diff --git a/packages/ui/src/components/Avatar.tsx b/packages/ui/src/components/Avatar.tsx index f45bea82be..635d14411d 100644 --- a/packages/ui/src/components/Avatar.tsx +++ b/packages/ui/src/components/Avatar.tsx @@ -87,7 +87,12 @@ export const ContactAvatar = React.memo(function ContactAvatComponent({ const contact = useContact(contactId); return ( !!i) .join(' '), ['aria-label']: idMeta?.ariaLabel, }; }, [ + contact?.customNickname, contact?.nickname, contactId, expandLongIds, @@ -66,7 +67,7 @@ const BaseContactName = Text.styleable<{ const calm = useCalm(); const contact = useContact(contactId); const showNickname = - contact?.nickname && + (contact?.customNickname || contact?.nickname) && (calm.disableNicknames ? mode === 'nickname' : mode !== 'contactId'); const showContactId = (mode === 'auto' && !showNickname) || diff --git a/packages/ui/src/components/UserProfileScreenView.tsx b/packages/ui/src/components/UserProfileScreenView.tsx index 9998a2ff56..59a2d578c1 100644 --- a/packages/ui/src/components/UserProfileScreenView.tsx +++ b/packages/ui/src/components/UserProfileScreenView.tsx @@ -1,7 +1,8 @@ import * as api from '@tloncorp/shared/dist/api'; import * as db from '@tloncorp/shared/dist/db'; import * as store from '@tloncorp/shared/dist/store'; -import { useCallback, useMemo } from 'react'; +import { useCallback, useMemo, useState } from 'react'; +import { UseFormReturn, useForm } from 'react-hook-form'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { ScrollView, @@ -18,6 +19,7 @@ import { triggerHaptic } from '../utils'; import { ContactAvatar, GroupAvatar } from './Avatar'; import { Button } from './Button'; import { ContactName } from './ContactNameV2'; +import { ControlledImageField, ControlledTextField, FormFrame } from './Form'; import { Icon } from './Icon'; import { ScreenHeader } from './ScreenHeader'; import { Text } from './TextV2'; @@ -32,6 +34,7 @@ interface Props { } export function UserProfileScreenView(props: Props) { + const [isEditing, setIsEditing] = useState(false); const insets = useSafeAreaInsets(); const currentUserId = useCurrentUserId(); const userContact = useContact(props.userId); @@ -67,14 +70,83 @@ export function UserProfileScreenView(props: Props) { [props] ); + const editForm = useForm({ + mode: 'onChange', + defaultValues: { + nickname: userContact?.customNickname ?? userContact?.nickname ?? '', + avatarImage: userContact?.avatarImage ?? undefined, + }, + }); + + const shouldShowEditButton = useMemo( + () => currentUserId === props.userId || userContact?.isContact, + [currentUserId, props.userId, userContact] + ); + + const handleEditPress = useCallback(() => { + if (currentUserId === props.userId) { + props.onPressEdit(); + } else { + setIsEditing(true); + } + }, [currentUserId, props]); + + const handleCancelEdit = useCallback(() => { + setIsEditing(false); + }, []); + + const handleSaveEdit = useCallback(() => { + const startNickname = userContact?.customNickname ?? userContact?.nickname; + const startAvatar = + userContact?.customAvatarImage ?? userContact?.avatarImage; + + const addedNickname = editForm.getValues('nickname'); + const addedAvatar = editForm.getValues('avatarImage'); + + const updatedMetadata = { + nickname: addedNickname !== startNickname ? addedNickname : undefined, + avatarImage: addedAvatar !== startAvatar ? addedAvatar : undefined, + }; + + store.updateContactMetadata(props.userId, updatedMetadata); + + setIsEditing(false); + + setTimeout(() => { + editForm.reset(); + }, 100); + }, [ + editForm, + props.userId, + userContact?.avatarImage, + userContact?.customAvatarImage, + userContact?.customNickname, + userContact?.nickname, + ]); + return ( } + leftControls={ + isEditing ? ( + + Cancel + + ) : ( + + ) + } rightControls={ - props.userId === currentUserId ? ( - + isEditing ? ( + + Save + + ) : shouldShowEditButton ? ( + Edit ) : null @@ -90,50 +162,65 @@ export function UserProfileScreenView(props: Props) { flexDirection: 'row', }} > - + {isEditing ? ( + + ) : ( + + )} {userContact?.status && } - {currentUserId !== props.userId ? ( - - ) : null} - - - - - - {pinnedGroups.map((group, i) => { - return ( - onPressGroup(group)} - > - - - - {group.title} - - - {i === 0 && ( - - {group.description} + + {currentUserId !== props.userId ? ( + + ) : null} + + + + + + {pinnedGroups.map((group, i) => { + return ( + onPressGroup(group)} + > + + + + {group.title} - )} - - - ); - })} + + {i === 0 && ( + + {group.description} + + )} + + + ); + })} + ); @@ -283,6 +370,40 @@ function UserInfoRow(props: { userId: string; hasNickname: boolean }) { ); } +function EditUserInfoRow(props: { + form: UseFormReturn<{ nickname: string; avatarImage: string | undefined }>; + defaultNickname: string; +}) { + return ( + + + + + ); +} + function ProfileButtons(props: { userId: string; contact: db.Contact | null }) { const navContext = useNavigation(); const handleMessageUser = useCallback(() => { @@ -310,7 +431,7 @@ function ProfileButtons(props: { userId: string; contact: db.Contact | null }) { }, [props.contact]); return ( - + - + ); } @@ -339,6 +460,7 @@ function ProfileButton(props: { borderRadius="$2xl" onPress={props.onPress} hero={props.hero} + marginHorizontal="$m" > Date: Tue, 29 Oct 2024 11:18:01 -0400 Subject: [PATCH 04/32] handle dupe peer fact when contacts update their own profiles --- packages/shared/src/api/contactsApi.ts | 8 +++++--- packages/shared/src/db/queries.ts | 8 ++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index b5ee099081..69b8c57cbb 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -159,7 +159,8 @@ export const subscribeToContactUpdates = ( handler({ type: 'removeContact', contactId: event.kip }); } - // received when we get initial or updated profile info for a non-contact + // received when we get initial or updated profile info for a non-contact. Note: we also get + // a dupe event here if a contact updates their own profile (get a page fact and peer fact) if (ub.isPeerResponse(event) && event.who.startsWith('~')) { handler({ type: 'upsertContact', @@ -213,7 +214,8 @@ export const v1PeersToClientProfiles = (peers: ub.ContactsAllScryResult1) => { export const v1PeerToClientProfile = ( id: string, - contact: ub.ContactBookProfile + contact: ub.ContactBookProfile, + isContact?: boolean ) => { return { id, @@ -229,7 +231,7 @@ export const v1PeerToClientProfile = ( contactId: id, })) ?? [], - isContact: false, + isContact, customNickname: null, customAvatarImage: null, }; diff --git a/packages/shared/src/db/queries.ts b/packages/shared/src/db/queries.ts index 6962473831..4d7d3468ac 100644 --- a/packages/shared/src/db/queries.ts +++ b/packages/shared/src/db/queries.ts @@ -2707,7 +2707,6 @@ export const updateContact = createWriteQuery( export const upsertContact = createWriteQuery( 'upsertContact', async (contact: Contact, ctx: QueryCtx) => { - // TODO: is there a better way to do this? const existingContact = await ctx.db.query.contacts.findFirst({ where: (contacts, { eq }) => eq(contacts.id, contact.id), }); @@ -2719,7 +2718,12 @@ export const upsertContact = createWriteQuery( .where(eq($contacts.id, contact.id)); } - return ctx.db.insert($contacts).values(contact); + // for new inserts, default to non contact if unspecified + const newContact: Contact = { + ...contact, + isContact: contact.isContact !== undefined ? contact.isContact : false, + }; + return ctx.db.insert($contacts).values(newContact); }, ['contacts'] ); From 34c9dc30628970de9091918df7e10114137386fd Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Tue, 29 Oct 2024 15:11:11 -0400 Subject: [PATCH 05/32] initial contacts tab --- packages/app/features/top/ContactsScreen.tsx | 44 +++++++++++ packages/app/lib/featureFlags.ts | 4 + packages/app/navigation/types.ts | 1 + packages/shared/src/api/contactsApi.ts | 74 +++++++++++++++---- ...banner.sql => 0000_cultured_the_spike.sql} | 3 +- .../src/db/migrations/meta/0000_snapshot.json | 9 ++- .../src/db/migrations/meta/_journal.json | 4 +- .../shared/src/db/migrations/migrations.js | 2 +- packages/shared/src/db/queries.ts | 37 ++++++++++ packages/shared/src/db/schema.ts | 1 + packages/shared/src/store/dbHooks.ts | 16 ++++ .../ui/src/components/ContactsScreenView.tsx | 22 ++++++ packages/ui/src/index.tsx | 1 + 13 files changed, 200 insertions(+), 18 deletions(-) create mode 100644 packages/app/features/top/ContactsScreen.tsx rename packages/shared/src/db/migrations/{0000_lush_bruce_banner.sql => 0000_cultured_the_spike.sql} (99%) create mode 100644 packages/ui/src/components/ContactsScreenView.tsx diff --git a/packages/app/features/top/ContactsScreen.tsx b/packages/app/features/top/ContactsScreen.tsx new file mode 100644 index 0000000000..dec0f4209f --- /dev/null +++ b/packages/app/features/top/ContactsScreen.tsx @@ -0,0 +1,44 @@ +import type { NativeStackScreenProps } from '@react-navigation/native-stack'; +import * as store from '@tloncorp/shared/store'; +import { + ContactsScreenView, + NavBarView, + View, + useCurrentUserId, +} from '@tloncorp/ui'; + +import type { RootStackParamList } from '../../navigation/types'; + +type Props = NativeStackScreenProps; + +export default function ContactsScreen(props: Props) { + const { + navigation: { navigate }, + } = props; + const currentUser = useCurrentUserId(); + + const { data: contacts } = store.useUserContacts(); + const { data: suggestions } = store.useSuggestedContacts(); + + return ( + + + { + navigate('ChatList'); + }} + navigateToNotifications={() => { + navigate('Activity'); + }} + navigateToProfileSettings={() => { + navigate('Profile'); + }} + currentRoute="ChatList" + currentUserId={currentUser} + /> + + ); +} diff --git a/packages/app/lib/featureFlags.ts b/packages/app/lib/featureFlags.ts index 6a70ec5ae2..b633eb36db 100644 --- a/packages/app/lib/featureFlags.ts +++ b/packages/app/lib/featureFlags.ts @@ -17,6 +17,10 @@ export const featureMeta = { default: false, label: 'Enable creating custom channels', }, + contactsTab: { + default: false, + label: 'Enable contacts tab', + }, } satisfies Record; export type FeatureName = keyof typeof featureMeta; diff --git a/packages/app/navigation/types.ts b/packages/app/navigation/types.ts index 86a4e1ef7a..27e07bf459 100644 --- a/packages/app/navigation/types.ts +++ b/packages/app/navigation/types.ts @@ -19,6 +19,7 @@ export type WebViewStackParamList = { }; export type RootStackParamList = { + Contacts: undefined; ChatList: { previewGroup: db.Group } | undefined; Activity: undefined; Profile: undefined; diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 69b8c57cbb..65c5c081fb 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -21,8 +21,17 @@ export const getContacts = async () => { }); const skipContacts = new Set(Object.keys(contactsResponse)); - const peerProfiles = v0PeersToClientProfiles(peersResponse, skipContacts); - const contactProfiles = contactsToClientProfiles(contactsResponse); + // TODO: actually load suggestions + const suggestionsResponse = ['~forfel-norfel']; + const contactSuggestions = new Set(suggestionsResponse); + + const peerProfiles = v0PeersToClientProfiles(peersResponse, { + userIdsToOmit: skipContacts, + contactSuggestions, + }); + const contactProfiles = contactsToClientProfiles(contactsResponse, { + contactSuggestions, + }); return [...peerProfiles, ...contactProfiles]; }; @@ -173,18 +182,32 @@ export const subscribeToContactUpdates = ( export const v0PeersToClientProfiles = ( contacts: ub.ContactRolodex, - userIdsToOmit?: Set + config?: { + userIdsToOmit?: Set; + contactSuggestions?: Set; + } ): db.Contact[] => { return Object.entries(contacts) - .filter(([ship]) => (userIdsToOmit ? !userIdsToOmit.has(ship) : true)) + .filter(([ship]) => + config?.userIdsToOmit ? !config.userIdsToOmit.has(ship) : true + ) .flatMap(([ship, contact]) => - contact === null ? [] : [v0PeerToClientProfile(ship, contact)] + contact === null + ? [] + : [ + v0PeerToClientProfile(ship, contact, { + isContactSuggestion: config?.contactSuggestions?.has(ship), + }), + ] ); }; export const v0PeerToClientProfile = ( id: string, - contact: ub.Contact | null + contact: ub.Contact | null, + config?: { + isContactSuggestion?: boolean; + } ): db.Contact => { return { id, @@ -203,19 +226,30 @@ export const v0PeerToClientProfile = ( isContact: false, customNickname: null, customAvatarImage: null, + isContactSuggestion: config?.isContactSuggestion, }; }; -export const v1PeersToClientProfiles = (peers: ub.ContactsAllScryResult1) => { +export const v1PeersToClientProfiles = ( + peers: ub.ContactsAllScryResult1, + config?: { + contactSuggestions?: Set; + } +) => { return Object.entries(peers).map(([ship, contact]) => - v1PeerToClientProfile(ship, contact) + v1PeerToClientProfile(ship, contact, { + isContactSuggestion: config?.contactSuggestions?.has(ship), + }) ); }; export const v1PeerToClientProfile = ( id: string, contact: ub.ContactBookProfile, - isContact?: boolean + config?: { + isContact?: boolean; + isContactSuggestion?: boolean; + } ) => { return { id, @@ -231,23 +265,36 @@ export const v1PeerToClientProfile = ( contactId: id, })) ?? [], - isContact, + isContact: config?.isContact, customNickname: null, customAvatarImage: null, + isContactSuggestion: config?.isContactSuggestion, }; }; export const contactsToClientProfiles = ( - contacts: ub.ContactBookScryResult1 + contacts: ub.ContactBookScryResult1, + config?: { + contactSuggestions?: Set; + } ): db.Contact[] => { return Object.entries(contacts).flatMap(([userId, contact]) => - contact === null ? [] : [contactToClientProfile(userId, contact)] + contact === null + ? [] + : [ + contactToClientProfile(userId, contact, { + isContactSuggestion: config?.contactSuggestions?.has(userId), + }), + ] ); }; export const contactToClientProfile = ( userId: string, - contact: ub.ContactBookEntry + contact: ub.ContactBookEntry, + config?: { + isContactSuggestion?: boolean; + } ): db.Contact => { const [base, overrides] = contact; @@ -267,5 +314,6 @@ export const contactToClientProfile = ( isContact: true, customNickname: overrides.nickname?.value ?? null, customAvatarImage: overrides.avatar?.value ?? null, + isContactSuggestion: config?.isContactSuggestion, }; }; diff --git a/packages/shared/src/db/migrations/0000_lush_bruce_banner.sql b/packages/shared/src/db/migrations/0000_cultured_the_spike.sql similarity index 99% rename from packages/shared/src/db/migrations/0000_lush_bruce_banner.sql rename to packages/shared/src/db/migrations/0000_cultured_the_spike.sql index 8f0b311aa0..9a32b8d313 100644 --- a/packages/shared/src/db/migrations/0000_lush_bruce_banner.sql +++ b/packages/shared/src/db/migrations/0000_cultured_the_spike.sql @@ -104,7 +104,8 @@ CREATE TABLE `contacts` ( `blocked` integer, `isContact` integer, `customNickname` text, - `customAvatarImage` text + `customAvatarImage` text, + `isContactSuggestion` integer ); --> statement-breakpoint CREATE TABLE `group_flagged_posts` ( diff --git a/packages/shared/src/db/migrations/meta/0000_snapshot.json b/packages/shared/src/db/migrations/meta/0000_snapshot.json index 88dfc5f506..aa959aa8e5 100644 --- a/packages/shared/src/db/migrations/meta/0000_snapshot.json +++ b/packages/shared/src/db/migrations/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "5", "dialect": "sqlite", - "id": "728d5219-1faa-47d2-9585-57c101631611", + "id": "72933ec8-6937-490e-96c6-1e832affef8d", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "activity_events": { @@ -702,6 +702,13 @@ "primaryKey": false, "notNull": false, "autoincrement": false + }, + "isContactSuggestion": { + "name": "isContactSuggestion", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false } }, "indexes": {}, diff --git a/packages/shared/src/db/migrations/meta/_journal.json b/packages/shared/src/db/migrations/meta/_journal.json index 62e4951440..4691a76df6 100644 --- a/packages/shared/src/db/migrations/meta/_journal.json +++ b/packages/shared/src/db/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "5", - "when": 1730150882894, - "tag": "0000_lush_bruce_banner", + "when": 1730215124086, + "tag": "0000_cultured_the_spike", "breakpoints": true } ] diff --git a/packages/shared/src/db/migrations/migrations.js b/packages/shared/src/db/migrations/migrations.js index 84fe6cb5d7..34df22f3a5 100644 --- a/packages/shared/src/db/migrations/migrations.js +++ b/packages/shared/src/db/migrations/migrations.js @@ -1,7 +1,7 @@ // This file is required for Expo/React Native SQLite migrations - https://orm.drizzle.team/quick-sqlite/expo import journal from './meta/_journal.json'; -import m0000 from './0000_lush_bruce_banner.sql'; +import m0000 from './0000_cultured_the_spike.sql'; export default { journal, diff --git a/packages/shared/src/db/queries.ts b/packages/shared/src/db/queries.ts index 4d7d3468ac..32e95e5c8b 100644 --- a/packages/shared/src/db/queries.ts +++ b/packages/shared/src/db/queries.ts @@ -2728,6 +2728,43 @@ export const upsertContact = createWriteQuery( ['contacts'] ); +export const getUserContacts = createReadQuery( + 'getUserContacts', + async (ctx: QueryCtx) => { + return ctx.db.query.contacts.findMany({ + where: and(eq($contacts.isContact, true)), + with: { + pinnedGroups: { + with: { + group: true, + }, + }, + }, + }); + }, + ['contacts'] +); + +export const getSuggestedContacts = createReadQuery( + 'getSuggestedContacts', + async (ctx: QueryCtx) => { + return ctx.db.query.contacts.findMany({ + where: and( + eq($contacts.isContact, false), + eq($contacts.isContactSuggestion, true) + ), + with: { + pinnedGroups: { + with: { + group: true, + }, + }, + }, + }); + }, + ['contacts'] +); + export const addPinnedGroup = createWriteQuery( 'addPinnedGroup', async ({ groupId }: { groupId: string }, ctx: QueryCtx) => { diff --git a/packages/shared/src/db/schema.ts b/packages/shared/src/db/schema.ts index 18627ec0b7..efd4aa24df 100644 --- a/packages/shared/src/db/schema.ts +++ b/packages/shared/src/db/schema.ts @@ -66,6 +66,7 @@ export const contacts = sqliteTable('contacts', { isContact: boolean('isContact'), // TODO: figure out naming customNickname: text('customNickname'), customAvatarImage: text('customAvatarImage'), + isContactSuggestion: boolean('isContactSuggestion'), }); export const contactsRelations = relations(contacts, ({ many }) => ({ diff --git a/packages/shared/src/store/dbHooks.ts b/packages/shared/src/store/dbHooks.ts index b7a37c594d..872e5b2f26 100644 --- a/packages/shared/src/store/dbHooks.ts +++ b/packages/shared/src/store/dbHooks.ts @@ -377,6 +377,22 @@ export const useGroupPreview = (groupId: string) => { }); }; +export const useUserContacts = () => { + const deps = useKeyFromQueryDeps(db.getUserContacts); + return useQuery({ + queryKey: ['userContacts', deps], + queryFn: () => db.getUserContacts(), + }); +}; + +export const useSuggestedContacts = () => { + const deps = useKeyFromQueryDeps(db.getSuggestedContacts); + return useQuery({ + queryKey: ['suggestedContacts', deps], + queryFn: () => db.getSuggestedContacts(), + }); +}; + export const usePostReference = ({ channelId, postId, diff --git a/packages/ui/src/components/ContactsScreenView.tsx b/packages/ui/src/components/ContactsScreenView.tsx new file mode 100644 index 0000000000..30dc4f8750 --- /dev/null +++ b/packages/ui/src/components/ContactsScreenView.tsx @@ -0,0 +1,22 @@ +import * as db from '@tloncorp/shared/db'; +import { ScrollView, YStack } from 'tamagui'; + +import { ContactListItem } from './ListItem'; + +interface Props { + contacts: db.Contact[]; + suggestions: db.Contact[]; +} + +export function ContactsScreenView(props: Props) { + return ( + + {props.suggestions.map((contact) => ( + + ))} + {props.contacts.map((contact) => ( + + ))} + + ); +} diff --git a/packages/ui/src/index.tsx b/packages/ui/src/index.tsx index 646066520e..8e0cdb40af 100644 --- a/packages/ui/src/index.tsx +++ b/packages/ui/src/index.tsx @@ -25,6 +25,7 @@ export * from './components/ContactBook'; export * from './components/ContactList'; export { default as ContactName } from './components/ContactName'; export { useContactName } from './components/ContactNameV2'; +export * from './components/ContactsScreenView'; export * from './components/ContactRow'; export * from './components/ContentReference'; export * from './components/CreateGroupView'; From 52d600ad0861e3c0cce3d4d1b5a7004cee0e07de Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Wed, 30 Oct 2024 09:52:04 -0400 Subject: [PATCH 06/32] use existing edit screen, render contacts in contacts tab (just list item for now) --- .../features/settings/EditProfileScreen.tsx | 16 +- packages/app/features/top/ChatListScreen.tsx | 5 + packages/app/features/top/ContactsScreen.tsx | 12 + .../app/features/top/UserProfileScreen.tsx | 4 +- packages/app/navigation/RootStack.tsx | 6 + packages/app/navigation/types.ts | 4 +- packages/shared/src/store/contactActions.ts | 4 +- packages/ui/src/components/ContactName.tsx | 16 +- packages/ui/src/components/ContactNameV2.tsx | 2 +- .../ui/src/components/ContactsScreenView.tsx | 35 ++- .../src/components/EditProfileScreenView.tsx | 92 ++++-- packages/ui/src/components/NavBarView.tsx | 12 + .../src/components/UserProfileScreenView.tsx | 285 +++++++----------- 13 files changed, 257 insertions(+), 236 deletions(-) diff --git a/packages/app/features/settings/EditProfileScreen.tsx b/packages/app/features/settings/EditProfileScreen.tsx index 744b227175..f3842e3bd6 100644 --- a/packages/app/features/settings/EditProfileScreen.tsx +++ b/packages/app/features/settings/EditProfileScreen.tsx @@ -6,23 +6,32 @@ import { EditProfileScreenView, GroupsProvider, } from '@tloncorp/ui'; +import { useCurrentUserId } from 'packages/app/hooks/useCurrentUser'; import { useCallback } from 'react'; import { RootStackParamList } from '../../navigation/types'; type Props = NativeStackScreenProps; -export function EditProfileScreen({ navigation }: Props) { +export function EditProfileScreen({ route, navigation }: Props) { + const currentUserId = useCurrentUserId(); const { data: groups } = store.useGroups({ includeUnjoined: true }); const onSaveProfile = useCallback( (update: api.ProfileUpdate | null) => { if (update) { - store.updateCurrentUserProfile(update); + if (route.params.userId === currentUserId) { + store.updateCurrentUserProfile(update); + } else { + store.updateContactMetadata(route.params.userId, { + nickname: update.nickname, + avatarImage: update.avatarImage, + }); + } } navigation.goBack(); }, - [navigation] + [currentUserId, navigation, route.params.userId] ); const onUpdateCoverImage = useCallback((coverImage: string) => { @@ -39,6 +48,7 @@ export function EditProfileScreen({ navigation }: Props) { navigation.goBack()} onSaveProfile={onSaveProfile} onUpdatePinnedGroups={store.updateProfilePinnedGroups} diff --git a/packages/app/features/top/ChatListScreen.tsx b/packages/app/features/top/ChatListScreen.tsx index d72f759af5..fab165ca50 100644 --- a/packages/app/features/top/ChatListScreen.tsx +++ b/packages/app/features/top/ChatListScreen.tsx @@ -42,6 +42,7 @@ export default function ChatListScreen(props: Props) { const [screenTitle, setScreenTitle] = useState('Home'); const [inviteSheetGroup, setInviteSheetGroup] = useState(); const chatOptionsSheetRef = useRef(null); + const [contactsTabEnabled] = useFeatureFlag('contactsTab'); const [longPressedChat, setLongPressedChat] = useState< db.Channel | db.Group | null >(null); @@ -337,6 +338,9 @@ export default function ChatListScreen(props: Props) { /> { + navigate('Contacts'); + }} navigateToHome={() => { navigate('ChatList'); }} @@ -348,6 +352,7 @@ export default function ChatListScreen(props: Props) { }} currentRoute="ChatList" currentUserId={currentUser} + showContactsTab={contactsTabEnabled} /> diff --git a/packages/app/features/top/ContactsScreen.tsx b/packages/app/features/top/ContactsScreen.tsx index dec0f4209f..b0865330b8 100644 --- a/packages/app/features/top/ContactsScreen.tsx +++ b/packages/app/features/top/ContactsScreen.tsx @@ -3,9 +3,11 @@ import * as store from '@tloncorp/shared/store'; import { ContactsScreenView, NavBarView, + ScreenHeader, View, useCurrentUserId, } from '@tloncorp/ui'; +import { useFeatureFlag } from 'packages/app/lib/featureFlags'; import type { RootStackParamList } from '../../navigation/types'; @@ -15,6 +17,8 @@ export default function ContactsScreen(props: Props) { const { navigation: { navigate }, } = props; + + const [contactsTabEnabled] = useFeatureFlag('contactsTab'); const currentUser = useCurrentUserId(); const { data: contacts } = store.useUserContacts(); @@ -22,11 +26,18 @@ export default function ContactsScreen(props: Props) { return ( + { + navigate('UserProfile', { userId: contactId }); + }} /> { + navigate('Contacts'); + }} navigateToHome={() => { navigate('ChatList'); }} @@ -38,6 +49,7 @@ export default function ContactsScreen(props: Props) { }} currentRoute="ChatList" currentUserId={currentUser} + showContactsTab={contactsTabEnabled} /> ); diff --git a/packages/app/features/top/UserProfileScreen.tsx b/packages/app/features/top/UserProfileScreen.tsx index f15eae30c6..c2a2b4fc2e 100644 --- a/packages/app/features/top/UserProfileScreen.tsx +++ b/packages/app/features/top/UserProfileScreen.tsx @@ -51,8 +51,8 @@ export function UserProfileScreen({ route: { params }, navigation }: Props) { ); const handlePressEdit = useCallback(() => { - navigation.push('EditProfile'); - }, [navigation]); + navigation.push('EditProfile', { userId }); + }, [navigation, userId]); const canUpload = store.useCanUpload(); diff --git a/packages/app/navigation/RootStack.tsx b/packages/app/navigation/RootStack.tsx index 4f02a1d84f..0c0f472151 100644 --- a/packages/app/navigation/RootStack.tsx +++ b/packages/app/navigation/RootStack.tsx @@ -17,6 +17,7 @@ import ChannelScreen from '../features/top/ChannelScreen'; import ChannelSearchScreen from '../features/top/ChannelSearchScreen'; import ChatListScreen from '../features/top/ChatListScreen'; import { ContactHostedGroupsScreen } from '../features/top/ContactHostedGroupsScreen'; +import ContactsScreen from '../features/top/ContactsScreen'; import { CreateGroupScreen } from '../features/top/CreateGroupScreen'; import { FindGroupsScreen } from '../features/top/FindGroupsScreen'; import { GroupChannelsScreen } from '../features/top/GroupChannelsScreen'; @@ -52,6 +53,11 @@ export function RootStack() { }} > {/* top level tabs */} + contact?.nickname && !calm.disableNicknames && showNickname, + () => + (contact?.customNickname || contact?.nickname) && + !calm.disableNicknames && + showNickname, [contact, calm.disableNicknames, showNickname] ); @@ -101,12 +104,13 @@ export default function ContactName({ ) : ( formattedId.display )} - {!calm.disableNicknames && contact?.nickname ? ( + {!calm.disableNicknames && + (contact?.customNickname || contact?.nickname) ? ( matchText ? ( {' '} @@ -129,7 +133,7 @@ export default function ContactName({ > {shouldShowNickname ? ( ) : ( @@ -147,7 +151,9 @@ export default function ContactName({ aria-label={formattedId.ariaLabel} {...rest} > - {shouldShowNickname ? contact!.nickname : formattedId.display} + {shouldShowNickname + ? contact!.customNickname || contact!.nickname + : formattedId.display} ); } diff --git a/packages/ui/src/components/ContactNameV2.tsx b/packages/ui/src/components/ContactNameV2.tsx index 3e2699a4e2..36d6a37482 100644 --- a/packages/ui/src/components/ContactNameV2.tsx +++ b/packages/ui/src/components/ContactNameV2.tsx @@ -35,7 +35,7 @@ export const useContactNameProps = ({ return { children: [ showContactId ? idMeta?.display : null, - showNickname ? contact?.customNickname ?? contact?.nickname : null, + showNickname ? contact?.customNickname || contact?.nickname : null, ] .filter((i) => !!i) .join(' '), diff --git a/packages/ui/src/components/ContactsScreenView.tsx b/packages/ui/src/components/ContactsScreenView.tsx index 30dc4f8750..a5c53e536f 100644 --- a/packages/ui/src/components/ContactsScreenView.tsx +++ b/packages/ui/src/components/ContactsScreenView.tsx @@ -1,22 +1,39 @@ import * as db from '@tloncorp/shared/db'; +import { useCallback, useMemo } from 'react'; +import { FlatList } from 'react-native-gesture-handler'; import { ScrollView, YStack } from 'tamagui'; +import { Badge } from './Badge'; import { ContactListItem } from './ListItem'; interface Props { contacts: db.Contact[]; suggestions: db.Contact[]; + onContactPress: (contactId: string) => void; } export function ContactsScreenView(props: Props) { - return ( - - {props.suggestions.map((contact) => ( - - ))} - {props.contacts.map((contact) => ( - - ))} - + const realAndSuggested = useMemo( + () => [...props.suggestions, ...props.contacts], + [props.contacts, props.suggestions] ); + + const renderItem = useCallback(({ item }: { item: db.Contact }) => { + return ( + + ) : null + } + onPress={() => props.onContactPress(item.id)} + /> + ); + }, []); + + return ; } diff --git a/packages/ui/src/components/EditProfileScreenView.tsx b/packages/ui/src/components/EditProfileScreenView.tsx index 4ce4288071..fa5806ca37 100644 --- a/packages/ui/src/components/EditProfileScreenView.tsx +++ b/packages/ui/src/components/EditProfileScreenView.tsx @@ -1,6 +1,6 @@ import * as api from '@tloncorp/shared/api'; import * as db from '@tloncorp/shared/db'; -import { useCallback, useState } from 'react'; +import { useCallback, useMemo, useState } from 'react'; import { useForm } from 'react-hook-form'; import { Alert } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; @@ -18,8 +18,10 @@ import { } from './Form'; import KeyboardAvoidingView from './KeyboardAvoidingView'; import { ScreenHeader } from './ScreenHeader'; +import { BioDisplay, PinnedGroupsDisplay } from './UserProfileScreenView'; interface Props { + userId: string; onGoBack: () => void; onSaveProfile: (update: api.ProfileUpdate | null) => void; onUpdatePinnedGroups: (groups: db.Group[]) => void; @@ -30,13 +32,31 @@ interface Props { export function EditProfileScreenView(props: Props) { const insets = useSafeAreaInsets(); const currentUserId = useCurrentUserId(); - const userContact = useContact(currentUserId); + const userContact = useContact(props.userId); const [pinnedGroups, setPinnedGroups] = useState( (userContact?.pinnedGroups ?.map((pin) => pin.group) .filter(Boolean) as db.Group[]) ?? [] ); + const currentNickname = useMemo(() => { + return props.userId === currentUserId + ? userContact?.nickname + : userContact?.customNickname ?? ''; + }, [props.userId, currentUserId, userContact]); + + const nicknamePlaceholder = useMemo(() => { + return props.userId === currentUserId + ? userContact?.id + : userContact?.nickname ?? userContact?.id; + }, [props.userId, currentUserId, userContact]); + + const currentAvatarImage = useMemo(() => { + return props.userId === currentUserId + ? userContact?.avatarImage + : userContact?.customAvatarImage ?? ''; + }, [props.userId, currentUserId, userContact]); + const { control, handleSubmit, @@ -44,9 +64,9 @@ export function EditProfileScreenView(props: Props) { } = useForm({ mode: 'onChange', defaultValues: { - nickname: userContact?.nickname ?? '', + nickname: currentNickname ?? '', bio: userContact?.bio ?? '', - avatarImage: userContact?.avatarImage ?? undefined, + avatarImage: currentAvatarImage ?? undefined, }, }); @@ -54,7 +74,6 @@ export function EditProfileScreenView(props: Props) { if (isDirty) { handleSubmit((formData) => { props.onSaveProfile(formData); - props.onGoBack(); })(); } else { props.onGoBack(); @@ -132,7 +151,7 @@ export function EditProfileScreenView(props: Props) { ); }} - inputProps={{ placeholder: userContact?.id }} + inputProps={{ placeholder: nicknamePlaceholder }} rules={{ maxLength: { value: 30, @@ -159,29 +178,44 @@ export function EditProfileScreenView(props: Props) { }} /> - - - - - + {props.userId === currentUserId ? ( + <> + + + + + + ) : ( + <> + + {}} + backgroundColor="$secondaryBackground" + /> + + )} diff --git a/packages/ui/src/components/NavBarView.tsx b/packages/ui/src/components/NavBarView.tsx index d07ba83733..4390f5d6e6 100644 --- a/packages/ui/src/components/NavBarView.tsx +++ b/packages/ui/src/components/NavBarView.tsx @@ -6,14 +6,18 @@ export const NavBarView = ({ navigateToHome, navigateToNotifications, navigateToProfileSettings, + navigateToContacts, currentRoute, currentUserId, + showContactsTab, }: { navigateToHome: () => void; navigateToNotifications: () => void; navigateToProfileSettings: () => void; + navigateToContacts?: () => void; currentRoute: string; currentUserId: string; + showContactsTab?: boolean; }) => { const isRouteActive = (routeName: string) => { return currentRoute === routeName; @@ -22,6 +26,14 @@ export const NavBarView = ({ return ( + {showContactsTab && ( + + )} currentUserId === props.userId || userContact?.isContact, - [currentUserId, props.userId, userContact] - ); - - const handleEditPress = useCallback(() => { - if (currentUserId === props.userId) { - props.onPressEdit(); - } else { - setIsEditing(true); - } - }, [currentUserId, props]); - - const handleCancelEdit = useCallback(() => { - setIsEditing(false); - }, []); - - const handleSaveEdit = useCallback(() => { - const startNickname = userContact?.customNickname ?? userContact?.nickname; - const startAvatar = - userContact?.customAvatarImage ?? userContact?.avatarImage; - - const addedNickname = editForm.getValues('nickname'); - const addedAvatar = editForm.getValues('avatarImage'); - - const updatedMetadata = { - nickname: addedNickname !== startNickname ? addedNickname : undefined, - avatarImage: addedAvatar !== startAvatar ? addedAvatar : undefined, - }; - - store.updateContactMetadata(props.userId, updatedMetadata); - - setIsEditing(false); - - setTimeout(() => { - editForm.reset(); - }, 100); - }, [ - editForm, - props.userId, - userContact?.avatarImage, - userContact?.customAvatarImage, - userContact?.customNickname, - userContact?.nickname, - ]); - return ( - Cancel - - ) : ( - - ) - } + leftControls={} rightControls={ - isEditing ? ( - - Save - - ) : shouldShowEditButton ? ( - - Edit - - ) : null + props.onPressEdit()}> + Edit + } /> - {isEditing ? ( - - ) : ( - - )} - + {userContact?.status && } - - {currentUserId !== props.userId ? ( - - ) : null} - - - - + {currentUserId !== props.userId ? ( + + ) : null} + - {pinnedGroups.map((group, i) => { - return ( - onPressGroup(group)} - > - - - - {group.title} - + + - {i === 0 && ( - - {group.description} - - )} - - - ); - })} - + ); @@ -307,9 +191,12 @@ const PaddedBlock = styled(YStack, { backgroundColor: '$background', }); -export function BioDisplay({ bio }: { bio: string }) { +export function BioDisplay({ + bio, + ...rest +}: { bio: string } & ComponentProps) { return bio.length ? ( - + About {bio} @@ -318,6 +205,68 @@ export function BioDisplay({ bio }: { bio: string }) { ) : null; } +export function PinnedGroupsDisplay( + props: { + groups: db.Group[]; + onPressGroup: (group: db.Group) => void; + } & ComponentProps +) { + const windowDimensions = useWindowDimensions(); + const [containerWidth, setContainerWidth] = useState(windowDimensions.width); + + const handleLayout = (event: LayoutChangeEvent) => { + const { width } = event.nativeEvent.layout; + setContainerWidth(width); + }; + + const { groups, onPressGroup, ...rest } = props; + + if (!props.groups.length) { + return null; + } + + return ( + + {groups.map((group, i) => { + return ( + onPressGroup(group)} + {...rest} + > + + + + {group.title} + + + {i === 0 && ( + + {group.description} + + )} + + + ); + })} + + ); +} + function UserInfoRow(props: { userId: string; hasNickname: boolean }) { const { didCopy, doCopy } = useCopy(props.userId); @@ -370,40 +319,6 @@ function UserInfoRow(props: { userId: string; hasNickname: boolean }) { ); } -function EditUserInfoRow(props: { - form: UseFormReturn<{ nickname: string; avatarImage: string | undefined }>; - defaultNickname: string; -}) { - return ( - - - - - ); -} - function ProfileButtons(props: { userId: string; contact: db.Contact | null }) { const navContext = useNavigation(); const handleMessageUser = useCallback(() => { @@ -431,17 +346,19 @@ function ProfileButtons(props: { userId: string; contact: db.Contact | null }) { }, [props.contact]); return ( - - - - - + + + + + + + ); } @@ -460,7 +377,7 @@ function ProfileButton(props: { borderRadius="$2xl" onPress={props.onPress} hero={props.hero} - marginHorizontal="$m" + marginHorizontal="$xs" > Date: Wed, 30 Oct 2024 11:05:16 -0400 Subject: [PATCH 07/32] feature flag all tabs and handle custom field removes --- .../app/features/settings/ProfileScreen.tsx | 8 +++++++ packages/app/features/top/ActivityScreen.tsx | 4 ++++ packages/shared/src/api/contactsApi.ts | 23 +++++++++++++++---- packages/shared/src/store/contactActions.ts | 13 ++++++++++- packages/shared/src/urbit/contact.ts | 10 ++++++++ 5 files changed, 52 insertions(+), 6 deletions(-) diff --git a/packages/app/features/settings/ProfileScreen.tsx b/packages/app/features/settings/ProfileScreen.tsx index 3920ceb4fe..3ab75ed5e6 100644 --- a/packages/app/features/settings/ProfileScreen.tsx +++ b/packages/app/features/settings/ProfileScreen.tsx @@ -7,6 +7,7 @@ import { useDMLureLink } from '../../hooks/useBranchLink'; import { useCurrentUserId } from '../../hooks/useCurrentUser'; import { useHandleLogout } from '../../hooks/useHandleLogout'; import { useResetDb } from '../../hooks/useResetDb'; +import { useFeatureFlag } from '../../lib/featureFlags'; import { RootStackParamList } from '../../navigation/types'; import { getHostingToken, getHostingUserId } from '../../utils/hosting'; @@ -16,6 +17,7 @@ export default function ProfileScreen(props: Props) { const resetDb = useResetDb(); const handleLogout = useHandleLogout({ resetDb }); const currentUserId = useCurrentUserId(); + const [contactsTabEnabled] = useFeatureFlag('contactsTab'); const { dmLink } = useDMLureLink(); const hasHostedAuth = useHasHostedAuth(); const navigationRef = useMutableRef(props.navigation); @@ -60,6 +62,10 @@ export default function ProfileScreen(props: Props) { navigationRef.current.navigate('Profile'); }, [navigationRef]); + const onNavigateToContacts = useCallback(() => { + navigationRef.current.navigate('Contacts'); + }, [navigationRef]); + return ( ); diff --git a/packages/app/features/top/ActivityScreen.tsx b/packages/app/features/top/ActivityScreen.tsx index 050a01c954..3aefaefb64 100644 --- a/packages/app/features/top/ActivityScreen.tsx +++ b/packages/app/features/top/ActivityScreen.tsx @@ -7,6 +7,7 @@ import { useCallback, useMemo } from 'react'; // import ErrorBoundary from '../../ErrorBoundary'; import { useCurrentUserId } from '../../hooks/useCurrentUser'; +import { useFeatureFlag } from '../../lib/featureFlags'; import { RootStackParamList } from '../../navigation/types'; type Props = NativeStackScreenProps; @@ -14,6 +15,7 @@ type Props = NativeStackScreenProps; export function ActivityScreen(props: Props) { const isFocused = useIsFocused(); const currentUserId = useCurrentUserId(); + const [contactsTabEnabled] = useFeatureFlag('contactsTab'); const allFetcher = store.useInfiniteBucketedActivity('all'); const mentionsFetcher = store.useInfiniteBucketedActivity('mentions'); @@ -69,11 +71,13 @@ export function ActivityScreen(props: Props) { refresh={handleRefreshActivity} /> props.navigation.navigate('Contacts')} navigateToHome={() => props.navigation.navigate('ChatList')} navigateToNotifications={() => props.navigation.navigate('Activity')} navigateToProfileSettings={() => props.navigation.navigate('Profile')} currentRoute="Activity" currentUserId={currentUserId} + showContactsTab={contactsTabEnabled} /> ); diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 65c5c081fb..4f60d1ef38 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -36,6 +36,14 @@ export const getContacts = async () => { return [...peerProfiles, ...contactProfiles]; }; +export const removeContactSuggestion = async (contactId: string) => { + return poke({ + app: 'groups-ui', + mark: 'tbd', + json: {}, + }); +}; + // TODO: use new method export const addContacts = async (contactIds: string[]) => { return poke({ @@ -49,17 +57,22 @@ export const updateContactMetadata = async ( contactId: string, metadata: { nickname?: string; avatarImage?: string } ) => { + console.log('bl: updateContactMetadata', metadata); if (!metadata.nickname && !metadata.avatarImage) { return; } - const contactUpdate: ub.ContactBookProfile = {}; - if (metadata.nickname) { - contactUpdate.nickname = { type: 'text', value: metadata.nickname }; + const contactUpdate: ub.ContactBookProfileEdit = {}; + if (metadata.nickname !== undefined) { + contactUpdate.nickname = metadata.nickname + ? { type: 'text', value: metadata.nickname } + : null; } - if (metadata.avatarImage) { - contactUpdate.avatar = { type: 'look', value: metadata.avatarImage }; + if (metadata.avatarImage !== undefined) { + contactUpdate.avatar = metadata.avatarImage + ? { type: 'look', value: metadata.avatarImage } + : null; } return poke({ diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index 7dd6775c8a..3edd01d986 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -53,7 +53,18 @@ export async function updateContactMetadata( }); try { - await api.updateContactMetadata(contactId, metadata); + await api.updateContactMetadata(contactId, { + nickname: nickname + ? nickname + : existingContact?.customNickname + ? '' + : undefined, + avatarImage: avatarImage + ? avatarImage + : existingContact?.customAvatarImage + ? '' + : undefined, + }); } catch (e) { // rollback the update await db.updateContact({ diff --git a/packages/shared/src/urbit/contact.ts b/packages/shared/src/urbit/contact.ts index 44d073f87e..06b6bb03a5 100644 --- a/packages/shared/src/urbit/contact.ts +++ b/packages/shared/src/urbit/contact.ts @@ -79,6 +79,16 @@ export interface ContactBookProfile { status?: ContactFieldText; } +export interface ContactBookProfileEdit { + nickname?: ContactFieldText | null; + bio?: ContactFieldText | null; + avatar?: ContactImageField | null; + cover?: ContactImageField | null; + color?: ContactFieldColor | null; + groups?: ContactFieldGroups | null; + status?: ContactFieldText | null; +} + // first element is the contact's profile, second is any user overrides export type ContactBookEntry = [ContactBookProfile, ContactBookProfile]; From 9900a67e7c9fe6ddab19fc08d6028fe94ff693e9 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Wed, 30 Oct 2024 11:18:55 -0400 Subject: [PATCH 08/32] remove early returns if trying to clear both avatar and nickname --- packages/shared/src/api/contactsApi.ts | 5 ----- packages/shared/src/store/contactActions.ts | 3 --- 2 files changed, 8 deletions(-) diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 4f60d1ef38..e34821bd7d 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -57,11 +57,6 @@ export const updateContactMetadata = async ( contactId: string, metadata: { nickname?: string; avatarImage?: string } ) => { - console.log('bl: updateContactMetadata', metadata); - if (!metadata.nickname && !metadata.avatarImage) { - return; - } - const contactUpdate: ub.ContactBookProfileEdit = {}; if (metadata.nickname !== undefined) { contactUpdate.nickname = metadata.nickname diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index 3edd01d986..fba1626116 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -39,9 +39,6 @@ export async function updateContactMetadata( } ) { const { nickname, avatarImage } = metadata; - if (!nickname && !avatarImage) { - return; - } const existingContact = await db.getContact({ id: contactId }); From d893c1ab7a78bb27b77f41425defc46b7575c774 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Wed, 30 Oct 2024 11:57:58 -0400 Subject: [PATCH 09/32] stub suggestion hide --- packages/shared/src/api/contactsApi.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index e34821bd7d..8c4da7dba8 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -39,8 +39,8 @@ export const getContacts = async () => { export const removeContactSuggestion = async (contactId: string) => { return poke({ app: 'groups-ui', - mark: 'tbd', - json: {}, + mark: 'hide-contact', + json: '~latter-bolden', }); }; From d777bd9b79cf1acaba9c722a433ad03645453d89 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 1 Nov 2024 01:40:47 -0400 Subject: [PATCH 10/32] polish --- .../features/settings/EditProfileScreen.tsx | 2 +- packages/app/features/top/ContactsScreen.tsx | 46 +++++++++++++-- packages/shared/src/api/contactsApi.ts | 46 +++++++-------- packages/shared/src/store/contactActions.ts | 20 ++++++- packages/shared/src/urbit/contact.ts | 24 +++++--- .../ui/src/components/ContactsScreenView.tsx | 57 ++++++++++++------- .../src/components/EditProfileScreenView.tsx | 39 ++++++++----- packages/ui/src/components/Form/inputs.tsx | 12 +++- packages/ui/src/components/NavBarView.tsx | 4 +- .../src/components/UserProfileScreenView.tsx | 22 ++++++- packages/ui/src/hooks/contactSorters.ts | 23 ++++---- packages/ui/src/utils/user.ts | 6 +- 12 files changed, 209 insertions(+), 92 deletions(-) diff --git a/packages/app/features/settings/EditProfileScreen.tsx b/packages/app/features/settings/EditProfileScreen.tsx index f3842e3bd6..0425f18a51 100644 --- a/packages/app/features/settings/EditProfileScreen.tsx +++ b/packages/app/features/settings/EditProfileScreen.tsx @@ -6,9 +6,9 @@ import { EditProfileScreenView, GroupsProvider, } from '@tloncorp/ui'; -import { useCurrentUserId } from 'packages/app/hooks/useCurrentUser'; import { useCallback } from 'react'; +import { useCurrentUserId } from '../../hooks/useCurrentUser'; import { RootStackParamList } from '../../navigation/types'; type Props = NativeStackScreenProps; diff --git a/packages/app/features/top/ContactsScreen.tsx b/packages/app/features/top/ContactsScreen.tsx index b0865330b8..6d9a96f1fc 100644 --- a/packages/app/features/top/ContactsScreen.tsx +++ b/packages/app/features/top/ContactsScreen.tsx @@ -1,14 +1,19 @@ import type { NativeStackScreenProps } from '@react-navigation/native-stack'; +import * as db from '@tloncorp/shared/db'; import * as store from '@tloncorp/shared/store'; import { ContactsScreenView, NavBarView, ScreenHeader, View, + getDisplayName, + isWeb, useCurrentUserId, } from '@tloncorp/ui'; -import { useFeatureFlag } from 'packages/app/lib/featureFlags'; +import { useCallback } from 'react'; +import { Alert } from 'react-native'; +import { useFeatureFlag } from '../../lib/featureFlags'; import type { RootStackParamList } from '../../navigation/types'; type Props = NativeStackScreenProps; @@ -24,15 +29,46 @@ export default function ContactsScreen(props: Props) { const { data: contacts } = store.useUserContacts(); const { data: suggestions } = store.useSuggestedContacts(); + const onContactPress = useCallback( + (contact: db.Contact) => { + navigate('UserProfile', { userId: contact.id }); + }, + [navigate] + ); + + const onContactLongPress = useCallback((contact: db.Contact) => { + if (!isWeb && contact.isContactSuggestion) { + Alert.alert(`Add ${getDisplayName(contact)}?`, '', [ + { + text: 'Cancel', + style: 'cancel', + }, + { + text: 'Add Contact', + style: 'default', + onPress: () => { + store.addContact(contact.id); + }, + }, + { + text: 'Decline Suggestion', + style: 'destructive', + onPress: () => { + store.removeContactSuggestion(contact.id); + }, + }, + ]); + } + }, []); + return ( { - navigate('UserProfile', { userId: contactId }); - }} + onContactPress={onContactPress} + onContactLongPress={onContactLongPress} /> { @@ -47,7 +83,7 @@ export default function ContactsScreen(props: Props) { navigateToProfileSettings={() => { navigate('Profile'); }} - currentRoute="ChatList" + currentRoute="Contacts" currentUserId={currentUser} showContactsTab={contactsTabEnabled} /> diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 8c4da7dba8..9f93136530 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -21,8 +21,11 @@ export const getContacts = async () => { }); const skipContacts = new Set(Object.keys(contactsResponse)); - // TODO: actually load suggestions - const suggestionsResponse = ['~forfel-norfel']; + const suggestionsResponse = await scry({ + app: 'groups-ui', + path: '/suggested-contacts', + }); + const contactSuggestions = new Set(suggestionsResponse); const peerProfiles = v0PeersToClientProfiles(peersResponse, { @@ -39,8 +42,8 @@ export const getContacts = async () => { export const removeContactSuggestion = async (contactId: string) => { return poke({ app: 'groups-ui', - mark: 'hide-contact', - json: '~latter-bolden', + mark: 'ui-hide-contact', + json: contactId, }); }; @@ -78,6 +81,7 @@ export const updateContactMetadata = async ( }; export const addContact = async (contactId: string) => { + removeContactSuggestion(contactId); return poke({ app: 'contacts', mark: 'contact-action-1', @@ -161,27 +165,27 @@ export const subscribeToContactUpdates = ( path: '/v1/news', }, (event: ub.ContactsNewsResponse1) => { - console.log(`bl: got v1/news event`, event); - // received when someone is marked as a contact or when a contact's profile is updated - if (ub.isPageResponse(event) && event.kip.startsWith('~')) { - const contactBookEntry = [event.con, event.mod] as ub.ContactBookEntry; - handler({ + if (ub.isPageResponse(event) && event.page.kip.startsWith('~')) { + const { kip, contact, mod } = event.page; + const contactBookEntry = [contact, mod] as ub.ContactBookEntry; + return handler({ type: 'upsertContact', - contact: contactToClientProfile(event.kip, contactBookEntry), + contact: contactToClientProfile(kip, contactBookEntry), }); } - if (ub.isWipeResponse(event) && event.kip.startsWith('~')) { - handler({ type: 'removeContact', contactId: event.kip }); + if (ub.isWipeResponse(event) && event.wipe.kip.startsWith('~')) { + return handler({ type: 'removeContact', contactId: event.wipe.kip }); } // received when we get initial or updated profile info for a non-contact. Note: we also get // a dupe event here if a contact updates their own profile (get a page fact and peer fact) - if (ub.isPeerResponse(event) && event.who.startsWith('~')) { - handler({ + if (ub.isPeerResponse(event) && event.peer.who.startsWith('~')) { + const { who, contact } = event.peer; + return handler({ type: 'upsertContact', - contact: v1PeerToClientProfile(event.who, event.con), + contact: v1PeerToClientProfile(who, contact), }); } } @@ -232,8 +236,6 @@ export const v0PeerToClientProfile = ( })) ?? [], isContact: false, - customNickname: null, - customAvatarImage: null, isContactSuggestion: config?.isContactSuggestion, }; }; @@ -274,9 +276,7 @@ export const v1PeerToClientProfile = ( })) ?? [], isContact: config?.isContact, - customNickname: null, - customAvatarImage: null, - isContactSuggestion: config?.isContactSuggestion, + isContactSuggestion: config?.isContactSuggestion && !config?.isContact, }; }; @@ -320,8 +320,8 @@ export const contactToClientProfile = ( })) ?? [], isContact: true, - customNickname: overrides.nickname?.value ?? null, - customAvatarImage: overrides.avatar?.value ?? null, - isContactSuggestion: config?.isContactSuggestion, + customNickname: overrides.nickname?.value, + customAvatarImage: overrides.avatar?.value, + isContactSuggestion: false, }; }; diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index fba1626116..a6dc05b5cc 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -6,8 +6,11 @@ const logger = createDevLogger('ContactActions', false); export async function addContact(contactId: string) { // Optimistic update - // await db.addContact({ id: contactId }); - await db.updateContact({ id: contactId, isContact: true }); + await db.updateContact({ + id: contactId, + isContact: true, + isContactSuggestion: false, + }); try { await api.addContact(contactId); @@ -31,6 +34,19 @@ export async function removeContact(contactId: string) { } } +export async function removeContactSuggestion(contactId: string) { + // Optimistic update + await db.updateContact({ id: contactId, isContactSuggestion: false }); + + try { + await api.removeContactSuggestion(contactId); + } catch (e) { + // Rollback the update + console.error('Error removing contact suggestion', e); + await db.updateContact({ id: contactId, isContactSuggestion: true }); + } +} + export async function updateContactMetadata( contactId: string, metadata: { diff --git a/packages/shared/src/urbit/contact.ts b/packages/shared/src/urbit/contact.ts index 06b6bb03a5..a6862d0af3 100644 --- a/packages/shared/src/urbit/contact.ts +++ b/packages/shared/src/urbit/contact.ts @@ -101,19 +101,25 @@ export type ContactsSelfResponse1 = { // received when someone is marked as a contact or when a contact's profile is updated export type ContactsPageResponse1 = { - kip: string; - con: ContactBookProfile; - mod: ContactBookProfile; + page: { + kip: string; + contact: ContactBookProfile; + mod: ContactBookProfile; + }; }; export type ContactsWipeResponse1 = { - kip: string; + wipe: { + kip: string; + }; }; // received when we get non-contact initial info export type ContactsPeerResponse1 = { - who: string; - con: ContactBookProfile; + peer: { + who: string; + contact: ContactBookProfile; + }; }; export type ContactsNewsResponse1 = @@ -125,19 +131,19 @@ export type ContactsNewsResponse1 = export function isPageResponse( response: ContactsNewsResponse1 ): response is ContactsPageResponse1 { - return 'kip' in response && 'con' in response && 'mod' in response; + return 'page' in response; } export function isWipeResponse( response: ContactsNewsResponse1 ): response is ContactsWipeResponse1 { - return 'kip' in response && !('con' in response); + return 'wipe' in response; } export function isPeerResponse( response: ContactsNewsResponse1 ): response is ContactsPeerResponse1 { - return 'who' in response && 'con' in response; + return 'peer' in response; } export function isSelfResponse( diff --git a/packages/ui/src/components/ContactsScreenView.tsx b/packages/ui/src/components/ContactsScreenView.tsx index a5c53e536f..ab24513967 100644 --- a/packages/ui/src/components/ContactsScreenView.tsx +++ b/packages/ui/src/components/ContactsScreenView.tsx @@ -1,39 +1,56 @@ import * as db from '@tloncorp/shared/db'; import { useCallback, useMemo } from 'react'; import { FlatList } from 'react-native-gesture-handler'; -import { ScrollView, YStack } from 'tamagui'; +import { useSortedContacts } from '../hooks/contactSorters'; import { Badge } from './Badge'; import { ContactListItem } from './ListItem'; interface Props { contacts: db.Contact[]; suggestions: db.Contact[]; - onContactPress: (contactId: string) => void; + onContactPress: (contact: db.Contact) => void; + onContactLongPress: (contact: db.Contact) => void; } export function ContactsScreenView(props: Props) { + const trimmedSuggested = useMemo(() => { + if (props.suggestions.length < 4 || props.contacts.length === 0) { + return props.suggestions; + } + return props.suggestions.slice(0, 4); + }, [props.contacts, props.suggestions]); + + const sortedContacts = useSortedContacts({ + contacts: props.contacts, + query: '', + }); + const realAndSuggested = useMemo( - () => [...props.suggestions, ...props.contacts], - [props.contacts, props.suggestions] + () => [...trimmedSuggested, ...sortedContacts], + [sortedContacts, trimmedSuggested] ); - const renderItem = useCallback(({ item }: { item: db.Contact }) => { - return ( - - ) : null - } - onPress={() => props.onContactPress(item.id)} - /> - ); - }, []); + const renderItem = useCallback( + ({ item }: { item: db.Contact }) => { + return ( + + ) : null + } + onPress={() => props.onContactPress(item)} + onLongPress={() => props.onContactLongPress(item)} + /> + ); + }, + [props] + ); return ; } diff --git a/packages/ui/src/components/EditProfileScreenView.tsx b/packages/ui/src/components/EditProfileScreenView.tsx index fa5806ca37..12ece7ad1a 100644 --- a/packages/ui/src/components/EditProfileScreenView.tsx +++ b/packages/ui/src/components/EditProfileScreenView.tsx @@ -57,6 +57,12 @@ export function EditProfileScreenView(props: Props) { : userContact?.customAvatarImage ?? ''; }, [props.userId, currentUserId, userContact]); + const avatarPlaceholder = useMemo(() => { + return props.userId === currentUserId + ? undefined + : userContact?.avatarImage ?? undefined; + }, [props.userId, currentUserId, userContact]); + const { control, handleSubmit, @@ -137,20 +143,24 @@ export function EditProfileScreenView(props: Props) { name="nickname" label="Nickname" control={control} - renderInputContainer={({ children }) => { - return ( - - {children} - - - ); - }} + renderInputContainer={ + props.userId === currentUserId + ? ({ children }) => { + return ( + + {children} + + + ); + } + : undefined + } inputProps={{ placeholder: nicknamePlaceholder }} rules={{ maxLength: { @@ -169,6 +179,7 @@ export function EditProfileScreenView(props: Props) { control={control} inputProps={{ buttonLabel: 'Change avatar image', + placeholderUri: avatarPlaceholder, }} rules={{ pattern: { diff --git a/packages/ui/src/components/Form/inputs.tsx b/packages/ui/src/components/Form/inputs.tsx index 26f5eb786e..0644f01992 100644 --- a/packages/ui/src/components/Form/inputs.tsx +++ b/packages/ui/src/components/Form/inputs.tsx @@ -151,8 +151,13 @@ export const TextInputWithButton: React.FC = export const ImageInput = XStack.styleable<{ buttonLabel?: string; value?: string; + placeholderUri?: string; onChange?: (value?: string) => void; -}>(function ImageInput({ buttonLabel, value, onChange }, ref) { + hideClear?: boolean; +}>(function ImageInput( + { buttonLabel, value, hideClear, placeholderUri, onChange }, + ref +) { const [sheetOpen, setSheetOpen] = useState(false); const [assetUri, setAssetUri] = useState( value ?? undefined @@ -204,6 +209,9 @@ export const ImageInput = XStack.styleable<{ + {placeholderUri ? ( + + ) : null} {assetUri ? ( ) : null} @@ -218,7 +226,7 @@ export const ImageInput = XStack.styleable<{ isOpen={sheetOpen} onOpenChange={setSheetOpen} onAttachmentsSet={handleImageSelected} - showClearOption={!!value} + showClearOption={!hideClear && !!value} onClearAttachments={handleImageRemoved} /> diff --git a/packages/ui/src/components/NavBarView.tsx b/packages/ui/src/components/NavBarView.tsx index 6e909be71e..215c931b05 100644 --- a/packages/ui/src/components/NavBarView.tsx +++ b/packages/ui/src/components/NavBarView.tsx @@ -34,8 +34,8 @@ export const NavBarView = ({ {showContactsTab && ( diff --git a/packages/ui/src/components/UserProfileScreenView.tsx b/packages/ui/src/components/UserProfileScreenView.tsx index 7c4dae51cf..b3b74369d0 100644 --- a/packages/ui/src/components/UserProfileScreenView.tsx +++ b/packages/ui/src/components/UserProfileScreenView.tsx @@ -66,15 +66,21 @@ export function UserProfileScreenView(props: Props) { [props] ); + const canEdit = useMemo(() => { + return currentUserId === props.userId || userContact?.isContact; + }, [currentUserId, props.userId, userContact]); + return ( } rightControls={ - props.onPressEdit()}> - Edit - + canEdit ? ( + props.onPressEdit()}> + Edit + + ) : null } /> { + store.removeContactSuggestion(props.userId); + }, [props]); + const isBlocked = useMemo(() => { return props.contact?.isBlocked ?? false; }, [props.contact]); @@ -353,6 +363,12 @@ function ProfileButtons(props: { userId: string; contact: db.Contact | null }) { title={props.contact?.isContact ? 'Remove Contact' : 'Add Contact'} onPress={handleToggleContact} /> + {props.contact?.isContactSuggestion ? ( + + ) : null} { return contacts.filter((contact) => { - const nickname = contact.nickname?.toLowerCase() ?? ''; + const nickname = resolveNickname(contact)?.toLowerCase() ?? ''; const id = contact.id.replace(/[~-]/g, ''); return ( nickname.startsWith(processedQuery) || id.startsWith(processedQuery) diff --git a/packages/ui/src/utils/user.ts b/packages/ui/src/utils/user.ts index 2debf00acb..e028af5419 100644 --- a/packages/ui/src/utils/user.ts +++ b/packages/ui/src/utils/user.ts @@ -23,5 +23,9 @@ export function formatUserId( } export function getDisplayName(contact: db.Contact) { - return contact.nickname ? contact.nickname : contact.id; + return contact?.customNickname ?? contact?.nickname ?? contact.id; +} + +export function resolveNickname(contact: db.Contact) { + return contact.customNickname ?? contact.nickname; } From 6f35785b236f60a0511955578fe900565d4eeea7 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 1 Nov 2024 11:07:38 -0400 Subject: [PATCH 11/32] fix tests --- packages/shared/src/api/contactsApi.test.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/shared/src/api/contactsApi.test.ts b/packages/shared/src/api/contactsApi.test.ts index 2dd95aaaec..eadc77aeb9 100644 --- a/packages/shared/src/api/contactsApi.test.ts +++ b/packages/shared/src/api/contactsApi.test.ts @@ -35,8 +35,7 @@ const outputContact = { { groupId: '~ravmel-ropdyl/crate', contactId: 'test' }, ], isContact: false, - customNickname: null, - customAvatarImage: null, + isContactSuggestion: undefined, }; test('converts a contact from server to client format', () => { From 5485570ce84eadd9740b4bfd540172613142f05b Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 1 Nov 2024 11:40:12 -0400 Subject: [PATCH 12/32] fix sync response --- packages/app/features/top/ChatListScreen.tsx | 2 +- packages/shared/src/store/sync.test.ts | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/app/features/top/ChatListScreen.tsx b/packages/app/features/top/ChatListScreen.tsx index 13d3a4190e..6a11f0b13a 100644 --- a/packages/app/features/top/ChatListScreen.tsx +++ b/packages/app/features/top/ChatListScreen.tsx @@ -351,7 +351,7 @@ export function ChatListScreenView({ { - navigate('Contacts'); + navigation.navigate('Contacts'); }} navigateToHome={() => { navigation.navigate('ChatList'); diff --git a/packages/shared/src/store/sync.test.ts b/packages/shared/src/store/sync.test.ts index 71e51cd263..44f3479a5d 100644 --- a/packages/shared/src/store/sync.test.ts +++ b/packages/shared/src/store/sync.test.ts @@ -31,7 +31,10 @@ import { PagedPosts, PostDataResponse, } from '../urbit'; -import { Contact as UrbitContact } from '../urbit/contact'; +import { + ContactBookScryResult1, + Contact as UrbitContact, +} from '../urbit/contact'; import { Group as UrbitGroup } from '../urbit/groups'; import { syncContacts, @@ -44,9 +47,14 @@ import { syncThreadPosts, } from './sync'; +const rawContactsData2 = {}; +const rawContactSuggestionsData: string[] = []; + const channelPostWithRepliesData = rawChannelPostWithRepliesData as unknown as PostDataResponse; const contactsData = rawContactsData as unknown as Record; +const contactBookData = rawContactsData2 as unknown as ContactBookScryResult1; +const suggestionsData = rawContactSuggestionsData as unknown as string[]; const groupsData = rawGroupsData as unknown as Record; const groupsInitData = rawGroupsInitData as unknown as GroupsInit; const groupsInitData2 = rawGroupsInit2 as unknown as GroupsInit; @@ -96,7 +104,7 @@ test('syncs pins', async () => { }); test('syncs contacts', async () => { - setScryOutput(contactsData); + setScryOutputs([contactsData, contactBookData, suggestionsData]); await syncContacts(); const storedContacts = await db.getContacts(); expect(storedContacts.length).toEqual( @@ -107,7 +115,7 @@ test('syncs contacts', async () => { expect(original).toBeTruthy(); expect(original.groups?.length ?? 0).toEqual(c.pinnedGroups.length); }); - setScryOutput(contactsData); + setScryOutputs([contactsData, contactBookData, suggestionsData]); await syncContacts(); }); From 640127a429baaaf2dbe31dfe91a96bdb3581b4a9 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Mon, 4 Nov 2024 08:00:37 -0500 Subject: [PATCH 13/32] empty field handling for contact updates --- packages/shared/src/store/contactActions.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index a6dc05b5cc..7e176f2a46 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -61,8 +61,16 @@ export async function updateContactMetadata( // optimistic update await db.updateContact({ id: contactId, - customNickname: nickname ?? null, - customAvatarImage: avatarImage ?? null, + customNickname: nickname + ? nickname + : existingContact?.customNickname + ? '' + : undefined, + customAvatarImage: avatarImage + ? avatarImage + : existingContact?.customAvatarImage + ? '' + : undefined, }); try { From 452ff3638ae334f3b43e8a3049d4aa1accc8adc3 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Thu, 7 Nov 2024 11:36:01 -0500 Subject: [PATCH 14/32] upgrade drizzle, use generated columns for computed nicknam/avatarImage --- package.json | 1 - packages/shared/drizzle.config.ts | 1 + packages/shared/package.json | 4 +- packages/shared/reset-migrations.js | 2 +- ...spike.sql => 0000_steady_adam_warlock.sql} | 43 +- .../src/db/migrations/meta/0000_snapshot.json | 179 +- .../src/db/migrations/meta/_journal.json | 8 +- .../shared/src/db/migrations/migrations.js | 2 +- packages/shared/src/db/schema.ts | 26 +- packages/shared/src/db/types.ts | 10 +- ...@0.30.9.patch => drizzle-orm@0.36.1.patch} | 0 pnpm-lock.yaml | 4318 ++++++++++++++--- 12 files changed, 3714 insertions(+), 880 deletions(-) rename packages/shared/src/db/migrations/{0000_cultured_the_spike.sql => 0000_steady_adam_warlock.sql} (93%) rename patches/{drizzle-orm@0.30.9.patch => drizzle-orm@0.36.1.patch} (100%) diff --git a/package.json b/package.json index 9c1a22e341..ee024ace89 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,6 @@ "usehooks-ts@2.6.0": "patches/usehooks-ts@2.6.0.patch", "react-native-storage@1.0.1": "patches/react-native-storage@1.0.1.patch", "react-native-reanimated@3.8.1": "patches/react-native-reanimated@3.8.1.patch", - "drizzle-orm@0.30.9": "patches/drizzle-orm@0.30.9.patch", "@10play/tentap-editor@0.4.55": "patches/@10play__tentap-editor@0.4.55.patch", "any-ascii@0.3.2": "patches/any-ascii@0.3.2.patch", "@likashefqet/react-native-image-zoom@3.0.0": "patches/@likashefqet__react-native-image-zoom@3.0.0.patch", diff --git a/packages/shared/drizzle.config.ts b/packages/shared/drizzle.config.ts index 7f25fe862e..65d9123d7e 100644 --- a/packages/shared/drizzle.config.ts +++ b/packages/shared/drizzle.config.ts @@ -7,6 +7,7 @@ import type { Config } from 'drizzle-kit'; // we need project-specific configs to support other db functionality, we can // add those separately. export default { + dialect: 'sqlite', schema: './src/db/schema.ts', out: './src/db/migrations', driver: 'expo', diff --git a/packages/shared/package.json b/packages/shared/package.json index cb8b79e953..5d0b34eec1 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -60,7 +60,7 @@ "devDependencies": { "@types/better-sqlite3": "^7.6.9", "better-sqlite3": "~9.4.3", - "drizzle-kit": "0.20.17", + "drizzle-kit": "0.28.0", "typescript": "5.1.3", "vitest": "^1.4.0" }, @@ -70,7 +70,7 @@ "@tiptap/pm": "^2.6.6", "@tiptap/react": "^2.6.6", "@tiptap/suggestion": "^2.6.6", - "drizzle-orm": "0.30.9", + "drizzle-orm": "0.36.1", "react": "^18.2.0", "zustand": "^3.7.2" } diff --git a/packages/shared/reset-migrations.js b/packages/shared/reset-migrations.js index 8b6db594bc..10ada678f1 100644 --- a/packages/shared/reset-migrations.js +++ b/packages/shared/reset-migrations.js @@ -59,7 +59,7 @@ function reset() { spawnSync('pnpm', [ 'exec', 'drizzle-kit', - 'generate:sqlite', + 'generate', '--config', './drizzle.config.ts', ]); diff --git a/packages/shared/src/db/migrations/0000_cultured_the_spike.sql b/packages/shared/src/db/migrations/0000_steady_adam_warlock.sql similarity index 93% rename from packages/shared/src/db/migrations/0000_cultured_the_spike.sql rename to packages/shared/src/db/migrations/0000_steady_adam_warlock.sql index 9a32b8d313..1d26b8cfbb 100644 --- a/packages/shared/src/db/migrations/0000_cultured_the_spike.sql +++ b/packages/shared/src/db/migrations/0000_steady_adam_warlock.sql @@ -14,7 +14,7 @@ CREATE TABLE `activity_events` ( `should_notify` integer, `content` text, `group_event_user_id` text, - PRIMARY KEY(`bucket_id`, `id`) + PRIMARY KEY(`id`, `bucket_id`) ); --> statement-breakpoint CREATE TABLE `channel_readers` ( @@ -68,11 +68,13 @@ CREATE TABLE `channels` ( FOREIGN KEY (`group_id`) REFERENCES `groups`(`id`) ON UPDATE no action ON DELETE cascade ); --> statement-breakpoint +CREATE INDEX `last_post_id` ON `channels` (`last_post_id`);--> statement-breakpoint +CREATE INDEX `last_post_at` ON `channels` (`last_post_at`);--> statement-breakpoint CREATE TABLE `chat_member_roles` ( `group_id` text NOT NULL, `contact_id` text NOT NULL, `role_id` text NOT NULL, - PRIMARY KEY(`contact_id`, `group_id`, `role_id`), + PRIMARY KEY(`group_id`, `contact_id`, `role_id`), FOREIGN KEY (`group_id`) REFERENCES `groups`(`id`) ON UPDATE no action ON DELETE cascade ); --> statement-breakpoint @@ -95,16 +97,18 @@ CREATE TABLE `contact_group_pins` ( --> statement-breakpoint CREATE TABLE `contacts` ( `id` text PRIMARY KEY NOT NULL, - `nickname` text, + `peerNickname` text, + `customNickname` text, + `nickname` text GENERATED ALWAYS AS (COALESCE("customNickname", "peerNickname")) STORED, + `peerAvatarImage` text, + `customAvatarImage` text, + `avatarImage` text GENERATED ALWAYS AS (COALESCE("customAvatarImage", "peerAvatarImage")) STORED, `bio` text, `status` text, `color` text, - `avatarImage` text, `coverImage` text, `blocked` integer, `isContact` integer, - `customNickname` text, - `customAvatarImage` text, `isContactSuggestion` integer ); --> statement-breakpoint @@ -122,7 +126,7 @@ CREATE TABLE `group_join_requests` ( `group_id` text NOT NULL, `contact_id` text NOT NULL, `requested_at` integer, - PRIMARY KEY(`contact_id`, `group_id`), + PRIMARY KEY(`group_id`, `contact_id`), FOREIGN KEY (`group_id`) REFERENCES `groups`(`id`) ON UPDATE no action ON DELETE cascade ); --> statement-breakpoint @@ -130,7 +134,7 @@ CREATE TABLE `group_member_bans` ( `group_id` text NOT NULL, `contact_id` text NOT NULL, `banned_at` integer, - PRIMARY KEY(`contact_id`, `group_id`), + PRIMARY KEY(`group_id`, `contact_id`), FOREIGN KEY (`group_id`) REFERENCES `groups`(`id`) ON UPDATE no action ON DELETE cascade ); --> statement-breakpoint @@ -138,7 +142,7 @@ CREATE TABLE `group_member_invites` ( `group_id` text NOT NULL, `contact_id` text NOT NULL, `invited_at` integer, - PRIMARY KEY(`contact_id`, `group_id`), + PRIMARY KEY(`group_id`, `contact_id`), FOREIGN KEY (`group_id`) REFERENCES `groups`(`id`) ON UPDATE no action ON DELETE cascade ); --> statement-breakpoint @@ -146,7 +150,7 @@ CREATE TABLE `group_nav_section_channels` ( `group_nav_section_id` text, `channel_id` text, `channel_index` integer, - PRIMARY KEY(`channel_id`, `group_nav_section_id`), + PRIMARY KEY(`group_nav_section_id`, `channel_id`), FOREIGN KEY (`group_nav_section_id`) REFERENCES `group_nav_sections`(`id`) ON UPDATE no action ON DELETE no action, FOREIGN KEY (`channel_id`) REFERENCES `channels`(`id`) ON UPDATE no action ON DELETE no action ); @@ -242,9 +246,12 @@ CREATE TABLE `post_windows` ( `channel_id` text NOT NULL, `oldest_post_id` text NOT NULL, `newest_post_id` text NOT NULL, - PRIMARY KEY(`channel_id`, `newest_post_id`, `oldest_post_id`) + PRIMARY KEY(`channel_id`, `oldest_post_id`, `newest_post_id`) ); --> statement-breakpoint +CREATE INDEX `channel_id` ON `post_windows` (`channel_id`);--> statement-breakpoint +CREATE INDEX `channel_oldest_post` ON `post_windows` (`channel_id`,`oldest_post_id`);--> statement-breakpoint +CREATE INDEX `channel_newest_post` ON `post_windows` (`channel_id`,`newest_post_id`);--> statement-breakpoint CREATE TABLE `posts` ( `id` text PRIMARY KEY NOT NULL, `author_id` text NOT NULL, @@ -279,6 +286,10 @@ CREATE TABLE `posts` ( `backend_time` text ); --> statement-breakpoint +CREATE UNIQUE INDEX `posts_sent_at_unique` ON `posts` (`sent_at`);--> statement-breakpoint +CREATE UNIQUE INDEX `cache_id` ON `posts` (`author_id`,`sent_at`);--> statement-breakpoint +CREATE INDEX `posts_channel_id` ON `posts` (`channel_id`,`id`);--> statement-breakpoint +CREATE INDEX `posts_group_id` ON `posts` (`group_id`,`id`);--> statement-breakpoint CREATE TABLE `settings` ( `user_id` text PRIMARY KEY NOT NULL, `theme` text, @@ -318,13 +329,3 @@ CREATE TABLE `volume_settings` ( `item_type` text NOT NULL, `level` text NOT NULL ); ---> statement-breakpoint -CREATE INDEX `last_post_id` ON `channels` (`last_post_id`);--> statement-breakpoint -CREATE INDEX `last_post_at` ON `channels` (`last_post_at`);--> statement-breakpoint -CREATE INDEX `channel_id` ON `post_windows` (`channel_id`);--> statement-breakpoint -CREATE INDEX `channel_oldest_post` ON `post_windows` (`channel_id`,`oldest_post_id`);--> statement-breakpoint -CREATE INDEX `channel_newest_post` ON `post_windows` (`channel_id`,`newest_post_id`);--> statement-breakpoint -CREATE UNIQUE INDEX `posts_sent_at_unique` ON `posts` (`sent_at`);--> statement-breakpoint -CREATE UNIQUE INDEX `cache_id` ON `posts` (`author_id`,`sent_at`);--> statement-breakpoint -CREATE INDEX `posts_channel_id` ON `posts` (`channel_id`,`id`);--> statement-breakpoint -CREATE INDEX `posts_group_id` ON `posts` (`group_id`,`id`); \ No newline at end of file diff --git a/packages/shared/src/db/migrations/meta/0000_snapshot.json b/packages/shared/src/db/migrations/meta/0000_snapshot.json index aa959aa8e5..62656faf62 100644 --- a/packages/shared/src/db/migrations/meta/0000_snapshot.json +++ b/packages/shared/src/db/migrations/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { - "version": "5", + "version": "6", "dialect": "sqlite", - "id": "72933ec8-6937-490e-96c6-1e832affef8d", + "id": "be4198b7-1f8f-4b63-a6ae-06e24f222dc3", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "activity_events": { @@ -118,13 +118,14 @@ "compositePrimaryKeys": { "activity_events_id_bucket_id_pk": { "columns": [ - "bucket_id", - "id" + "id", + "bucket_id" ], "name": "activity_events_id_bucket_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "channel_readers": { "name": "channel_readers", @@ -155,7 +156,8 @@ "name": "channel_readers_channel_id_role_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "channel_unreads": { "name": "channel_unreads", @@ -220,7 +222,8 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "channel_writers": { "name": "channel_writers", @@ -251,7 +254,8 @@ "name": "channel_writers_channel_id_role_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "channels": { "name": "channels", @@ -458,7 +462,8 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "chat_member_roles": { "name": "chat_member_roles", @@ -504,14 +509,15 @@ "compositePrimaryKeys": { "chat_member_roles_group_id_contact_id_role_id_pk": { "columns": [ - "contact_id", "group_id", + "contact_id", "role_id" ], "name": "chat_member_roles_group_id_contact_id_role_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_members": { "name": "group_members", @@ -563,7 +569,8 @@ "name": "group_members_chat_id_contact_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "contact_group_pins": { "name": "contact_group_pins", @@ -621,7 +628,8 @@ "name": "contact_group_pins_contact_id_group_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "contacts": { "name": "contacts", @@ -633,13 +641,56 @@ "notNull": true, "autoincrement": false }, + "peerNickname": { + "name": "peerNickname", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "customNickname": { + "name": "customNickname", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, "nickname": { "name": "nickname", "type": "text", "primaryKey": false, "notNull": false, + "autoincrement": false, + "generated": { + "as": "(COALESCE(\"customNickname\", \"peerNickname\"))", + "type": "stored" + } + }, + "peerAvatarImage": { + "name": "peerAvatarImage", + "type": "text", + "primaryKey": false, + "notNull": false, "autoincrement": false }, + "customAvatarImage": { + "name": "customAvatarImage", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "avatarImage": { + "name": "avatarImage", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false, + "generated": { + "as": "(COALESCE(\"customAvatarImage\", \"peerAvatarImage\"))", + "type": "stored" + } + }, "bio": { "name": "bio", "type": "text", @@ -661,13 +712,6 @@ "notNull": false, "autoincrement": false }, - "avatarImage": { - "name": "avatarImage", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, "coverImage": { "name": "coverImage", "type": "text", @@ -689,20 +733,6 @@ "notNull": false, "autoincrement": false }, - "customNickname": { - "name": "customNickname", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "customAvatarImage": { - "name": "customAvatarImage", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, "isContactSuggestion": { "name": "isContactSuggestion", "type": "integer", @@ -714,7 +744,8 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_flagged_posts": { "name": "group_flagged_posts", @@ -780,7 +811,8 @@ "name": "group_flagged_posts_group_id_post_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_join_requests": { "name": "group_join_requests", @@ -826,13 +858,14 @@ "compositePrimaryKeys": { "group_join_requests_group_id_contact_id_pk": { "columns": [ - "contact_id", - "group_id" + "group_id", + "contact_id" ], "name": "group_join_requests_group_id_contact_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_member_bans": { "name": "group_member_bans", @@ -878,13 +911,14 @@ "compositePrimaryKeys": { "group_member_bans_group_id_contact_id_pk": { "columns": [ - "contact_id", - "group_id" + "group_id", + "contact_id" ], "name": "group_member_bans_group_id_contact_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_member_invites": { "name": "group_member_invites", @@ -930,13 +964,14 @@ "compositePrimaryKeys": { "group_member_invites_group_id_contact_id_pk": { "columns": [ - "contact_id", - "group_id" + "group_id", + "contact_id" ], "name": "group_member_invites_group_id_contact_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_nav_section_channels": { "name": "group_nav_section_channels", @@ -995,13 +1030,14 @@ "compositePrimaryKeys": { "group_nav_section_channels_group_nav_section_id_channel_id_pk": { "columns": [ - "channel_id", - "group_nav_section_id" + "group_nav_section_id", + "channel_id" ], "name": "group_nav_section_channels_group_nav_section_id_channel_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_nav_sections": { "name": "group_nav_sections", @@ -1094,7 +1130,8 @@ } }, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_rank_bans": { "name": "group_rank_bans", @@ -1146,7 +1183,8 @@ "name": "group_rank_bans_group_id_rank_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_roles": { "name": "group_roles", @@ -1233,7 +1271,8 @@ "name": "group_roles_group_id_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "group_unreads": { "name": "group_unreads", @@ -1277,7 +1316,8 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "groups": { "name": "groups", @@ -1405,7 +1445,8 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "pins": { "name": "pins", @@ -1435,7 +1476,8 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "post_images": { "name": "post_images", @@ -1501,7 +1543,8 @@ "name": "post_images_post_id_src_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "post_reactions": { "name": "post_reactions", @@ -1553,7 +1596,8 @@ "name": "post_reactions_contact_id_post_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "post_windows": { "name": "post_windows", @@ -1610,13 +1654,14 @@ "post_windows_channel_id_oldest_post_id_newest_post_id_pk": { "columns": [ "channel_id", - "newest_post_id", - "oldest_post_id" + "oldest_post_id", + "newest_post_id" ], "name": "post_windows_channel_id_oldest_post_id_newest_post_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "posts": { "name": "posts", @@ -1875,7 +1920,8 @@ }, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "settings": { "name": "settings", @@ -2024,7 +2070,8 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "thread_unreads": { "name": "thread_unreads", @@ -2090,7 +2137,8 @@ "name": "thread_unreads_channel_id_thread_id_pk" } }, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} }, "volume_settings": { "name": "volume_settings", @@ -2120,13 +2168,18 @@ "indexes": {}, "foreignKeys": {}, "compositePrimaryKeys": {}, - "uniqueConstraints": {} + "uniqueConstraints": {}, + "checkConstraints": {} } }, + "views": {}, "enums": {}, "_meta": { "schemas": {}, "tables": {}, "columns": {} + }, + "internal": { + "indexes": {} } } \ No newline at end of file diff --git a/packages/shared/src/db/migrations/meta/_journal.json b/packages/shared/src/db/migrations/meta/_journal.json index 4691a76df6..ee09001fc2 100644 --- a/packages/shared/src/db/migrations/meta/_journal.json +++ b/packages/shared/src/db/migrations/meta/_journal.json @@ -1,12 +1,12 @@ { - "version": "5", + "version": "7", "dialect": "sqlite", "entries": [ { "idx": 0, - "version": "5", - "when": 1730215124086, - "tag": "0000_cultured_the_spike", + "version": "6", + "when": 1730994594447, + "tag": "0000_steady_adam_warlock", "breakpoints": true } ] diff --git a/packages/shared/src/db/migrations/migrations.js b/packages/shared/src/db/migrations/migrations.js index 34df22f3a5..12d3183eeb 100644 --- a/packages/shared/src/db/migrations/migrations.js +++ b/packages/shared/src/db/migrations/migrations.js @@ -1,7 +1,7 @@ // This file is required for Expo/React Native SQLite migrations - https://orm.drizzle.team/quick-sqlite/expo import journal from './meta/_journal.json'; -import m0000 from './0000_cultured_the_spike.sql'; +import m0000 from './0000_steady_adam_warlock.sql'; export default { journal, diff --git a/packages/shared/src/db/schema.ts b/packages/shared/src/db/schema.ts index efd4aa24df..a105704994 100644 --- a/packages/shared/src/db/schema.ts +++ b/packages/shared/src/db/schema.ts @@ -1,4 +1,4 @@ -import { relations } from 'drizzle-orm'; +import { SQL, relations, sql } from 'drizzle-orm'; import { index, integer, @@ -55,17 +55,29 @@ export const settings = sqliteTable('settings', { export const contacts = sqliteTable('contacts', { id: text('id').primaryKey(), - nickname: text('nickname'), + + peerNickname: text('peerNickname'), + customNickname: text('customNickname'), + nickname: text('nickname').generatedAlwaysAs( + (): SQL => + sql`COALESCE(${contacts.customNickname}, ${contacts.peerNickname})`, + { mode: 'stored' } + ), + + peerAvatarImage: text('peerAvatarImage'), + customAvatarImage: text('customAvatarImage'), + avatarImage: text('avatarImage').generatedAlwaysAs( + (): SQL => + sql`COALESCE(${contacts.customAvatarImage}, ${contacts.peerAvatarImage})`, + { mode: 'stored' } + ), + bio: text('bio'), status: text('status'), color: text('color'), - avatarImage: text('avatarImage'), coverImage: text('coverImage'), isBlocked: boolean('blocked'), - - isContact: boolean('isContact'), // TODO: figure out naming - customNickname: text('customNickname'), - customAvatarImage: text('customAvatarImage'), + isContact: boolean('isContact'), isContactSuggestion: boolean('isContactSuggestion'), }); diff --git a/packages/shared/src/db/types.ts b/packages/shared/src/db/types.ts index 7e5400311e..b3eaa47c9f 100644 --- a/packages/shared/src/db/types.ts +++ b/packages/shared/src/db/types.ts @@ -33,7 +33,10 @@ type BaseModel = InferModelFromColumns< > & BaseModelRelations; -export type Contact = BaseModel<'contacts'>; +export type Contact = BaseModel<'contacts'> & { + nickname?: string | null; + avatarImage?: string | null; +}; export type ContactPinnedGroups = Contact['pinnedGroups']; export type ChannelUnread = BaseModel<'channelUnreads'>; export type GroupUnread = BaseModel<'groupUnreads'>; @@ -59,7 +62,10 @@ export type GroupMemberBan = BaseModel<'groupMemberBans'>; export type GroupJoinRequest = BaseModel<'groupJoinRequests'>; export type GroupRankBan = BaseModel<'groupRankBans'>; export type GroupFlaggedPosts = BaseModel<'groupFlaggedPosts'>; -export type ChatMember = BaseModel<'chatMembers'>; +type BaseChatMember = BaseModel<'chatMembers'>; +export interface ChatMember extends BaseChatMember { + contact?: Contact | null; +} export type GroupRole = BaseModel<'groupRoles'>; export type ChatMemberGroupRole = BaseModel<'chatMemberGroupRoles'>; export type GroupNavSection = BaseModel<'groupNavSections'>; diff --git a/patches/drizzle-orm@0.30.9.patch b/patches/drizzle-orm@0.36.1.patch similarity index 100% rename from patches/drizzle-orm@0.30.9.patch rename to patches/drizzle-orm@0.36.1.patch diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 90ada91713..e15bc7761b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,9 +39,6 @@ patchedDependencies: any-ascii@0.3.2: hash: 5ofxtlxe6za2xqrbq5pqbz7wb4 path: patches/any-ascii@0.3.2.patch - drizzle-orm@0.30.9: - hash: cegrec33e6f7d6ltk7vff5r7w4 - path: patches/drizzle-orm@0.30.9.patch react-native-reanimated@3.8.1: hash: n2blcrn244i77n7euhqt5mi2km path: patches/react-native-reanimated@3.8.1.patch @@ -95,7 +92,7 @@ importers: version: 8.0.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.4.35)(typescript@5.4.5) vitest: specifier: ^1.2.2 - version: 1.2.2(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1) + version: 1.2.2(@types/node@20.17.6)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0) apps/tlon-mobile: dependencies: @@ -158,7 +155,7 @@ importers: version: 6.9.18(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@shopify/flash-list': specifier: 1.6.3 - version: 1.6.3(@babel/runtime@7.25.9)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 1.6.3(@babel/runtime@7.26.0)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/react-native-media-driver': specifier: ^1.116.12 version: 1.116.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) @@ -435,7 +432,7 @@ importers: version: 3.4.1 vitest: specifier: ^1.0.4 - version: 1.2.2(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1) + version: 1.2.2(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0) apps/tlon-web: dependencies: @@ -489,13 +486,13 @@ importers: version: 1.101.3(encoding@0.1.13)(react@18.2.0) '@tanstack/react-query': specifier: ^4.28.0 - version: 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tanstack/react-query-devtools': specifier: ^4.28.0 - version: 4.29.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 4.29.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tanstack/react-query-persist-client': specifier: ^4.28.0 - version: 4.28.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)) + version: 4.28.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)) '@tanstack/react-virtual': specifier: ^3.0.0-beta.60 version: 3.0.0-beta.65(react@18.2.0) @@ -714,7 +711,7 @@ importers: version: 18.2.0 react-beautiful-dnd: specifier: ^13.1.1 - version: 13.1.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 13.1.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-colorful: specifier: ^5.5.1 version: 5.6.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -750,7 +747,7 @@ importers: version: https://codeload.github.com/stefkampen/react-oembed-container/tar.gz/802eee0dba7986faa9c931b1c016acba5369d5f9(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-qr-code: specifier: ^2.0.12 - version: 2.0.12(react-native-svg@15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0) + version: 2.0.12(react-native-svg@15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0) react-router: specifier: ^6.22.1 version: 6.22.2(react@18.2.0) @@ -807,7 +804,7 @@ importers: version: 0.16.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) vite-plugin-svgr: specifier: ^4.2.0 - version: 4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1)) + version: 4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0)) workbox-precaching: specifier: ^6.5.4 version: 6.6.0 @@ -898,10 +895,10 @@ importers: version: 2.0.1 '@vitejs/plugin-basic-ssl': specifier: ^1.1.0 - version: 1.1.0(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1)) + version: 1.1.0(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0)) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1)) + version: 4.2.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0)) '@welldone-software/why-did-you-render': specifier: ^7.0.1 version: 7.0.1(react@18.2.0) @@ -943,7 +940,7 @@ importers: version: 6.1.1 react-cosmos-plugin-vite: specifier: 6.1.1 - version: 6.1.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1)) + version: 6.1.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0)) react-test-renderer: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) @@ -967,13 +964,13 @@ importers: version: 1.1.4(typescript@5.4.5) vite: specifier: ^5.1.6 - version: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + version: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) vite-plugin-pwa: specifier: ^0.17.5 - version: 0.17.5(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) + version: 0.17.5(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) vitest: specifier: ^0.34.1 - version: 0.34.6(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1) + version: 0.34.6(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -991,10 +988,10 @@ importers: version: 7.25.9 '@react-navigation/drawer': specifier: ^6.7.2 - version: 6.7.2(patch_hash=rib4hjvzksqzwv3bbw4vfi5a5i)(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 6.7.2(patch_hash=rib4hjvzksqzwv3bbw4vfi5a5i)(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@react-navigation/native': specifier: ^6.1.7 - version: 6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/vite-plugin': specifier: ~1.112.12 version: 1.112.12(@swc/helpers@0.5.13)(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -1003,10 +1000,10 @@ importers: version: 5.32.1(react@18.2.0) '@tanstack/react-query-devtools': specifier: ^5.32.1 - version: 5.59.19(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0) + version: 5.59.20(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0) '@tanstack/react-query-persist-client': specifier: ^5.32.1 - version: 5.59.19(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0) + version: 5.59.20(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0) '@tiptap/core': specifier: ^2.6.6 version: 2.6.6(@tiptap/pm@2.6.6) @@ -1177,16 +1174,16 @@ importers: version: 9.4.0(react@18.2.0) react-native-safe-area-context: specifier: ^4.9.0 - version: 4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-screens: specifier: ~3.29.0 - version: 3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-web: specifier: 0.19.12 version: 0.19.12(encoding@0.1.13)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) sqlocal: specifier: ^0.11.1 - version: 0.11.1(drizzle-orm@0.30.9(patch_hash=cegrec33e6f7d6ltk7vff5r7w4)(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.8.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0)) + version: 0.11.1(drizzle-orm@0.36.1(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0)) tailwindcss-opentype: specifier: ^1.1.0 version: 1.1.0(tailwindcss@3.4.1) @@ -1204,7 +1201,7 @@ importers: version: 13.7.0 vite-plugin-svgr: specifier: ^4.2.0 - version: 4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)) + version: 4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0)) workbox-precaching: specifier: ^6.5.4 version: 6.6.0 @@ -1298,10 +1295,10 @@ importers: version: 2.0.1 '@vitejs/plugin-basic-ssl': specifier: ^1.1.0 - version: 1.1.0(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)) + version: 1.1.0(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0)) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)) + version: 4.2.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0)) '@welldone-software/why-did-you-render': specifier: ^7.0.1 version: 7.0.1(react@18.2.0) @@ -1346,7 +1343,7 @@ importers: version: 6.1.1 react-cosmos-plugin-vite: specifier: 6.1.1 - version: 6.1.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)) + version: 6.1.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0)) react-test-renderer: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) @@ -1370,13 +1367,13 @@ importers: version: 1.1.4(typescript@5.4.5) vite: specifier: ^5.1.6 - version: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + version: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) vite-plugin-pwa: specifier: ^0.17.5 - version: 0.17.5(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) + version: 0.17.5(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0) vitest: specifier: ^0.34.1 - version: 0.34.6(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1) + version: 0.34.6(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0) workbox-window: specifier: ^7.0.0 version: 7.0.0 @@ -1385,7 +1382,7 @@ importers: dependencies: '@react-native-firebase/perf': specifier: 19.2.2 - version: 19.2.2(@react-native-firebase/app@19.2.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)) + version: 19.2.2(@react-native-firebase/app@19.2.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) '@tloncorp/shared': specifier: workspace:* version: link:../shared @@ -1397,19 +1394,19 @@ importers: version: 4.17.21 react-native-device-info: specifier: ^10.8.0 - version: 10.12.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + version: 10.12.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) react-native-email-link: specifier: ^1.16.1 - version: 1.16.1(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 1.16.1(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-fetch-api: specifier: ^3.0.0 version: 3.0.0 react-native-polyfill-globals: specifier: ^3.1.0 - version: 3.1.0(base-64@1.0.0)(react-native-fetch-api@3.0.0)(react-native-get-random-values@1.11.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(react-native-url-polyfill@2.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(text-encoding@0.7.0)(web-streams-polyfill@3.3.3) + version: 3.1.0(base-64@1.0.0)(react-native-fetch-api@3.0.0)(react-native-get-random-values@1.11.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(react-native-url-polyfill@2.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(text-encoding@0.7.0)(web-streams-polyfill@3.3.3) sqlocal: specifier: ^0.11.1 - version: 0.11.1(drizzle-orm@0.30.9(patch_hash=cegrec33e6f7d6ltk7vff5r7w4)(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.8.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0)) + version: 0.11.1(drizzle-orm@0.36.1(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0)) zustand: specifier: ^3.7.2 version: 3.7.2(react@18.2.0) @@ -1419,13 +1416,13 @@ importers: version: 18.2.55 '@types/react-native': specifier: 0.73.0 - version: 0.73.0(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + version: 0.73.0(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) packages/editor: dependencies: '@10play/tentap-editor': specifier: 0.5.21 - version: 0.5.21(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 0.5.21(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tiptap/core': specifier: ^2.6.6 version: 2.6.6(@tiptap/pm@2.6.6) @@ -1450,7 +1447,7 @@ importers: version: 6.21.0(eslint@8.56.0)(typescript@5.4.5) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)) + version: 4.2.1(vite@5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0)) eslint: specifier: ^8.50.0 version: 8.56.0 @@ -1462,19 +1459,19 @@ importers: version: 5.4.5 vite: specifier: ^5.1.6 - version: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + version: 5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) vite-plugin-singlefile: specifier: ^2.0.1 - version: 2.0.1(rollup@4.13.0)(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)) + version: 2.0.1(rollup@4.13.0)(vite@5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0)) vitest: specifier: ^1.0.4 - version: 1.5.0(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1) + version: 1.5.0(@types/node@20.17.6)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0) packages/shared: dependencies: '@react-native-async-storage/async-storage': specifier: 1.21.0 - version: 1.21.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + version: 1.21.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) '@tanstack/react-query': specifier: ^5.32.1 version: 5.32.1(react@18.2.0) @@ -1503,8 +1500,8 @@ importers: specifier: ^3.0.0 version: 3.0.0 drizzle-orm: - specifier: 0.30.9 - version: 0.30.9(patch_hash=cegrec33e6f7d6ltk7vff5r7w4)(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.8.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0) + specifier: 0.36.1 + version: 0.36.1(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0) exponential-backoff: specifier: ^3.1.1 version: 3.1.1 @@ -1528,32 +1525,32 @@ importers: specifier: ~9.4.3 version: 9.4.5 drizzle-kit: - specifier: 0.20.17 - version: 0.20.17 + specifier: 0.28.0 + version: 0.28.0 typescript: specifier: 5.4.5 version: 5.4.5 vitest: specifier: ^1.4.0 - version: 1.5.0(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1) + version: 1.5.0(@types/node@20.17.6)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0) packages/ui: dependencies: '@10play/tentap-editor': specifier: 0.5.21 - version: 0.5.21(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 0.5.21(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@emoji-mart/data': specifier: ^1.1.2 version: 1.1.2 '@likashefqet/react-native-image-zoom': specifier: ^3.0.0 - version: 3.0.0(patch_hash=zkdmh374s554i7qlaqtqn2nhfm)(react-native-gesture-handler@2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 3.0.0(patch_hash=zkdmh374s554i7qlaqtqn2nhfm)(react-native-gesture-handler@2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@react-native-clipboard/clipboard': specifier: ^1.14.0 - version: 1.14.0(react-native-macos@0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 1.14.0(react-native-macos@0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/animations-moti': specifier: ~1.112.12 - version: 1.112.12(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))(react@18.2.0) + version: 1.112.12(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))(react@18.2.0) '@tamagui/get-token': specifier: ~1.112.12 version: 1.112.12(react@18.2.0) @@ -1580,16 +1577,16 @@ importers: version: 2.0.3 expo-blur: specifier: ^12.9.2 - version: 12.9.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)) + version: 12.9.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) expo-haptics: specifier: ^12.8.1 - version: 12.8.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)) + version: 12.8.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) expo-image: specifier: '*' - version: 1.10.6(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)) + version: 1.10.6(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) expo-image-picker: specifier: ~14.7.1 - version: 14.7.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)) + version: 14.7.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) fuse.js: specifier: ^7.0.0 version: 7.0.0 @@ -1601,7 +1598,7 @@ importers: version: 4.17.21 moti: specifier: ^0.28.1 - version: 0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0) + version: 0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0) react: specifier: '*' version: 18.2.0 @@ -1610,25 +1607,25 @@ importers: version: 7.52.0(react@18.2.0) react-native-context-menu-view: specifier: ^1.15.0 - version: 1.15.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 1.15.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-gesture-handler: specifier: ~2.16.2 - version: 2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-reanimated: specifier: '*' - version: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-safe-area-context: specifier: ^4.9.0 - version: 4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-svg: specifier: ^15.0.0 - version: 15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-tweet: specifier: ^3.0.4 version: 3.1.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) tamagui: specifier: ~1.112.12 - version: 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + version: 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) urbit-ob: specifier: ^5.0.1 version: 5.0.1 @@ -2020,29 +2017,33 @@ packages: resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} engines: {node: '>=18.0.0'} - '@azure/core-auth@1.7.2': - resolution: {integrity: sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==} + '@azure/core-auth@1.9.0': + resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} engines: {node: '>=18.0.0'} '@azure/core-rest-pipeline@1.10.1': resolution: {integrity: sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==} engines: {node: '>=14.0.0'} - '@azure/core-tracing@1.1.2': - resolution: {integrity: sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==} + '@azure/core-tracing@1.2.0': + resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} + engines: {node: '>=18.0.0'} + + '@azure/core-util@1.11.0': + resolution: {integrity: sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==} engines: {node: '>=18.0.0'} '@azure/core-util@1.2.0': resolution: {integrity: sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==} engines: {node: '>=14.0.0'} - '@azure/logger@1.1.2': - resolution: {integrity: sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg==} + '@azure/logger@1.1.4': + resolution: {integrity: sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==} engines: {node: '>=18.0.0'} - '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0-beta.5': - resolution: {integrity: sha512-fsUarKQDvjhmBO4nIfaZkfNSApm1hZBzcvpNbSrXdcUBxu7lRvKsV5DnwszX7cnhLyVOW9yl1uigtRQ1yDANjA==} - engines: {node: '>=14.0.0'} + '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0-beta.7': + resolution: {integrity: sha512-boG33EDRcbw0Jo2cRgB6bccSirKOzYdYFMdcSsnOajLCLfJ8WIve3vxUMi7YZKxM8txZX/0cwzUU6crXmYxXZg==} + engines: {node: '>=18.0.0'} '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -2055,6 +2056,10 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.23.5': resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} @@ -2063,6 +2068,10 @@ packages: resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.23.7': resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} engines: {node: '>=6.9.0'} @@ -2083,6 +2092,10 @@ packages: resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -2091,10 +2104,18 @@ packages: resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': + resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} + engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.23.6': resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} @@ -2103,18 +2124,34 @@ packages: resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.23.10': resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.22.15': resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.25.9': + resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-define-polyfill-provider@0.4.4': resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: @@ -2125,6 +2162,11 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-define-polyfill-provider@0.6.2': + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-environment-visitor@7.22.20': resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -2141,6 +2183,10 @@ packages: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.22.15': resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} @@ -2149,6 +2195,10 @@ packages: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} @@ -2161,10 +2211,20 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.22.5': resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} @@ -2173,18 +2233,34 @@ packages: resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.22.20': resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.22.20': resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-simple-access@7.22.5': resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} @@ -2193,10 +2269,18 @@ packages: resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.25.9': + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} + engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.22.6': resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} @@ -2225,10 +2309,18 @@ packages: resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.22.20': resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + '@babel/helpers@7.23.8': resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} @@ -2260,24 +2352,59 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3': resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3': resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7': resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-proposal-async-generator-functions@7.20.7': resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} @@ -2407,12 +2534,24 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.23.3': resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -2495,90 +2634,186 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-generator-functions@7.23.9': resolution: {integrity: sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.23.3': resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoped-functions@7.23.3': resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoped-functions@7.25.9': + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoping@7.23.4': resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.23.3': resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-static-block@7.23.4': resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + '@babel/plugin-transform-classes@7.23.8': resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.23.3': resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.23.3': resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dotall-regex@7.23.3': resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-keys@7.23.3': resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-dynamic-import@7.23.4': resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.23.3': resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.25.9': + resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-export-namespace-from@7.23.4': resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-flow-strip-types@7.23.3': resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} engines: {node: '>=6.9.0'} @@ -2591,132 +2826,264 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-function-name@7.23.3': resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-json-strings@7.23.4': resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-literals@7.23.3': resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-logical-assignment-operators@7.23.4': resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-member-expression-literals@7.23.3': resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-amd@7.23.3': resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.23.3': resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.25.9': + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.23.9': resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-umd@7.23.3': resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/plugin-transform-new-target@7.23.3': resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-nullish-coalescing-operator@7.23.4': resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-numeric-separator@7.23.4': resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-rest-spread@7.23.4': resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-super@7.23.3': resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-catch-binding@7.23.4': resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.23.4': resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.23.3': resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.23.3': resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-property-in-object@7.23.4': resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-property-literals@7.23.3': resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-display-name@7.23.3': resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} engines: {node: '>=6.9.0'} @@ -2765,12 +3132,30 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.23.3': + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.23.3': resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-runtime@7.23.9': resolution: {integrity: sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==} engines: {node: '>=6.9.0'} @@ -2783,30 +3168,60 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.23.3': resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-sticky-regex@7.23.3': resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-template-literals@7.23.3': resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typeof-symbol@7.23.3': resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typeof-symbol@7.25.9': + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typescript@7.23.6': resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} @@ -2819,30 +3234,60 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-property-regex@7.23.3': resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-regex@7.23.3': resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-sets-regex@7.23.3': resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/preset-env@7.23.7': resolution: {integrity: sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/preset-env@7.26.0': + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/preset-flow@7.23.3': resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} engines: {node: '>=6.9.0'} @@ -2883,10 +3328,18 @@ packages: resolution: {integrity: sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==} engines: {node: '>=6.9.0'} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.25.0': resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.23.2': resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} @@ -2899,6 +3352,10 @@ packages: resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + engines: {node: '>=6.9.0'} + '@babel/types@7.17.0': resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} @@ -2911,6 +3368,10 @@ packages: resolution: {integrity: sha512-OwS2CM5KocvQ/k7dFJa8i5bNGJP0hXWfVCfDkqRFP1IreH1JDC7wG6eCYCi0+McbfT8OR/kNqsI0UU0xP9H6PQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2932,6 +3393,9 @@ packages: '@tanstack/react-query': '*' expo: '*' + '@drizzle-team/brocli@0.10.2': + resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} + '@egjs/hammerjs@2.0.17': resolution: {integrity: sha512-XQsZgjm2EcVUiZQf11UBJQfmZeEmOW8DpI1gsFeln6w0ae0ii4dMQEQ0kjl6DspdWX1aGY1/loyXnP0JS06e/A==} engines: {node: '>=0.8.0'} @@ -3761,16 +4225,6 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@hono/node-server@1.11.0': - resolution: {integrity: sha512-TLIJq9TMtD1NEG1mVoqNUn1Ita0qSaB5XboZErjFBcO/GJYXwWY4dVdTi9G0lbxtu0x+hJXDItcLaFHb7rlFTw==} - engines: {node: '>=18.14.1'} - - '@hono/zod-validator@0.2.1': - resolution: {integrity: sha512-HFoxln7Q6JsE64qz2WBS28SD33UB2alp3aRKmcWnNLDzEL1BLsWfbdX6e1HIiUprHYTIXf5y7ax8eYidKUwyaA==} - peerDependencies: - hono: '>=3.9.0' - zod: ^3.19.1 - '@humanwhocodes/config-array@0.11.13': resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} @@ -3913,6 +4367,9 @@ packages: '@jridgewell/source-map@0.3.5': resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -3931,8 +4388,8 @@ packages: react-native-gesture-handler: '>=2.x.x' react-native-reanimated: '>=2.x.x' - '@microsoft/applicationinsights-web-snippet@1.1.2': - resolution: {integrity: sha512-qPoOk3MmEx3gS6hTc1/x8JWQG5g4BvRdH7iqZMENBsKCL927b7D7Mvl19bh3sW9Ucrg1fVrF+4hqShwQNdqLxQ==} + '@microsoft/applicationinsights-web-snippet@1.2.1': + resolution: {integrity: sha512-+Cy9zFqdQgdAbMK1dpm7B+3DUnrByai0Tq6XG9v737HJpW6G1EiNNbTuFeXdPWyGaq6FIx9jxm/SUcxA6/Rxxg==} '@microsoft/fetch-event-source@2.0.1': resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==} @@ -3992,36 +4449,40 @@ packages: '@open-draft/until@1.0.3': resolution: {integrity: sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q==} - '@opentelemetry/api@1.8.0': - resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} + '@opentelemetry/api-logs@0.53.0': + resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/core@1.23.0': - resolution: {integrity: sha512-hdQ/a9TMzMQF/BO8Cz1juA43/L5YGtCSiKoOHmrTEf7VMDAZgy8ucpWx3eQTnQ3gBloRcWtzvcrMZABC3PTSKQ==} + '@opentelemetry/core@1.27.0': + resolution: {integrity: sha512-yQPKnK5e+76XuiqUH/gKyS8wv/7qITd5ln56QkBTf3uggr0VkXOXfcaAuG330UfdYu83wsyoBwqwxigpIG+Jkg==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/instrumentation@0.41.2': - resolution: {integrity: sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==} + '@opentelemetry/instrumentation@0.53.0': + resolution: {integrity: sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 - '@opentelemetry/resources@1.23.0': - resolution: {integrity: sha512-iPRLfVfcEQynYGo7e4Di+ti+YQTAY0h5mQEUJcHlU9JOqpb4x965O6PZ+wMcwYVY63G96KtdS86YCM1BF1vQZg==} + '@opentelemetry/resources@1.27.0': + resolution: {integrity: sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/sdk-trace-base@1.23.0': - resolution: {integrity: sha512-PzBmZM8hBomUqvCddF/5Olyyviayka44O5nDWq673np3ctnvwMOvNrsUORZjKja1zJbwEuD9niAGbnVrz3jwRQ==} + '@opentelemetry/sdk-trace-base@1.27.0': + resolution: {integrity: sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ==} engines: {node: '>=14'} peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.9.0' + '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.23.0': - resolution: {integrity: sha512-MiqFvfOzfR31t8cc74CTP1OZfz7MbqpAnLCra8NqQoaHJX6ncIRTdYOQYBDQ2uFISDq0WY8Y9dDTWvsgzzBYRg==} + '@opentelemetry/semantic-conventions@1.27.0': + resolution: {integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==} engines: {node: '>=14'} '@pkgjs/parseargs@0.11.0': @@ -5796,17 +6257,17 @@ packages: '@tanstack/query-core@5.32.1': resolution: {integrity: sha512-mCWa1wdGb1jiny4+qYegbSeadcFj+Nq65KFSs4A1DRveoIq7SrTwUhqu7hrB6d54cQH5x59DfJvxusn3w1Cj/g==} - '@tanstack/query-core@5.59.17': - resolution: {integrity: sha512-jWdDiif8kaqnRGHNXAa9CnudtxY5v9DUxXhodgqX2Rwzj+1UwStDHEbBd9IA5C7VYAaJ2s+BxFR6PUBs8ERorA==} + '@tanstack/query-core@5.59.20': + resolution: {integrity: sha512-e8vw0lf7KwfGe1if4uPFhvZRWULqHjFcz3K8AebtieXvnMOz5FSzlZe3mTLlPuUBcydCnBRqYs2YJ5ys68wwLg==} - '@tanstack/query-devtools@5.59.19': - resolution: {integrity: sha512-Gw+3zsADpqiYgx/6MMr9bP1+x2LR8vOuGjo5Un/89qwwP3z7WAHPWFagLFDYkLq68NX7ekUpW/EOYlUMugMXGA==} + '@tanstack/query-devtools@5.59.20': + resolution: {integrity: sha512-vxhuQ+8VV4YWQSFxQLsuM+dnEKRY7VeRzpNabFXdhEwsBYLrjXlF1pM38A8WyKNLqZy8JjyRO8oP4Wd/oKHwuQ==} '@tanstack/query-persist-client-core@4.27.0': resolution: {integrity: sha512-A+dPA7zG0MJOMDeBc/2WcKXW4wV2JMkeBVydobPW9G02M4q0yAj7vI+7SmM2dFuXyIvxXp4KulCywN6abRKDSQ==} - '@tanstack/query-persist-client-core@5.59.17': - resolution: {integrity: sha512-2buT5Un3fxsdYmfdRvNS62i7z0oDkTsaydAcDhmekl3jeiU/hK+X4OhV8i+jnvjEb9u+0i3aUWm9kvzlh77TXQ==} + '@tanstack/query-persist-client-core@5.59.20': + resolution: {integrity: sha512-RUaDys2zyhCw8MGcp0tirbpp8IjU7zrtdMaEYQ6WetrNvn/IOg9Y2Zpk55P7gjBq8fEyFlmuRM3cHVNn/Usg8w==} '@tanstack/react-query-devtools@4.29.0': resolution: {integrity: sha512-bzotqin4Wa/GlPgJ2dI7eggQcbMDLIOwEClHGrkyie76DbT8vEEmEV9Kbh6kriKVSqCLpa9ZrgG/f8/Bx1zIwA==} @@ -5815,10 +6276,10 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@tanstack/react-query-devtools@5.59.19': - resolution: {integrity: sha512-mYFWTHLtJr2HdyYPZPzzvQ2ksCsSL6L04fCtusPFD3waskXrtmvWvyuDIGeEGdVAYS0Urwxw/0sYvcTVQZH+zQ==} + '@tanstack/react-query-devtools@5.59.20': + resolution: {integrity: sha512-AL/eQS1NFZhwwzq2Bq9Gd8wTTH+XhPNOJlDFpzPMu9NC5CQVgA0J8lWrte/sXpdWNo5KA4hgHnEdImZsF4h6Lw==} peerDependencies: - '@tanstack/react-query': ^5.59.19 + '@tanstack/react-query': ^5.59.20 react: ^18 || ^19 '@tanstack/react-query-persist-client@4.28.0': @@ -5826,10 +6287,10 @@ packages: peerDependencies: '@tanstack/react-query': 4.28.0 - '@tanstack/react-query-persist-client@5.59.19': - resolution: {integrity: sha512-rUq/ITDyW5tulkfczfBaB562+tk0Cfz8VS6GQWTLBBvk6P8Fdg/+R+27YeMnnYVYId99NPI14SCbnsFS9YOnDQ==} + '@tanstack/react-query-persist-client@5.59.20': + resolution: {integrity: sha512-7dV9wGs9f8IvGysfmsmLcQztHjULOMB30HmERo8yjwVHRKhoQvdtKTvQ9aX2lSP5zzP1Qd1/IHF2hBB11Q/rwA==} peerDependencies: - '@tanstack/react-query': ^5.59.19 + '@tanstack/react-query': ^5.59.20 react: ^18 || ^19 '@tanstack/react-query@4.36.1': @@ -6205,6 +6666,9 @@ packages: '@types/node@20.14.10': resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + '@types/node@20.17.6': + resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -6272,8 +6736,8 @@ packages: '@types/set-cookie-parser@2.4.2': resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} - '@types/shimmer@1.0.5': - resolution: {integrity: sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==} + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} '@types/stack-utils@2.0.1': resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} @@ -6569,8 +7033,8 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - acorn-import-assertions@1.9.0: - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: acorn: ^8 @@ -6588,6 +7052,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -6609,6 +7078,9 @@ packages: ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + anser@1.4.10: resolution: {integrity: sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==} @@ -6678,6 +7150,10 @@ packages: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + appdirsjs@1.2.7: resolution: {integrity: sha512-Quji6+8kLBC3NnBeo14nPDq0+2jUs5s3/xEye+udFHumHhRk4M7aAMXp/PBJqkKYGuuyR9M/6Dq7d2AViiGmhw==} @@ -6803,8 +7279,8 @@ packages: resolution: {integrity: sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==} engines: {node: <=0.11.8 || >0.11.10} - async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -6872,11 +7348,21 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} + babel-plugin-polyfill-corejs2@0.4.11: + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.8: resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.8.7: resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: @@ -6892,6 +7378,11 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.6.2: + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-react-native-web@0.18.12: resolution: {integrity: sha512-4djr9G6fMdwQoD6LQ7hOKAm39+y12flWgovAqS1k5O8f42YQ3A1FFMyV5kKfetZuGhZO5BmNmOdRRZQ1TixtDw==} @@ -6999,6 +7490,10 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + browser-cookies@1.2.0: resolution: {integrity: sha512-cg2WuoOJo+F+g2XjEaP8nmeRp1vDHjt7sqpKJMsTNXKrpyIBNVslYJeehvs6FEddj8usV2+qyRSBEX244yN5/g==} @@ -7021,6 +7516,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -7111,10 +7611,6 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - camelize@1.0.1: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} @@ -7124,6 +7620,9 @@ packages: caniuse-lite@1.0.30001650: resolution: {integrity: sha512-fgEc7hP/LB7iicdXHUI9VsBsMZmUmlVJeQP2qqQW+3lkqVhbmjEU8zp+h5stWeilX+G7uXuIUIIlWlDw9jdt8g==} + caniuse-lite@1.0.30001678: + resolution: {integrity: sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw==} + chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} @@ -7215,6 +7714,9 @@ packages: cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} + classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -7242,6 +7744,10 @@ packages: resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} engines: {node: '>=6'} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -7380,6 +7886,10 @@ packages: resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} engines: {node: '>= 0.8.0'} + compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} + engines: {node: '>= 0.8.0'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -7427,6 +7937,9 @@ packages: core-js-compat@3.35.1: resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} + core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} + core-js@2.6.12: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. @@ -7478,6 +7991,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.5: + resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + engines: {node: '>= 8'} + crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} @@ -7615,6 +8132,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} engines: {node: '>=0.10.0'} @@ -7831,25 +8357,28 @@ packages: resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} engines: {node: '>=0.4.0'} - drizzle-kit@0.20.17: - resolution: {integrity: sha512-mLVDS4nXmO09wFVlzGrdshWnAL+U9eQGC5zRs6hTN6Q9arwQGWU2XnZ17I8BM8Quau8CQRx3Ms6VPgRWJFVp7Q==} - hasBin: true - drizzle-kit@0.21.1: resolution: {integrity: sha512-Sp7OnCdROiE2ebMuHsAfrnRoHVGYCvErQxUh7/0l6R1caHssZu9oZu/hW9rLU19xnTK4/y3iSe3sL0Cc530wCg==} hasBin: true - drizzle-orm@0.30.9: - resolution: {integrity: sha512-VOiCFsexErmgqvNCOmbzmqDCZzZsHoz6SkWAjTFxsTr1AllKDbDJ2+GgedLXsXMDgpg/ljDG1zItIFeZtiO2LA==} + drizzle-kit@0.28.0: + resolution: {integrity: sha512-KqI+CS2Ga9GYIrXpxpCDUJJrH/AT/k4UY0Pb4oRgQEGkgN1EdCnqp664cXgwPWjDr5RBtTsjZipw8+8C//K63A==} + hasBin: true + + drizzle-orm@0.36.1: + resolution: {integrity: sha512-F4hbimnMEhyWzDowQB4xEuVJJWXLHZYD7FYwvo8RImY+N7pStGqsbfmT95jDbec1s4qKmQbiuxEDZY90LRrfIw==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' - '@electric-sql/pglite': '>=0.1.1' - '@libsql/client': '*' + '@electric-sql/pglite': '>=0.2.0' + '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' '@neondatabase/serverless': '>=0.1' '@op-engineering/op-sqlite': '>=2' '@opentelemetry/api': ^1.4.1 '@planetscale/database': '>=1' + '@prisma/client': '*' + '@tidbcloud/serverless': '*' '@types/better-sqlite3': '*' '@types/pg': '*' '@types/react': '>=18' @@ -7864,6 +8393,7 @@ packages: mysql2: '>=2' pg: '>=8' postgres: '>=3' + prisma: '*' react: '>=18' sql.js: '>=1' sqlite3: '>=5' @@ -7876,6 +8406,8 @@ packages: optional: true '@libsql/client': optional: true + '@libsql/client-wasm': + optional: true '@neondatabase/serverless': optional: true '@op-engineering/op-sqlite': @@ -7884,6 +8416,10 @@ packages: optional: true '@planetscale/database': optional: true + '@prisma/client': + optional: true + '@tidbcloud/serverless': + optional: true '@types/better-sqlite3': optional: true '@types/pg': @@ -7912,6 +8448,8 @@ packages: optional: true postgres: optional: true + prisma: + optional: true react: optional: true sql.js: @@ -7939,6 +8477,9 @@ packages: electron-to-chromium@1.5.5: resolution: {integrity: sha512-QR7/A7ZkMS8tZuoftC/jfqNkZLQO779SSW3YuZHP4eXpj3EffGLFcB/Xu9AAZQzLccTiCV+EmUo3ha4mQ9wnlA==} + electron-to-chromium@1.5.52: + resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==} + emitter-listener@1.1.2: resolution: {integrity: sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==} @@ -7962,6 +8503,10 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} @@ -7989,6 +8534,11 @@ packages: engines: {node: '>=4'} hasBin: true + envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + eol@0.9.1: resolution: {integrity: sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==} @@ -8106,6 +8656,10 @@ packages: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -8485,6 +9039,9 @@ packages: fast-loops@1.1.3: resolution: {integrity: sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g==} + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fast-xml-parser@4.0.11: resolution: {integrity: sha512-4aUg3aNRR/WjQAcpceODG1C3x3lFANXRo8+1biqfieHmg9pyMt7qB4lQV/Ta6sJCTbA5vfD8fnA8S54JATiFUA==} hasBin: true @@ -8493,6 +9050,10 @@ packages: resolution: {integrity: sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==} hasBin: true + fast-xml-parser@4.5.0: + resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==} + hasBin: true + fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} @@ -8536,6 +9097,10 @@ packages: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + filter-obj@1.1.0: resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==} engines: {node: '>=0.10.0'} @@ -8635,6 +9200,10 @@ packages: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -8857,6 +9426,9 @@ packages: 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==} + graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} @@ -8980,10 +9552,6 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - hono@4.2.5: - resolution: {integrity: sha512-uonJD3i/yy005kQ7bPZRVfG3rejYJwyPqBmPoUGijS4UB/qM+YlrZ7xzSWy+ByDu9buGHUG+f+SKzz03Y6V1Kw==} - engines: {node: '>=16.0.0'} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -9090,8 +9658,8 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - import-in-the-middle@1.4.2: - resolution: {integrity: sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==} + import-in-the-middle@1.11.2: + resolution: {integrity: sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA==} import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} @@ -9492,8 +10060,8 @@ packages: resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} engines: {node: '>=14'} - jake@10.8.5: - resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} hasBin: true @@ -9668,6 +10236,9 @@ packages: joi@17.12.1: resolution: {integrity: sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==} + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + join-component@1.1.0: resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} @@ -9735,6 +10306,11 @@ packages: engines: {node: '>=4'} hasBin: true + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + json-diff@0.9.0: resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} hasBin: true @@ -10129,59 +10705,117 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + metro-babel-transformer@0.80.12: + resolution: {integrity: sha512-YZziRs0MgA3pzCkkvOoQRXjIoVjvrpi/yRlJnObyIvMP6lFdtyG4nUGIwGY9VXnBvxmXD6mPY2e+NSw6JAyiRg==} + engines: {node: '>=18'} + metro-babel-transformer@0.80.5: resolution: {integrity: sha512-sxH6hcWCorhTbk4kaShCWsadzu99WBL4Nvq4m/sDTbp32//iGuxtAnUK+ZV+6IEygr2u9Z0/4XoZ8Sbcl71MpA==} engines: {node: '>=18'} + metro-cache-key@0.80.12: + resolution: {integrity: sha512-o4BspKnugg/pE45ei0LGHVuBJXwRgruW7oSFAeSZvBKA/sGr0UhOGY3uycOgWInnS3v5yTTfiBA9lHlNRhsvGA==} + engines: {node: '>=18'} + metro-cache-key@0.80.5: resolution: {integrity: sha512-fr3QLZUarsB3tRbVcmr34kCBsTHk0Sh9JXGvBY/w3b2lbre+Lq5gtgLyFElHPecGF7o4z1eK9r3ubxtScHWcbA==} engines: {node: '>=18'} + metro-cache@0.80.12: + resolution: {integrity: sha512-p5kNHh2KJ0pbQI/H7ZBPCEwkyNcSz7OUkslzsiIWBMPQGFJ/xArMwkV7I+GJcWh+b4m6zbLxE5fk6fqbVK1xGA==} + engines: {node: '>=18'} + metro-cache@0.80.5: resolution: {integrity: sha512-2u+dQ4PZwmC7eZo9uMBNhQQMig9f+w4QWBZwXCdVy/RYOHM0eObgGdMEOwODo73uxie82T9lWzxr3aZOZ+Nqtw==} engines: {node: '>=18'} + metro-config@0.80.12: + resolution: {integrity: sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ==} + engines: {node: '>=18'} + metro-config@0.80.5: resolution: {integrity: sha512-elqo/lwvF+VjZ1OPyvmW/9hSiGlmcqu+rQvDKw5F5WMX48ZC+ySTD1WcaD7e97pkgAlJHVYqZ98FCjRAYOAFRQ==} engines: {node: '>=18'} + metro-core@0.80.12: + resolution: {integrity: sha512-QqdJ/yAK+IpPs2HU/h5v2pKEdANBagSsc6DRSjnwSyJsCoHlmyJKCaCJ7KhWGx+N4OHxh37hoA8fc2CuZbx0Fw==} + engines: {node: '>=18'} + metro-core@0.80.5: resolution: {integrity: sha512-vkLuaBhnZxTVpaZO8ZJVEHzjaqSXpOdpAiztSZ+NDaYM6jEFgle3/XIbLW91jTSf2+T8Pj5yB1G7KuOX+BcVwg==} engines: {node: '>=18'} + metro-file-map@0.80.12: + resolution: {integrity: sha512-sYdemWSlk66bWzW2wp79kcPMzwuG32x1ZF3otI0QZTmrnTaaTiGyhE66P1z6KR4n2Eu5QXiABa6EWbAQv0r8bw==} + engines: {node: '>=18'} + metro-file-map@0.80.5: resolution: {integrity: sha512-bKCvJ05drjq6QhQxnDUt3I8x7bTcHo3IIKVobEr14BK++nmxFGn/BmFLRzVBlghM6an3gqwpNEYxS5qNc+VKcg==} engines: {node: '>=18'} + metro-minify-terser@0.80.12: + resolution: {integrity: sha512-muWzUw3y5k+9083ZoX9VaJLWEV2Jcgi+Oan0Mmb/fBNMPqP9xVDuy4pOMn/HOiGndgfh/MK7s4bsjkyLJKMnXQ==} + engines: {node: '>=18'} + metro-minify-terser@0.80.5: resolution: {integrity: sha512-S7oZLLcab6YXUT6jYFX/ZDMN7Fq6xBGGAG8liMFU1UljX6cTcEC2u+UIafYgCLrdVexp/+ClxrIetVPZ5LtL/g==} engines: {node: '>=18'} + metro-resolver@0.80.12: + resolution: {integrity: sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw==} + engines: {node: '>=18'} + metro-resolver@0.80.5: resolution: {integrity: sha512-haJ/Hveio3zv/Fr4eXVdKzjUeHHDogYok7OpRqPSXGhTXisNXB+sLN7CpcUrCddFRUDLnVaqQOYwhYsFndgUwA==} engines: {node: '>=18'} + metro-runtime@0.80.12: + resolution: {integrity: sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw==} + engines: {node: '>=18'} + metro-runtime@0.80.5: resolution: {integrity: sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg==} engines: {node: '>=18'} + metro-source-map@0.80.12: + resolution: {integrity: sha512-o+AXmE7hpvM8r8MKsx7TI21/eerYYy2DCDkWfoBkv+jNkl61khvDHlQn0cXZa6lrcNZiZkl9oHSMcwLLIrFmpw==} + engines: {node: '>=18'} + metro-source-map@0.80.5: resolution: {integrity: sha512-DwSF4l03mKPNqCtyQ6K23I43qzU1BViAXnuH81eYWdHglP+sDlPpY+/7rUahXEo6qXEHXfAJgVoo1sirbXbmsQ==} engines: {node: '>=18'} + metro-symbolicate@0.80.12: + resolution: {integrity: sha512-/dIpNdHksXkGHZXARZpL7doUzHqSNxgQ8+kQGxwpJuHnDhGkENxB5PS2QBaTDdEcmyTMjS53CN1rl9n1gR6fmw==} + engines: {node: '>=18'} + hasBin: true + metro-symbolicate@0.80.5: resolution: {integrity: sha512-IsM4mTYvmo9JvIqwEkCZ5+YeDVPST78Q17ZgljfLdHLSpIivOHp9oVoiwQ/YGbLx0xRHRIS/tKiXueWBnj3UWA==} engines: {node: '>=18'} hasBin: true + metro-transform-plugins@0.80.12: + resolution: {integrity: sha512-WQWp00AcZvXuQdbjQbx1LzFR31IInlkCDYJNRs6gtEtAyhwpMMlL2KcHmdY+wjDO9RPcliZ+Xl1riOuBecVlPA==} + engines: {node: '>=18'} + metro-transform-plugins@0.80.5: resolution: {integrity: sha512-7IdlTqK/k5+qE3RvIU5QdCJUPk4tHWEqgVuYZu8exeW+s6qOJ66hGIJjXY/P7ccucqF+D4nsbAAW5unkoUdS6g==} engines: {node: '>=18'} + metro-transform-worker@0.80.12: + resolution: {integrity: sha512-KAPFN1y3eVqEbKLx1I8WOarHPqDMUa8WelWxaJCNKO/yHCP26zELeqTJvhsQup+8uwB6EYi/sp0b6TGoh6lOEA==} + engines: {node: '>=18'} + metro-transform-worker@0.80.5: resolution: {integrity: sha512-Q1oM7hfP+RBgAtzRFBDjPhArELUJF8iRCZ8OidqCpYzQJVGuJZ7InSnIf3hn1JyqiUQwv2f1LXBO78i2rAjzyA==} engines: {node: '>=18'} + metro@0.80.12: + resolution: {integrity: sha512-1UsH5FzJd9quUsD1qY+zUG4JY3jo3YEMxbMYH9jT6NK3j4iORhlwTK8fYTfAUBhDKjgLfKjAh7aoazNE23oIRA==} + engines: {node: '>=18'} + hasBin: true + metro@0.80.5: resolution: {integrity: sha512-OE/CGbOgbi8BlTN1QqJgKOBaC27dS0JBQw473JcivrpgVnqIsluROA7AavEaTVUrB9wPUZvoNVDROn5uiM2jfw==} engines: {node: '>=18'} @@ -10191,6 +10825,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -10236,10 +10874,6 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} - minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} @@ -10372,6 +11006,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -10423,6 +11061,15 @@ packages: encoding: optional: true + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + node-forge@1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} @@ -10479,6 +11126,10 @@ packages: nwsapi@2.2.12: resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + ob1@0.80.12: + resolution: {integrity: sha512-VMArClVT6LkhUGpnuEoBuyjG9rzUyEzg4PDkav6wK1cLhOK02gPCYFxoiB4mqVnrMhDpIzJcrGNAMVi9P+hXrw==} + engines: {node: '>=18'} + ob1@0.80.5: resolution: {integrity: sha512-zYDMnnNrFi/1Tqh0vo3PE4p97Tpl9/4MP2k2ECvkbLOZzQuAYZJLTUYVLZb7hJhbhjT+JJxAwBGS8iu5hCSd1w==} engines: {node: '>=18'} @@ -10494,6 +11145,10 @@ packages: object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} @@ -10765,6 +11420,9 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -11141,6 +11799,9 @@ packages: pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} @@ -11501,6 +12162,10 @@ packages: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} + react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.3: resolution: {integrity: sha512-i9GMNWwpz8XpUpQ6QlevUtFjHGqnPG4Hxs+wlIJntu/xcsZVEpJcIV71K3ZkqNy2q3GfgvkD7y6t/Sv8ofYSbw==} engines: {node: '>=10'} @@ -11645,6 +12310,10 @@ packages: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} @@ -11671,10 +12340,25 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} + regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.11.2: + resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} + hasBin: true + regjsparser@0.9.1: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true @@ -11693,8 +12377,8 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-in-the-middle@7.3.0: - resolution: {integrity: sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==} + require-in-the-middle@7.4.0: + resolution: {integrity: sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==} engines: {node: '>=8.6.0'} require-main-filename@2.0.0: @@ -11807,8 +12491,8 @@ packages: rollup: optional: true - rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + rollup@2.79.2: + resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} engines: {node: '>=10.0.0'} hasBin: true @@ -11913,10 +12597,19 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + serialize-error@2.1.0: resolution: {integrity: sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==} engines: {node: '>=0.10.0'} @@ -11928,6 +12621,10 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -11946,6 +12643,10 @@ packages: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + set-value@4.1.0: resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} engines: {node: '>=11.0'} @@ -11994,6 +12695,10 @@ packages: side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -12228,6 +12933,10 @@ packages: string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} @@ -12359,10 +13068,6 @@ packages: resolution: {integrity: sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg==} engines: {node: '>=10'} - superjson@2.2.1: - resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} - engines: {node: '>=16'} - superstruct@0.6.2: resolution: {integrity: sha512-lvA97MFAJng3rfjcafT/zGTSWm6Tbpk++DP6It4Qg7oNaeM+2tdJMuVgGje21/bIpBEs6iQql1PJH6dKTjl4Ig==} @@ -12499,6 +13204,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -12639,6 +13349,9 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsup@8.0.1: resolution: {integrity: sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==} engines: {node: '>=18'} @@ -12773,6 +13486,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -12785,6 +13501,10 @@ packages: resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} engines: {node: '>=4'} + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + unicode-property-aliases-ecmascript@2.1.0: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} @@ -12845,6 +13565,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + urbit-ob@5.0.1: resolution: {integrity: sha512-qGNAwu87XNkW3g8ah4fUwmh2EKXtsdhEbyEiE5qX4Op17rhLH3HSkvu8g9z+MhqX51Uz9sf8ktvqJj/IRwETIQ==} @@ -13359,6 +14085,29 @@ packages: utf-8-validate: optional: true + ws@6.2.3: + resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -13462,6 +14211,11 @@ packages: engines: {node: '>= 14'} hasBin: true + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} + engines: {node: '>= 14'} + hasBin: true + yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -13508,7 +14262,7 @@ packages: snapshots: - '@10play/tentap-editor@0.5.21(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@10play/tentap-editor@0.5.21(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tiptap/extension-blockquote': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) '@tiptap/extension-bold': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) @@ -13540,8 +14294,8 @@ snapshots: lodash: 4.17.21 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-native: 0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0) - react-native-webview: 13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native: 0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0) + react-native-webview: 13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) transitivePeerDependencies: - '@tiptap/core' @@ -13582,20 +14336,57 @@ snapshots: transitivePeerDependencies: - '@tiptap/core' - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@adobe/css-tools@4.0.1': {} - - '@alloc/quick-lru@5.2.0': {} - - '@ampproject/remapping@2.2.0': - dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.25 - - '@apideck/better-ajv-errors@0.3.6(ajv@8.12.0)': + '@10play/tentap-editor@0.5.21(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: - ajv: 8.12.0 + '@tiptap/extension-blockquote': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-bold': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-bullet-list': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-code': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-code-block': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6) + '@tiptap/extension-color': 2.3.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/extension-text-style@2.3.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))) + '@tiptap/extension-document': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-dropcursor': 2.3.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6) + '@tiptap/extension-hard-break': 2.6.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-heading': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-highlight': 2.3.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-history': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6) + '@tiptap/extension-horizontal-rule': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6) + '@tiptap/extension-image': 2.3.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-italic': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-link': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6) + '@tiptap/extension-list-item': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-ordered-list': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-placeholder': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6) + '@tiptap/extension-strike': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-task-item': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6) + '@tiptap/extension-task-list': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-text-style': 2.3.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/extension-underline': 2.3.0(@tiptap/core@2.6.6(@tiptap/pm@2.6.6)) + '@tiptap/pm': 2.6.6 + '@tiptap/react': 2.6.6(@tiptap/core@2.6.6(@tiptap/pm@2.6.6))(@tiptap/pm@2.6.6)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@tiptap/starter-kit': 2.3.0(@tiptap/pm@2.6.6) + lodash: 4.17.21 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-webview: 13.6.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + transitivePeerDependencies: + - '@tiptap/core' + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@adobe/css-tools@4.0.1': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.2.0': + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.25 + + '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)': + dependencies: + ajv: 8.17.1 json-schema: 0.4.0 jsonpointer: 5.0.1 leven: 3.1.0 @@ -14281,54 +15072,59 @@ snapshots: '@azure/abort-controller@1.1.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 '@azure/abort-controller@2.1.2': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 - '@azure/core-auth@1.7.2': + '@azure/core-auth@1.9.0': dependencies: '@azure/abort-controller': 2.1.2 - '@azure/core-util': 1.2.0 - tslib: 2.6.2 + '@azure/core-util': 1.11.0 + tslib: 2.8.1 '@azure/core-rest-pipeline@1.10.1': dependencies: '@azure/abort-controller': 1.1.0 - '@azure/core-auth': 1.7.2 - '@azure/core-tracing': 1.1.2 - '@azure/core-util': 1.2.0 - '@azure/logger': 1.1.2 - form-data: 4.0.0 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.11.0 + '@azure/logger': 1.1.4 + form-data: 4.0.1 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 - tslib: 2.6.2 + tslib: 2.8.1 uuid: 8.3.2 transitivePeerDependencies: - supports-color - '@azure/core-tracing@1.1.2': + '@azure/core-tracing@1.2.0': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 + + '@azure/core-util@1.11.0': + dependencies: + '@azure/abort-controller': 2.1.2 + tslib: 2.8.1 '@azure/core-util@1.2.0': dependencies: '@azure/abort-controller': 1.1.0 - tslib: 2.6.2 + tslib: 2.8.1 - '@azure/logger@1.1.2': + '@azure/logger@1.1.4': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 - '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0-beta.5': + '@azure/opentelemetry-instrumentation-azure-sdk@1.0.0-beta.7': dependencies: - '@azure/core-tracing': 1.1.2 - '@azure/logger': 1.1.2 - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/instrumentation': 0.41.2(@opentelemetry/api@1.8.0) - tslib: 2.6.2 + '@azure/core-tracing': 1.2.0 + '@azure/logger': 1.1.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.53.0(@opentelemetry/api@1.9.0) + tslib: 2.8.1 transitivePeerDependencies: - supports-color @@ -14346,10 +15142,18 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.23.5': {} '@babel/compat-data@7.25.2': {} + '@babel/compat-data@7.26.2': {} + '@babel/core@7.23.7': dependencies: '@ampproject/remapping': 2.2.0 @@ -14410,6 +15214,14 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 + '@babel/generator@7.26.2': + dependencies: + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.25.6 @@ -14418,10 +15230,21 @@ snapshots: dependencies: '@babel/types': 7.25.9 + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.26.0 + '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': dependencies: '@babel/types': 7.25.6 + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-compilation-targets@7.23.6': dependencies: '@babel/compat-data': 7.23.5 @@ -14438,6 +15261,14 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.25.9': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -14464,6 +15295,32 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.23.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -14478,23 +15335,26 @@ snapshots: regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7)': + '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.4 - transitivePeerDependencies: - - supports-color + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.1.1 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.1.1 + semver: 6.3.1 '@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.4 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.4 transitivePeerDependencies: @@ -14505,7 +15365,7 @@ snapshots: '@babel/core': 7.23.7 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.4 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.4 transitivePeerDependencies: @@ -14516,12 +15376,34 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.4 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.4 transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + '@babel/helper-environment-visitor@7.22.20': {} '@babel/helper-function-name@7.23.0': @@ -14537,6 +15419,13 @@ snapshots: dependencies: '@babel/types': 7.25.6 + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-imports@7.22.15': dependencies: '@babel/types': 7.25.9 @@ -14548,6 +15437,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -14577,14 +15473,38 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-transforms@7.26.0(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.22.5': dependencies: '@babel/types': 7.25.6 + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.0 + '@babel/helper-plugin-utils@7.22.5': {} '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.9': {} + '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -14599,6 +15519,24 @@ snapshots: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-wrap-function': 7.22.20 + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -14613,6 +15551,24 @@ snapshots: '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.25.9 @@ -14624,10 +15580,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-simple-access@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: '@babel/types': 7.25.6 + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helper-split-export-declaration@7.22.6': dependencies: '@babel/types': 7.25.6 @@ -14644,12 +15614,22 @@ snapshots: '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-wrap-function@7.22.20': dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.25.0 '@babel/types': 7.25.6 + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + '@babel/helpers@7.23.8': dependencies: '@babel/template': 7.25.0 @@ -14688,22 +15668,50 @@ snapshots: dependencies: '@babel/types': 7.25.6 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7)': + '@babel/parser@7.26.2': + dependencies: + '@babel/types': 7.26.0 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.25.2)': dependencies: @@ -14712,11 +15720,23 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.25.2) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.23.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.25.2)': dependencies: @@ -14724,6 +15744,22 @@ snapshots: '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -14868,21 +15904,11 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -14913,11 +15939,6 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -14933,39 +15954,39 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2)': @@ -14988,11 +16009,6 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -15058,11 +16074,6 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -15100,22 +16111,42 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.23.7)': + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.25.2)': + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-async-generator-functions@7.23.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.25.2) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.23.7) + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.2) + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15134,16 +16165,39 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.23.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15154,11 +16208,15 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.25.2)': dependencies: @@ -15166,12 +16224,21 @@ snapshots: '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15180,6 +16247,22 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-classes@7.23.8(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15204,6 +16287,30 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.23.7) + '@babel/traverse': 7.25.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) + '@babel/traverse': 7.25.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15216,6 +16323,18 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/template': 7.25.0 + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + '@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15226,11 +16345,15 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.25.2)': dependencies: @@ -15238,21 +16361,44 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15260,11 +16406,15 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.25.2)': dependencies: @@ -15272,11 +16422,21 @@ snapshots: '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15284,6 +16444,16 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15296,17 +16466,27 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.25.2) - '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7)': + '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-for-of@7.23.6(@babel/core@7.25.2)': + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7)': dependencies: @@ -15322,11 +16502,23 @@ snapshots: '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15334,6 +16526,16 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15344,11 +16546,15 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15356,23 +16562,30 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 - transitivePeerDependencies: - - supports-color + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.25.2)': dependencies: @@ -15382,6 +16595,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15400,13 +16629,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.23.7)': + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 transitivePeerDependencies: - supports-color @@ -15420,11 +16657,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color @@ -15436,6 +16685,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15448,21 +16713,32 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-new-target@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15470,11 +16746,15 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15482,14 +16762,15 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) - '@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.23.7)': dependencies: - '@babel/compat-data': 7.23.5 '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15500,11 +16781,19 @@ snapshots: '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.25.2) - '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7) + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.23.7) + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.2) '@babel/plugin-transform-object-super@7.23.3(@babel/core@7.25.2)': dependencies: @@ -15512,11 +16801,21 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.25.2) - '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.23.7) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15524,12 +16823,15 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) - '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7)': + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.25.2)': dependencies: @@ -15538,6 +16840,22 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15548,6 +16866,16 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15560,6 +16888,22 @@ snapshots: '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15576,16 +16920,39 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) - '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color '@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15660,28 +17027,51 @@ snapshots: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.25.2)': dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 - '@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.25.2)': + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-runtime@7.23.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15716,6 +17106,16 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15728,6 +17128,22 @@ snapshots: '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + '@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15738,26 +17154,46 @@ snapshots: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15774,21 +17210,20 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.25.2) - '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.25.2)': dependencies: @@ -15796,6 +17231,18 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.23.7)': + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 @@ -15808,11 +17255,17 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7)': + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.23.7)': dependencies: '@babel/core': 7.23.7 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.25.2)': dependencies: @@ -15820,91 +17273,17 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.25.2) '@babel/helper-plugin-utils': 7.24.8 - '@babel/preset-env@7.23.7(@babel/core@7.23.7)': + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.23.7)': dependencies: - '@babel/compat-data': 7.23.5 '@babel/core': 7.23.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) - '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-async-generator-functions': 7.23.9(@babel/core@7.23.7) - '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.23.7) - '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7) - '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.23.7) - '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7) - '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7) - '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) - babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.23.7) - babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7) - babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.23.7) - core-js-compat: 3.35.1 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.23.7) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.25.9 '@babel/preset-env@7.23.7(@babel/core@7.25.2)': dependencies: @@ -15992,6 +17371,156 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/preset-env@7.26.0(@babel/core@7.23.7)': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.23.7 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.23.7) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.23.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.23.7) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.23.7) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.23.7) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.23.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.23.7) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.23.7) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.23.7) + core-js-compat: 3.39.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-env@7.26.0(@babel/core@7.25.2)': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.25.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.2) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.25.2) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.25.2) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.2) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.2) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.2) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.39.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/preset-flow@7.23.3(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 @@ -16055,12 +17584,22 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 + '@babel/runtime@7.26.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.3 '@babel/types': 7.25.6 + '@babel/template@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@babel/traverse@7.23.2': dependencies: '@babel/code-frame': 7.23.5 @@ -16083,7 +17622,7 @@ snapshots: '@babel/parser': 7.25.6 '@babel/template': 7.25.0 '@babel/types': 7.25.6 - debug: 4.3.4 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -16095,7 +17634,19 @@ snapshots: '@babel/parser': 7.25.6 '@babel/template': 7.25.0 '@babel/types': 7.25.6 - debug: 4.3.4 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.25.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -16116,6 +17667,11 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} '@dev-plugins/async-storage@0.0.3(@react-native-async-storage/async-storage@1.21.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13))': @@ -16138,6 +17694,8 @@ snapshots: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) flatted: 3.3.1 + '@drizzle-team/brocli@0.10.2': {} + '@egjs/hammerjs@2.0.17': dependencies: '@types/hammerjs': 2.0.45 @@ -16529,32 +18087,119 @@ snapshots: import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 - strip-json-comments: 3.1.1 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.56.0': {} + + '@eslint/js@8.57.0': {} + + '@essentials/memoize-one@1.1.0': {} + + '@essentials/one-key-map@1.2.0': {} + + '@essentials/raf@1.2.0': {} + + '@essentials/request-timeout@1.3.0': + dependencies: + '@essentials/raf': 1.2.0 + + '@expo/bunyan@4.0.0': + dependencies: + uuid: 8.3.2 + optionalDependencies: + mv: 2.1.1 + safe-json-stringify: 1.2.0 + + '@expo/cli@0.17.5(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)(expo-modules-autolinking@1.10.3)': + dependencies: + '@babel/runtime': 7.25.6 + '@expo/code-signing-certificates': 0.0.5 + '@expo/config': 8.5.4 + '@expo/config-plugins': 7.8.4 + '@expo/devcert': 1.1.0 + '@expo/env': 0.2.1 + '@expo/image-utils': 0.4.1(encoding@0.1.13) + '@expo/json-file': 8.3.0 + '@expo/metro-config': 0.17.4(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))) + '@expo/osascript': 2.1.0 + '@expo/package-manager': 1.4.2 + '@expo/plist': 0.1.0 + '@expo/prebuild-config': 6.7.4(encoding@0.1.13)(expo-modules-autolinking@1.10.3) + '@expo/rudder-sdk-node': 1.1.1(encoding@0.1.13) + '@expo/spawn-async': 1.5.0 + '@expo/xcpretty': 4.3.1 + '@react-native/dev-middleware': 0.73.8(encoding@0.1.13) + '@urql/core': 2.3.6(graphql@15.8.0) + '@urql/exchange-retry': 0.3.0(graphql@15.8.0) + accepts: 1.3.8 + arg: 5.0.2 + better-opn: 3.0.2 + bplist-parser: 0.3.2 + cacache: 15.3.0 + chalk: 4.1.2 + ci-info: 3.9.0 + connect: 3.7.0 + debug: 4.3.4 + env-editor: 0.4.2 + find-yarn-workspace-root: 2.0.0 + form-data: 3.0.1 + freeport-async: 2.0.0 + fs-extra: 8.1.0 + getenv: 1.0.0 + glob: 7.2.3 + graphql: 15.8.0 + graphql-tag: 2.12.6(graphql@15.8.0) + https-proxy-agent: 5.0.1 + internal-ip: 4.3.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + js-yaml: 3.14.1 + json-schema-deref-sync: 0.13.0 + lodash.debounce: 4.0.8 + md5hex: 1.0.0 + minimatch: 3.1.2 + minipass: 3.3.6 + node-fetch: 2.6.12(encoding@0.1.13) + node-forge: 1.3.1 + npm-package-arg: 7.0.0 + open: 8.4.2 + ora: 3.4.0 + picomatch: 3.0.1 + pretty-bytes: 5.6.0 + progress: 2.0.3 + prompts: 2.4.2 + qrcode-terminal: 0.11.0 + require-from-string: 2.0.2 + requireg: 0.2.2 + resolve: 1.22.4 + resolve-from: 5.0.0 + resolve.exports: 2.0.2 + semver: 7.6.0 + send: 0.18.0 + slugify: 1.6.6 + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + structured-headers: 0.4.1 + tar: 6.2.0 + temp-dir: 2.0.0 + tempy: 0.7.1 + terminal-link: 2.1.1 + text-table: 0.2.0 + url-join: 4.0.0 + wrap-ansi: 7.0.0 + ws: 8.16.0 transitivePeerDependencies: + - '@react-native/babel-preset' + - bluebird + - bufferutil + - encoding + - expo-modules-autolinking - supports-color + - utf-8-validate - '@eslint/js@8.56.0': {} - - '@eslint/js@8.57.0': {} - - '@essentials/memoize-one@1.1.0': {} - - '@essentials/one-key-map@1.2.0': {} - - '@essentials/raf@1.2.0': {} - - '@essentials/request-timeout@1.3.0': - dependencies: - '@essentials/raf': 1.2.0 - - '@expo/bunyan@4.0.0': - dependencies: - uuid: 8.3.2 - optionalDependencies: - mv: 2.1.1 - safe-json-stringify: 1.2.0 - - '@expo/cli@0.17.5(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)(expo-modules-autolinking@1.10.3)': + '@expo/cli@0.17.5(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)(expo-modules-autolinking@1.10.3)': dependencies: '@babel/runtime': 7.25.6 '@expo/code-signing-certificates': 0.0.5 @@ -16564,7 +18209,7 @@ snapshots: '@expo/env': 0.2.1 '@expo/image-utils': 0.4.1(encoding@0.1.13) '@expo/json-file': 8.3.0 - '@expo/metro-config': 0.17.4(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))) + '@expo/metro-config': 0.17.4(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))) '@expo/osascript': 2.1.0 '@expo/package-manager': 1.4.2 '@expo/plist': 0.1.0 @@ -16773,6 +18418,32 @@ snapshots: transitivePeerDependencies: - supports-color + '@expo/metro-config@0.17.4(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))': + dependencies: + '@babel/core': 7.25.2 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.6 + '@expo/config': 8.5.4 + '@expo/env': 0.2.1 + '@expo/json-file': 8.3.0 + '@expo/spawn-async': 1.7.2 + '@react-native/babel-preset': 0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)) + babel-preset-fbjs: 3.4.0(@babel/core@7.25.2) + chalk: 4.1.2 + debug: 4.3.4 + find-yarn-workspace-root: 2.0.0 + fs-extra: 9.1.0 + getenv: 1.0.0 + glob: 7.2.3 + jsc-safe-url: 0.2.4 + lightningcss: 1.19.0 + postcss: 8.4.35 + resolve-from: 5.0.0 + sucrase: 3.34.0 + transitivePeerDependencies: + - supports-color + '@expo/osascript@2.1.0': dependencies: '@expo/spawn-async': 1.7.2 @@ -16885,11 +18556,11 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - '@floating-ui/react-native@0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@floating-ui/react-native@0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/core': 1.6.0 react: 18.2.0 - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) '@floating-ui/react@0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: @@ -16938,13 +18609,6 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@hono/node-server@1.11.0': {} - - '@hono/zod-validator@0.2.1(hono@4.2.5)(zod@3.22.5)': - dependencies: - hono: 4.2.5 - zod: 3.22.5 - '@humanwhocodes/config-array@0.11.13': dependencies: '@humanwhocodes/object-schema': 2.0.1 @@ -17192,6 +18856,11 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec@1.4.15': {} '@jridgewell/trace-mapping@0.3.25': @@ -17201,14 +18870,14 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@likashefqet/react-native-image-zoom@3.0.0(patch_hash=zkdmh374s554i7qlaqtqn2nhfm)(react-native-gesture-handler@2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@likashefqet/react-native-image-zoom@3.0.0(patch_hash=zkdmh374s554i7qlaqtqn2nhfm)(react-native-gesture-handler@2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) - react-native-gesture-handler: 2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - react-native-reanimated: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-gesture-handler: 2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native-reanimated: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - '@microsoft/applicationinsights-web-snippet@1.1.2': {} + '@microsoft/applicationinsights-web-snippet@1.2.1': {} '@microsoft/fetch-event-source@2.0.1': {} @@ -17292,40 +18961,51 @@ snapshots: react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + dependencies: + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + optional: true + '@open-draft/until@1.0.3': {} - '@opentelemetry/api@1.8.0': {} + '@opentelemetry/api-logs@0.53.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} - '@opentelemetry/core@1.23.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/instrumentation@0.41.2(@opentelemetry/api@1.8.0)': + '@opentelemetry/instrumentation@0.53.0(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/api': 1.8.0 - '@types/shimmer': 1.0.5 - import-in-the-middle: 1.4.2 - require-in-the-middle: 7.3.0 - semver: 7.6.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.53.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.11.2 + require-in-the-middle: 7.4.0 + semver: 7.6.3 shimmer: 1.2.1 transitivePeerDependencies: - supports-color - '@opentelemetry/resources@1.23.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/resources@1.27.0(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/sdk-trace-base@1.23.0(@opentelemetry/api@1.8.0)': + '@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/resources': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/semantic-conventions@1.23.0': {} + '@opentelemetry/semantic-conventions@1.27.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -17974,6 +19654,11 @@ snapshots: merge-options: 3.0.4 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-native-async-storage/async-storage@1.21.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))': + dependencies: + merge-options: 3.0.4 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-native-clipboard/clipboard@1.14.0(react-native-macos@0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 @@ -17981,6 +19666,13 @@ snapshots: react-native-macos: 0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react-native-windows: 0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@react-native-clipboard/clipboard@1.14.0(react-native-macos@0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + dependencies: + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-macos: 0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native-windows: 0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@react-native-community/cli-clean@12.3.6(encoding@0.1.13)': dependencies: '@react-native-community/cli-tools': 12.3.6(encoding@0.1.13) @@ -18004,7 +19696,7 @@ snapshots: cosmiconfig: 5.2.1 deepmerge: 4.3.1 glob: 7.2.3 - joi: 17.12.1 + joi: 17.13.3 transitivePeerDependencies: - encoding @@ -18021,7 +19713,7 @@ snapshots: '@react-native-community/cli-debugger-ui@12.3.6': dependencies: - serve-static: 1.15.0 + serve-static: 1.16.2 transitivePeerDependencies: - supports-color @@ -18040,15 +19732,15 @@ snapshots: chalk: 4.1.2 command-exists: 1.2.9 deepmerge: 4.3.1 - envinfo: 7.11.0 + envinfo: 7.14.0 execa: 5.1.1 hermes-profile-transformer: 0.0.6 node-stream-zip: 1.15.0 ora: 5.4.1 - semver: 7.6.0 + semver: 7.6.3 strip-ansi: 5.2.0 wcwidth: 1.0.1 - yaml: 2.4.0 + yaml: 2.6.0 transitivePeerDependencies: - encoding @@ -18096,7 +19788,7 @@ snapshots: '@react-native-community/cli-tools': 12.3.6(encoding@0.1.13) chalk: 4.1.2 execa: 5.1.1 - fast-xml-parser: 4.3.5 + fast-xml-parser: 4.5.0 glob: 7.2.3 logkitty: 0.7.1 transitivePeerDependencies: @@ -18118,7 +19810,7 @@ snapshots: '@react-native-community/cli-tools': 12.3.6(encoding@0.1.13) chalk: 4.1.2 execa: 5.1.1 - fast-xml-parser: 4.3.5 + fast-xml-parser: 4.5.0 glob: 7.2.3 ora: 5.4.1 transitivePeerDependencies: @@ -18143,13 +19835,13 @@ snapshots: dependencies: '@react-native-community/cli-debugger-ui': 12.3.6 '@react-native-community/cli-tools': 12.3.6(encoding@0.1.13) - compression: 1.7.4 + compression: 1.7.5 connect: 3.7.0 errorhandler: 1.5.1 nocache: 3.0.4 pretty-format: 26.6.2 - serve-static: 1.15.0 - ws: 7.5.9 + serve-static: 1.16.2 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - encoding @@ -18179,10 +19871,10 @@ snapshots: chalk: 4.1.2 find-up: 5.0.0 mime: 2.6.0 - node-fetch: 2.6.12(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) open: 6.4.0 ora: 5.4.1 - semver: 7.6.0 + semver: 7.6.3 shell-quote: 1.8.1 sudo-prompt: 9.2.1 transitivePeerDependencies: @@ -18205,7 +19897,7 @@ snapshots: '@react-native-community/cli-types@12.3.6': dependencies: - joi: 17.12.1 + joi: 17.13.3 '@react-native-community/cli-types@12.3.7': dependencies: @@ -18228,9 +19920,9 @@ snapshots: execa: 5.1.1 find-up: 4.1.0 fs-extra: 8.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 prompts: 2.4.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - bufferutil - encoding @@ -18281,6 +19973,15 @@ snapshots: optionalDependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + '@react-native-firebase/app@19.2.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + dependencies: + opencollective-postinstall: 2.0.3 + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + superstruct: 0.6.2 + optionalDependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + '@react-native-firebase/crashlytics@19.2.2(@react-native-firebase/app@19.2.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13))': dependencies: '@react-native-firebase/app': 19.2.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) @@ -18294,12 +19995,24 @@ snapshots: optionalDependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + '@react-native-firebase/perf@19.2.2(@react-native-firebase/app@19.2.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13))': + dependencies: + '@react-native-firebase/app': 19.2.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + optionalDependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + '@react-native-mac/virtualized-lists@0.73.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-native-mac/virtualized-lists@0.73.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))': + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-native-picker/picker@2.6.1(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: react: 18.2.0 @@ -18313,8 +20026,8 @@ snapshots: '@react-native-windows/telemetry': 0.73.1 '@xmldom/xmldom': 0.7.13 chalk: 4.1.2 - cli-spinners: 2.7.0 - envinfo: 7.11.0 + cli-spinners: 2.9.2 + envinfo: 7.14.0 find-up: 4.1.0 glob: 7.2.3 lodash: 4.17.21 @@ -18322,7 +20035,35 @@ snapshots: ora: 3.4.0 prompts: 2.4.2 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) - semver: 7.6.0 + semver: 7.6.3 + shelljs: 0.8.5 + username: 5.1.0 + uuid: 3.4.0 + xml-formatter: 2.6.1 + xml-parser: 1.2.1 + xpath: 0.0.27 + transitivePeerDependencies: + - applicationinsights-native-metrics + - supports-color + + '@react-native-windows/cli@0.73.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))': + dependencies: + '@react-native-windows/codegen': 0.73.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + '@react-native-windows/fs': 0.73.0 + '@react-native-windows/package-utils': 0.73.0 + '@react-native-windows/telemetry': 0.73.1 + '@xmldom/xmldom': 0.7.13 + chalk: 4.1.2 + cli-spinners: 2.9.2 + envinfo: 7.14.0 + find-up: 4.1.0 + glob: 7.2.3 + lodash: 4.17.21 + mustache: 4.2.0 + ora: 3.4.0 + prompts: 2.4.2 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + semver: 7.6.3 shelljs: 0.8.5 username: 5.1.0 uuid: 3.4.0 @@ -18343,6 +20084,16 @@ snapshots: source-map-support: 0.5.21 yargs: 16.2.0 + '@react-native-windows/codegen@0.73.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))': + dependencies: + '@react-native-windows/fs': 0.73.0 + chalk: 4.1.2 + globby: 11.1.0 + mustache: 4.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + source-map-support: 0.5.21 + yargs: 16.2.0 + '@react-native-windows/find-repo-root@0.73.0': dependencies: '@react-native-windows/fs': 0.73.0 @@ -18350,7 +20101,7 @@ snapshots: '@react-native-windows/fs@0.73.0': dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 '@react-native-windows/package-utils@0.73.0': dependencies: @@ -18365,7 +20116,7 @@ snapshots: '@xmldom/xmldom': 0.7.13 applicationinsights: 2.7.3 ci-info: 3.9.0 - envinfo: 7.11.0 + envinfo: 7.14.0 lodash: 4.17.21 os-locale: 5.0.0 xpath: 0.0.27 @@ -18375,21 +20126,28 @@ snapshots: '@react-native/assets-registry@0.73.1': {} - '@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.23.7(@babel/core@7.23.7))': + '@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.23.7(@babel/core@7.25.2))': + dependencies: + '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.7(@babel/core@7.25.2)) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + + '@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.26.0(@babel/core@7.23.7))': dependencies: - '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.7(@babel/core@7.23.7)) + '@react-native/codegen': 0.73.3(@babel/preset-env@7.26.0(@babel/core@7.23.7)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.23.7(@babel/core@7.25.2))': + '@react-native/babel-plugin-codegen@0.73.4(@babel/preset-env@7.26.0(@babel/core@7.25.2))': dependencies: - '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.7(@babel/core@7.25.2)) + '@react-native/codegen': 0.73.3(@babel/preset-env@7.26.0(@babel/core@7.25.2)) transitivePeerDependencies: - '@babel/preset-env' - supports-color - '@react-native/babel-preset@0.73.21(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))': + '@react-native/babel-preset@0.73.21(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))': dependencies: '@babel/core': 7.23.7 '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.7) @@ -18430,7 +20188,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.7) '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7) '@babel/template': 7.25.0 - '@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.23.7(@babel/core@7.23.7)) + '@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.26.0(@babel/core@7.23.7)) babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.7) react-refresh: 0.14.0 transitivePeerDependencies: @@ -18485,38 +20243,141 @@ snapshots: - '@babel/preset-env' - supports-color - '@react-native/codegen@0.73.3(@babel/preset-env@7.23.7(@babel/core@7.23.7))': + '@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))': + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.25.2) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.25.2) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.25.2) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.25.2) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.25.2) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.25.2) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-runtime': 7.23.9(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.25.2) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.25.2) + '@babel/template': 7.25.0 + '@react-native/babel-plugin-codegen': 0.73.4(@babel/preset-env@7.26.0(@babel/core@7.25.2)) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.25.2) + react-refresh: 0.14.0 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + + '@react-native/codegen@0.73.3(@babel/preset-env@7.23.7(@babel/core@7.25.2))': dependencies: '@babel/parser': 7.25.3 - '@babel/preset-env': 7.23.7(@babel/core@7.23.7) + '@babel/preset-env': 7.23.7(@babel/core@7.25.2) flow-parser: 0.206.0 glob: 7.2.3 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.23.7(@babel/core@7.23.7)) + jscodeshift: 0.14.0(@babel/preset-env@7.23.7(@babel/core@7.25.2)) mkdirp: 0.5.6 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - '@react-native/codegen@0.73.3(@babel/preset-env@7.23.7(@babel/core@7.25.2))': + '@react-native/codegen@0.73.3(@babel/preset-env@7.26.0(@babel/core@7.23.7))': dependencies: '@babel/parser': 7.25.3 - '@babel/preset-env': 7.23.7(@babel/core@7.25.2) + '@babel/preset-env': 7.26.0(@babel/core@7.23.7) flow-parser: 0.206.0 glob: 7.2.3 invariant: 2.2.4 - jscodeshift: 0.14.0(@babel/preset-env@7.23.7(@babel/core@7.25.2)) + jscodeshift: 0.14.0(@babel/preset-env@7.26.0(@babel/core@7.23.7)) + mkdirp: 0.5.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + + '@react-native/codegen@0.73.3(@babel/preset-env@7.26.0(@babel/core@7.25.2))': + dependencies: + '@babel/parser': 7.25.3 + '@babel/preset-env': 7.26.0(@babel/core@7.25.2) + flow-parser: 0.206.0 + glob: 7.2.3 + invariant: 2.2.4 + jscodeshift: 0.14.0(@babel/preset-env@7.26.0(@babel/core@7.25.2)) mkdirp: 0.5.6 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color - '@react-native/community-cli-plugin@0.73.17(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)': + '@react-native/community-cli-plugin@0.73.17(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)': + dependencies: + '@react-native-community/cli-server-api': 12.3.6(encoding@0.1.13) + '@react-native-community/cli-tools': 12.3.6(encoding@0.1.13) + '@react-native/dev-middleware': 0.73.8(encoding@0.1.13) + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)) + chalk: 4.1.2 + execa: 5.1.1 + metro: 0.80.12 + metro-config: 0.80.12 + metro-core: 0.80.12 + node-fetch: 2.7.0(encoding@0.1.13) + readline: 1.3.0 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@react-native/community-cli-plugin@0.73.17(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)': dependencies: '@react-native-community/cli-server-api': 12.3.6(encoding@0.1.13) '@react-native-community/cli-tools': 12.3.6(encoding@0.1.13) '@react-native/dev-middleware': 0.73.8(encoding@0.1.13) - '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)) + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)) + chalk: 4.1.2 + execa: 5.1.1 + metro: 0.80.12 + metro-config: 0.80.12 + metro-core: 0.80.12 + node-fetch: 2.7.0(encoding@0.1.13) + readline: 1.3.0 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + + '@react-native/community-cli-plugin@0.73.18(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)': + dependencies: + '@react-native-community/cli-server-api': 12.3.7(encoding@0.1.13) + '@react-native-community/cli-tools': 12.3.7(encoding@0.1.13) + '@react-native/dev-middleware': 0.73.8(encoding@0.1.13) + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7)) chalk: 4.1.2 execa: 5.1.1 metro: 0.80.5(encoding@0.1.13) @@ -18532,12 +20393,12 @@ snapshots: - supports-color - utf-8-validate - '@react-native/community-cli-plugin@0.73.18(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)': + '@react-native/community-cli-plugin@0.73.18(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)': dependencies: '@react-native-community/cli-server-api': 12.3.7(encoding@0.1.13) '@react-native-community/cli-tools': 12.3.7(encoding@0.1.13) '@react-native/dev-middleware': 0.73.8(encoding@0.1.13) - '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7)) + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)) chalk: 4.1.2 execa: 5.1.1 metro: 0.80.5(encoding@0.1.13) @@ -18553,12 +20414,12 @@ snapshots: - supports-color - utf-8-validate - '@react-native/community-cli-plugin@0.73.18(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)': + '@react-native/community-cli-plugin@0.73.18(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)': dependencies: '@react-native-community/cli-server-api': 12.3.7(encoding@0.1.13) '@react-native-community/cli-tools': 12.3.7(encoding@0.1.13) '@react-native/dev-middleware': 0.73.8(encoding@0.1.13) - '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)) + '@react-native/metro-babel-transformer': 0.73.15(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)) chalk: 4.1.2 execa: 5.1.1 metro: 0.80.5(encoding@0.1.13) @@ -18599,10 +20460,10 @@ snapshots: '@react-native/js-polyfills@0.73.1': {} - '@react-native/metro-babel-transformer@0.73.15(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))': + '@react-native/metro-babel-transformer@0.73.15(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))': dependencies: '@babel/core': 7.23.7 - '@react-native/babel-preset': 0.73.21(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7)) + '@react-native/babel-preset': 0.73.21(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7)) hermes-parser: 0.15.0 nullthrows: 1.1.1 transitivePeerDependencies: @@ -18619,6 +20480,16 @@ snapshots: - '@babel/preset-env' - supports-color + '@react-native/metro-babel-transformer@0.73.15(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))': + dependencies: + '@babel/core': 7.25.2 + '@react-native/babel-preset': 0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)) + hermes-parser: 0.15.0 + nullthrows: 1.1.1 + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + '@react-native/metro-config@0.73.5(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)': dependencies: '@react-native/js-polyfills': 0.73.1 @@ -18639,11 +20510,11 @@ snapshots: '@react-native/normalize-colors@0.74.84': {} - '@react-native/virtualized-lists@0.73.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))': + '@react-native/virtualized-lists@0.73.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react-native: 0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0) '@react-native/virtualized-lists@0.73.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))': dependencies: @@ -18651,6 +20522,12 @@ snapshots: nullthrows: 1.1.1 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-native/virtualized-lists@0.73.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))': + dependencies: + invariant: 2.2.4 + nullthrows: 1.1.1 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-navigation/bottom-tabs@6.5.12(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@react-navigation/elements': 1.3.22(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) @@ -18692,6 +20569,19 @@ snapshots: react-native-screens: 3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) warn-once: 0.1.1 + ? '@react-navigation/drawer@6.7.2(patch_hash=rib4hjvzksqzwv3bbw4vfi5a5i)(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)' + : dependencies: + '@react-navigation/elements': 1.3.31(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@react-navigation/native': 6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + color: 4.2.3 + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-gesture-handler: 2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native-reanimated: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native-safe-area-context: 4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native-screens: 3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + warn-once: 0.1.1 + '@react-navigation/elements@1.3.22(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@react-navigation/native': 6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) @@ -18706,6 +20596,13 @@ snapshots: react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) react-native-safe-area-context: 4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@react-navigation/elements@1.3.31(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-navigation/native': 6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-safe-area-context: 4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@react-navigation/native-stack@6.9.18(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@react-navigation/elements': 1.3.22(@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) @@ -18725,6 +20622,15 @@ snapshots: react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-navigation/native@6.1.10(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + dependencies: + '@react-navigation/core': 6.4.10(react@18.2.0) + escape-string-regexp: 4.0.0 + fast-deep-equal: 3.1.3 + nanoid: 3.3.7 + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + '@react-navigation/routers@6.1.9': dependencies: nanoid: 3.3.7 @@ -18733,39 +20639,39 @@ snapshots: '@remix-run/router@1.15.2': {} - '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.2)': dependencies: '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - rollup: 2.79.1 + '@babel/helper-module-imports': 7.25.9 + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) + rollup: 2.79.2 optionalDependencies: '@types/babel__core': 7.20.5 transitivePeerDependencies: - supports-color - '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1)': + '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) '@types/resolve': 1.17.1 builtin-modules: 3.3.0 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.8 - rollup: 2.79.1 + rollup: 2.79.2 - '@rollup/plugin-replace@2.4.2(rollup@2.79.1)': + '@rollup/plugin-replace@2.4.2(rollup@2.79.2)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@rollup/pluginutils': 3.1.0(rollup@2.79.2) magic-string: 0.25.9 - rollup: 2.79.1 + rollup: 2.79.2 - '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + '@rollup/pluginutils@3.1.0(rollup@2.79.2)': dependencies: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 2.79.1 + rollup: 2.79.2 '@rollup/pluginutils@5.1.0(rollup@4.13.0)': dependencies: @@ -18819,9 +20725,9 @@ snapshots: component-type: 1.2.2 join-component: 1.1.0 - '@shopify/flash-list@1.6.3(@babel/runtime@7.25.9)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@shopify/flash-list@1.6.3(@babel/runtime@7.26.0)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: - '@babel/runtime': 7.25.9 + '@babel/runtime': 7.26.0 react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) recyclerlistview: 4.2.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) @@ -18857,7 +20763,7 @@ snapshots: ejs: 3.1.10 json5: 2.2.3 magic-string: 0.25.9 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.25.2)': dependencies: @@ -19036,7 +20942,7 @@ snapshots: transitivePeerDependencies: - react - '@tamagui/alert-dialog@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/alert-dialog@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/animate-presence': 1.112.12(react@18.2.0) '@tamagui/aria-hidden': 1.112.12(react@18.2.0) @@ -19044,12 +20950,12 @@ snapshots: '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/core': 1.112.12(react@18.2.0) '@tamagui/create-context': 1.112.12(react@18.2.0) - '@tamagui/dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/dismissable': 1.112.12(react@18.2.0) '@tamagui/focus-scope': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) '@tamagui/polyfill-dev': 1.112.12 - '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/portal': 1.112.12(react@18.2.0) '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0) '@tamagui/stacks': 1.112.12(react@18.2.0) @@ -19092,11 +20998,11 @@ snapshots: '@tamagui/web': 1.112.12(react@18.2.0) react: 18.2.0 - '@tamagui/animations-moti@1.112.12(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))(react@18.2.0)': + '@tamagui/animations-moti@1.112.12(moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/use-presence': 1.112.12(react@18.2.0) '@tamagui/web': 1.112.12(react@18.2.0) - moti: 0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0) + moti: 0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0) react: 18.2.0 '@tamagui/animations-react-native@1.112.12(react@18.2.0)': @@ -19202,23 +21108,23 @@ snapshots: '@tamagui/web': 1.112.12(react@18.2.0) react: 18.2.0 - '@tamagui/checkbox-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/checkbox-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/create-context': 1.112.12(react@18.2.0) '@tamagui/focusable': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) - '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/use-controllable-state': 1.112.12(react@18.2.0) '@tamagui/use-previous': 1.112.12 react: 18.2.0 transitivePeerDependencies: - react-native - '@tamagui/checkbox@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/checkbox@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: - '@tamagui/checkbox-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/checkbox-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/core': 1.112.12(react@18.2.0) @@ -19228,7 +21134,7 @@ snapshots: '@tamagui/get-token': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0) - '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/stacks': 1.112.12(react@18.2.0) '@tamagui/use-controllable-state': 1.112.12(react@18.2.0) '@tamagui/use-previous': 1.112.12 @@ -19331,7 +21237,7 @@ snapshots: '@tamagui/cubic-bezier-animator@1.112.12': {} - '@tamagui/dialog@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/dialog@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/adapt': 1.112.12(react@18.2.0) '@tamagui/animate-presence': 1.112.12(react@18.2.0) @@ -19344,7 +21250,7 @@ snapshots: '@tamagui/focus-scope': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) '@tamagui/polyfill-dev': 1.112.12 - '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/portal': 1.112.12(react@18.2.0) '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0) '@tamagui/sheet': 1.112.12(@types/react@18.2.55)(react@18.2.0) @@ -19375,10 +21281,10 @@ snapshots: '@tamagui/fake-react-native@1.112.12': {} - '@tamagui/floating@1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/floating@1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@floating-ui/react-native': 0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@floating-ui/react-native': 0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react: 18.2.0 transitivePeerDependencies: - react-dom @@ -19501,7 +21407,7 @@ snapshots: '@tamagui/core': 1.112.12(react@18.2.0) react: 18.2.0 - '@tamagui/label@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/label@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) @@ -19512,7 +21418,7 @@ snapshots: '@tamagui/text': 1.112.12(react@18.2.0) '@tamagui/web': 1.112.12(react@18.2.0) react: 18.2.0 - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) '@tamagui/linear-gradient@1.112.12(react@18.2.0)': dependencies: @@ -19546,7 +21452,7 @@ snapshots: '@tamagui/polyfill-dev@1.112.12': {} - '@tamagui/popover@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/popover@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react': 0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tamagui/adapt': 1.112.12(react@18.2.0) @@ -19556,11 +21462,11 @@ snapshots: '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/core': 1.112.12(react@18.2.0) '@tamagui/dismissable': 1.112.12(react@18.2.0) - '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/focus-scope': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) '@tamagui/polyfill-dev': 1.112.12 - '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/portal': 1.112.12(react@18.2.0) '@tamagui/remove-scroll': 1.112.12(@types/react@18.2.55)(react@18.2.0) '@tamagui/scroll-view': 1.112.12(react@18.2.0) @@ -19574,12 +21480,12 @@ snapshots: - react-dom - react-native - '@tamagui/popper@1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/popper@1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/core': 1.112.12(react@18.2.0) - '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/get-token': 1.112.12(react@18.2.0) '@tamagui/stacks': 1.112.12(react@18.2.0) '@tamagui/start-transition': 1.112.12 @@ -19613,7 +21519,7 @@ snapshots: '@tamagui/proxy-worm@1.112.12': {} - '@tamagui/radio-group@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/radio-group@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) @@ -19622,8 +21528,8 @@ snapshots: '@tamagui/focusable': 1.112.12(react@18.2.0) '@tamagui/get-token': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) - '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - '@tamagui/radio-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/radio-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/roving-focus': 1.112.12(react@18.2.0) '@tamagui/stacks': 1.112.12(react@18.2.0) '@tamagui/use-controllable-state': 1.112.12(react@18.2.0) @@ -19632,24 +21538,24 @@ snapshots: transitivePeerDependencies: - react-native - '@tamagui/radio-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/radio-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/create-context': 1.112.12(react@18.2.0) '@tamagui/focusable': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) - '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/use-controllable-state': 1.112.12(react@18.2.0) '@tamagui/use-previous': 1.112.12 react: 18.2.0 transitivePeerDependencies: - react-native - '@tamagui/react-native-media-driver@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/react-native-media-driver@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/web': 1.112.12(react@18.2.0) - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) transitivePeerDependencies: - react @@ -19719,11 +21625,11 @@ snapshots: '@tamagui/web': 1.112.12(react@18.2.0) react: 18.2.0 - '@tamagui/select@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/select@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react': 0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - '@floating-ui/react-native': 0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@floating-ui/react-native': 0.10.6(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/adapt': 1.112.12(react@18.2.0) '@tamagui/animate-presence': 1.112.12(react@18.2.0) '@tamagui/compose-refs': 1.112.12(react@18.2.0) @@ -19897,18 +21803,18 @@ snapshots: - encoding - supports-color - '@tamagui/switch-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/switch-headless@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) - '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/use-previous': 1.112.12 react: 18.2.0 transitivePeerDependencies: - react-native - '@tamagui/switch@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/switch@1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) @@ -19916,9 +21822,9 @@ snapshots: '@tamagui/focusable': 1.112.12(react@18.2.0) '@tamagui/get-token': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) - '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/stacks': 1.112.12(react@18.2.0) - '@tamagui/switch-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/switch-headless': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/use-controllable-state': 1.112.12(react@18.2.0) '@tamagui/use-previous': 1.112.12 react: 18.2.0 @@ -19988,18 +21894,18 @@ snapshots: '@tamagui/web': 1.112.12(react@18.2.0) react: 18.2.0 - '@tamagui/tooltip@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tamagui/tooltip@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@floating-ui/react': 0.26.24(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/core': 1.112.12(react@18.2.0) '@tamagui/create-context': 1.112.12(react@18.2.0) - '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/floating': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/get-token': 1.112.12(react@18.2.0) '@tamagui/helpers': 1.112.12(react@18.2.0) '@tamagui/polyfill-dev': 1.112.12 - '@tamagui/popover': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/popover': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/stacks': 1.112.12(react@18.2.0) '@tamagui/text': 1.112.12(react@18.2.0) '@tamagui/use-controllable-state': 1.112.12(react@18.2.0) @@ -20181,52 +22087,52 @@ snapshots: '@tanstack/query-core@5.32.1': {} - '@tanstack/query-core@5.59.17': {} + '@tanstack/query-core@5.59.20': {} - '@tanstack/query-devtools@5.59.19': {} + '@tanstack/query-devtools@5.59.20': {} '@tanstack/query-persist-client-core@4.27.0': dependencies: '@tanstack/query-core': 4.27.0 - '@tanstack/query-persist-client-core@5.59.17': + '@tanstack/query-persist-client-core@5.59.20': dependencies: - '@tanstack/query-core': 5.59.17 + '@tanstack/query-core': 5.59.20 - '@tanstack/react-query-devtools@4.29.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + '@tanstack/react-query-devtools@4.29.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': dependencies: '@tanstack/match-sorter-utils': 8.8.4 - '@tanstack/react-query': 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tanstack/react-query': 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) superjson: 1.12.2 use-sync-external-store: 1.2.0(react@18.2.0) - '@tanstack/react-query-devtools@5.59.19(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0)': + '@tanstack/react-query-devtools@5.59.20(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/query-devtools': 5.59.19 + '@tanstack/query-devtools': 5.59.20 '@tanstack/react-query': 5.32.1(react@18.2.0) react: 18.2.0 - '@tanstack/react-query-persist-client@4.28.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))': + '@tanstack/react-query-persist-client@4.28.0(@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))': dependencies: '@tanstack/query-persist-client-core': 4.27.0 - '@tanstack/react-query': 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tanstack/react-query': 4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - '@tanstack/react-query-persist-client@5.59.19(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0)': + '@tanstack/react-query-persist-client@5.59.20(@tanstack/react-query@5.32.1(react@18.2.0))(react@18.2.0)': dependencies: - '@tanstack/query-persist-client-core': 5.59.17 + '@tanstack/query-persist-client-core': 5.59.20 '@tanstack/react-query': 5.32.1(react@18.2.0) react: 18.2.0 - '@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': + '@tanstack/react-query@4.36.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0)': dependencies: '@tanstack/query-core': 4.36.1 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) optionalDependencies: react-dom: 18.2.0(react@18.2.0) - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) '@tanstack/react-query@5.32.1(react@18.2.0)': dependencies: @@ -20638,6 +22544,10 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@20.17.6': + dependencies: + undici-types: 6.19.8 + '@types/normalize-package-data@2.4.4': {} '@types/offscreencanvas@2019.7.0': {} @@ -20679,6 +22589,19 @@ snapshots: - react - supports-color - utf-8-validate + optional: true + + '@types/react-native@0.73.0(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)': + dependencies: + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - react + - supports-color + - utf-8-validate '@types/react-redux@7.1.24': dependencies: @@ -20703,7 +22626,7 @@ snapshots: '@types/resolve@1.17.1': dependencies: - '@types/node': 20.14.10 + '@types/node': 20.17.6 '@types/scheduler@0.16.2': {} @@ -20717,7 +22640,7 @@ snapshots: dependencies: '@types/node': 20.14.10 - '@types/shimmer@1.0.5': {} + '@types/shimmer@1.2.0': {} '@types/stack-utils@2.0.1': {} @@ -20985,33 +22908,44 @@ snapshots: graphql: 15.8.0 wonka: 4.0.15 - '@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1))': + '@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0))': + dependencies: + vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) + + '@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0))': dependencies: - vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) - '@vitejs/plugin-basic-ssl@1.1.0(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1))': + '@vitejs/plugin-react@4.2.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0))': dependencies: - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + '@babel/core': 7.23.7 + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.0 + vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) + transitivePeerDependencies: + - supports-color - '@vitejs/plugin-react@4.2.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1))': + '@vitejs/plugin-react@4.2.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0))': dependencies: '@babel/core': 7.23.7 '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.2.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1))': + '@vitejs/plugin-react@4.2.1(vite@5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0))': dependencies: '@babel/core': 7.23.7 '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.0 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) transitivePeerDependencies: - supports-color @@ -21129,9 +23063,9 @@ snapshots: acorn: 8.11.3 acorn-walk: 8.3.2 - acorn-import-assertions@1.9.0(acorn@8.11.3): + acorn-import-attributes@1.9.5(acorn@8.14.0): dependencies: - acorn: 8.11.3 + acorn: 8.14.0 acorn-jsx@5.3.2(acorn@8.11.3): dependencies: @@ -21141,15 +23075,17 @@ snapshots: acorn@8.11.3: {} + acorn@8.14.0: {} + agent-base@6.0.2: dependencies: - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color agent-base@7.1.0: dependencies: - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -21179,6 +23115,13 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + anser@1.4.10: {} ansi-escapes@1.4.0: {} @@ -21230,21 +23173,26 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + appdirsjs@1.2.7: {} application-config-path@0.1.1: {} applicationinsights@2.7.3: dependencies: - '@azure/core-auth': 1.7.2 + '@azure/core-auth': 1.9.0 '@azure/core-rest-pipeline': 1.10.1 '@azure/core-util': 1.2.0 - '@azure/opentelemetry-instrumentation-azure-sdk': 1.0.0-beta.5 - '@microsoft/applicationinsights-web-snippet': 1.1.2 - '@opentelemetry/api': 1.8.0 - '@opentelemetry/core': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/sdk-trace-base': 1.23.0(@opentelemetry/api@1.8.0) - '@opentelemetry/semantic-conventions': 1.23.0 + '@azure/opentelemetry-instrumentation-azure-sdk': 1.0.0-beta.7 + '@microsoft/applicationinsights-web-snippet': 1.2.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 cls-hooked: 4.2.2 continuation-local-storage: 3.2.1 diagnostic-channel: 1.1.1 @@ -21394,7 +23342,7 @@ snapshots: semver: 5.7.2 shimmer: 1.2.1 - async@3.2.4: {} + async@3.2.6: {} asynckit@0.4.0: {} @@ -21477,6 +23425,24 @@ snapshots: cosmiconfig: 7.1.0 resolve: 1.22.8 + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.23.7): + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.23.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.2): + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.23.7): dependencies: '@babel/compat-data': 7.25.2 @@ -21495,11 +23461,19 @@ snapshots: transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.23.7): dependencies: '@babel/core': 7.23.7 - '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7) - core-js-compat: 3.35.1 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.23.7) + core-js-compat: 3.39.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + core-js-compat: 3.39.0 transitivePeerDependencies: - supports-color @@ -21541,6 +23515,20 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.23.7): + dependencies: + '@babel/core': 7.23.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.23.7) + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.2): + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + babel-plugin-react-native-web@0.18.12: {} babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: {} @@ -21723,6 +23711,10 @@ snapshots: dependencies: fill-range: 7.0.1 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + browser-cookies@1.2.0: {} browser-image-compression@2.0.2: @@ -21747,6 +23739,13 @@ snapshots: node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001678 + electron-to-chromium: 1.5.52 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -21847,14 +23846,14 @@ snapshots: camelcase@6.3.0: {} - camelcase@7.0.1: {} - camelize@1.0.1: {} caniuse-lite@1.0.30001576: {} caniuse-lite@1.0.30001650: {} + caniuse-lite@1.0.30001678: {} + chai@4.4.1: dependencies: assertion-error: 1.1.0 @@ -21970,6 +23969,8 @@ snapshots: cjs-module-lexer@1.2.3: {} + cjs-module-lexer@1.4.1: {} + classnames@2.5.1: {} clean-stack@2.2.0: {} @@ -21996,6 +23997,8 @@ snapshots: cli-spinners@2.7.0: {} + cli-spinners@2.9.2: {} + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 @@ -22136,6 +24139,18 @@ snapshots: transitivePeerDependencies: - supports-color + compression@1.7.5: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.0.2 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + concat-map@0.0.1: {} concurrently@8.2.2: @@ -22188,6 +24203,10 @@ snapshots: dependencies: browserslist: 4.23.3 + core-js-compat@3.39.0: + dependencies: + browserslist: 4.24.2 + core-js@2.6.12: {} core-js@3.24.1: {} @@ -22259,6 +24278,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.5: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crypt@0.0.2: {} crypto-random-string@1.0.0: {} @@ -22390,6 +24415,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.7: + dependencies: + ms: 2.1.3 + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 @@ -22523,7 +24552,7 @@ snapshots: diagnostic-channel@1.1.1: dependencies: - semver: 7.6.0 + semver: 7.6.3 didyoumean@1.2.2: {} @@ -22607,46 +24636,33 @@ snapshots: dependencies: wordwrap: 1.0.0 - drizzle-kit@0.20.17: + drizzle-kit@0.21.1: dependencies: '@esbuild-kit/esm-loader': 2.6.5 - '@hono/node-server': 1.11.0 - '@hono/zod-validator': 0.2.1(hono@4.2.5)(zod@3.22.5) - camelcase: 7.0.1 - chalk: 5.3.0 commander: 9.5.0 env-paths: 3.0.0 esbuild: 0.19.12 esbuild-register: 3.5.0(esbuild@0.19.12) glob: 8.1.0 hanji: 0.0.5 - hono: 4.2.5 json-diff: 0.9.0 - minimatch: 7.4.6 - semver: 7.6.0 - superjson: 2.2.1 zod: 3.22.5 transitivePeerDependencies: - supports-color - drizzle-kit@0.21.1: + drizzle-kit@0.28.0: dependencies: + '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 - commander: 9.5.0 - env-paths: 3.0.0 esbuild: 0.19.12 - esbuild-register: 3.5.0(esbuild@0.19.12) - glob: 8.1.0 - hanji: 0.0.5 - json-diff: 0.9.0 - zod: 3.22.5 + esbuild-register: 3.6.0(esbuild@0.19.12) transitivePeerDependencies: - supports-color - drizzle-orm@0.30.9(patch_hash=cegrec33e6f7d6ltk7vff5r7w4)(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.8.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0): + drizzle-orm@0.36.1(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0): optionalDependencies: - '@op-engineering/op-sqlite': 5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - '@opentelemetry/api': 1.8.0 + '@op-engineering/op-sqlite': 5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@opentelemetry/api': 1.9.0 '@types/better-sqlite3': 7.6.9 '@types/react': 18.2.55 better-sqlite3: 9.4.5 @@ -22666,12 +24682,14 @@ snapshots: ejs@3.1.10: dependencies: - jake: 10.8.5 + jake: 10.9.2 electron-to-chromium@1.4.626: {} electron-to-chromium@1.5.5: {} + electron-to-chromium@1.5.52: {} + emitter-listener@1.1.2: dependencies: shimmer: 1.2.1 @@ -22688,6 +24706,8 @@ snapshots: encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 @@ -22706,6 +24726,8 @@ snapshots: envinfo@7.11.0: {} + envinfo@7.14.0: {} + eol@0.9.1: {} error-ex@1.3.2: @@ -22921,16 +24943,23 @@ snapshots: transitivePeerDependencies: - supports-color + esbuild-register@3.6.0(esbuild@0.19.12): + dependencies: + debug: 4.3.7 + esbuild: 0.19.12 + transitivePeerDependencies: + - supports-color + esbuild-register@3.6.0(esbuild@0.21.5): dependencies: - debug: 4.3.4 + debug: 4.3.7 esbuild: 0.21.5 transitivePeerDependencies: - supports-color esbuild-register@3.6.0(esbuild@0.24.0): dependencies: - debug: 4.3.4 + debug: 4.3.7 esbuild: 0.24.0 transitivePeerDependencies: - supports-color @@ -23043,6 +25072,8 @@ snapshots: escalade@3.1.2: {} + escalade@3.2.0: {} + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -23258,7 +25289,7 @@ snapshots: execa@4.1.0: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 get-stream: 5.2.0 human-signals: 1.1.1 is-stream: 2.0.1 @@ -23320,6 +25351,18 @@ snapshots: - expo - supports-color + expo-asset@9.0.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + '@react-native/assets-registry': 0.73.1 + blueimp-md5: 2.19.0 + expo-constants: 15.4.5(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) + expo-file-system: 16.0.9(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) + invariant: 2.2.4 + md5-file: 3.2.3 + transitivePeerDependencies: + - expo + - supports-color + expo-av@13.10.6(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) @@ -23328,9 +25371,9 @@ snapshots: dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) - expo-blur@12.9.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): + expo-blur@12.9.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: - expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) expo-clipboard@5.0.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: @@ -23343,6 +25386,13 @@ snapshots: transitivePeerDependencies: - supports-color + expo-constants@15.4.5(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + '@expo/config': 8.5.4 + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + transitivePeerDependencies: + - supports-color + expo-dev-client@3.3.9(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) @@ -23386,19 +25436,36 @@ snapshots: dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + expo-file-system@16.0.9(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + expo-font@11.10.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) fontfaceobserver: 2.3.0 + expo-font@11.10.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + fontfaceobserver: 2.3.0 + expo-haptics@12.8.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + expo-haptics@12.8.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + expo-image-loader@4.6.0(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + expo-image-loader@4.6.0(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + expo-image-manipulator@11.8.0(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) @@ -23409,17 +25476,31 @@ snapshots: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) expo-image-loader: 4.6.0(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)) + expo-image-picker@14.7.1(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + expo-image-loader: 4.6.0(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) + expo-image@1.10.6(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: '@react-native/assets-registry': 0.73.1 expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + expo-image@1.10.6(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + '@react-native/assets-registry': 0.73.1 + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + expo-json-utils@0.12.3: {} expo-keep-awake@12.8.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) + expo-keep-awake@12.8.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)): + dependencies: + expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13) + expo-linear-gradient@12.7.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13)): dependencies: expo: 50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2)))(encoding@0.1.13) @@ -23537,6 +25618,32 @@ snapshots: - supports-color - utf-8-validate + expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.25.6 + '@expo/cli': 0.17.5(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)(expo-modules-autolinking@1.10.3) + '@expo/config': 8.5.4 + '@expo/config-plugins': 7.8.4 + '@expo/metro-config': 0.17.4(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))) + '@expo/vector-icons': 14.0.0 + babel-preset-expo: 10.0.1(@babel/core@7.25.2) + expo-asset: 9.0.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) + expo-file-system: 16.0.9(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) + expo-font: 11.10.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) + expo-keep-awake: 12.8.2(expo@50.0.6(@babel/core@7.25.2)(@react-native/babel-preset@0.73.21(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2)))(encoding@0.1.13)) + expo-modules-autolinking: 1.10.3 + expo-modules-core: 1.11.8 + fbemitter: 3.0.0(encoding@0.1.13) + whatwg-url-without-unicode: 8.0.0-3 + transitivePeerDependencies: + - '@babel/core' + - '@react-native/babel-preset' + - bluebird + - bufferutil + - encoding + - supports-color + - utf-8-validate + exponential-backoff@3.1.1: {} express@4.18.2: @@ -23617,6 +25724,8 @@ snapshots: fast-loops@1.1.3: {} + fast-uri@3.0.3: {} + fast-xml-parser@4.0.11: dependencies: strnum: 1.0.5 @@ -23625,6 +25734,10 @@ snapshots: dependencies: strnum: 1.0.5 + fast-xml-parser@4.5.0: + dependencies: + strnum: 1.0.5 + fastq@1.13.0: dependencies: reusify: 1.0.4 @@ -23679,6 +25792,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + filter-obj@1.1.0: {} finalhandler@1.1.2: @@ -23789,6 +25906,12 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + forwarded@0.2.0: {} fraction.js@4.3.7: {} @@ -23913,7 +26036,7 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.0 + pump: 3.0.2 get-stream@6.0.1: {} @@ -24035,6 +26158,8 @@ snapshots: graceful-fs@4.2.10: {} + graceful-fs@4.2.11: {} + graphemer@1.4.0: {} graphql-tag@2.12.6(graphql@15.8.0): @@ -24155,8 +26280,6 @@ snapshots: dependencies: react-is: 16.13.1 - hono@4.2.5: {} - hosted-git-info@2.8.9: {} hosted-git-info@3.0.8: @@ -24185,7 +26308,7 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -24272,11 +26395,11 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-in-the-middle@1.4.2: + import-in-the-middle@1.11.2: dependencies: - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - cjs-module-lexer: 1.2.3 + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) + cjs-module-lexer: 1.4.1 module-details-from-path: 1.0.3 import-local@3.2.0: @@ -24632,7 +26755,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -24659,9 +26782,9 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.8.5: + jake@10.9.2: dependencies: - async: 3.2.4 + async: 3.2.6 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 @@ -25021,7 +27144,7 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 20.14.10 + '@types/node': 20.17.6 merge-stream: 2.0.0 supports-color: 7.2.0 @@ -25048,7 +27171,15 @@ snapshots: jiti@1.21.0: {} - joi@17.12.1: + joi@17.12.1: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -25081,7 +27212,7 @@ snapshots: jsc-safe-url@0.2.4: {} - jscodeshift@0.14.0(@babel/preset-env@7.23.7(@babel/core@7.23.7)): + jscodeshift@0.14.0(@babel/preset-env@7.23.7(@babel/core@7.25.2)): dependencies: '@babel/core': 7.25.2 '@babel/parser': 7.25.6 @@ -25089,7 +27220,7 @@ snapshots: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2) '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.25.2) - '@babel/preset-env': 7.23.7(@babel/core@7.23.7) + '@babel/preset-env': 7.23.7(@babel/core@7.25.2) '@babel/preset-flow': 7.23.3(@babel/core@7.25.2) '@babel/preset-typescript': 7.23.3(@babel/core@7.25.2) '@babel/register': 7.23.7(@babel/core@7.25.2) @@ -25106,7 +27237,7 @@ snapshots: transitivePeerDependencies: - supports-color - jscodeshift@0.14.0(@babel/preset-env@7.23.7(@babel/core@7.25.2)): + jscodeshift@0.14.0(@babel/preset-env@7.26.0(@babel/core@7.23.7)): dependencies: '@babel/core': 7.25.2 '@babel/parser': 7.25.6 @@ -25114,7 +27245,32 @@ snapshots: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2) '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.25.2) - '@babel/preset-env': 7.23.7(@babel/core@7.25.2) + '@babel/preset-env': 7.26.0(@babel/core@7.23.7) + '@babel/preset-flow': 7.23.3(@babel/core@7.25.2) + '@babel/preset-typescript': 7.23.3(@babel/core@7.25.2) + '@babel/register': 7.23.7(@babel/core@7.25.2) + babel-core: 7.0.0-bridge.0(@babel/core@7.25.2) + chalk: 4.1.2 + flow-parser: 0.206.0 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + neo-async: 2.6.2 + node-dir: 0.1.17 + recast: 0.21.5 + temp: 0.8.4 + write-file-atomic: 2.4.3 + transitivePeerDependencies: + - supports-color + + jscodeshift@0.14.0(@babel/preset-env@7.26.0(@babel/core@7.25.2)): + dependencies: + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.25.2) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.25.2) + '@babel/preset-env': 7.26.0(@babel/core@7.25.2) '@babel/preset-flow': 7.23.3(@babel/core@7.25.2) '@babel/preset-typescript': 7.23.3(@babel/core@7.25.2) '@babel/register': 7.23.7(@babel/core@7.25.2) @@ -25196,6 +27352,8 @@ snapshots: jsesc@2.5.2: {} + jsesc@3.0.2: {} + json-diff@0.9.0: dependencies: cli-color: 2.0.4 @@ -25351,7 +27509,7 @@ snapshots: load-json-file@4.0.0: dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -25609,6 +27767,15 @@ snapshots: methods@1.1.2: {} + metro-babel-transformer@0.80.12: + dependencies: + '@babel/core': 7.25.2 + flow-enums-runtime: 0.0.6 + hermes-parser: 0.23.1 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-babel-transformer@0.80.5: dependencies: '@babel/core': 7.25.2 @@ -25617,13 +27784,38 @@ snapshots: transitivePeerDependencies: - supports-color + metro-cache-key@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + metro-cache-key@0.80.5: {} + metro-cache@0.80.12: + dependencies: + exponential-backoff: 3.1.1 + flow-enums-runtime: 0.0.6 + metro-core: 0.80.12 + metro-cache@0.80.5: dependencies: metro-core: 0.80.5 rimraf: 3.0.2 + metro-config@0.80.12: + dependencies: + connect: 3.7.0 + cosmiconfig: 5.2.1 + flow-enums-runtime: 0.0.6 + jest-validate: 29.7.0 + metro: 0.80.12 + metro-cache: 0.80.12 + metro-core: 0.80.12 + metro-runtime: 0.80.12 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro-config@0.80.5(encoding@0.1.13): dependencies: connect: 3.7.0 @@ -25639,11 +27831,35 @@ snapshots: - supports-color - utf-8-validate + metro-core@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + lodash.throttle: 4.1.1 + metro-resolver: 0.80.12 + metro-core@0.80.5: dependencies: lodash.throttle: 4.1.1 metro-resolver: 0.80.5 + metro-file-map@0.80.12: + dependencies: + anymatch: 3.1.3 + debug: 2.6.9 + 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 + node-abort-controller: 3.1.1 + nullthrows: 1.1.1 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + transitivePeerDependencies: + - supports-color + metro-file-map@0.80.5: dependencies: anymatch: 3.1.2 @@ -25661,16 +27877,44 @@ snapshots: transitivePeerDependencies: - supports-color + metro-minify-terser@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + terser: 5.36.0 + metro-minify-terser@0.80.5: dependencies: terser: 5.19.1 + metro-resolver@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + metro-resolver@0.80.5: {} + metro-runtime@0.80.12: + dependencies: + '@babel/runtime': 7.26.0 + flow-enums-runtime: 0.0.6 + metro-runtime@0.80.5: dependencies: '@babel/runtime': 7.25.6 + metro-source-map@0.80.12: + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-symbolicate: 0.80.12 + nullthrows: 1.1.1 + ob1: 0.80.12 + source-map: 0.5.7 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-source-map@0.80.5: dependencies: '@babel/traverse': 7.25.3 @@ -25684,6 +27928,18 @@ snapshots: transitivePeerDependencies: - supports-color + metro-symbolicate@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + metro-source-map: 0.80.12 + nullthrows: 1.1.1 + source-map: 0.5.7 + through2: 2.0.5 + vlq: 1.0.1 + transitivePeerDependencies: + - supports-color + metro-symbolicate@0.80.5: dependencies: invariant: 2.2.4 @@ -25695,6 +27951,17 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-plugins@0.80.12: + dependencies: + '@babel/core': 7.25.2 + '@babel/generator': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + flow-enums-runtime: 0.0.6 + nullthrows: 1.1.1 + transitivePeerDependencies: + - supports-color + metro-transform-plugins@0.80.5: dependencies: '@babel/core': 7.25.2 @@ -25705,6 +27972,26 @@ snapshots: transitivePeerDependencies: - supports-color + metro-transform-worker@0.80.12: + dependencies: + '@babel/core': 7.25.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + flow-enums-runtime: 0.0.6 + metro: 0.80.12 + metro-babel-transformer: 0.80.12 + metro-cache: 0.80.12 + metro-cache-key: 0.80.12 + metro-minify-terser: 0.80.12 + metro-source-map: 0.80.12 + metro-transform-plugins: 0.80.12 + nullthrows: 1.1.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro-transform-worker@0.80.5(encoding@0.1.13): dependencies: '@babel/core': 7.25.2 @@ -25725,6 +28012,55 @@ snapshots: - supports-color - utf-8-validate + metro@0.80.12: + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/core': 7.25.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + accepts: 1.3.8 + chalk: 4.1.2 + ci-info: 2.0.0 + connect: 3.7.0 + debug: 2.6.9 + denodeify: 1.2.1 + error-stack-parser: 2.1.4 + flow-enums-runtime: 0.0.6 + graceful-fs: 4.2.11 + hermes-parser: 0.23.1 + image-size: 1.1.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.80.12 + metro-cache: 0.80.12 + metro-cache-key: 0.80.12 + metro-config: 0.80.12 + metro-core: 0.80.12 + metro-file-map: 0.80.12 + metro-resolver: 0.80.12 + metro-runtime: 0.80.12 + metro-source-map: 0.80.12 + metro-symbolicate: 0.80.12 + metro-transform-plugins: 0.80.12 + metro-transform-worker: 0.80.12 + mime-types: 2.1.35 + nullthrows: 1.1.1 + serialize-error: 2.1.0 + source-map: 0.5.7 + strip-ansi: 6.0.1 + throat: 5.0.0 + ws: 7.5.10 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + metro@0.80.5(encoding@0.1.13): dependencies: '@babel/code-frame': 7.24.7 @@ -25781,6 +28117,11 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -25809,10 +28150,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@7.4.6: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 @@ -25878,10 +28215,10 @@ snapshots: moment@2.29.4: {} - moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0): + moti@0.28.1(react-dom@18.2.0(react@18.2.0))(react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0): dependencies: framer-motion: 6.5.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-native-reanimated: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native-reanimated: 3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) transitivePeerDependencies: - react - react-dom @@ -25951,6 +28288,8 @@ snapshots: negotiator@0.6.3: {} + negotiator@0.6.4: {} + neo-async@2.6.2: {} nested-error-stacks@2.0.1: {} @@ -25993,6 +28332,12 @@ snapshots: optionalDependencies: encoding: 0.1.13 + node-fetch@2.7.0(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + node-forge@1.3.1: {} node-int64@0.4.0: {} @@ -26043,6 +28388,10 @@ snapshots: nwsapi@2.2.12: {} + ob1@0.80.12: + dependencies: + flow-enums-runtime: 0.0.6 + ob1@0.80.5: {} object-assign@4.1.1: {} @@ -26051,6 +28400,8 @@ snapshots: object-inspect@1.13.1: {} + object-inspect@1.13.2: {} + object-is@1.1.5: dependencies: call-bind: 1.0.5 @@ -26342,6 +28693,8 @@ snapshots: picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} picomatch@3.0.1: {} @@ -26701,6 +29054,11 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode.js@2.3.1: {} punycode@2.3.1: {} @@ -26760,7 +29118,7 @@ snapshots: minimist: 1.2.6 strip-json-comments: 2.0.1 - react-beautiful-dnd@13.1.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + react-beautiful-dnd@13.1.1(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.25.9 css-box-model: 1.2.1 @@ -26768,7 +29126,7 @@ snapshots: raf-schd: 4.0.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-redux: 7.2.8(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-redux: 7.2.8(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) redux: 4.2.0 use-memo-one: 1.1.3(react@18.2.0) transitivePeerDependencies: @@ -26796,17 +29154,17 @@ snapshots: react-cosmos-core: 6.1.1 react-cosmos-renderer: 6.1.1 - react-cosmos-plugin-vite@6.1.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1)): + react-cosmos-plugin-vite@6.1.1(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0)): dependencies: react-cosmos-core: 6.1.1 react-cosmos-dom: 6.1.1 - vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) - react-cosmos-plugin-vite@6.1.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)): + react-cosmos-plugin-vite@6.1.1(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0)): dependencies: react-cosmos-core: 6.1.1 react-cosmos-dom: 6.1.1 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) react-cosmos-renderer@6.1.1: dependencies: @@ -26929,6 +29287,11 @@ snapshots: react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-context-menu-view@1.15.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-country-codes-picker@2.3.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: react: 18.2.0 @@ -26938,16 +29301,20 @@ snapshots: dependencies: react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) - react-native-email-link@1.16.1(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + react-native-device-info@10.12.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)): + dependencies: + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + + react-native-email-link@1.16.1(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: react: 18.2.0 - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) react-native-fetch-api@3.0.0: dependencies: p-defer: 3.0.0 - react-native-gesture-handler@2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + react-native-gesture-handler@2.16.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: '@egjs/hammerjs': 2.0.17 hoist-non-react-statics: 3.3.2 @@ -26955,7 +29322,7 @@ snapshots: lodash: 4.17.21 prop-types: 15.8.1 react: 18.2.0 - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: @@ -26966,11 +29333,25 @@ snapshots: react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-gesture-handler@2.20.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + '@egjs/hammerjs': 2.0.17 + hoist-non-react-statics: 3.3.2 + invariant: 2.2.4 + prop-types: 15.8.1 + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-get-random-values@1.11.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)): dependencies: fast-base64-decode: 1.0.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-get-random-values@1.11.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)): + dependencies: + fast-base64-decode: 1.0.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-macos@0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: '@jest/create-cache-key-function': 29.7.0 @@ -26996,21 +29377,71 @@ snapshots: jest-environment-node: 29.7.0 jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.80.5 - metro-source-map: 0.80.5 + metro-runtime: 0.80.12 + metro-source-map: 0.80.12 mkdirp: 0.5.6 nullthrows: 1.1.1 pretty-format: 26.6.2 promise: 8.3.0 react: 18.2.0 react-devtools-core: 4.28.5 - react-refresh: 0.14.0 + react-refresh: 0.14.2 react-shallow-renderer: 16.15.0(react@18.2.0) regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 - ws: 6.2.2 + ws: 6.2.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - react-native + - supports-color + - utf-8-validate + + react-native-macos@0.73.24(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.3.6(encoding@0.1.13) + '@react-native-community/cli-platform-android': 12.3.6(encoding@0.1.13) + '@react-native-community/cli-platform-ios': 12.3.6(encoding@0.1.13) + '@react-native-mac/virtualized-lists': 0.73.3(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.3(@babel/preset-env@7.26.0(@babel/core@7.25.2)) + '@react-native/community-cli-plugin': 0.73.17(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + base64-js: 1.5.1 + chalk: 4.1.2 + deprecated-react-native-prop-types: 5.0.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.80.12 + metro-source-map: 0.80.12 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.5 + react-refresh: 0.14.2 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + ws: 6.2.3 yargs: 17.7.2 transitivePeerDependencies: - '@babel/core' @@ -27038,6 +29469,15 @@ snapshots: text-encoding: 0.7.0 web-streams-polyfill: 3.3.3 + react-native-polyfill-globals@3.1.0(base-64@1.0.0)(react-native-fetch-api@3.0.0)(react-native-get-random-values@1.11.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(react-native-url-polyfill@2.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)))(text-encoding@0.7.0)(web-streams-polyfill@3.3.3): + dependencies: + base-64: 1.0.0 + react-native-fetch-api: 3.0.0 + react-native-get-random-values: 1.11.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + react-native-url-polyfill: 2.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + text-encoding: 0.7.0 + web-streams-polyfill: 3.3.3 + react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: '@babel/core': 7.25.2 @@ -27054,16 +29494,44 @@ snapshots: transitivePeerDependencies: - supports-color + react-native-reanimated@3.8.1(patch_hash=n2blcrn244i77n7euhqt5mi2km)(@babel/core@7.25.2)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.25.2) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.25.2) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.25.2) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.25.2) + '@babel/preset-typescript': 7.23.3(@babel/core@7.25.2) + convert-source-map: 2.0.0 + invariant: 2.2.4 + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + transitivePeerDependencies: + - supports-color + react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) - react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + react-native-safe-area-context@4.9.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + + react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + react: 18.2.0 + react-freeze: 1.0.3(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + warn-once: 0.1.1 + + react-native-screens@3.29.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: react: 18.2.0 react-freeze: 1.0.3(react@18.2.0) - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) warn-once: 0.1.1 react-native-sse@1.2.1: {} @@ -27092,11 +29560,23 @@ snapshots: react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-svg@15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + css-select: 5.1.0 + css-tree: 1.1.3 + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-url-polyfill@2.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)): dependencies: react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) whatwg-url-without-unicode: 8.0.0-3 + react-native-url-polyfill@2.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)): + dependencies: + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + whatwg-url-without-unicode: 8.0.0-3 + react-native-web-internals@1.101.3: dependencies: '@tamagui/normalize-css-color': 1.101.3 @@ -27131,12 +29611,12 @@ snapshots: transitivePeerDependencies: - encoding - react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: escape-string-regexp: 2.0.0 invariant: 2.2.4 react: 18.2.0 - react-native: 0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0) react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: @@ -27145,9 +29625,16 @@ snapshots: react: 18.2.0 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-webview@13.6.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + escape-string-regexp: 2.0.0 + invariant: 2.2.4 + react: 18.2.0 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: - '@babel/runtime': 7.25.9 + '@babel/runtime': 7.26.0 '@jest/create-cache-key-function': 29.7.0 '@react-native-community/cli': 12.3.6(encoding@0.1.13) '@react-native-community/cli-platform-android': 12.3.6(encoding@0.1.13) @@ -27172,8 +29659,8 @@ snapshots: jest-environment-node: 29.7.0 jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.80.5 - metro-source-map: 0.80.5 + metro-runtime: 0.80.12 + metro-source-map: 0.80.12 mkdirp: 0.5.6 nullthrows: 1.1.1 pretty-format: 26.6.2 @@ -27181,14 +29668,68 @@ snapshots: react: 18.2.0 react-devtools-core: 4.28.5 react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) - react-refresh: 0.14.0 + react-refresh: 0.14.2 react-shallow-renderer: 16.15.0(react@18.2.0) regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 source-map-support: 0.5.21 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 - ws: 6.2.2 + ws: 6.2.3 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - applicationinsights-native-metrics + - bufferutil + - encoding + - supports-color + - utf-8-validate + + react-native-windows@0.73.11(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + dependencies: + '@babel/runtime': 7.26.0 + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.3.6(encoding@0.1.13) + '@react-native-community/cli-platform-android': 12.3.6(encoding@0.1.13) + '@react-native-community/cli-platform-ios': 12.3.6(encoding@0.1.13) + '@react-native-windows/cli': 0.73.2(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.3(@babel/preset-env@7.26.0(@babel/core@7.25.2)) + '@react-native/community-cli-plugin': 0.73.17(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + '@react-native/virtualized-lists': 0.73.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + base64-js: 1.5.1 + chalk: 4.1.2 + deprecated-react-native-prop-types: 5.0.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.80.12 + metro-source-map: 0.80.12 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.5 + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-refresh: 0.14.2 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + ws: 6.2.3 yargs: 17.7.2 transitivePeerDependencies: - '@babel/core' @@ -27199,19 +29740,19 @@ snapshots: - supports-color - utf-8-validate - react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0): + react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native-community/cli': 12.3.7(encoding@0.1.13) '@react-native-community/cli-platform-android': 12.3.7(encoding@0.1.13) '@react-native-community/cli-platform-ios': 12.3.7(encoding@0.1.13) '@react-native/assets-registry': 0.73.1 - '@react-native/codegen': 0.73.3(@babel/preset-env@7.23.7(@babel/core@7.23.7)) - '@react-native/community-cli-plugin': 0.73.18(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13) + '@react-native/codegen': 0.73.3(@babel/preset-env@7.26.0(@babel/core@7.23.7)) + '@react-native/community-cli-plugin': 0.73.18(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13) '@react-native/gradle-plugin': 0.73.4 '@react-native/js-polyfills': 0.73.1 '@react-native/normalize-colors': 0.73.2 - '@react-native/virtualized-lists': 0.73.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.23.7(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0)) + '@react-native/virtualized-lists': 0.73.4(react-native@0.73.9(@babel/core@7.23.7)(@babel/preset-env@7.26.0(@babel/core@7.23.7))(encoding@0.1.13)(react@18.2.0)) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -27297,21 +29838,70 @@ snapshots: - supports-color - utf-8-validate + react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0): + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.3.7(encoding@0.1.13) + '@react-native-community/cli-platform-android': 12.3.7(encoding@0.1.13) + '@react-native-community/cli-platform-ios': 12.3.7(encoding@0.1.13) + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.3(@babel/preset-env@7.26.0(@babel/core@7.25.2)) + '@react-native/community-cli-plugin': 0.73.18(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + '@react-native/virtualized-lists': 0.73.4(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0)) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + base64-js: 1.5.1 + chalk: 4.1.2 + deprecated-react-native-prop-types: 5.0.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.80.5 + metro-source-map: 0.80.5 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.5 + react-refresh: 0.14.0 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.20 + ws: 6.2.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + react-oembed-container@https://codeload.github.com/stefkampen/react-oembed-container/tar.gz/802eee0dba7986faa9c931b1c016acba5369d5f9(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-qr-code@2.0.12(react-native-svg@15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0): + react-qr-code@2.0.12(react-native-svg@15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(react@18.2.0): dependencies: prop-types: 15.8.1 qr.js: 0.0.0 react: 18.2.0 optionalDependencies: - react-native-svg: 15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + react-native-svg: 15.0.0(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - react-redux@7.2.8(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + react-redux@7.2.8(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: '@babel/runtime': 7.25.9 '@types/react-redux': 7.1.24 @@ -27322,10 +29912,12 @@ snapshots: react-is: 17.0.2 optionalDependencies: react-dom: 18.2.0(react@18.2.0) - react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) + react-native: 0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0) react-refresh@0.14.0: {} + react-refresh@0.14.2: {} + react-remove-scroll-bar@2.3.3(@types/react@18.2.55)(react@18.2.0): dependencies: react: 18.2.0 @@ -27513,6 +30105,10 @@ snapshots: dependencies: regenerate: 1.4.2 + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + regenerate@1.4.2: {} regenerator-runtime@0.10.5: {} @@ -27540,6 +30136,13 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.1 + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + regexpu-core@5.3.2: dependencies: '@babel/regjsgen': 0.8.0 @@ -27549,6 +30152,21 @@ snapshots: unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.1.0 + regexpu-core@6.1.1: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.2 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.11.2: + dependencies: + jsesc: 3.0.2 + regjsparser@0.9.1: dependencies: jsesc: 0.5.0 @@ -27561,9 +30179,9 @@ snapshots: require-from-string@2.0.2: {} - require-in-the-middle@7.3.0: + require-in-the-middle@7.4.0: dependencies: - debug: 4.3.4 + debug: 4.3.7 module-details-from-path: 1.0.3 resolve: 1.22.8 transitivePeerDependencies: @@ -27657,13 +30275,13 @@ snapshots: rollup-plugin-analyzer@4.0.0: {} - rollup-plugin-terser@7.0.2(rollup@2.79.1): + rollup-plugin-terser@7.0.2(rollup@2.79.2): dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.26.2 jest-worker: 26.6.2 - rollup: 2.79.1 + rollup: 2.79.2 serialize-javascript: 4.0.0 - terser: 5.19.1 + terser: 5.36.0 rollup-plugin-visualizer@5.12.0(rollup@4.13.0): dependencies: @@ -27674,7 +30292,7 @@ snapshots: optionalDependencies: rollup: 4.13.0 - rollup@2.79.1: + rollup@2.79.2: optionalDependencies: fsevents: 2.3.3 @@ -27784,6 +30402,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.6.3: {} + send@0.18.0: dependencies: debug: 2.6.9 @@ -27802,6 +30422,24 @@ snapshots: transitivePeerDependencies: - supports-color + send@0.19.0: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + serialize-error@2.1.0: {} serialize-javascript@4.0.0: @@ -27817,6 +30455,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@1.16.2: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0 + transitivePeerDependencies: + - supports-color + set-blocking@2.0.0: {} set-cookie-parser@2.5.1: {} @@ -27843,6 +30490,13 @@ snapshots: functions-have-names: 1.2.3 has-property-descriptors: 1.0.0 + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + set-value@4.1.0: dependencies: is-plain-object: 2.0.4 @@ -27890,6 +30544,13 @@ snapshots: get-intrinsic: 1.2.2 object-inspect: 1.13.1 + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -28012,13 +30673,13 @@ snapshots: sprintf-js@1.0.3: {} - sqlocal@0.11.1(drizzle-orm@0.30.9(patch_hash=cegrec33e6f7d6ltk7vff5r7w4)(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.8.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0)): + sqlocal@0.11.1(drizzle-orm@0.36.1(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0)): dependencies: '@sqlite.org/sqlite-wasm': 3.46.0-build2 coincident: 1.2.3 nanoid: 5.0.7 optionalDependencies: - drizzle-orm: 0.30.9(patch_hash=cegrec33e6f7d6ltk7vff5r7w4)(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.8.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0) + drizzle-orm: 0.36.1(@op-engineering/op-sqlite@5.0.5(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0))(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.9)(@types/react@18.2.55)(better-sqlite3@9.4.5)(react@18.2.0) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -28126,6 +30787,21 @@ snapshots: set-function-name: 2.0.1 side-channel: 1.0.4 + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.3 + set-function-name: 2.0.2 + side-channel: 1.0.6 + string.prototype.trim@1.2.8: dependencies: call-bind: 1.0.5 @@ -28268,10 +30944,6 @@ snapshots: dependencies: copy-anything: 3.0.5 - superjson@2.2.1: - dependencies: - copy-anything: 3.0.5 - superstruct@0.6.2: dependencies: clone-deep: 2.0.2 @@ -28389,21 +31061,21 @@ snapshots: transitivePeerDependencies: - ts-node - tamagui@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): + tamagui@1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0): dependencies: '@tamagui/accordion': 1.112.12(react@18.2.0) '@tamagui/adapt': 1.112.12(react@18.2.0) - '@tamagui/alert-dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/alert-dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/animate-presence': 1.112.12(react@18.2.0) '@tamagui/avatar': 1.112.12(react@18.2.0) '@tamagui/button': 1.112.12(react@18.2.0) '@tamagui/card': 1.112.12(react@18.2.0) - '@tamagui/checkbox': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/checkbox': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/compose-refs': 1.112.12(react@18.2.0) '@tamagui/constants': 1.112.12(react@18.2.0) '@tamagui/core': 1.112.12(react@18.2.0) '@tamagui/create-context': 1.112.12(react@18.2.0) - '@tamagui/dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/dialog': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/elements': 1.112.12(react@18.2.0) '@tamagui/fake-react-native': 1.112.12 '@tamagui/focusable': 1.112.12(react@18.2.0) @@ -28415,29 +31087,29 @@ snapshots: '@tamagui/group': 1.112.12(react@18.2.0) '@tamagui/helpers-tamagui': 1.112.12(react@18.2.0) '@tamagui/image': 1.112.12(react@18.2.0) - '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/label': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/linear-gradient': 1.112.12(react@18.2.0) '@tamagui/list-item': 1.112.12(react@18.2.0) '@tamagui/polyfill-dev': 1.112.12 - '@tamagui/popover': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/popover': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/popper': 1.112.12(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/portal': 1.112.12(react@18.2.0) '@tamagui/progress': 1.112.12(react@18.2.0) - '@tamagui/radio-group': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) - '@tamagui/react-native-media-driver': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/radio-group': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/react-native-media-driver': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/scroll-view': 1.112.12(react@18.2.0) - '@tamagui/select': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/select': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/separator': 1.112.12(react@18.2.0) '@tamagui/shapes': 1.112.12(react@18.2.0) '@tamagui/sheet': 1.112.12(@types/react@18.2.55)(react@18.2.0) '@tamagui/slider': 1.112.12(react@18.2.0) '@tamagui/stacks': 1.112.12(react@18.2.0) - '@tamagui/switch': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/switch': 1.112.12(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/tabs': 1.112.12(react@18.2.0) '@tamagui/text': 1.112.12(react@18.2.0) '@tamagui/theme': 1.112.12(react@18.2.0) '@tamagui/toggle-group': 1.112.12(react@18.2.0) - '@tamagui/tooltip': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.23.7(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) + '@tamagui/tooltip': 1.112.12(@types/react@18.2.55)(react-dom@18.2.0(react@18.2.0))(react-native@0.73.9(@babel/core@7.25.2)(@babel/preset-env@7.26.0(@babel/core@7.25.2))(encoding@0.1.13)(react@18.2.0))(react@18.2.0) '@tamagui/use-controllable-state': 1.112.12(react@18.2.0) '@tamagui/use-debounce': 1.112.12(react@18.2.0) '@tamagui/use-force-update': 1.112.12(react@18.2.0) @@ -28526,6 +31198,13 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + terser@5.36.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -28639,6 +31318,8 @@ snapshots: tslib@2.6.2: {} + tslib@2.8.1: {} + tsup@8.0.1(@swc/core@1.7.26(@swc/helpers@0.5.13))(postcss@8.4.35)(typescript@5.4.5): dependencies: bundle-require: 4.0.2(esbuild@0.19.12) @@ -28780,6 +31461,8 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.19.8: {} + unicode-canonical-property-names-ecmascript@2.0.0: {} unicode-match-property-ecmascript@2.0.0: @@ -28789,6 +31472,8 @@ snapshots: unicode-match-property-value-ecmascript@2.1.0: {} + unicode-match-property-value-ecmascript@2.2.0: {} + unicode-property-aliases-ecmascript@2.1.0: {} unimodules-app-loader@4.5.0: {} @@ -28837,6 +31522,12 @@ snapshots: escalade: 3.1.2 picocolors: 1.0.1 + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + urbit-ob@5.0.1: dependencies: bn.js: 4.12.0 @@ -28966,14 +31657,31 @@ snapshots: react-dom: 18.2.0(react@18.2.0) redux: 4.2.0 - vite-node@0.34.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1): + vite-node@0.34.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.4 mlly: 1.5.0 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vite-node@1.2.2(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0): + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -28984,13 +31692,13 @@ snapshots: - supports-color - terser - vite-node@1.2.2(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1): + vite-node@1.2.2(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -29001,13 +31709,13 @@ snapshots: - supports-color - terser - vite-node@1.5.0(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1): + vite-node@1.5.0(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0): dependencies: cac: 6.7.14 debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.1 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) transitivePeerDependencies: - '@types/node' - less @@ -29018,57 +31726,57 @@ snapshots: - supports-color - terser - vite-plugin-pwa@0.17.5(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): + vite-plugin-pwa@0.17.5(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): dependencies: debug: 4.3.4 fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) workbox-build: 7.0.0(@types/babel__core@7.20.5) workbox-window: 7.0.0 transitivePeerDependencies: - supports-color - vite-plugin-pwa@0.17.5(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): + vite-plugin-pwa@0.17.5(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.0.0): dependencies: debug: 4.3.4 fast-glob: 3.3.2 pretty-bytes: 6.1.1 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) workbox-build: 7.0.0(@types/babel__core@7.20.5) workbox-window: 7.0.0 transitivePeerDependencies: - supports-color - vite-plugin-singlefile@2.0.1(rollup@4.13.0)(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)): + vite-plugin-singlefile@2.0.1(rollup@4.13.0)(vite@5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0)): dependencies: micromatch: 4.0.5 rollup: 4.13.0 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) - vite-plugin-svgr@4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1)): + vite-plugin-svgr@4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.13.0) '@svgr/core': 8.1.0(typescript@5.4.5) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) - vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite-plugin-svgr@4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1)): + vite-plugin-svgr@4.2.0(rollup@4.13.0)(typescript@5.4.5)(vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@4.13.0) '@svgr/core': 8.1.0(typescript@5.4.5) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.4.5)) - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) transitivePeerDependencies: - rollup - supports-color - typescript - vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1): + vite@5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0): dependencies: esbuild: 0.19.12 postcss: 8.4.35 @@ -29077,9 +31785,9 @@ snapshots: '@types/node': 20.10.8 fsevents: 2.3.3 lightningcss: 1.19.0 - terser: 5.19.1 + terser: 5.36.0 - vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1): + vite@5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0): dependencies: esbuild: 0.19.12 postcss: 8.4.35 @@ -29088,9 +31796,20 @@ snapshots: '@types/node': 20.14.10 fsevents: 2.3.3 lightningcss: 1.19.0 - terser: 5.19.1 + terser: 5.36.0 + + vite@5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0): + dependencies: + esbuild: 0.19.12 + postcss: 8.4.35 + rollup: 4.13.0 + optionalDependencies: + '@types/node': 20.17.6 + fsevents: 2.3.3 + lightningcss: 1.19.0 + terser: 5.36.0 - vitest@0.34.6(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1): + vitest@0.34.6(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0): dependencies: '@types/chai': 4.3.11 '@types/chai-subset': 1.3.5 @@ -29113,8 +31832,8 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.6.0 tinypool: 0.7.0 - vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) - vite-node: 0.34.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) + vite-node: 0.34.6(@types/node@20.10.8)(lightningcss@1.19.0)(terser@5.36.0) why-is-node-running: 2.2.2 optionalDependencies: jsdom: 23.2.0 @@ -29127,7 +31846,7 @@ snapshots: - supports-color - terser - vitest@1.2.2(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1): + vitest@1.2.2(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0): dependencies: '@vitest/expect': 1.2.2 '@vitest/runner': 1.2.2 @@ -29147,8 +31866,8 @@ snapshots: strip-literal: 1.3.0 tinybench: 2.6.0 tinypool: 0.8.2 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) - vite-node: 1.2.2(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) + vite-node: 1.2.2(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.36.0) why-is-node-running: 2.2.2 optionalDependencies: '@types/node': 20.14.10 @@ -29162,7 +31881,42 @@ snapshots: - supports-color - terser - vitest@1.5.0(@types/node@20.14.10)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.19.1): + vitest@1.2.2(@types/node@20.17.6)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0): + dependencies: + '@vitest/expect': 1.2.2 + '@vitest/runner': 1.2.2 + '@vitest/snapshot': 1.2.2 + '@vitest/spy': 1.2.2 + '@vitest/utils': 1.2.2 + acorn-walk: 8.3.2 + cac: 6.7.14 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.7 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 1.3.0 + tinybench: 2.6.0 + tinypool: 0.8.2 + vite: 5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) + vite-node: 1.2.2(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) + why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.17.6 + jsdom: 23.2.0 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vitest@1.5.0(@types/node@20.17.6)(jsdom@23.2.0)(lightningcss@1.19.0)(terser@5.36.0): dependencies: '@vitest/expect': 1.5.0 '@vitest/runner': 1.5.0 @@ -29181,11 +31935,11 @@ snapshots: strip-literal: 2.1.0 tinybench: 2.6.0 tinypool: 0.8.4 - vite: 5.1.6(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) - vite-node: 1.5.0(@types/node@20.14.10)(lightningcss@1.19.0)(terser@5.19.1) + vite: 5.1.6(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) + vite-node: 1.5.0(@types/node@20.17.6)(lightningcss@1.19.0)(terser@5.36.0) why-is-node-running: 2.2.2 optionalDependencies: - '@types/node': 20.14.10 + '@types/node': 20.17.6 jsdom: 23.2.0 transitivePeerDependencies: - less @@ -29357,23 +32111,23 @@ snapshots: workbox-build@7.0.0(@types/babel__core@7.20.5): dependencies: - '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) + '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1) '@babel/core': 7.25.2 - '@babel/preset-env': 7.23.7(@babel/core@7.25.2) - '@babel/runtime': 7.25.9 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1) - '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) - '@rollup/plugin-replace': 2.4.2(rollup@2.79.1) + '@babel/preset-env': 7.26.0(@babel/core@7.25.2) + '@babel/runtime': 7.26.0 + '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.2) + '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2) + '@rollup/plugin-replace': 2.4.2(rollup@2.79.2) '@surma/rollup-plugin-off-main-thread': 2.2.3 - ajv: 8.12.0 + ajv: 8.17.1 common-tags: 1.8.2 fast-json-stable-stringify: 2.1.0 fs-extra: 9.1.0 glob: 7.2.3 lodash: 4.17.21 pretty-bytes: 5.6.0 - rollup: 2.79.1 - rollup-plugin-terser: 7.0.2(rollup@2.79.1) + rollup: 2.79.2 + rollup-plugin-terser: 7.0.2(rollup@2.79.2) source-map: 0.8.0-beta.0 stringify-object: 3.3.0 strip-comments: 2.0.1 @@ -29516,6 +32270,12 @@ snapshots: dependencies: async-limiter: 1.0.1 + ws@6.2.3: + dependencies: + async-limiter: 1.0.1 + + ws@7.5.10: {} + ws@7.5.9: {} ws@8.16.0: {} @@ -29576,6 +32336,8 @@ snapshots: yaml@2.4.0: {} + yaml@2.6.0: {} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 @@ -29602,7 +32364,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 From b68f751836453267b823e67a9ebecb43c42527d5 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Thu, 7 Nov 2024 20:17:02 -0500 Subject: [PATCH 15/32] use generated columns in UI references, fix conflict update helper, header button for getting to contacts page --- apps/tlon-mobile/drizzle-studio.config.ts | 1 - apps/tlon-mobile/package.json | 2 +- packages/app/features/top/ChatListScreen.tsx | 6 + packages/shared/src/api/contactsApi.ts | 20 +- ...warlock.sql => 0000_conscious_mercury.sql} | 0 .../src/db/migrations/meta/0000_snapshot.json | 2 +- .../src/db/migrations/meta/_journal.json | 4 +- .../shared/src/db/migrations/migrations.js | 2 +- packages/shared/src/db/queries.ts | 1 + packages/ui/src/components/ContactName.tsx | 16 +- packages/ui/src/components/ContactNameV2.tsx | 7 +- packages/ui/src/components/NavBarView.tsx | 7 +- packages/ui/src/hooks/contactSorters.ts | 23 +- packages/ui/src/utils/channelUtils.tsx | 6 +- packages/ui/src/utils/user.ts | 6 +- pnpm-lock.yaml | 233 +----------------- 16 files changed, 49 insertions(+), 287 deletions(-) rename packages/shared/src/db/migrations/{0000_steady_adam_warlock.sql => 0000_conscious_mercury.sql} (100%) diff --git a/apps/tlon-mobile/drizzle-studio.config.ts b/apps/tlon-mobile/drizzle-studio.config.ts index bc0a030888..9c3065b1e1 100644 --- a/apps/tlon-mobile/drizzle-studio.config.ts +++ b/apps/tlon-mobile/drizzle-studio.config.ts @@ -2,7 +2,6 @@ import type { Config } from 'drizzle-kit'; export default { schema: '../../packages/shared/src/db/schema.ts', - driver: 'better-sqlite', dialect: 'sqlite', dbCredentials: { url: (process.env as any).DB_URL ?? '', diff --git a/apps/tlon-mobile/package.json b/apps/tlon-mobile/package.json index ed97bbba43..2537b9e222 100644 --- a/apps/tlon-mobile/package.json +++ b/apps/tlon-mobile/package.json @@ -136,7 +136,7 @@ "connect": "^3.7.0", "cross-env": "^7.0.3", "dotenv": "^16.0.3", - "drizzle-kit": "^0.21.1", + "drizzle-kit": "^0.28.0", "jest": "^29.7.0", "jest-expo": "^50.0.3", "jest-fetch-mock": "^3.0.3", diff --git a/packages/app/features/top/ChatListScreen.tsx b/packages/app/features/top/ChatListScreen.tsx index 07cf0508b8..f9253493b3 100644 --- a/packages/app/features/top/ChatListScreen.tsx +++ b/packages/app/features/top/ChatListScreen.tsx @@ -300,6 +300,12 @@ export function ChatListScreenView({ navigation.navigate('Contacts')} + /> + } rightControls={ <> { return { id, - nickname: contact?.nickname ?? null, + peerNickname: contact?.nickname ?? null, + peerAvatarImage: contact?.avatar ?? null, bio: contact?.bio ?? null, status: contact?.status ?? null, color: contact?.color ? normalizeUrbitColor(contact.color) : null, coverImage: contact?.cover ?? null, - avatarImage: contact?.avatar ?? null, pinnedGroups: contact?.groups?.map((groupId) => ({ groupId, @@ -260,21 +260,20 @@ export const v1PeerToClientProfile = ( isContact?: boolean; isContactSuggestion?: boolean; } -) => { +): db.Contact => { return { id, - nickname: contact.nickname?.value ?? null, + peerNickname: contact.nickname?.value ?? null, + peerAvatarImage: contact.avatar?.value ?? null, bio: contact.bio?.value ?? null, status: contact.status?.value ?? null, color: contact.color ? normalizeUrbitColor(contact.color.value) : null, coverImage: contact.cover?.value ?? null, - avatarImage: contact.avatar?.value ?? null, pinnedGroups: contact.groups?.value.map((group) => ({ groupId: group.value, contactId: id, })) ?? [], - isContact: config?.isContact, isContactSuggestion: config?.isContactSuggestion && !config?.isContact, }; @@ -308,9 +307,11 @@ export const contactToClientProfile = ( return { id: userId, - nickname: base.nickname?.value ?? null, + peerNickname: base.nickname?.value ?? null, + customNickname: overrides.nickname?.value, + peerAvatarImage: base.avatar?.value ?? null, + customAvatarImage: overrides.avatar?.value, bio: base.bio?.value ?? null, - avatarImage: base.avatar?.value ?? null, coverImage: base.cover?.value ?? null, color: base.color ? normalizeUrbitColor(base.color.value) : null, pinnedGroups: @@ -318,10 +319,7 @@ export const contactToClientProfile = ( groupId: group.value, contactId: userId, })) ?? [], - isContact: true, - customNickname: overrides.nickname?.value, - customAvatarImage: overrides.avatar?.value, isContactSuggestion: false, }; }; diff --git a/packages/shared/src/db/migrations/0000_steady_adam_warlock.sql b/packages/shared/src/db/migrations/0000_conscious_mercury.sql similarity index 100% rename from packages/shared/src/db/migrations/0000_steady_adam_warlock.sql rename to packages/shared/src/db/migrations/0000_conscious_mercury.sql diff --git a/packages/shared/src/db/migrations/meta/0000_snapshot.json b/packages/shared/src/db/migrations/meta/0000_snapshot.json index 62656faf62..933ab9a844 100644 --- a/packages/shared/src/db/migrations/meta/0000_snapshot.json +++ b/packages/shared/src/db/migrations/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "6", "dialect": "sqlite", - "id": "be4198b7-1f8f-4b63-a6ae-06e24f222dc3", + "id": "0f12a28f-e94f-4b26-88aa-d6990e49e24b", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "activity_events": { diff --git a/packages/shared/src/db/migrations/meta/_journal.json b/packages/shared/src/db/migrations/meta/_journal.json index ee09001fc2..b8a71f409c 100644 --- a/packages/shared/src/db/migrations/meta/_journal.json +++ b/packages/shared/src/db/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "6", - "when": 1730994594447, - "tag": "0000_steady_adam_warlock", + "when": 1731026756201, + "tag": "0000_conscious_mercury", "breakpoints": true } ] diff --git a/packages/shared/src/db/migrations/migrations.js b/packages/shared/src/db/migrations/migrations.js index 12d3183eeb..651b57cb79 100644 --- a/packages/shared/src/db/migrations/migrations.js +++ b/packages/shared/src/db/migrations/migrations.js @@ -1,7 +1,7 @@ // This file is required for Expo/React Native SQLite migrations - https://orm.drizzle.team/quick-sqlite/expo import journal from './meta/_journal.json'; -import m0000 from './0000_steady_adam_warlock.sql'; +import m0000 from './0000_conscious_mercury.sql'; export default { journal, diff --git a/packages/shared/src/db/queries.ts b/packages/shared/src/db/queries.ts index 32e95e5c8b..c07b94ab7f 100644 --- a/packages/shared/src/db/queries.ts +++ b/packages/shared/src/db/queries.ts @@ -3430,6 +3430,7 @@ function conflictUpdateSetAll(table: Table, exclude?: string[]) { return conflictUpdateSet( ...Object.entries(columns) .filter(([k]) => !exclude?.includes(k)) + .filter(([_, c]) => c.generated === undefined) .map(([_, v]) => v) ); } diff --git a/packages/ui/src/components/ContactName.tsx b/packages/ui/src/components/ContactName.tsx index b726127063..a3f0bca0ee 100644 --- a/packages/ui/src/components/ContactName.tsx +++ b/packages/ui/src/components/ContactName.tsx @@ -77,10 +77,7 @@ export default function ContactName({ const calm = useCalm(); const contact = useContact(userId); const shouldShowNickname = useMemo( - () => - (contact?.customNickname || contact?.nickname) && - !calm.disableNicknames && - showNickname, + () => contact?.nickname && !calm.disableNicknames && showNickname, [contact, calm.disableNicknames, showNickname] ); @@ -104,13 +101,12 @@ export default function ContactName({ ) : ( formattedId.display )} - {!calm.disableNicknames && - (contact?.customNickname || contact?.nickname) ? ( + {!calm.disableNicknames && contact?.nickname ? ( matchText ? ( {' '} @@ -133,7 +129,7 @@ export default function ContactName({ > {shouldShowNickname ? ( ) : ( @@ -151,9 +147,7 @@ export default function ContactName({ aria-label={formattedId.ariaLabel} {...rest} > - {shouldShowNickname - ? contact!.customNickname || contact!.nickname - : formattedId.display} + {shouldShowNickname ? contact!.nickname : formattedId.display} ); } diff --git a/packages/ui/src/components/ContactNameV2.tsx b/packages/ui/src/components/ContactNameV2.tsx index 36d6a37482..5e63117657 100644 --- a/packages/ui/src/components/ContactNameV2.tsx +++ b/packages/ui/src/components/ContactNameV2.tsx @@ -21,7 +21,7 @@ export const useContactNameProps = ({ const calm = useCalm(); const contact = useContact(contactId); const showNickname = - (contact?.customNickname || contact?.nickname) && + contact?.nickname && (calm.disableNicknames ? mode === 'nickname' : mode !== 'contactId'); const showContactId = (mode === 'auto' && !showNickname) || @@ -35,14 +35,13 @@ export const useContactNameProps = ({ return { children: [ showContactId ? idMeta?.display : null, - showNickname ? contact?.customNickname || contact?.nickname : null, + showNickname ? contact?.nickname : null, ] .filter((i) => !!i) .join(' '), ['aria-label']: idMeta?.ariaLabel, }; }, [ - contact?.customNickname, contact?.nickname, contactId, expandLongIds, @@ -67,7 +66,7 @@ const BaseContactName = Text.styleable<{ const calm = useCalm(); const contact = useContact(contactId); const showNickname = - (contact?.customNickname || contact?.nickname) && + contact?.nickname && (calm.disableNicknames ? mode === 'nickname' : mode !== 'contactId'); const showContactId = (mode === 'auto' && !showNickname) || diff --git a/packages/ui/src/components/NavBarView.tsx b/packages/ui/src/components/NavBarView.tsx index 215c931b05..f7bde5cdbb 100644 --- a/packages/ui/src/components/NavBarView.tsx +++ b/packages/ui/src/components/NavBarView.tsx @@ -20,7 +20,10 @@ export const NavBarView = ({ currentUserId: string; showContactsTab?: boolean; }) => { - const isRouteActive = (routeName: string) => { + const isRouteActive = (routeName: string | string[]) => { + if (Array.isArray(routeName)) { + return routeName.includes(currentRoute); + } return currentRoute === routeName; }; const haveUnreadUnseenActivity = store.useHaveUnreadUnseenActivity(); @@ -43,7 +46,7 @@ export const NavBarView = ({ 0} // intentionally leave undotted for now hasUnreads={false} diff --git a/packages/ui/src/hooks/contactSorters.ts b/packages/ui/src/hooks/contactSorters.ts index 9740a806fa..a8776b14b8 100644 --- a/packages/ui/src/hooks/contactSorters.ts +++ b/packages/ui/src/hooks/contactSorters.ts @@ -6,7 +6,6 @@ import { useMemo } from 'react'; import { isValidPatp } from 'urbit-ob'; import * as utils from '../utils'; -import { resolveNickname } from '../utils'; type UrbitSort = 'pals' | 'nickname' | 'alphabetical'; const DEFAULT_SORT_ORDER: UrbitSort[] = ['nickname', 'alphabetical']; @@ -33,8 +32,8 @@ export function useAlphabeticallySegmentedContacts( // convert contact to alphabetical representation and bucket by first letter for (const contact of contacts) { - const sortableName = resolveNickname(contact) - ? anyAscii(resolveNickname(contact)!.replace(/[~-]/g, '')) + const sortableName = contact.nickname + ? anyAscii(contact.nickname!.replace(/[~-]/g, '')) : contact.id.replace(/[~-]/g, ''); const firstAlpha = utils.getFirstAlphabeticalChar(sortableName); if (!segmented[firstAlpha]) { @@ -158,18 +157,18 @@ function palsSorter( } function nicknameSorter(a: db.Contact, b: db.Contact): number { - if (resolveNickname(a) && !resolveNickname(b)) { + if (a.nickname && !b.nickname) { return -1; } - if (resolveNickname(b) && !resolveNickname(a)) { + if (b.nickname && !a.nickname) { return 1; } // prioritize nicknames that aren't just @p's - if (resolveNickname(b) && resolveNickname(a)) { - const aIsPatp = isValidPatp(anyAscii(resolveNickname(a)!.trim())); - const bIsPatp = isValidPatp(anyAscii(resolveNickname(b)!.trim())); + if (b.nickname && a.nickname) { + const aIsPatp = isValidPatp(anyAscii(a.nickname!.trim())); + const bIsPatp = isValidPatp(anyAscii(b.nickname!.trim())); if (aIsPatp && !bIsPatp) { return 1; } @@ -182,10 +181,8 @@ function nicknameSorter(a: db.Contact, b: db.Contact): number { } function alphabeticalSorter(a: db.Contact, b: db.Contact): number { - const aName = - resolveNickname(a)?.replace(/[~-]/g, '') ?? a.id.replace(/[~-]/g, ''); - const bName = - resolveNickname(b)?.replace(/[~-]/g, '') ?? b.id.replace(/[~-]/g, ''); + const aName = a.nickname?.replace(/[~-]/g, '') ?? a.id.replace(/[~-]/g, ''); + const bName = b.nickname?.replace(/[~-]/g, '') ?? b.id.replace(/[~-]/g, ''); return aName.localeCompare(bName); } @@ -194,7 +191,7 @@ function filterContactsOnQuery(contacts: db.Contact[], query: string) { const processedQuery = query.trim().toLowerCase().replace(/[~-]/g, ''); return logSyncDuration('filterContactsOnQuery', logger, () => { return contacts.filter((contact) => { - const nickname = resolveNickname(contact)?.toLowerCase() ?? ''; + const nickname = contact.nickname?.toLowerCase() ?? ''; const id = contact.id.replace(/[~-]/g, ''); return ( nickname.startsWith(processedQuery) || id.startsWith(processedQuery) diff --git a/packages/ui/src/utils/channelUtils.tsx b/packages/ui/src/utils/channelUtils.tsx index 87b58ae031..dc72b2bbab 100644 --- a/packages/ui/src/utils/channelUtils.tsx +++ b/packages/ui/src/utils/channelUtils.tsx @@ -13,11 +13,7 @@ export function getChannelMemberName( if (disableNicknames) { return member.contactId; } - return ( - member.contact?.customNickname ?? - member.contact?.nickname ?? - member.contactId - ); + return member.contact?.nickname ?? member.contactId; } export function useChannelMemberName(member: db.ChatMember) { diff --git a/packages/ui/src/utils/user.ts b/packages/ui/src/utils/user.ts index e028af5419..9510428be9 100644 --- a/packages/ui/src/utils/user.ts +++ b/packages/ui/src/utils/user.ts @@ -23,9 +23,5 @@ export function formatUserId( } export function getDisplayName(contact: db.Contact) { - return contact?.customNickname ?? contact?.nickname ?? contact.id; -} - -export function resolveNickname(contact: db.Contact) { - return contact.customNickname ?? contact.nickname; + return contact?.nickname ?? contact.id; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e15bc7761b..e5335c35e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -389,8 +389,8 @@ importers: specifier: ^16.0.3 version: 16.4.5 drizzle-kit: - specifier: ^0.21.1 - version: 0.21.1 + specifier: ^0.28.0 + version: 0.28.0 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@20.14.10)(babel-plugin-macros@3.1.0) @@ -7724,10 +7724,6 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} - cli-color@2.0.4: - resolution: {integrity: sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==} - engines: {node: '>=0.10'} - cli-cursor@2.1.0: resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} engines: {node: '>=4'} @@ -8073,10 +8069,6 @@ packages: csstype@3.1.0: resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} - d@1.0.2: - resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} - engines: {node: '>=0.12'} - dag-map@1.0.2: resolution: {integrity: sha512-+LSAiGFwQ9dRnRdOeaj7g47ZFJcOUPukAP8J3A3fuZ1g9Y44BG+P1sgApjLXTQPOzC4+7S9Wr8kXsfpINM4jpw==} @@ -8282,9 +8274,6 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - difflib@0.2.4: - resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} - dir-glob@2.2.2: resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} engines: {node: '>=4'} @@ -8353,14 +8342,6 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dreamopt@0.8.0: - resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} - engines: {node: '>=0.4.0'} - - drizzle-kit@0.21.1: - resolution: {integrity: sha512-Sp7OnCdROiE2ebMuHsAfrnRoHVGYCvErQxUh7/0l6R1caHssZu9oZu/hW9rLU19xnTK4/y3iSe3sL0Cc530wCg==} - hasBin: true - drizzle-kit@0.28.0: resolution: {integrity: sha512-KqI+CS2Ga9GYIrXpxpCDUJJrH/AT/k4UY0Pb4oRgQEGkgN1EdCnqp664cXgwPWjDr5RBtTsjZipw8+8C//K63A==} hasBin: true @@ -8525,10 +8506,6 @@ packages: resolution: {integrity: sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==} engines: {node: '>=8'} - env-paths@3.0.0: - resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - envinfo@7.11.0: resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} engines: {node: '>=4'} @@ -8594,35 +8571,16 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - es5-ext@0.10.64: - resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} - engines: {node: '>=0.10'} - - es6-iterator@2.0.3: - resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} - es6-promisify@7.0.0: resolution: {integrity: sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==} engines: {node: '>=6'} - es6-symbol@3.1.4: - resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} - engines: {node: '>=0.12'} - - es6-weak-map@2.0.3: - resolution: {integrity: sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==} - esbuild-plugin-es5@2.1.1: resolution: {integrity: sha512-GRcHLUwjmrjxz9bN24ooTedrBrAVx7+F8M1aD7FFB+7RTHkt7FY8tHAQ9znyzsV16+95ojbTyJLY+HPO0OI7zA==} engines: {node: '>=12.0'} peerDependencies: esbuild: '*' - esbuild-register@3.5.0: - resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} - peerDependencies: - esbuild: '>=0.12 <1' - esbuild-register@3.6.0: resolution: {integrity: sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==} peerDependencies: @@ -8735,10 +8693,6 @@ packages: esm-resolve@1.0.11: resolution: {integrity: sha512-LxF0wfUQm3ldUDHkkV2MIbvvY0TgzIpJ420jHSV1Dm+IlplBEWiJTKWM61GtxUfvjV6iD4OtTYFGAGM2uuIUWg==} - esniff@2.0.1: - resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} - engines: {node: '>=0.10'} - espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8777,9 +8731,6 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} - event-emitter@0.3.5: - resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} - event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -8999,9 +8950,6 @@ packages: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} - ext@1.7.0: - resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} - external-editor@2.2.0: resolution: {integrity: sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==} engines: {node: '>=0.12'} @@ -9387,11 +9335,6 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - glob@8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported - globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -9446,9 +9389,6 @@ packages: resolution: {integrity: sha512-KPIBPDlW7NxrbT/eh4qPXz5FiFdL5UbaA0XUNz2Rp3Z3hqBSkbj0GVjwFDztsWVauZUWsbKHgMg++sk8UX0bkw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} - hanji@0.0.5: - resolution: {integrity: sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw==} - hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -9518,9 +9458,6 @@ packages: headers-polyfill@3.0.10: resolution: {integrity: sha512-lOhQU7iG3AMcjmb8NIWCa+KwfJw5bY44BoWPtrj5A4iDbSD3ylGf5QcYr0ZyQnhkKQ2GgWNLdF2rfrXtXlF3nQ==} - heap@0.2.7: - resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} - hermes-estree@0.15.0: resolution: {integrity: sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==} @@ -9931,9 +9868,6 @@ packages: resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} engines: {node: '>=0.10.0'} - is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -10311,10 +10245,6 @@ packages: engines: {node: '>=6'} hasBin: true - json-diff@0.9.0: - resolution: {integrity: sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ==} - hasBin: true - json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} @@ -10568,9 +10498,6 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - lru-queue@0.1.0: - resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==} - lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -10677,9 +10604,6 @@ packages: memoize-one@6.0.0: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} - memoizee@0.4.15: - resolution: {integrity: sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==} - memory-cache@0.2.0: resolution: {integrity: sha512-OcjA+jzjOYzKmKS6IQVALHLVz+rNTMPoJvCztFaZxwG14wtAW7VRZjwTQu06vKCYOxh4jVnik7ya0SXTB0W+xA==} @@ -11016,9 +10940,6 @@ packages: nested-error-stacks@2.0.1: resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} - next-tick@1.1.0: - resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} - nice-try@1.0.5: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} @@ -13236,9 +13157,6 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - timers-ext@0.1.7: - resolution: {integrity: sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==} - tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} @@ -13426,9 +13344,6 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - type@2.7.2: - resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} - typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} engines: {node: '>= 0.4'} @@ -13983,9 +13898,6 @@ packages: wonka@4.0.15: resolution: {integrity: sha512-U0IUQHKXXn6PFo9nqsHphVCE5m3IntqZNB9Jjn7EB1lrR7YTDY3YWgFvEvwniTzXSvOH/XMzAZaIfJF/LvHYXg==} - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workbox-background-sync@7.0.0: resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==} @@ -14248,9 +14160,6 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} - zod@3.22.5: - resolution: {integrity: sha512-HqnGsCdVZ2xc0qWPLdO25WnseXThh0kEYKIdV5F/hTHO75hNZFp8thxSeHhiPrHZKrFTo1SOgkAj9po5bexZlw==} - zustand@3.7.2: resolution: {integrity: sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA==} engines: {node: '>=12.7.0'} @@ -15187,7 +15096,7 @@ snapshots: '@babel/traverse': 7.25.3 '@babel/types': 7.25.6 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -23975,14 +23884,6 @@ snapshots: clean-stack@2.2.0: {} - cli-color@2.0.4: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - memoizee: 0.4.15 - timers-ext: 0.1.7 - cli-cursor@2.1.0: dependencies: restore-cursor: 2.0.0 @@ -24361,11 +24262,6 @@ snapshots: csstype@3.1.0: {} - d@1.0.2: - dependencies: - es5-ext: 0.10.64 - type: 2.7.2 - dag-map@1.0.2: {} data-urls@3.0.2: @@ -24558,10 +24454,6 @@ snapshots: diff-sequences@29.6.3: {} - difflib@0.2.4: - dependencies: - heap: 0.2.7 - dir-glob@2.2.2: dependencies: path-type: 3.0.0 @@ -24632,24 +24524,6 @@ snapshots: dotenv@16.4.5: {} - dreamopt@0.8.0: - dependencies: - wordwrap: 1.0.0 - - drizzle-kit@0.21.1: - dependencies: - '@esbuild-kit/esm-loader': 2.6.5 - commander: 9.5.0 - env-paths: 3.0.0 - esbuild: 0.19.12 - esbuild-register: 3.5.0(esbuild@0.19.12) - glob: 8.1.0 - hanji: 0.0.5 - json-diff: 0.9.0 - zod: 3.22.5 - transitivePeerDependencies: - - supports-color - drizzle-kit@0.28.0: dependencies: '@drizzle-team/brocli': 0.10.2 @@ -24722,8 +24596,6 @@ snapshots: env-editor@0.4.2: {} - env-paths@3.0.0: {} - envinfo@7.11.0: {} envinfo@7.14.0: {} @@ -24895,33 +24767,8 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - es5-ext@0.10.64: - dependencies: - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esniff: 2.0.1 - next-tick: 1.1.0 - - es6-iterator@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-symbol: 3.1.4 - es6-promisify@7.0.0: {} - es6-symbol@3.1.4: - dependencies: - d: 1.0.2 - ext: 1.7.0 - - es6-weak-map@2.0.3: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-iterator: 2.0.3 - es6-symbol: 3.1.4 - esbuild-plugin-es5@2.1.1(esbuild@0.21.5): dependencies: '@swc/core': 1.7.26(@swc/helpers@0.5.13) @@ -24936,13 +24783,6 @@ snapshots: deepmerge: 4.3.1 esbuild: 0.24.0 - esbuild-register@3.5.0(esbuild@0.19.12): - dependencies: - debug: 4.3.4 - esbuild: 0.19.12 - transitivePeerDependencies: - - supports-color - esbuild-register@3.6.0(esbuild@0.19.12): dependencies: debug: 4.3.7 @@ -25225,13 +25065,6 @@ snapshots: esm-resolve@1.0.11: {} - esniff@2.0.1: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-emitter: 0.3.5 - type: 2.7.2 - espree@9.6.1: dependencies: acorn: 8.11.3 @@ -25262,11 +25095,6 @@ snapshots: etag@1.8.1: {} - event-emitter@0.3.5: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - event-target-shim@5.0.1: {} eventemitter3@4.0.7: {} @@ -25682,10 +25510,6 @@ snapshots: transitivePeerDependencies: - supports-color - ext@1.7.0: - dependencies: - type: 2.7.2 - external-editor@2.2.0: dependencies: chardet: 0.4.2 @@ -26106,14 +25930,6 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - glob@8.1.0: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 - globals@11.12.0: {} globals@13.24.0: @@ -26171,11 +25987,6 @@ snapshots: graphql@16.6.0: {} - hanji@0.0.5: - dependencies: - lodash.throttle: 4.1.1 - sisteransi: 1.0.5 - hard-rejection@2.1.0: {} has-ansi@2.0.0: @@ -26246,8 +26057,6 @@ snapshots: headers-polyfill@3.0.10: {} - heap@0.2.7: {} - hermes-estree@0.15.0: {} hermes-estree@0.18.2: {} @@ -26647,8 +26456,6 @@ snapshots: is-primitive@3.0.1: {} - is-promise@2.2.2: {} - is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -27354,12 +27161,6 @@ snapshots: jsesc@3.0.2: {} - json-diff@0.9.0: - dependencies: - cli-color: 2.0.4 - difflib: 0.2.4 - dreamopt: 0.8.0 - json-parse-better-errors@1.0.2: {} json-parse-even-better-errors@2.3.1: {} @@ -27605,10 +27406,6 @@ snapshots: dependencies: yallist: 4.0.0 - lru-queue@0.1.0: - dependencies: - es5-ext: 0.10.64 - lz-string@1.5.0: {} magic-string@0.25.9: @@ -27728,17 +27525,6 @@ snapshots: memoize-one@6.0.0: {} - memoizee@0.4.15: - dependencies: - d: 1.0.2 - es5-ext: 0.10.64 - es6-weak-map: 2.0.3 - event-emitter: 0.3.5 - is-promise: 2.2.2 - lru-queue: 0.1.0 - next-tick: 1.1.0 - timers-ext: 0.1.7 - memory-cache@0.2.0: {} meow@7.1.1: @@ -28294,8 +28080,6 @@ snapshots: nested-error-stacks@2.0.1: {} - next-tick@1.1.0: {} - nice-try@1.0.5: {} no-case@3.0.4: @@ -31232,11 +31016,6 @@ snapshots: through@2.3.8: {} - timers-ext@0.1.7: - dependencies: - es5-ext: 0.10.64 - next-tick: 1.1.0 - tiny-invariant@1.3.1: {} tinybench@2.6.0: {} @@ -31379,8 +31158,6 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - type@2.7.2: {} - typed-array-buffer@1.0.0: dependencies: call-bind: 1.0.5 @@ -32098,8 +31875,6 @@ snapshots: wonka@4.0.15: {} - wordwrap@1.0.0: {} - workbox-background-sync@7.0.0: dependencies: idb: 7.1.1 @@ -32385,8 +32160,6 @@ snapshots: yocto-queue@1.0.0: {} - zod@3.22.5: {} - zustand@3.7.2(react@18.2.0): optionalDependencies: react: 18.2.0 From 24fe9bfb9ef8e78189b1eb4ccb6be557fcaff862 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 8 Nov 2024 00:35:49 -0500 Subject: [PATCH 16/32] flesh out UI --- packages/app/features/top/ChatListScreen.tsx | 2 +- packages/app/features/top/ContactsScreen.tsx | 7 +- packages/shared/src/api/contactsApi.ts | 6 + packages/shared/src/store/contactActions.ts | 27 +++-- packages/ui/src/components/Badge.tsx | 3 +- .../ui/src/components/ContactsScreenView.tsx | 104 ++++++++++++++++-- .../src/components/EditProfileScreenView.tsx | 15 +++ .../components/ListItem/ContactListItem.tsx | 3 + .../src/components/UserProfileScreenView.tsx | 16 ++- 9 files changed, 159 insertions(+), 24 deletions(-) diff --git a/packages/app/features/top/ChatListScreen.tsx b/packages/app/features/top/ChatListScreen.tsx index f9253493b3..590d3bda93 100644 --- a/packages/app/features/top/ChatListScreen.tsx +++ b/packages/app/features/top/ChatListScreen.tsx @@ -302,7 +302,7 @@ export function ChatListScreenView({ title={notReadyMessage ?? screenTitle} leftControls={ navigation.navigate('Contacts')} /> } diff --git a/packages/app/features/top/ContactsScreen.tsx b/packages/app/features/top/ContactsScreen.tsx index 6d9a96f1fc..353ec6d499 100644 --- a/packages/app/features/top/ContactsScreen.tsx +++ b/packages/app/features/top/ContactsScreen.tsx @@ -28,6 +28,7 @@ export default function ContactsScreen(props: Props) { const { data: contacts } = store.useUserContacts(); const { data: suggestions } = store.useSuggestedContacts(); + const { data: userContact } = store.useContact({ id: currentUser }); const onContactPress = useCallback( (contact: db.Contact) => { @@ -63,10 +64,14 @@ export default function ContactsScreen(props: Props) { return ( - + props.navigation.goBack()} + /> diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 3f7a0ffa39..81ab73d9ef 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -101,6 +101,7 @@ export const removeContact = async (contactId: string) => { export interface ProfileUpdate { nickname?: string; + status?: string; bio?: string; avatarImage?: string; coverImage?: string; @@ -111,6 +112,10 @@ export const updateCurrentUserProfile = async (update: ProfileUpdate) => { editedFields.push({ nickname: update.nickname }); } + if (update.status !== undefined) { + editedFields.push({ status: update.status }); + } + if (update.bio !== undefined) { editedFields.push({ bio: update.bio }); } @@ -311,6 +316,7 @@ export const contactToClientProfile = ( customNickname: overrides.nickname?.value, peerAvatarImage: base.avatar?.value ?? null, customAvatarImage: overrides.avatar?.value, + status: base.status?.value ?? null, bio: base.bio?.value ?? null, coverImage: base.cover?.value ?? null, color: base.color ? normalizeUrbitColor(base.color.value) : null, diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index 7e176f2a46..0340bbae5d 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -99,25 +99,30 @@ export async function updateContactMetadata( export async function updateCurrentUserProfile(update: api.ProfileUpdate) { const currentUserId = api.getCurrentUserId(); const currentUserContact = await db.getContact({ id: currentUserId }); - const startingValues: Partial = {}; - if (currentUserContact) { - for (const key in update) { - if (key in currentUserContact) { - startingValues[key as keyof api.ProfileUpdate] = - currentUserContact[key as keyof api.ProfileUpdate]; - } - } - } + + const startFields: Partial = { + peerNickname: currentUserContact?.peerNickname, + status: currentUserContact?.status, + bio: currentUserContact?.bio, + peerAvatarImage: currentUserContact?.peerAvatarImage, + }; + + const editedFields: Partial = { + peerNickname: update.nickname, + status: update.status, + bio: update.bio, + peerAvatarImage: update.avatarImage, + }; // Optimistic update - await db.updateContact({ id: currentUserId, ...update }); + await db.updateContact({ id: currentUserId, ...editedFields }); try { await api.updateCurrentUserProfile(update); } catch (e) { console.error('Error updating profile', e); // Rollback the update - await db.updateContact({ id: currentUserId, ...startingValues }); + await db.updateContact({ id: currentUserId, ...startFields }); } } diff --git a/packages/ui/src/components/Badge.tsx b/packages/ui/src/components/Badge.tsx index 4d0ffaa2ee..2418fa5543 100644 --- a/packages/ui/src/components/Badge.tsx +++ b/packages/ui/src/components/Badge.tsx @@ -1,3 +1,4 @@ +import { ComponentProps } from 'react'; import { ColorTokens, SizableText, View } from 'tamagui'; type BadgeType = 'positive' | 'warning' | 'neutral'; @@ -20,7 +21,7 @@ export function Badge({ }: { text: string; type?: BadgeType; -}) { +} & ComponentProps) { return ( void; onContactLongPress: (contact: db.Contact) => void; } +interface Section { + title?: string; + data: db.Contact[]; +} + export function ContactsScreenView(props: Props) { const trimmedSuggested = useMemo(() => { if (props.suggestions.length < 4 || props.contacts.length === 0) { @@ -26,10 +34,30 @@ export function ContactsScreenView(props: Props) { query: '', }); - const realAndSuggested = useMemo( - () => [...trimmedSuggested, ...sortedContacts], - [sortedContacts, trimmedSuggested] - ); + const sections = useMemo(() => { + const result: Section[] = []; + + if (props.userContact) { + result.push({ + data: [props.userContact], + }); + } + + if (sortedContacts.length > 0) { + result.push({ + data: sortedContacts, + }); + } + + if (trimmedSuggested.length > 0) { + result.push({ + title: 'Suggestions', + data: trimmedSuggested, + }); + } + + return result; + }, [props.userContact, sortedContacts, trimmedSuggested]); const renderItem = useCallback( ({ item }: { item: db.Contact }) => { @@ -41,9 +69,12 @@ export function ContactsScreenView(props: Props) { showEndContent endContent={ item.isContactSuggestion ? ( - - ) : null + + ) : ( + + ) } + subtitle={item.status ? item.status : undefined} onPress={() => props.onContactPress(item)} onLongPress={() => props.onContactLongPress(item)} /> @@ -52,5 +83,60 @@ export function ContactsScreenView(props: Props) { [props] ); - return ; + const renderSectionHeader = useCallback( + ({ section }: { section: Section }) => { + if (!section.title) { + return null; + } + + return ( + + {section.title} + + ); + }, + [] + ); + + return ( + + {/* {props.userContact ? ( + + + + + + } + subtitle={ + props.userContact.status ? props.userContact.status : undefined + } + onPress={() => props.onContactPress(props.userContact!)} + /> + + ) : null} */} + + + ); } diff --git a/packages/ui/src/components/EditProfileScreenView.tsx b/packages/ui/src/components/EditProfileScreenView.tsx index 12ece7ad1a..5ac24a41b8 100644 --- a/packages/ui/src/components/EditProfileScreenView.tsx +++ b/packages/ui/src/components/EditProfileScreenView.tsx @@ -71,6 +71,7 @@ export function EditProfileScreenView(props: Props) { mode: 'onChange', defaultValues: { nickname: currentNickname ?? '', + status: userContact?.status ?? '', bio: userContact?.bio ?? '', avatarImage: currentAvatarImage ?? undefined, }, @@ -191,6 +192,20 @@ export function EditProfileScreenView(props: Props) { {props.userId === currentUserId ? ( <> + , 'onPress' | 'onLongPress'> & Pick) => { const handlePress = useBoundHandler(contactId, onPress); @@ -56,6 +58,7 @@ export const ContactListItem = ({ {showUserId && showNickname ? ( {contactId} ) : null} + {subtitle && {subtitle}} {showEndContent && ( diff --git a/packages/ui/src/components/UserProfileScreenView.tsx b/packages/ui/src/components/UserProfileScreenView.tsx index 0a2d471537..a196ba21eb 100644 --- a/packages/ui/src/components/UserProfileScreenView.tsx +++ b/packages/ui/src/components/UserProfileScreenView.tsx @@ -103,6 +103,8 @@ export function UserProfileScreenView(props: Props) { {currentUserId !== props.userId ? ( ) : null} + + @@ -212,6 +214,18 @@ export function BioDisplay({ ) : null; } +export function StatusDisplay({ + status, + ...rest +}: { status: string } & ComponentProps) { + return ( + + Status + {status} + + ); +} + export function PinnedGroupsDisplay( props: { groups: db.Group[]; @@ -283,7 +297,7 @@ function UserInfoRow(props: { userId: string; hasNickname: boolean }) { }, [doCopy]); return ( - + From a9107226d9e623a52400bc63f0d95b1d29c2c12f Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 8 Nov 2024 00:44:26 -0500 Subject: [PATCH 17/32] not everyone is chillin --- packages/ui/src/components/UserProfileScreenView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ui/src/components/UserProfileScreenView.tsx b/packages/ui/src/components/UserProfileScreenView.tsx index a196ba21eb..f678244ca3 100644 --- a/packages/ui/src/components/UserProfileScreenView.tsx +++ b/packages/ui/src/components/UserProfileScreenView.tsx @@ -104,7 +104,7 @@ export function UserProfileScreenView(props: Props) { ) : null} - + From 552880835f8f327de29722e9c8d2f53c25caaeb1 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 8 Nov 2024 10:59:30 -0500 Subject: [PATCH 18/32] analytics for contact adds/edits --- packages/shared/src/api/contactsApi.ts | 7 ++++++- packages/shared/src/logic/analytics.ts | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 81ab73d9ef..2f84fee67a 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -1,6 +1,6 @@ import * as db from '../db'; import { createDevLogger } from '../debug'; -import { normalizeUrbitColor } from '../logic'; +import { AnalyticsEvent, normalizeUrbitColor } from '../logic'; import * as ub from '../urbit'; import { poke, scry, subscribe } from './urbit'; @@ -73,6 +73,10 @@ export const updateContactMetadata = async ( : null; } + if (Object.keys(contactUpdate).length !== 0) { + logger.trackEvent(AnalyticsEvent.ContactEdited); + } + return poke({ app: 'contacts', mark: 'contact-action-1', @@ -82,6 +86,7 @@ export const updateContactMetadata = async ( export const addContact = async (contactId: string) => { removeContactSuggestion(contactId); + logger.trackEvent(AnalyticsEvent.ContactAdded); return poke({ app: 'contacts', mark: 'contact-action-1', diff --git a/packages/shared/src/logic/analytics.ts b/packages/shared/src/logic/analytics.ts index 803e8e4090..779fb6048c 100644 --- a/packages/shared/src/logic/analytics.ts +++ b/packages/shared/src/logic/analytics.ts @@ -6,4 +6,6 @@ export enum AnalyticsEvent { LoggedInBeforeSignup = 'Logged In Without Signing Up', FailedSignupOTP = 'Failed to send Signup OTP', FailedLoginOTP = 'Failed to send Login OTP', + ContactAdded = 'Contact Added', + ContactEdited = 'Contact Edited', } From ac830f47dceac01b4569ea3206184ba551f962dd Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Fri, 8 Nov 2024 11:29:54 -0500 Subject: [PATCH 19/32] add inviter as contact during boot sequence --- packages/app/hooks/useBootSequence.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/app/hooks/useBootSequence.ts b/packages/app/hooks/useBootSequence.ts index 3f8bcd1d7c..d45047ac76 100644 --- a/packages/app/hooks/useBootSequence.ts +++ b/packages/app/hooks/useBootSequence.ts @@ -138,6 +138,11 @@ export function useBootSequence({ // CHECKING_FOR_INVITE [optional]: if we used an invite code to signup, see if we got the invites // if (bootPhase === NodeBootPhase.CHECKING_FOR_INVITE) { + // always add the inviter as a contact first + if (lureMeta?.inviterUserId) { + store.addContact(lureMeta?.inviterUserId); + } + const { invitedDm, invitedGroup } = await BootHelpers.getInvitedGroupAndDm(lureMeta); From ddee8ac4ffa6dd365710b03010114074b721fb50 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Mon, 18 Nov 2024 22:32:36 -0500 Subject: [PATCH 20/32] add contact profile update activity ui --- packages/app/features/top/ActivityScreen.tsx | 3 + packages/app/hooks/useGroupActions.tsx | 23 ++-- packages/app/hooks/useGroupNavigation.ts | 13 +++ packages/shared/src/api/activityApi.ts | 103 +++++++++++++++++- packages/shared/src/api/contactsApi.test.ts | 4 +- ...s_mercury.sql => 0000_serious_penance.sql} | 11 ++ .../src/db/migrations/meta/0000_snapshot.json | 82 +++++++++++++- .../src/db/migrations/meta/_journal.json | 4 +- .../shared/src/db/migrations/migrations.js | 2 +- packages/shared/src/db/queries.ts | 61 +++++++++-- packages/shared/src/db/schema.ts | 35 ++++++ packages/shared/src/db/types.ts | 2 + packages/shared/src/logic/activity.ts | 5 +- packages/shared/src/urbit/activity.ts | 14 ++- .../components/Activity/ActivityListItem.tsx | 12 +- .../Activity/ActivityScreenView.tsx | 62 ++++++++--- .../Activity/ActivitySourceContent.tsx | 55 +++++++++- .../Activity/ActivitySummaryMessage.tsx | 46 +++++++- 18 files changed, 486 insertions(+), 51 deletions(-) rename packages/shared/src/db/migrations/{0000_conscious_mercury.sql => 0000_serious_penance.sql} (95%) diff --git a/packages/app/features/top/ActivityScreen.tsx b/packages/app/features/top/ActivityScreen.tsx index c914bc21a0..0d3d6297ef 100644 --- a/packages/app/features/top/ActivityScreen.tsx +++ b/packages/app/features/top/ActivityScreen.tsx @@ -7,6 +7,7 @@ import { useCallback, useMemo } from 'react'; // import ErrorBoundary from '../../ErrorBoundary'; import { useCurrentUserId } from '../../hooks/useCurrentUser'; +import { useGroupActions } from '../../hooks/useGroupActions'; import { useFeatureFlag } from '../../lib/featureFlags'; import { RootStackParamList } from '../../navigation/types'; import { screenNameFromChannelId } from '../../navigation/utils'; @@ -17,6 +18,7 @@ export function ActivityScreen(props: Props) { const isFocused = useIsFocused(); const currentUserId = useCurrentUserId(); const [contactsTabEnabled] = useFeatureFlag('contactsTab'); + const { performGroupAction } = useGroupActions(); const allFetcher = store.useInfiniteBucketedActivity('all'); const mentionsFetcher = store.useInfiniteBucketedActivity('mentions'); @@ -78,6 +80,7 @@ export function ActivityScreen(props: Props) { goToThread={handleGoToThread} goToGroup={handleGoToGroup} refresh={handleRefreshActivity} + onGroupAction={performGroupAction} /> props.navigation.navigate('Contacts')} diff --git a/packages/app/hooks/useGroupActions.tsx b/packages/app/hooks/useGroupActions.tsx index fa97703023..51c103fe12 100644 --- a/packages/app/hooks/useGroupActions.tsx +++ b/packages/app/hooks/useGroupActions.tsx @@ -5,24 +5,29 @@ import { useCallback } from 'react'; import { useGroupNavigation } from './useGroupNavigation'; export const useGroupActions = () => { - const { goToChannel, goToHome } = useGroupNavigation(); + const { goToChannel, goToHome, goToGroup } = useGroupNavigation(); const performGroupAction = useCallback( async (action: GroupPreviewAction, updatedGroup: db.Group) => { - if (action === 'goTo' && updatedGroup.lastPost?.channelId) { - const channel = await db.getChannel({ - id: updatedGroup.lastPost.channelId, - }); - if (channel) { - goToChannel(channel); - } + // if (action === 'goTo' && updatedGroup.lastPost?.channelId) { + // const channel = await db.getChannel({ + // id: updatedGroup.lastPost.channelId, + // }); + // if (channel) { + // goToChannel(channel); + // } + // } + + // TODO: is there anywhere we call this where could be dm? + if (action === 'goTo') { + goToGroup(updatedGroup.id); } if (action === 'joined') { goToHome(); } }, - [goToChannel, goToHome] + [goToGroup, goToHome] ); return { diff --git a/packages/app/hooks/useGroupNavigation.ts b/packages/app/hooks/useGroupNavigation.ts index ac7a5e7a6e..cbc1b56e09 100644 --- a/packages/app/hooks/useGroupNavigation.ts +++ b/packages/app/hooks/useGroupNavigation.ts @@ -3,12 +3,14 @@ import * as db from '@tloncorp/shared/db'; import { useCallback } from 'react'; import { RootStackParamList } from '../navigation/types'; +import { useTypedReset } from '../navigation/utils'; export const useGroupNavigation = () => { const navigation = useNavigation< // @ts-expect-error - TODO: pass navigation handlers into context NativeStackNavigationProp >(); + const typedReset = useTypedReset(); const goToChannel = useCallback( async ( @@ -28,6 +30,16 @@ export const useGroupNavigation = () => { navigation.navigate('ChatList'); }, [navigation]); + const goToGroup = useCallback( + (groupId: string) => { + typedReset([ + { name: 'ChatList' }, + { name: 'GroupChannels', params: { groupId } }, + ]); + }, + [typedReset] + ); + const goToContactHostedGroups = useCallback( ({ contactId }: { contactId: string }) => { navigation.navigate('ContactHostedGroups', { contactId }); @@ -37,6 +49,7 @@ export const useGroupNavigation = () => { return { goToChannel, + goToGroup, goToHome, goToContactHostedGroups, }; diff --git a/packages/shared/src/api/activityApi.ts b/packages/shared/src/api/activityApi.ts index 929005b39f..523bee3c14 100644 --- a/packages/shared/src/api/activityApi.ts +++ b/packages/shared/src/api/activityApi.ts @@ -3,6 +3,7 @@ import { backOff } from 'exponential-backoff'; import * as db from '../db'; import { createDevLogger, runIfDev } from '../debug'; +import { normalizeUrbitColor } from '../logic'; import * as ub from '../urbit'; import { formatUd, @@ -283,6 +284,92 @@ function toActivityEvent({ }; } + if ('contact' in event) { + const contactEvent = event.contact; + const update = parseContactUpdateEvent(baseFields.id, event); + if (!update) { + return null; + } + + return { + ...baseFields, + type: 'contact', + contactUserId: contactEvent.who, + ...update, + }; + } + + return null; +} + +function parseContactUpdateEvent( + eventId: string, + event: ub.ContactEvent +): Partial | null { + const update = event.contact.update; + + if (!update) { + return null; + } + + // return { + // contactUpdateType: 'status', + // contactUpdateValue: 'Dancing amongst the stars', + // }; + + if ('nickname' in update) { + return { + contactUpdateType: 'nickname', + contactUpdateValue: update.nickname?.value ?? '', + }; + } + + if ('bio' in update) { + return { + contactUpdateType: 'bio', + contactUpdateValue: update.bio?.value ?? '', + }; + } + + if ('status' in update) { + return { + contactUpdateType: 'status', + contactUpdateValue: update.status?.value ?? '', + }; + } + + if ('color' in update) { + return { + contactUpdateType: 'color', + contactUpdateValue: normalizeUrbitColor(update.color?.value ?? ''), + }; + } + + if ('avatar' in update) { + return { + contactUpdateType: 'avatarImage', + contactUpdateValue: update.avatar?.value ?? '', + }; + } + + if ('groups' in update) { + const groupIds = update.groups?.value.map((g) => g.value) ?? []; + if (groupIds.length === 0) { + return null; + } + + return { + contactUpdateType: 'pinnedGroups', + contactUpdateValue: + update.groups?.value.map((g) => g.value).join(',') ?? '', + contactUpdateGroups: + groupIds.map((groupId) => ({ + groupId, + activityEventId: eventId, + })) ?? [], + }; + } + return null; } @@ -661,11 +748,17 @@ interface ClientUnknownSource { type: 'unknown'; // for source types we don't care about } +interface ClientContactSource { + type: 'contact'; + contactUserId: string; +} + export type ClientSource = | ClientGroupSource | ClientChannelSource | ClientThreadSource - | ClientUnknownSource; + | ClientUnknownSource + | ClientContactSource; export function sourceIdToSource(sourceId: string): ClientSource { const parts = sourceId.split('/'); @@ -708,6 +801,14 @@ export function sourceIdToSource(sourceId: string): ClientSource { return { type: 'thread', channelType: 'dm', channelId, threadId }; } + if (sourceType === 'contact') { + const contactUserId = parts[1]; + return { + type: 'contact', + contactUserId, + }; + } + return { type: 'unknown' }; } diff --git a/packages/shared/src/api/contactsApi.test.ts b/packages/shared/src/api/contactsApi.test.ts index eadc77aeb9..2c5fe5c6c9 100644 --- a/packages/shared/src/api/contactsApi.test.ts +++ b/packages/shared/src/api/contactsApi.test.ts @@ -22,11 +22,11 @@ const inputContact: [string, any] = [ const outputContact = { id: 'test', - avatarImage: null, + peerAvatarImage: null, + peerNickname: 'galen', coverImage: 'https://20-urbit.s3.us-west-1.amazonaws.com/ravmel-ropdyl/2021.2.13..00.31.09-Manaslu-crevasses.jpg', bio: 'happy to chat, send a dm any time', - nickname: 'galen', status: 'listening to music', color: '#FFFFFF', pinnedGroups: [ diff --git a/packages/shared/src/db/migrations/0000_conscious_mercury.sql b/packages/shared/src/db/migrations/0000_serious_penance.sql similarity index 95% rename from packages/shared/src/db/migrations/0000_conscious_mercury.sql rename to packages/shared/src/db/migrations/0000_serious_penance.sql index 1d26b8cfbb..74252d326b 100644 --- a/packages/shared/src/db/migrations/0000_conscious_mercury.sql +++ b/packages/shared/src/db/migrations/0000_serious_penance.sql @@ -1,3 +1,11 @@ +CREATE TABLE `activyt_event_contact_group_pins` ( + `activity_event_id` text NOT NULL, + `group_id` text NOT NULL, + PRIMARY KEY(`activity_event_id`, `group_id`), + FOREIGN KEY (`activity_event_id`) REFERENCES `activity_events`(`id`) ON UPDATE no action ON DELETE cascade, + FOREIGN KEY (`group_id`) REFERENCES `groups`(`id`) ON UPDATE no action ON DELETE no action +); +--> statement-breakpoint CREATE TABLE `activity_events` ( `id` text NOT NULL, `bucket_id` text NOT NULL, @@ -14,6 +22,9 @@ CREATE TABLE `activity_events` ( `should_notify` integer, `content` text, `group_event_user_id` text, + `contact_user_id` text, + `contact_update_type` text, + `contact_update_value` text, PRIMARY KEY(`id`, `bucket_id`) ); --> statement-breakpoint diff --git a/packages/shared/src/db/migrations/meta/0000_snapshot.json b/packages/shared/src/db/migrations/meta/0000_snapshot.json index 933ab9a844..49652babec 100644 --- a/packages/shared/src/db/migrations/meta/0000_snapshot.json +++ b/packages/shared/src/db/migrations/meta/0000_snapshot.json @@ -1,9 +1,68 @@ { "version": "6", "dialect": "sqlite", - "id": "0f12a28f-e94f-4b26-88aa-d6990e49e24b", + "id": "edfc5907-3919-463f-a0c7-85aae50e6acc", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { + "activyt_event_contact_group_pins": { + "name": "activyt_event_contact_group_pins", + "columns": { + "activity_event_id": { + "name": "activity_event_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "group_id": { + "name": "group_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "activyt_event_contact_group_pins_activity_event_id_activity_events_id_fk": { + "name": "activyt_event_contact_group_pins_activity_event_id_activity_events_id_fk", + "tableFrom": "activyt_event_contact_group_pins", + "tableTo": "activity_events", + "columnsFrom": [ + "activity_event_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + }, + "activyt_event_contact_group_pins_group_id_groups_id_fk": { + "name": "activyt_event_contact_group_pins_group_id_groups_id_fk", + "tableFrom": "activyt_event_contact_group_pins", + "tableTo": "groups", + "columnsFrom": [ + "group_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "activyt_event_contact_group_pins_activity_event_id_group_id_pk": { + "columns": [ + "activity_event_id", + "group_id" + ], + "name": "activyt_event_contact_group_pins_activity_event_id_group_id_pk" + } + }, + "uniqueConstraints": {}, + "checkConstraints": {} + }, "activity_events": { "name": "activity_events", "columns": { @@ -111,6 +170,27 @@ "primaryKey": false, "notNull": false, "autoincrement": false + }, + "contact_user_id": { + "name": "contact_user_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "contact_update_type": { + "name": "contact_update_type", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "contact_update_value": { + "name": "contact_update_value", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false } }, "indexes": {}, diff --git a/packages/shared/src/db/migrations/meta/_journal.json b/packages/shared/src/db/migrations/meta/_journal.json index b8a71f409c..9fac41ee80 100644 --- a/packages/shared/src/db/migrations/meta/_journal.json +++ b/packages/shared/src/db/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "6", - "when": 1731026756201, - "tag": "0000_conscious_mercury", + "when": 1731980400898, + "tag": "0000_serious_penance", "breakpoints": true } ] diff --git a/packages/shared/src/db/migrations/migrations.js b/packages/shared/src/db/migrations/migrations.js index 651b57cb79..b18e1bffeb 100644 --- a/packages/shared/src/db/migrations/migrations.js +++ b/packages/shared/src/db/migrations/migrations.js @@ -1,7 +1,7 @@ // This file is required for Expo/React Native SQLite migrations - https://orm.drizzle.team/quick-sqlite/expo import journal from './meta/_journal.json'; -import m0000 from './0000_conscious_mercury.sql'; +import m0000 from './0000_serious_penance.sql'; export default { journal, diff --git a/packages/shared/src/db/queries.ts b/packages/shared/src/db/queries.ts index 382f357579..b567a61065 100644 --- a/packages/shared/src/db/queries.ts +++ b/packages/shared/src/db/queries.ts @@ -46,6 +46,7 @@ import { withTransactionCtx, } from './query'; import { + activityEventContactGroups as $activityEventContactGroups, activityEvents as $activityEvents, channelReaders as $channelReaders, channelUnreads as $channelUnreads, @@ -3013,14 +3014,55 @@ export const clearThreadUnread = createWriteQuery( export const insertActivityEvents = createWriteQuery( 'insertActivityEvents', async (events: ActivityEvent[], ctx: QueryCtx) => { + const currentUserId = getCurrentUserId(); if (events.length === 0) return; - return ctx.db - .insert($activityEvents) - .values(events) - .onConflictDoUpdate({ - target: [$activityEvents.id, $activityEvents.bucketId], - set: conflictUpdateSetAll($activityEvents), - }); + + const activityEventGroups = events.flatMap( + (contact) => contact.contactUpdateGroups || [] + ); + + const targetGroups = activityEventGroups.map((g): Group => { + const { host: hostUserId } = parseGroupId(g.groupId); + return { + id: g.groupId, + hostUserId, + privacy: g.group?.privacy, + currentUserIsMember: false, + currentUserIsHost: currentUserId === hostUserId, + }; + }); + + // return ctx.db + // .insert($activityEvents) + // .values(events) + // .onConflictDoUpdate({ + // target: [$activityEvents.id, $activityEvents.bucketId], + // set: conflictUpdateSetAll($activityEvents), + // }); + + await withTransactionCtx(ctx, async (txCtx) => { + await txCtx.db + .insert($activityEvents) + .values(events) + .onConflictDoUpdate({ + target: [$activityEvents.id, $activityEvents.bucketId], + set: conflictUpdateSetAll($activityEvents), + }); + + if (targetGroups.length) { + await txCtx.db + .insert($groups) + .values(targetGroups) + .onConflictDoNothing(); + } + + if (activityEventGroups.length) { + await txCtx.db + .insert($activityEventContactGroups) + .values(activityEventGroups) + .onConflictDoNothing(); + } + }); }, ['activityEvents'] ); @@ -3264,6 +3306,11 @@ export const getAllOrRepliesPage = createReadQuery( }, }, groupEventUser: true, + contactUpdateGroups: { + with: { + group: true, + }, + }, }, }); } else { diff --git a/packages/shared/src/db/schema.ts b/packages/shared/src/db/schema.ts index a105704994..84c9bc43a6 100644 --- a/packages/shared/src/db/schema.ts +++ b/packages/shared/src/db/schema.ts @@ -195,6 +195,9 @@ export const activityEvents = sqliteTable( shouldNotify: boolean('should_notify'), content: text('content', { mode: 'json' }), groupEventUserId: text('group_event_user_id'), + contactUserId: text('contact_user_id'), + contactUpdateType: text('contact_update_type'), + contactUpdateValue: text('contact_update_value'), }, (table) => { return { @@ -203,6 +206,37 @@ export const activityEvents = sqliteTable( } ); +export const activityEventContactGroups = sqliteTable( + 'activyt_event_contact_group_pins', + { + activityEventId: text('activity_event_id') + .references(() => activityEvents.id, { onDelete: 'cascade' }) + .notNull(), + groupId: text('group_id') + .references(() => groups.id) + .notNull(), + }, + (table) => { + return { + pk: primaryKey({ columns: [table.activityEventId, table.groupId] }), + }; + } +); + +export const activityEventContactGroupRelations = relations( + activityEventContactGroups, + ({ one }) => ({ + activityEvent: one(activityEvents, { + fields: [activityEventContactGroups.activityEventId], + references: [activityEvents.id], + }), + group: one(groups, { + fields: [activityEventContactGroups.groupId], + references: [groups.id], + }), + }) +); + export const activityRelations = relations(activityEvents, ({ one, many }) => ({ post: one(posts, { fields: [activityEvents.postId], @@ -232,6 +266,7 @@ export const activityRelations = relations(activityEvents, ({ one, many }) => ({ fields: [activityEvents.groupEventUserId], references: [contacts.id], }), + contactUpdateGroups: many(activityEventContactGroups), })); export type PinType = 'group' | 'channel' | 'dm' | 'groupDm'; diff --git a/packages/shared/src/db/types.ts b/packages/shared/src/db/types.ts index b3eaa47c9f..5a7933f91a 100644 --- a/packages/shared/src/db/types.ts +++ b/packages/shared/src/db/types.ts @@ -41,6 +41,8 @@ export type ContactPinnedGroups = Contact['pinnedGroups']; export type ChannelUnread = BaseModel<'channelUnreads'>; export type GroupUnread = BaseModel<'groupUnreads'>; export type ActivityEvent = BaseModel<'activityEvents'>; +export type ActivityEventContactUpdateGroups = + ActivityEvent['contactUpdateGroups']; export type ActivityBucket = schema.ActivityBucket; // TODO: We need to include unread count here because it's returned by the chat // list query, but doesn't feel great. diff --git a/packages/shared/src/logic/activity.ts b/packages/shared/src/logic/activity.ts index f3dcae0054..60a73933dd 100644 --- a/packages/shared/src/logic/activity.ts +++ b/packages/shared/src/logic/activity.ts @@ -76,7 +76,10 @@ export function toSourceActivityEvents( const eventsList: SourceActivityEvents[] = []; events.forEach((event) => { - const key = event.sourceId; + const key = + event.type === 'contact' + ? `/contact/${event.contactUserId}/${event.id}` // contact events should never be rolled up + : event.sourceId; // If we already have an entry for this channel/thread if (eventMap.has(key)) { const existing = eventMap.get(key); diff --git a/packages/shared/src/urbit/activity.ts b/packages/shared/src/urbit/activity.ts index db45bde3de..5fb92a690e 100644 --- a/packages/shared/src/urbit/activity.ts +++ b/packages/shared/src/urbit/activity.ts @@ -2,6 +2,7 @@ import { parseUd } from '@urbit/aura'; import _ from 'lodash'; import { Kind, Story } from './channel'; +import { ContactBookProfile } from './contact'; import { nestToFlag, whomIsDm, whomIsFlag, whomIsMultiDm } from './utils'; export type Whom = { ship: string } | { club: string }; @@ -22,7 +23,8 @@ export type ExtendedEventType = | 'group-invite' | 'group-role' | 'flag-post' - | 'flag-reply'; + | 'flag-reply' + | 'contact'; export type NotificationLevel = 'hush' | 'soft' | 'default' | 'medium' | 'loud'; @@ -154,6 +156,13 @@ export interface ReplyEvent { }; } +export interface ContactEvent { + contact: { + who: string; + update: ContactBookProfile; + }; +} + export type ActivityIncomingEvent = | GroupKickEvent | GroupJoinEvent @@ -166,7 +175,8 @@ export type ActivityIncomingEvent = | DmPostEvent | DmReplyEvent | PostEvent - | ReplyEvent; + | ReplyEvent + | ContactEvent; export type ActivityEvent = { notified: boolean; diff --git a/packages/ui/src/components/Activity/ActivityListItem.tsx b/packages/ui/src/components/Activity/ActivityListItem.tsx index fea7c4e4f0..03eaddd1f8 100644 --- a/packages/ui/src/components/Activity/ActivityListItem.tsx +++ b/packages/ui/src/components/Activity/ActivityListItem.tsx @@ -31,7 +31,8 @@ export const ActivityListItem = React.memo(function ActivityListItem({ event.type === 'reply' || event.type === 'flag-post' || event.type === 'flag-reply' || - event.type === 'group-ask' + event.type === 'group-ask' || + event.type === 'contact' ) { return ( @@ -99,7 +100,12 @@ export function ActivityListItemContent({ - {summary.type !== 'group-ask' ? ( + {!['group-ask'].includes(summary.type) ? ( void; goToThread: (post: db.Post) => void; goToGroup: (group: db.Group) => void; + onGroupAction: (action: GroupPreviewAction, group: db.Group) => void; bucketFetchers: store.BucketFetchers; refresh: () => Promise; }) { @@ -132,6 +136,7 @@ export function ActivityScreenView({ isRefreshing={refreshing} onRefreshTriggered={onRefresh} seenMarker={activitySeenMarker ?? Date.now()} + onGroupAction={onGroupAction} /> ); } @@ -145,6 +150,7 @@ export function ActivityScreenContent({ onPressEvent, onEndReached, onRefreshTriggered, + onGroupAction, seenMarker, }: { activeTab: db.ActivityBucket; @@ -156,7 +162,19 @@ export function ActivityScreenContent({ isRefreshing: boolean; onRefreshTriggered: () => void; seenMarker: number; + onGroupAction: (action: GroupPreviewAction, group: db.Group) => void; }) { + const [selectedGroup, setSelectedGroup] = useState(null); + const handleGroupAction = useCallback( + (action: GroupPreviewAction, group: db.Group) => { + setSelectedGroup(null); + setTimeout(() => { + onGroupAction(action, group); + }, 100); + }, + [onGroupAction] + ); + const keyExtractor = useCallback((item: logic.SourceActivityEvents) => { return `${item.newest.id}/${item.sourceId}/${item.newest.bucketId}/${item.all.length}`; }, []); @@ -180,24 +198,32 @@ export function ActivityScreenContent({ }) as StyleProp; return ( - - - {events.length > 0 && ( - : null} - refreshControl={ - - } + + + + {events.length > 0 && ( + : null} + refreshControl={ + + } + /> + )} + setSelectedGroup(null)} + group={selectedGroup ?? undefined} + onActionComplete={handleGroupAction} /> - )} - + + ); } diff --git a/packages/ui/src/components/Activity/ActivitySourceContent.tsx b/packages/ui/src/components/Activity/ActivitySourceContent.tsx index 0f48714972..6be3149170 100644 --- a/packages/ui/src/components/Activity/ActivitySourceContent.tsx +++ b/packages/ui/src/components/Activity/ActivitySourceContent.tsx @@ -1,10 +1,10 @@ import * as db from '@tloncorp/shared/db'; import * as logic from '@tloncorp/shared/logic'; import { useMemo } from 'react'; -import { ScrollView, styled } from 'tamagui'; +import { ScrollView, YStack, styled } from 'tamagui'; import { useContactName } from '../ContactNameV2'; -import { PostReference } from '../ContentReference'; +import { ContentReferenceLoader, PostReference } from '../ContentReference'; import { GalleryPost } from '../GalleryPost'; import { Icon } from '../Icon'; import { createContentRenderer } from '../PostContent'; @@ -29,6 +29,16 @@ export function ActivitySourceContent({ const isChatPost = summary.newest.channel?.type !== 'gallery' && summary.newest.channel?.type !== 'notebook'; + + if (summary.newest.type === 'contact') { + return ( + + ); + } + return isReply || isChatPost ? ( ) : ( @@ -39,6 +49,47 @@ export function ActivitySourceContent({ ); } +function ContactUpdateContentRenderer({ summary }: ActivitySourceContentProps) { + const newest = summary.newest; + if (newest.contactUpdateType === 'status') { + return ( + + {newest.contactUpdateValue} + + ); + } + + if (newest.contactUpdateType === 'pinnedGroups') { + const groups = + (newest.contactUpdateGroups + ?.map((ug) => ug.group) + .filter((g) => g) as db.Group[]) ?? []; + + console.log('con update groups renderer', groups); + + if (!groups.length) { + return null; + } + + return ( + + {groups.map((group) => ( + + ))} + + ); + } + + return null; +} + function ChatContentRenderer({ summary }: ActivitySourceContentProps) { const post = useMemo(() => getPost(summary.newest), [summary.newest]); const postAuthorName = useContactName(post.authorId); diff --git a/packages/ui/src/components/Activity/ActivitySummaryMessage.tsx b/packages/ui/src/components/Activity/ActivitySummaryMessage.tsx index f12b7153c9..f80d236a22 100644 --- a/packages/ui/src/components/Activity/ActivitySummaryMessage.tsx +++ b/packages/ui/src/components/Activity/ActivitySummaryMessage.tsx @@ -19,11 +19,20 @@ function SummaryMessageRaw({ const plural = summary.all.length > 1; const authors = useActivitySummaryAuthors(summary); + console.log(`summary message debug`, { + relevancy, + newest, + count, + plural, + authors, + }); + if ( authors.length === 1 && relevancy !== 'groupJoinRequest' && relevancy !== 'flaggedPost' && - relevancy !== 'flaggedReply' + relevancy !== 'flaggedReply' && + relevancy !== 'contactUpdate' ) { return null; } @@ -125,6 +134,16 @@ function SummaryMessageRaw({ ); } + + if (relevancy === 'contactUpdate') { + const message = ` updated their ${contactUpdateNoun(newest)}`; + return ( + + + {message} + + ); + } } export const SummaryMessage = React.memo(SummaryMessageRaw); @@ -147,6 +166,21 @@ function postVerb(channelType: string) { : 'sent'; } +function contactUpdateNoun(event: db.ActivityEvent) { + if (!event.contactUpdateType) { + return ''; + } + if (event.contactUpdateType === 'pinnedGroups') { + return 'favorite groups'; + } + + if (event.contactUpdateType === 'avatarImage') { + return 'avatar'; + } + + return event.contactUpdateType; +} + type ActivityRelevancy = | 'mention' | 'involvedThread' @@ -158,7 +192,8 @@ type ActivityRelevancy = | 'postToChannel' | 'flaggedPost' | 'flaggedReply' - | 'groupJoinRequest'; + | 'groupJoinRequest' + | 'contactUpdate'; export function getRelevancy( summary: logic.SourceActivityEvents, @@ -218,6 +253,10 @@ export function getRelevancy( return 'groupJoinRequest'; } + if (newest.type === 'contact') { + return 'contactUpdate'; + } + console.log( 'Unknown relevancy type for activity summary. Defaulting to involvedThread.', summary @@ -268,6 +307,9 @@ export function ActivitySummaryAuthorList({ export function useActivitySummaryAuthors(summary: logic.SourceActivityEvents) { return useMemo(() => { + if (summary.type === 'contact') { + return [summary.newest.contactUserId ?? '']; + } const firstAuthorId = db.isGroupEvent(summary.newest) ? summary.newest.groupEventUserId : summary.newest.authorId; From 4709fa6d7e4bf271c21dea1ef309de69d716f0fd Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Mon, 18 Nov 2024 23:29:04 -0500 Subject: [PATCH 21/32] update fixture, nav to profile when you click activity event --- apps/tlon-mobile/src/fixtures/Activity.fixture.tsx | 1 + packages/app/features/top/ActivityScreen.tsx | 8 ++++++++ .../ui/src/components/Activity/ActivityScreenView.tsx | 9 ++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/apps/tlon-mobile/src/fixtures/Activity.fixture.tsx b/apps/tlon-mobile/src/fixtures/Activity.fixture.tsx index 31577598d8..ed6084ddc0 100644 --- a/apps/tlon-mobile/src/fixtures/Activity.fixture.tsx +++ b/apps/tlon-mobile/src/fixtures/Activity.fixture.tsx @@ -47,6 +47,7 @@ const ActivityFixture = ({ {...baseContentProps} events={items} seenMarker={Date.now()} + onGroupAction={() => {}} /> ); diff --git a/packages/app/features/top/ActivityScreen.tsx b/packages/app/features/top/ActivityScreen.tsx index 0d3d6297ef..6ec958b5e5 100644 --- a/packages/app/features/top/ActivityScreen.tsx +++ b/packages/app/features/top/ActivityScreen.tsx @@ -71,6 +71,13 @@ export function ActivityScreen(props: Props) { [props.navigation] ); + const handleGoToUserProfile = useCallback( + (userId: string) => { + props.navigation.navigate('UserProfile', { userId }); + }, + [props.navigation] + ); + return ( diff --git a/packages/ui/src/components/Activity/ActivityScreenView.tsx b/packages/ui/src/components/Activity/ActivityScreenView.tsx index c32aefb9c8..1bff4a22e8 100644 --- a/packages/ui/src/components/Activity/ActivityScreenView.tsx +++ b/packages/ui/src/components/Activity/ActivityScreenView.tsx @@ -16,6 +16,7 @@ export function ActivityScreenView({ goToChannel, goToThread, goToGroup, + goToUserProfile, onGroupAction, bucketFetchers, refresh, @@ -24,6 +25,7 @@ export function ActivityScreenView({ goToChannel: (channel: db.Channel, selectedPostId?: string) => void; goToThread: (post: db.Post) => void; goToGroup: (group: db.Group) => void; + goToUserProfile: (userId: string) => void; onGroupAction: (action: GroupPreviewAction, group: db.Group) => void; bucketFetchers: store.BucketFetchers; refresh: () => Promise; @@ -91,11 +93,16 @@ export function ActivityScreenView({ console.warn('No group found for group-ask', event); } break; + case 'contact': + if (event.contactUserId) { + goToUserProfile(event.contactUserId); + } + break; default: break; } }, - [goToChannel, goToThread, goToGroup] + [goToChannel, goToThread, goToGroup, goToUserProfile] ); const events = useMemo( From 7737184d1bbc1d88a394e9459ede6735ae475675 Mon Sep 17 00:00:00 2001 From: ~latter-bolden Date: Tue, 19 Nov 2024 21:28:03 -0500 Subject: [PATCH 22/32] logic fixes --- packages/app/features/top/ChatListScreen.tsx | 8 +- .../app/features/top/UserProfileScreen.tsx | 14 ++++ packages/shared/src/api/contactsApi.ts | 27 +++++-- packages/shared/src/db/queries.ts | 20 +++++ packages/shared/src/store/contactActions.ts | 65 ++++----------- packages/shared/src/store/sync.ts | 1 + packages/ui/src/components/ActionSheet.tsx | 4 +- .../src/components/EditProfileScreenView.tsx | 40 +++++++++- packages/ui/src/components/NavBar/NavIcon.tsx | 3 + packages/ui/src/components/NavBarView.tsx | 30 +++++++ .../ui/src/components/ProfileStatusSheet.tsx | 79 +++++++++++++++++++ .../src/components/UserProfileScreenView.tsx | 28 ++++++- 12 files changed, 255 insertions(+), 64 deletions(-) create mode 100644 packages/ui/src/components/ProfileStatusSheet.tsx diff --git a/packages/app/features/top/ChatListScreen.tsx b/packages/app/features/top/ChatListScreen.tsx index 8726c9779c..0277d4bfd2 100644 --- a/packages/app/features/top/ChatListScreen.tsx +++ b/packages/app/features/top/ChatListScreen.tsx @@ -21,6 +21,7 @@ import { ScreenHeader, View, WelcomeSheet, + triggerHaptic, } from '@tloncorp/ui'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; @@ -283,6 +284,11 @@ export function ChatListScreenView({ setShowSearchInput(!showSearchInput); }, [showSearchInput]); + const goToContacts = useCallback(() => { + triggerHaptic('baseButtonClick'); + navigation.navigate('Contacts'); + }, [navigation]); + return ( navigation.navigate('Contacts')} + onPress={goToContacts} /> } rightControls={ diff --git a/packages/app/features/top/UserProfileScreen.tsx b/packages/app/features/top/UserProfileScreen.tsx index e6772bac26..e414f9176d 100644 --- a/packages/app/features/top/UserProfileScreen.tsx +++ b/packages/app/features/top/UserProfileScreen.tsx @@ -4,6 +4,7 @@ import * as store from '@tloncorp/shared/store'; import { AppDataContextProvider, AttachmentProvider, + GroupPreviewAction, GroupPreviewSheet, NavigationProvider, UserProfileScreenView, @@ -12,6 +13,7 @@ import { useState } from 'react'; import { useCallback } from 'react'; import { useCurrentUserId } from '../../hooks/useCurrentUser'; +import { useGroupActions } from '../../hooks/useGroupActions'; import { RootStackParamList } from '../../navigation/types'; import { useResetToDm } from '../../navigation/utils'; import { useConnectionStatus } from './useConnectionStatus'; @@ -20,10 +22,21 @@ type Props = NativeStackScreenProps; export function UserProfileScreen({ route: { params }, navigation }: Props) { const userId = params.userId; + const { performGroupAction } = useGroupActions(); const currentUserId = useCurrentUserId(); const { data: contacts } = store.useContacts(); const connectionStatus = useConnectionStatus(userId); const [selectedGroup, setSelectedGroup] = useState(null); + + const handleGroupAction = useCallback( + (action: GroupPreviewAction, group: db.Group) => { + setSelectedGroup(null); + setTimeout(() => { + performGroupAction(action, group); + }, 100); + }, + [performGroupAction] + ); const resetToDm = useResetToDm(); const handleGoToDm = useCallback( @@ -67,6 +80,7 @@ export function UserProfileScreen({ route: { params }, navigation }: Props) { open={selectedGroup !== null} onOpenChange={handleGroupPreviewSheetOpenChange} group={selectedGroup ?? undefined} + onActionComplete={handleGroupAction} /> diff --git a/packages/shared/src/api/contactsApi.ts b/packages/shared/src/api/contactsApi.ts index 2f84fee67a..def8ca12c0 100644 --- a/packages/shared/src/api/contactsApi.ts +++ b/packages/shared/src/api/contactsApi.ts @@ -2,7 +2,7 @@ import * as db from '../db'; import { createDevLogger } from '../debug'; import { AnalyticsEvent, normalizeUrbitColor } from '../logic'; import * as ub from '../urbit'; -import { poke, scry, subscribe } from './urbit'; +import { getCurrentUserId, poke, scry, subscribe } from './urbit'; const logger = createDevLogger('contactsApi', true); @@ -105,16 +105,16 @@ export const removeContact = async (contactId: string) => { }; export interface ProfileUpdate { - nickname?: string; + nickname?: string | null; status?: string; bio?: string; - avatarImage?: string; + avatarImage?: string | null; coverImage?: string; } export const updateCurrentUserProfile = async (update: ProfileUpdate) => { const editedFields: ub.ContactEditField[] = []; if (update.nickname !== undefined) { - editedFields.push({ nickname: update.nickname }); + editedFields.push({ nickname: update.nickname ?? '' }); } if (update.status !== undefined) { @@ -126,7 +126,7 @@ export const updateCurrentUserProfile = async (update: ProfileUpdate) => { } if (update.avatarImage !== undefined) { - editedFields.push({ avatar: update.avatarImage }); + editedFields.push({ avatar: update.avatarImage ?? '' }); } if (update.coverImage !== undefined) { @@ -162,6 +162,23 @@ export const removePinnedGroup = async (groupId: string) => { }); }; +export const setPinnedGroups = async (groupIds: string[]) => { + console.log(`api set pinned`, groupIds); + const contactUpdate: ub.ContactBookProfileEdit = {}; + contactUpdate.groups = { + type: 'set', + value: groupIds.map((groupId) => ({ type: 'flag', value: groupId })), + }; + + console.log(`contact-action-1`, { self: { contact: contactUpdate } }); + + return poke({ + app: 'contacts', + mark: 'contact-action-1', + json: { self: contactUpdate }, + }); +}; + export type ContactsUpdate = | { type: 'upsertContact'; contact: db.Contact } | { type: 'removeContact'; contactId: string }; diff --git a/packages/shared/src/db/queries.ts b/packages/shared/src/db/queries.ts index b567a61065..0539a9d069 100644 --- a/packages/shared/src/db/queries.ts +++ b/packages/shared/src/db/queries.ts @@ -359,6 +359,7 @@ export const getChats = createReadQuery( 'groups', 'channels', 'posts', + 'contacts', 'channelUnreads', 'groupUnreads', 'threadUnreads', @@ -2791,6 +2792,25 @@ export const removePinnedGroup = createWriteQuery( ['contactGroups', 'contacts'] ); +export const setPinnedGroups = createWriteQuery( + 'setPinnedGroups', + async ({ groupIds }: { groupIds: string[] }, ctx: QueryCtx) => { + const currentUserId = getCurrentUserId(); + await ctx.db + .delete($contactGroups) + .where(eq($contactGroups.contactId, currentUserId)); + + if (groupIds.length !== 0) { + const newGroups = groupIds.map((groupId) => ({ + contactId: currentUserId, + groupId, + })); + await ctx.db.insert($contactGroups).values(newGroups); + } + }, + ['contactGroups', 'contacts'] +); + export const insertContact = createWriteQuery( 'insertContact', async (contact: Contact, ctx: QueryCtx) => { diff --git a/packages/shared/src/store/contactActions.ts b/packages/shared/src/store/contactActions.ts index 0340bbae5d..8216b20382 100644 --- a/packages/shared/src/store/contactActions.ts +++ b/packages/shared/src/store/contactActions.ts @@ -50,8 +50,8 @@ export async function removeContactSuggestion(contactId: string) { export async function updateContactMetadata( contactId: string, metadata: { - nickname?: string; - avatarImage?: string; + nickname?: string | null; + avatarImage?: string | null; } ) { const { nickname, avatarImage } = metadata; @@ -61,28 +61,16 @@ export async function updateContactMetadata( // optimistic update await db.updateContact({ id: contactId, - customNickname: nickname - ? nickname - : existingContact?.customNickname - ? '' - : undefined, - customAvatarImage: avatarImage - ? avatarImage - : existingContact?.customAvatarImage - ? '' - : undefined, + customNickname: nickname, + customAvatarImage: avatarImage, }); try { await api.updateContactMetadata(contactId, { - nickname: nickname - ? nickname - : existingContact?.customNickname - ? '' - : undefined, + nickname: nickname ? nickname : nickname === null ? '' : undefined, avatarImage: avatarImage ? avatarImage - : existingContact?.customAvatarImage + : avatarImage === null ? '' : undefined, }); @@ -154,37 +142,18 @@ export async function removePinnedGroupFromProfile(groupId: string) { export async function updateProfilePinnedGroups(newPinned: db.Group[]) { const currentUserId = api.getCurrentUserId(); - const currentUserContact = await db.getContact({ id: currentUserId }); - const startingPinnedIds = - currentUserContact?.pinnedGroups.map((pg) => pg.groupId) ?? []; + const existingContact = await db.getContact({ id: currentUserId }); + const existingPinnedIds = + existingContact?.pinnedGroups.map((pg) => pg.groupId) ?? []; + const newPinnedIds = newPinned.map((g) => g.id); - const additions = []; - const deletions = []; + // Optimistic update TODO + await db.setPinnedGroups({ groupIds: newPinnedIds }); - for (const group of newPinned) { - if (!startingPinnedIds.includes(group.id)) { - additions.push(group.id); - } - } - - for (const groupId of startingPinnedIds) { - if (!newPinned.find((g) => g.id === groupId)) { - deletions.push(groupId); - } + try { + await api.setPinnedGroups(newPinnedIds); + } catch (e) { + // Rollback the update + await db.setPinnedGroups({ groupIds: existingPinnedIds }); } - - logger.log( - 'Updating pinned groups [additions, deletions]', - additions, - deletions - ); - - const additionPromises = additions.map((groupId) => - addPinnedGroupToProfile(groupId) - ); - const deletionPromises = deletions.map((groupId) => - removePinnedGroupFromProfile(groupId) - ); - - return Promise.all([...additionPromises, ...deletionPromises]); } diff --git a/packages/shared/src/store/sync.ts b/packages/shared/src/store/sync.ts index de83657af4..1bfb68ea7e 100644 --- a/packages/shared/src/store/sync.ts +++ b/packages/shared/src/store/sync.ts @@ -954,6 +954,7 @@ export async function syncGroupPreviews(groupIds: string[]) { } const groupPreview = await api.getGroupPreview(groupId); + console.log(`got preview for ${groupId}`, groupPreview); await db.insertUnjoinedGroups([groupPreview]); return groupPreview; }); diff --git a/packages/ui/src/components/ActionSheet.tsx b/packages/ui/src/components/ActionSheet.tsx index 9dd64e658a..a5215b80a5 100644 --- a/packages/ui/src/components/ActionSheet.tsx +++ b/packages/ui/src/components/ActionSheet.tsx @@ -180,9 +180,7 @@ const ActionSheetHeader = ActionSheetHeaderFrame.styleable( ({ children, ...props }, ref) => { return ( - - {children} - + {children} ); } diff --git a/packages/ui/src/components/EditProfileScreenView.tsx b/packages/ui/src/components/EditProfileScreenView.tsx index a85ca93089..f33ab988b0 100644 --- a/packages/ui/src/components/EditProfileScreenView.tsx +++ b/packages/ui/src/components/EditProfileScreenView.tsx @@ -48,7 +48,7 @@ export function EditProfileScreenView(props: Props) { const nicknamePlaceholder = useMemo(() => { return props.userId === currentUserId ? userContact?.id - : userContact?.nickname ?? userContact?.id; + : userContact?.peerNickname ?? userContact?.id; }, [props.userId, currentUserId, userContact]); const currentAvatarImage = useMemo(() => { @@ -60,7 +60,7 @@ export function EditProfileScreenView(props: Props) { const avatarPlaceholder = useMemo(() => { return props.userId === currentUserId ? undefined - : userContact?.avatarImage ?? undefined; + : userContact?.peerAvatarImage ?? undefined; }, [props.userId, currentUserId, userContact]); const { @@ -80,12 +80,44 @@ export function EditProfileScreenView(props: Props) { const handlePressDone = useCallback(() => { if (isDirty) { handleSubmit((formData) => { - props.onSaveProfile(formData); + const nicknameStartVal = + props.userId === currentUserId + ? userContact?.nickname + : userContact?.customNickname; + const avatarStartVal = + props.userId === currentUserId + ? userContact?.avatarImage + : userContact?.customAvatarImage; + + const update = { + status: formData.status, + bio: formData.bio, + nickname: formData.nickname + ? formData.nickname + : nicknameStartVal + ? null // clear existing + : undefined, + avatarImage: formData.avatarImage + ? formData.avatarImage + : avatarStartVal + ? null // clear existing + : undefined, + }; + props.onSaveProfile(update); })(); } else { props.onGoBack(); } - }, [handleSubmit, isDirty, props]); + }, [ + currentUserId, + handleSubmit, + isDirty, + props, + userContact?.avatarImage, + userContact?.customAvatarImage, + userContact?.customNickname, + userContact?.nickname, + ]); const handlePressCancel = () => { if (isDirty) { diff --git a/packages/ui/src/components/NavBar/NavIcon.tsx b/packages/ui/src/components/NavBar/NavIcon.tsx index e49bb7187b..7a570efa22 100644 --- a/packages/ui/src/components/NavBar/NavIcon.tsx +++ b/packages/ui/src/components/NavBar/NavIcon.tsx @@ -9,15 +9,18 @@ export function AvatarNavIcon({ id, focused, onPress, + onLongPress, }: { id: string; focused: boolean; onPress?: () => void; + onLongPress?: () => void; }) { return ( { + const [showStatusSheet, setShowStatusSheet] = useState(false); const isRouteActive = (routeName: string | string[]) => { if (Array.isArray(routeName)) { return routeName.includes(currentRoute); @@ -29,6 +33,24 @@ export const NavBarView = ({ const haveUnreadUnseenActivity = store.useHaveUnreadUnseenActivity(); const isWindowNarrow = useIsWindowNarrow(); + const openStatusSheet = useCallback(() => { + triggerHaptic('sheetOpen'); + setShowStatusSheet(true); + }, []); + + const closeStatusSheet = useCallback(() => { + setShowStatusSheet(false); + }, []); + + const handleUpdateStatus = useCallback( + (newStatus: string) => { + console.log('newStatus', newStatus); + store.updateCurrentUserProfile({ status: newStatus }); + closeStatusSheet(); + }, + [closeStatusSheet] + ); + if (!isWindowNarrow) { return null; } @@ -63,7 +85,15 @@ export const NavBarView = ({ id={currentUserId} focused={isRouteActive('Profile')} onPress={navigateToProfileSettings} + onLongPress={openStatusSheet} /> + {showStatusSheet && ( + + )} ); }; diff --git a/packages/ui/src/components/ProfileStatusSheet.tsx b/packages/ui/src/components/ProfileStatusSheet.tsx new file mode 100644 index 0000000000..a0f77ea4d1 --- /dev/null +++ b/packages/ui/src/components/ProfileStatusSheet.tsx @@ -0,0 +1,79 @@ +import { useCallback, useRef } from 'react'; +import { useForm } from 'react-hook-form'; +import { Keyboard } from 'react-native'; +import { YStack } from 'tamagui'; + +import { useContact, useCurrentUserId } from '../contexts'; +import { ActionSheet } from './ActionSheet'; +import { ControlledTextField } from './Form'; + +export default function ProfileStatusSheet({ + open, + onOpenChange, + onUpdateStatus, +}: { + open: boolean; + onOpenChange: (open: boolean) => void; + onUpdateStatus: (status: string) => void; +}) { + const currentUserId = useCurrentUserId(); + const userContact = useContact(currentUserId); + const { + control, + handleSubmit, + formState: { isDirty, isValid }, + } = useForm({ + mode: 'onChange', + defaultValues: { + status: userContact?.status ?? '', + }, + }); + + const handleClose = useCallback( + (open: boolean) => { + if (!open) { + Keyboard.dismiss(); + onOpenChange(false); + } + }, + [onOpenChange] + ); + + const handleSave = useCallback(() => { + console.log(`hanle save pressed`); + handleSubmit((formData) => { + onUpdateStatus(formData.status); + }); + }, [handleSubmit, onUpdateStatus]); + + return ( + + + + + + + + ); +} diff --git a/packages/ui/src/components/UserProfileScreenView.tsx b/packages/ui/src/components/UserProfileScreenView.tsx index f678244ca3..8898f305b3 100644 --- a/packages/ui/src/components/UserProfileScreenView.tsx +++ b/packages/ui/src/components/UserProfileScreenView.tsx @@ -1,7 +1,13 @@ import * as api from '@tloncorp/shared/api'; import * as db from '@tloncorp/shared/db'; import * as store from '@tloncorp/shared/store'; -import { ComponentProps, useCallback, useMemo, useState } from 'react'; +import { + ComponentProps, + useCallback, + useEffect, + useMemo, + useState, +} from 'react'; import { LayoutChangeEvent } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { @@ -104,7 +110,9 @@ export function UserProfileScreenView(props: Props) { ) : null} - + {userContact?.status && ( + + )} @@ -234,6 +242,15 @@ export function PinnedGroupsDisplay( ) { const windowDimensions = useWindowDimensions(); const [containerWidth, setContainerWidth] = useState(windowDimensions.width); + const pinnedGroupsKey = useMemo(() => { + return props.groups.map((g) => g.id).join(','); + }, [props.groups]); + + useEffect(() => { + if (pinnedGroupsKey.length) { + store.syncGroupPreviews(pinnedGroupsKey.split(',')); + } + }, [pinnedGroupsKey]); const handleLayout = (event: LayoutChangeEvent) => { const { width } = event.nativeEvent.layout; @@ -413,6 +430,11 @@ function ProfileButton(props: { onPress: () => void; hero?: boolean; }) { + const handlePress = useCallback(() => { + props.onPress(); + triggerHaptic('baseButtonClick'); + }, [props]); + return (