diff --git a/App.tsx b/App.tsx
index 2368376d8..38ebbd692 100644
--- a/App.tsx
+++ b/App.tsx
@@ -1,6 +1,9 @@
import "expo-dev-client";
import "./polyfills";
-
+import {
+ configureReanimatedLogger,
+ ReanimatedLogLevel,
+} from "react-native-reanimated";
import { configure as configureCoinbase } from "@coinbase/wallet-mobile-sdk";
import DebugButton from "@components/DebugButton";
import { BottomSheetModalProvider } from "@design-system/BottomSheet/BottomSheetModalProvider";
@@ -48,8 +51,21 @@ LogBox.ignoreLogs([
"Privy: Expected status code 200, received 400", // Privy
"Error destroying session", // Privy
'event="noNetwork', // ethers
+ "[Reanimated] Reading from `value` during component render. Please ensure that you do not access the `value` property or use `get` method of a shared value while React is rendering a component.",
+ "Attempted to import the module",
]);
+// This is the default configuration
+configureReanimatedLogger({
+ level: ReanimatedLogLevel.warn,
+ strict: /*
+ Ignores the following warning:
+ "[Reanimated] Reading from `value` during component render. Please ensure that you do not access the `value` property or use `get` method of a shared value while React is rendering a component.",
+todo investigate
+
+ */ false,
+});
+
configureCoinbase({
callbackURL: new URL(`https://${config.websiteDomain}/coinbase`),
hostURL: new URL("https://wallet.coinbase.com/wsegue"),
diff --git a/components/ClickableText.tsx b/components/ClickableText.tsx
index 197e4f600..ac0493681 100644
--- a/components/ClickableText.tsx
+++ b/components/ClickableText.tsx
@@ -2,7 +2,7 @@ import { ParsedText } from "@components/ParsedText/ParsedText";
import Clipboard from "@react-native-clipboard/clipboard";
import { actionSheetColors } from "@styles/colors";
import * as Linking from "expo-linking";
-import { useCallback } from "react";
+import { useCallback, useEffect } from "react";
import { StyleProp, StyleSheet, TextStyle, useColorScheme } from "react-native";
import { navigate } from "../utils/navigation";
import {
@@ -38,7 +38,7 @@ export function ClickableText({ children, style }: Props) {
}, []);
const handleNewConversationPress = useCallback((peer: string) => {
- navigate("NewConversation", { peer });
+ navigate("Conversation", { peer });
}, []);
const showCopyActionSheet = useCallback(
diff --git a/components/Onboarding/WarpcastConnect.tsx b/components/Onboarding/WarpcastConnect.tsx
deleted file mode 100644
index e3548dc0f..000000000
--- a/components/Onboarding/WarpcastConnect.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-// Comment until we really use it
-
-// import logger from "@utils/logger";
-// import { useState } from "react";
-// import { Text } from "react-native";
-
-// import DeprecatedOnboardingComponent from "./DeprecatedOnboardingComponent";
-// import config from "../../config";
-// import { invalidateProfileSocialsQuery } from "../../data/helpers/profiles/profilesUpdate";
-// import {
-// useCurrentAccount,
-// useSettingsStore,
-// } from "../../data/store/accountsStore";
-// import { useSelect } from "../../data/store/storeHelpers";
-// import { notifyFarcasterLinked } from "../../utils/api";
-// import { useLinkFarcaster } from "../../utils/evm/privy";
-// import { refreshRecommendationsForAccount } from "../../utils/recommendations";
-
-// export default function WarpcastConnect() {
-// const [loading, setLoading] = useState(false);
-// const [error, setError] = useState("");
-// const currentAccount = useCurrentAccount() as string;
-// const { setSkipFarcaster } = useSettingsStore(
-// useSelect(["setSkipFarcaster"])
-// );
-// const linkWithFarcaster = useLinkFarcaster({
-// onSuccess: async () => {
-// try {
-// await notifyFarcasterLinked();
-// await invalidateProfileSocialsQuery(currentAccount, currentAccount);
-// await refreshRecommendationsForAccount(currentAccount);
-// } catch (e: any) {
-// logger.error(e);
-// setError("An unknown error occurred");
-// }
-// setLoading(false);
-// },
-// onError: (error) => {
-// setLoading(false);
-// setError(error?.message);
-// },
-// });
-// return (
-// {
-// setLoading(true);
-// setError("");
-// linkWithFarcaster({
-// relyingParty: `https://${config.websiteDomain}`,
-// });
-// }}
-// isLoading={loading}
-// backButtonText="Skip"
-// backButtonAction={() => {
-// setSkipFarcaster(true);
-// }}
-// >
-// Connect to Warpcast
-// {error && {error}}
-//
-// );
-// }
diff --git a/components/Recommendations/Recommendation.tsx b/components/Recommendations/Recommendation.tsx
deleted file mode 100644
index 007ac045a..000000000
--- a/components/Recommendations/Recommendation.tsx
+++ /dev/null
@@ -1,212 +0,0 @@
-import { IProfileSocials } from "@/features/profiles/profile-types";
-import {
- itemSeparatorColor,
- textPrimaryColor,
- textSecondaryColor,
-} from "@styles/colors";
-import { AvatarSizes } from "@styles/sizes";
-import {
- Image,
- Platform,
- StyleSheet,
- Text,
- useColorScheme,
- View,
-} from "react-native";
-
-import IconLoading from "@assets/icon-loading.png";
-import { RecommendationData } from "@data/store/recommendationsStore";
-import {
- getPreferredAvatar,
- getPreferredName,
- getPrimaryNames,
-} from "@utils/profile";
-import { shortAddress } from "@utils/strings/shortAddress";
-import { Avatar } from "../Avatar";
-import { NavigationChatButton } from "@search/components/NavigationChatButton";
-import { useProfileSocials } from "@/hooks/useProfileSocials";
-
-export function Recommendation({
- address,
- // @todo => use only profile
- recommendationData: { ens, farcasterUsernames, lensHandles, tags, profile },
- embedInChat,
- isVisible,
- groupMode,
- addToGroup,
-}: {
- address: string;
- recommendationData: RecommendationData;
- embedInChat?: boolean;
- isVisible: boolean;
- groupMode?: boolean;
- addToGroup?: (member: IProfileSocials & { address: string }) => void;
-}) {
- const styles = useStyles();
- let primaryNamesDisplay = [
- ...(lensHandles || []).map((l) => `${l} on lens`),
- ...(farcasterUsernames || []).map((f) => `${f} on farcaster`),
- ];
- const preferredName = profile // @todo => use only preferred name
- ? getPreferredName(profile, address)
- : ens || shortAddress(address);
- if (profile) {
- const primaryNames = getPrimaryNames(profile);
- primaryNamesDisplay = [
- ...primaryNames.filter((name) => name !== preferredName),
- shortAddress(address),
- ];
- }
- const textAlign = embedInChat ? "center" : "left";
- const socials = useProfileSocials(address);
-
- return (
-
- {!embedInChat && (
-
- )}
-
-
- {preferredName}
-
-
- {primaryNamesDisplay.length > 0 && (
-
- {primaryNamesDisplay.join(" | ")}
-
- )}
- {tags.map((t) => (
-
-
-
-
- {t.text}
-
-
- ))}
-
- {!embedInChat && (
-
- addToGroup({ ...socials, address }) : undefined
- }
- />
-
- )}
-
- );
-}
-
-const useStyles = () => {
- const colorScheme = useColorScheme();
- return StyleSheet.create({
- recommendation: {
- flexDirection: "row",
- justifyContent: "space-between",
- alignItems: "center",
- ...Platform.select({
- default: {
- paddingVertical: 15,
- paddingLeft: Platform.OS === "android" ? 0 : 16,
- },
- android: { paddingVertical: 12 },
- }),
- },
- recommendationBorderBottom: {
- ...Platform.select({
- default: {
- borderBottomWidth: 0.5,
- borderBottomColor: itemSeparatorColor(colorScheme),
- },
- android: {},
- }),
- },
- avatar: {
- marginRight: Platform.OS === "ios" ? 13 : 16,
- },
- recommendationLeft: {
- flexGrow: 1,
- flexShrink: 1,
- justifyContent: "center",
- },
- recommendationRight: {
- marginLeft: Platform.OS === "ios" ? 10 : 0,
- justifyContent: "center",
- },
- recommendationTitle: {
- width: "100%",
- color: textPrimaryColor(colorScheme),
- ...Platform.select({
- default: {
- fontSize: 17,
- fontWeight: "600",
- marginBottom: 3,
- marginRight: 110,
- },
- android: {
- fontSize: 16,
- },
- }),
- },
- recommendationText: {
- color: textSecondaryColor(colorScheme),
- ...Platform.select({
- default: {
- fontSize: 15,
- },
- android: {
- fontSize: 14,
- flexGrow: 1,
- },
- }),
- alignSelf: "flex-start",
- },
- recommendationRow: {
- flexDirection: "row",
- alignItems: "center",
- marginVertical: 3,
- },
- recommendationImage: {
- width: 15,
- height: 15,
- marginRight: 10,
- },
- });
-};
diff --git a/components/Recommendations/Recommendations.tsx b/components/Recommendations/Recommendations.tsx
deleted file mode 100644
index 575736065..000000000
--- a/components/Recommendations/Recommendations.tsx
+++ /dev/null
@@ -1,303 +0,0 @@
-import { IProfileSocials } from "@/features/profiles/profile-types";
-import { useCallback, useEffect, useState } from "react";
-import {
- FlatList,
- Keyboard,
- Platform,
- View,
- ViewStyle,
- TextStyle,
-} from "react-native";
-import * as Linking from "expo-linking";
-
-import { Recommendation } from "./Recommendation";
-import config from "@config";
-import {
- useAccountsStore,
- useCurrentAccount,
- useRecommendationsStore,
-} from "@data/store/accountsStore";
-import { useSelect } from "@data/store/storeHelpers";
-import { useRouter } from "@navigation/useNavigation";
-import { refreshRecommendationsForAccount } from "@utils/recommendations";
-import { translate } from "@/i18n";
-import { Text } from "@design-system/Text";
-import { Loader } from "@/design-system/loader";
-import { ThemedStyle, useAppTheme } from "@/theme/useAppTheme";
-import { textSizeStyles } from "@/design-system/Text/Text.styles";
-
-const EXPIRE_AFTER = 86400000; // 1 DAY
-
-export default function Recommendations({
- visibility,
- groupMode,
- groupMembers,
- addToGroup,
- showTitle = true,
-}: {
- visibility: "FULL" | "EMBEDDED" | "HIDDEN";
- groupMode?: boolean;
- groupMembers?: (IProfileSocials & { address: string })[];
- addToGroup?: (member: IProfileSocials & { address: string }) => void;
- showTitle?: boolean;
-}) {
- const navigation = useRouter();
-
- const userAddress = useCurrentAccount();
- const currentAccount = useAccountsStore((s) => s.currentAccount);
- const {
- frens,
- setLoadingRecommendations,
- setRecommendations,
- loading,
- updatedAt,
- } = useRecommendationsStore(
- useSelect([
- "frens",
- "setLoadingRecommendations",
- "setRecommendations",
- "loading",
- "updatedAt",
- ])
- );
- const { themed } = useAppTheme();
-
- const openSignalList = useCallback(() => {
- Linking.openURL(
- "https://converseapp.notion.site/Converse-MM-signals-af014ca135c04ce1aae362e536712461?pvs=4"
- );
- }, []);
-
- const contactPol = useCallback(() => {
- navigation.popToTop();
- setTimeout(() => {
- navigation.navigate("Conversation", {
- peer: config.contactAddress,
- });
- }, 300);
- }, [navigation]);
-
- const [viewableItems, setViewableItems] = useState<{ [key: string]: true }>(
- {}
- );
-
- const onViewableItemsChanged = useCallback(
- ({ viewableItems: items }: any) => {
- const viewable: { [key: string]: true } = {};
- items.forEach((item: any) => {
- viewable[item.item] = true;
- });
- setViewableItems(viewable);
- },
- []
- );
-
- useEffect(() => {
- // On load, let's load frens
- const getRecommendations = async () => {
- setLoadingRecommendations();
- await refreshRecommendationsForAccount(currentAccount);
- };
- const now = new Date().getTime();
- if (!loading && userAddress && now - updatedAt >= EXPIRE_AFTER) {
- getRecommendations();
- }
- }, [
- loading,
- setLoadingRecommendations,
- setRecommendations,
- userAddress,
- updatedAt,
- currentAccount,
- ]);
-
- const keyExtractor = useCallback((address: string) => address, []);
-
- const renderItem = useCallback(
- ({ item }: { item: string }) => {
- if (item === "title") {
- return (
- <>
- {visibility === "FULL" && showTitle && (
-
- <>
- 👋
-
- {translate("recommendations.title")}
-
- >
-
- )}
- {visibility === "EMBEDDED" && showTitle && (
-
-
- {translate("recommendations.section_title")}
-
-
- )}
- >
- );
- }
-
- // If address is in groupMembers, remove profile from recommendations
- if (
- groupMembers?.some(
- (member) => member.address.toLowerCase() === item.toLowerCase()
- )
- ) {
- return null;
- }
-
- return (
-
- );
- },
- [
- frens,
- themed,
- viewableItems,
- visibility,
- groupMembers,
- groupMode,
- addToGroup,
- showTitle,
- ]
- );
-
- if (visibility === "HIDDEN") return null;
-
- if (loading && Object.keys(frens).length === 0 && visibility === "FULL") {
- return (
-
-
-
- {translate("recommendations.loading")}
-
-
- );
- }
-
- if (visibility === "FULL" && frens && Object.keys(frens).length === 0) {
- return (
- <>
- 😐
-
- {translate("recommendations.no_recommendations")}
-
- {translate("recommendations.signal_list")}
-
- {translate("recommendations.please_feel_free_to")}
-
- {translate("recommendations.contact_pol")}
- {" "}
- {translate("recommendations.if_you_want_us_to_add_anything")}
-
- >
- );
- }
-
- return (
-
-
-
- );
-}
-
-const $emoji: ThemedStyle = ({ spacing }) => ({
- ...textSizeStyles.xl,
- textAlign: "center",
- marginTop: spacing.xl,
- marginBottom: spacing.sm,
-});
-
-const $title: ThemedStyle = ({ colors, spacing }) => ({
- ...textSizeStyles.sm,
- color: colors.text.primary,
- ...Platform.select({
- default: {
- paddingHorizontal: spacing.xl,
- },
- android: {
- paddingHorizontal: spacing.xxl,
- },
- }),
- textAlign: "center",
-});
-
-const $recommendations: ThemedStyle = ({ colors, spacing }) => ({
- marginBottom: spacing.xl,
- backgroundColor: colors.background.surface,
- marginLeft: Platform.OS === "android" ? spacing.md : 0,
-});
-
-const $fetching: ThemedStyle = () => ({
- flexGrow: 1,
- justifyContent: "center",
- marginBottom: 40,
-});
-
-const $fetchingText: ThemedStyle = ({ colors, spacing }) => ({
- ...textSizeStyles.sm,
- color: colors.text.primary,
- textAlign: "center",
- marginTop: spacing.lg,
-});
-
-const $clickableText: ThemedStyle = ({ colors }) => ({
- color: colors.text.action,
- fontWeight: "500",
-});
-
-const $titleContainer: ThemedStyle = ({
- colors,
- spacing,
- borderWidth,
-}) => ({
- paddingBottom: spacing.xl,
- ...Platform.select({
- default: {
- borderBottomWidth: borderWidth.xs,
- borderBottomColor: colors.border.subtle,
- },
- android: {},
- web: {},
- }),
-});
-
-const $sectionTitleContainer: ThemedStyle = ({
- colors,
- spacing,
- borderWidth,
-}) => ({
- ...Platform.select({
- default: {
- borderBottomWidth: borderWidth.xs,
- borderBottomColor: colors.border.subtle,
- paddingLeft: spacing.md,
- },
- android: {},
- web: {},
- }),
-});
-
-const $sectionTitleSpacing: ThemedStyle = ({ colors, spacing }) => ({
- marginBottom: spacing.xs,
- marginTop: spacing.lg,
-});
diff --git a/containers/GroupScreenAddition.tsx b/containers/GroupScreenAddition.tsx
index a16f3183b..717ae974c 100644
--- a/containers/GroupScreenAddition.tsx
+++ b/containers/GroupScreenAddition.tsx
@@ -42,6 +42,7 @@ import {
saveInviteIdByGroupId,
} from "../features/GroupInvites/groupInvites.utils";
import { captureErrorWithToast } from "@/utils/capture-error";
+import logger from "@/utils/logger";
type GroupScreenAdditionProps = {
topic: ConversationTopic;
@@ -52,20 +53,25 @@ const noop = () => {};
export const GroupScreenAddition: FC = ({
topic,
}) => {
+ logger.debug("[GroupScreenAddition] Rendering component", { topic });
+
const colorScheme = useColorScheme();
const currentAccount = useCurrentAccount() as string;
const { members } = useGroupMembers(topic);
- const { currentAccountIsAdmin, currentAccountIsSuperAdmin } = useMemo(
- () => ({
+ const { currentAccountIsAdmin, currentAccountIsSuperAdmin } = useMemo(() => {
+ logger.debug("[GroupScreenAddition] Calculating admin status", {
+ members,
+ currentAccount,
+ });
+ return {
currentAccountIsAdmin: getAddressIsAdmin(members, currentAccount),
currentAccountIsSuperAdmin: getAddressIsSuperAdmin(
members,
currentAccount
),
- }),
- [currentAccount, members]
- );
+ };
+ }, [currentAccount, members]);
const styles = useStyles();
const [snackMessage, setSnackMessage] = useState(null);
@@ -87,18 +93,25 @@ export const GroupScreenAddition: FC = ({
useChatStore(useSelect(["setGroupInviteLink", "deleteGroupInviteLink"]));
const onAddMemberPress = useCallback(() => {
- navigate("NewConversation", { addingToGroupTopic: topic });
+ logger.debug("[GroupScreenAddition] Adding new member", { topic });
+ navigate("InviteUsersToExistingGroup", { addingToGroupTopic: topic });
}, [topic]);
const onCopyInviteLinkPress = useCallback(() => {
if (!groupInviteLink) {
+ logger.warn("[GroupScreenAddition] No invite link to copy");
return;
}
+ logger.debug("[GroupScreenAddition] Copying invite link");
setSnackMessage(translate("group_invite_link_copied"));
Clipboard.setString(groupInviteLink);
}, [groupInviteLink]);
const onCreateInviteLinkPress = useCallback(() => {
+ logger.debug("[GroupScreenAddition] Creating invite link", {
+ groupName,
+ topic,
+ });
createGroupInvite(currentAccount, {
groupName: groupName ?? translate("group_invite_default_group_name"),
imageUrl: groupPhoto,
@@ -106,6 +119,9 @@ export const GroupScreenAddition: FC = ({
groupId: getV3IdFromTopic(topic),
})
.then((groupInvite) => {
+ logger.debug("[GroupScreenAddition] Created invite link successfully", {
+ inviteId: groupInvite.id,
+ });
saveInviteIdByGroupId(getV3IdFromTopic(topic), groupInvite.id);
saveGroupInviteLink(groupInvite.id, getV3IdFromTopic(topic));
setGroupInviteLink(topic, groupInvite.inviteLink);
@@ -113,6 +129,7 @@ export const GroupScreenAddition: FC = ({
setSnackMessage(translate("group_invite_link_created_copied"));
})
.catch((err) => {
+ logger.error("[GroupScreenAddition] Failed to create invite link", err);
captureErrorWithToast(err, {
message: translate("group_opertation_an_error_occurred"),
});
@@ -127,13 +144,18 @@ export const GroupScreenAddition: FC = ({
]);
const onDeleteInviteLink = useCallback(() => {
+ logger.debug("[GroupScreenAddition] Deleting invite link");
Haptics.impactAsync();
const groupId = getV3IdFromTopic(topic);
const inviteId = getInviteIdByGroupId(groupId);
if (!inviteId) {
+ logger.warn("[GroupScreenAddition] No invite ID found to delete");
return;
}
deleteGroupInvite(currentAccount, inviteId).then(() => {
+ logger.debug("[GroupScreenAddition] Deleted invite link successfully", {
+ inviteId,
+ });
setSnackMessage(translate("group_invite_link_deleted"));
deleteLinkFromState(topic);
deleteLinkFromStore(inviteId);
@@ -142,10 +164,14 @@ export const GroupScreenAddition: FC = ({
}, [deleteLinkFromState, topic, currentAccount]);
const dismissSnackBar = useCallback(() => {
+ logger.debug("[GroupScreenAddition] Dismissing snackbar");
setSnackMessage(null);
}, [setSnackMessage]);
if (!canAddMember) {
+ logger.debug(
+ "[GroupScreenAddition] User cannot add members, not rendering"
+ );
return null;
}
diff --git a/design-system/IconButton/IconButton.tsx b/design-system/IconButton/IconButton.tsx
index 20e29da50..17b878369 100644
--- a/design-system/IconButton/IconButton.tsx
+++ b/design-system/IconButton/IconButton.tsx
@@ -4,6 +4,7 @@ import {
PressableStateCallbackType,
StyleProp,
TextStyle,
+ View,
ViewStyle,
} from "react-native";
import { useAppTheme } from "../../theme/useAppTheme";
@@ -94,12 +95,16 @@ export function IconButton(props: IIconButtonProps) {
const handlePress = useCallback(
(e: GestureResponderEvent) => {
+ if (disabled) {
+ return;
+ }
+
if (withHaptics) {
Haptics.softImpactAsync();
}
onPress?.(e);
},
- [withHaptics, onPress]
+ [withHaptics, onPress, disabled]
);
return (
diff --git a/design-system/chip.tsx b/design-system/chip.tsx
new file mode 100644
index 000000000..3fec7e3c4
--- /dev/null
+++ b/design-system/chip.tsx
@@ -0,0 +1,102 @@
+/**
+ * A Chip component that displays an avatar and text in a pill-shaped
+ * container. Used for user selection and filtering.
+ *
+ * @see https://www.figma.com/design/p6mt4tEDltI4mypD3TIgUk/Converse-App?node-id=5026-27031
+ *
+ * @example
+ * // Basic usage with avatar
+ * {}}
+ * />
+ *
+ * @example
+ * // Active state without avatar
+ * {}}
+ * />
+ */
+
+import { ViewStyle, TextStyle, ImageStyle } from "react-native";
+import { TouchableOpacity } from "./TouchableOpacity";
+import { HStack } from "./HStack";
+import { Text } from "./Text";
+import { ThemedStyle, useAppTheme } from "@/theme/useAppTheme";
+import { Avatar } from "@/components/Avatar";
+import { debugBorder } from "@/utils/debug-style";
+
+export type IChipProps = {
+ text: string;
+ avatarUrl?: string;
+ isActive?: boolean;
+ onPress?: () => void;
+ style?: ViewStyle;
+};
+
+export function Chip({
+ text,
+ avatarUrl,
+ isActive,
+ onPress,
+ style,
+}: IChipProps) {
+ const { themed, theme } = useAppTheme();
+
+ return (
+
+
+ {avatarUrl && (
+
+ )}
+
+ {text}
+
+
+
+ );
+}
+
+const $chip: ThemedStyle = ({
+ spacing,
+ borderRadius,
+ borderWidth,
+ colors,
+}) => ({
+ borderRadius: borderRadius.sm,
+ borderWidth: borderWidth.sm,
+ borderColor: colors.border.subtle,
+ paddingVertical: spacing.xxs,
+ paddingHorizontal: spacing.xs,
+ minHeight: 36,
+ // ...debugBorder("orange"),
+});
+
+const $chipActive: ThemedStyle = ({ colors }) => ({
+ backgroundColor: colors.border.subtle,
+});
+
+const $chipContainer: ThemedStyle = ({ spacing }) => ({
+ alignItems: "center",
+ gap: spacing.xxs,
+});
+
+const $avatar: ThemedStyle = ({ borderRadius }) => ({
+ width: 16,
+ height: 16,
+ borderRadius: borderRadius.message.bubble,
+});
+
+const $chipText: ThemedStyle = ({ colors }) => ({
+ color: colors.text.secondary,
+});
+
+const $chipTextActive: ThemedStyle = ({ colors }) => ({
+ color: colors.text.primary,
+});
diff --git a/features/conversation-list/components/ChatNullState.tsx b/features/conversation-list/components/ChatNullState.tsx
deleted file mode 100644
index 6e2c5817d..000000000
--- a/features/conversation-list/components/ChatNullState.tsx
+++ /dev/null
@@ -1,200 +0,0 @@
-import Recommendations from "@components/Recommendations/Recommendations";
-import {
- useSettingsStore,
- useRecommendationsStore,
-} from "@data/store/accountsStore";
-import { translate } from "@i18n/index";
-import {
- backgroundColor,
- itemSeparatorColor,
- primaryColor,
- tertiaryBackgroundColor,
- textPrimaryColor,
- textSecondaryColor,
-} from "@styles/colors";
-import { BorderRadius, Margins, Paddings } from "@styles/sizes";
-import React from "react";
-import { Platform, StyleSheet, Text, useColorScheme, View } from "react-native";
-
-import config from "../../../config";
-import { ShareProfileContent } from "../../../screens/ShareProfile";
-import NewConversationButton from "./NewConversationButton";
-import { usePreferredUsername } from "@/hooks/usePreferredUsername";
-import { usePreferredName } from "@/hooks/usePreferredName";
-import { usePreferredAvatarUri } from "@/hooks/usePreferredAvatarUri";
-
-type ChatNullStateProps = {
- currentAccount: string;
- navigation: any;
- route: any;
-};
-
-const ChatNullState: React.FC = ({
- currentAccount,
- navigation,
- route,
-}) => {
- const colorScheme = useColorScheme();
- const styles = useStyles();
-
- const username = usePreferredUsername(currentAccount);
- const displayName = usePreferredName(currentAccount);
- const avatar = usePreferredAvatarUri(currentAccount);
-
- const profileUrl = `https://${config.websiteDomain}/dm/${
- username || currentAccount
- }`;
-
- const frens = useRecommendationsStore((s) => s.frens);
- const hasRecommendations = Object.keys(frens).length > 0;
-
- const hasUserDismissedBanner = useSettingsStore(
- (s) => s.hasUserDismissedBanner
- );
-
- return (
-
- {/* {!hasUserDismissedBanner && (
- {
- Linking.openURL(config.alphaGroupChatUrl);
- }}
- />
- )} */}
-
-
-
-
- {hasRecommendations
- ? translate("connectWithYourNetwork")
- : translate("shareYourQRCode")}
-
-
- {hasRecommendations
- ? translate("findContacts")
- : translate("moveOrConnect")}
-
-
- {hasRecommendations ? (
-
-
-
- ) : (
-
-
-
- )}
-
- {Platform.OS === "android" && }
-
- );
-};
-
-const useStyles = () => {
- const colorScheme = useColorScheme();
- return StyleSheet.create({
- container: {
- flex: 1,
- backgroundColor: backgroundColor(colorScheme),
- borderTopWidth: Platform.OS === "android" ? 0 : 1,
- borderTopColor: tertiaryBackgroundColor(colorScheme),
- },
- contentContainer: {
- flex: 1,
- alignItems: "center",
- justifyContent: "flex-start",
- paddingTop: Paddings.default,
- },
- titlesContainer: {
- width: "100%",
- borderBottomColor: tertiaryBackgroundColor(colorScheme),
- },
- title: {
- fontSize: 24,
- fontWeight: "bold",
- marginBottom: Margins.small,
- color: textPrimaryColor(colorScheme),
- textAlign: "center",
- letterSpacing: -0.4,
- marginTop: Margins.small,
- },
- titleWithRecommendations: {
- textAlign: "left",
- marginLeft: Margins.default,
- marginTop: 0,
- },
- description: {
- fontSize: 14,
- textAlign: "center",
- marginBottom: Margins.large,
- color: textPrimaryColor(colorScheme),
- letterSpacing: -0.3,
- },
- descriptionWithRecommendations: {
- textAlign: "left",
- marginLeft: Margins.default,
- },
- qrCodeContainer: {
- paddingVertical: Paddings.default,
- paddingHorizontal: Paddings.large,
- backgroundColor: backgroundColor(colorScheme),
- borderRadius: BorderRadius.large,
- shadowColor: primaryColor(colorScheme),
- shadowOffset: { width: 0, height: 2 },
- shadowOpacity: 0.2,
- shadowRadius: 4,
- elevation: 3,
- marginTop: Platform.OS === "android" ? Margins.large : Margins.small,
- },
- identityContainer: {
- marginTop: Margins.large,
- alignItems: "center",
- },
- identity: {
- color: textPrimaryColor(colorScheme),
- fontSize: 24,
- fontWeight: "600",
- textAlign: "center",
- },
- username: {
- fontSize: 16,
- color: textSecondaryColor(colorScheme),
- marginTop: Margins.small,
- },
- recommendationsContainer: {
- width: "100%",
- height: "100%",
- },
- });
-};
-
-export default ChatNullState;
diff --git a/features/conversation-list/components/NewConversationButton.tsx b/features/conversation-list/components/NewConversationButton.tsx
deleted file mode 100644
index ed88b26d4..000000000
--- a/features/conversation-list/components/NewConversationButton.tsx
+++ /dev/null
@@ -1,57 +0,0 @@
-import { PictoSizes } from "@styles/sizes";
-import { converseEventEmitter } from "@utils/events";
-import React, { useCallback } from "react";
-import { Platform, useColorScheme } from "react-native";
-import { FAB } from "react-native-paper";
-
-import { IconButton } from "../../../design-system/IconButton/IconButton";
-import { navigate } from "../../../utils/navigation";
-import Picto from "../../../components/Picto/Picto";
-
-export default function NewConversationButton() {
- const colorScheme = useColorScheme();
-
- const onPress = useCallback(() => {
- navigate("NewConversation");
- }, []);
-
- const showDebug = useCallback(() => {
- converseEventEmitter.emit("showDebugMenu");
- }, []);
-
- if (Platform.OS === "ios") {
- return (
-
- );
- } else {
- return (
- (
- <>
-
- >
- )}
- animated={false}
- style={{
- position: "absolute",
- margin: 0,
- right: 16,
- bottom: 20,
- }}
- onPress={onPress}
- onLongPress={showDebug}
- />
- );
- }
-}
diff --git a/features/conversation-list/conversation-list.screen.tsx b/features/conversation-list/conversation-list.screen.tsx
index 854dfa4d9..a41b35a8e 100644
--- a/features/conversation-list/conversation-list.screen.tsx
+++ b/features/conversation-list/conversation-list.screen.tsx
@@ -48,7 +48,7 @@ import {
import { useDisconnectActionSheet } from "@hooks/useDisconnectActionSheet";
import { useNavigation } from "@react-navigation/native";
import { NativeStackScreenProps } from "@react-navigation/native-stack";
-import React, { memo, useCallback, useMemo } from "react";
+import React, { memo, useCallback, useEffect, useMemo } from "react";
import {
Alert,
Platform,
@@ -62,6 +62,7 @@ import {
} from "react-native-ios-context-menu";
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { useConversationListRequestCount } from "./useConversationListRequestCount";
+import logger from "@/utils/logger";
type IConversationListProps = NativeStackScreenProps<
NavigationParamList,
@@ -347,7 +348,10 @@ function useHeaderWrapper() {
}}
icon="square.and.pencil"
onPress={() => {
- navigation.navigate("NewConversation", {});
+ logger.debug(
+ "[ConversationListScreen] Navigating to NewConversation"
+ );
+ navigation.navigate("NewConversation");
}}
/>
diff --git a/features/conversation/conversation-composer/conversation-composer.tsx b/features/conversation/conversation-composer/conversation-composer.tsx
index be69a5f42..e43c0ed39 100644
--- a/features/conversation/conversation-composer/conversation-composer.tsx
+++ b/features/conversation/conversation-composer/conversation-composer.tsx
@@ -19,10 +19,12 @@ import {
type IComposerProps = {
onSend: (args: ISendMessageParams) => Promise;
+ hideAddAttachmentButton?: boolean;
+ disabled?: boolean;
};
export const Composer = memo(function Composer(props: IComposerProps) {
- const { onSend } = props;
+ const { onSend, disabled, hideAddAttachmentButton } = props;
const { theme } = useAppTheme();
const store = useConversationComposerStore();
@@ -113,17 +115,39 @@ export const Composer = memo(function Composer(props: IComposerProps) {
return (
-
+ {/* note(lustig): if we need any more modifications of this component,
+ we should take the time to create a composite component to allow
+ consumers to explicitly construct it the way they need.
+
+ ie:
+
+
+
+
+
+
+
+ this api would prevent us from getting into prop hell and we
+ could still create the "base" component that covers most normal
+ cases from it.
+
+ I foresee this being required once we start building the composer
+ "swap sender" functionality.
+
+ That functionality will be completely useless mid conversation,
+ but it will be useful when creating a new conversation, for example.
+
+ figma: https://www.figma.com/design/p6mt4tEDltI4mypD3TIgUk/Converse-App?node-id=5026-26997&m=dev
+ */}
+ {!hideAddAttachmentButton && }
-
+
@@ -151,8 +175,11 @@ export const Composer = memo(function Composer(props: IComposerProps) {
);
});
-const SendButton = memo(function SendButton(props: { onPress: () => void }) {
- const { onPress } = props;
+const SendButton = memo(function SendButton(props: {
+ onPress: () => void;
+ disabled?: boolean;
+}) {
+ const { onPress, disabled } = props;
const { theme } = useAppTheme();
@@ -181,7 +208,7 @@ const SendButton = memo(function SendButton(props: { onPress: () => void }) {
hitSlop={theme.spacing.xs}
size="sm"
onPress={onPress}
- disabled={!canSend}
+ disabled={disabled || !canSend}
iconName="arrow.up"
/>
diff --git a/features/conversation/hooks/use-send-message.ts b/features/conversation/hooks/use-send-message.ts
index 2f72aa006..54b393fe9 100644
--- a/features/conversation/hooks/use-send-message.ts
+++ b/features/conversation/hooks/use-send-message.ts
@@ -47,6 +47,8 @@ export function sendMessage(args: {
});
}
+ // todo: where do we optimistically handle adding the message
+ // to our query cache?
return conversation.send(
content.remoteAttachment
? { remoteAttachment: content.remoteAttachment }
diff --git a/features/groups/invite-to-group/InviteUsersToExistingGroup.nav.tsx b/features/groups/invite-to-group/InviteUsersToExistingGroup.nav.tsx
new file mode 100644
index 000000000..4caf62138
--- /dev/null
+++ b/features/groups/invite-to-group/InviteUsersToExistingGroup.nav.tsx
@@ -0,0 +1,37 @@
+import {
+ NativeStack,
+ navigationAnimation,
+} from "@/screens/Navigation/Navigation";
+import { Platform } from "react-native";
+import { ConversationTopic } from "@xmtp/react-native-sdk";
+import { useColorScheme } from "react-native";
+import { InviteUsersToExistingGroupScreen } from "./invite-users-to-exisiting-group.screen";
+import { translate } from "@/i18n";
+import {
+ headerTitleStyle,
+ textPrimaryColor,
+ textSecondaryColor,
+} from "@/styles/colors";
+
+export type InviteUsersToExistingGroupParams = {
+ addingToGroupTopic: ConversationTopic;
+};
+
+export function InviteUsersToExistingGroupNav() {
+ const colorScheme = useColorScheme();
+ return (
+ ({
+ headerTitle: translate("group_info"),
+ headerTintColor:
+ Platform.OS === "android"
+ ? textSecondaryColor(colorScheme)
+ : textPrimaryColor(colorScheme),
+ animation: navigationAnimation,
+ headerTitleStyle: headerTitleStyle(colorScheme),
+ })}
+ />
+ );
+}
diff --git a/features/groups/invite-to-group/invite-users-to-exisiting-group.screen.tsx b/features/groups/invite-to-group/invite-users-to-exisiting-group.screen.tsx
new file mode 100644
index 000000000..92e4fd497
--- /dev/null
+++ b/features/groups/invite-to-group/invite-users-to-exisiting-group.screen.tsx
@@ -0,0 +1,506 @@
+import { Button } from "@design-system/Button/Button";
+import { NativeStackScreenProps } from "@react-navigation/native-stack";
+import {
+ backgroundColor,
+ itemSeparatorColor,
+ primaryColor,
+ textPrimaryColor,
+ textSecondaryColor,
+} from "@styles/colors";
+import React, { useCallback, useEffect, useRef, useState } from "react";
+import {
+ Alert,
+ Platform,
+ ScrollView,
+ StyleSheet,
+ Text,
+ TextInput,
+ View,
+ useColorScheme,
+} from "react-native";
+
+import { translate } from "@/i18n";
+import { getCleanAddress } from "@/utils/evm/getCleanAddress";
+import { useGroupQuery } from "@queries/useGroupQuery";
+import { SearchBar } from "@search/components/SearchBar";
+import { canMessageByAccount } from "@utils/xmtpRN/contacts";
+import { InboxId } from "@xmtp/react-native-sdk";
+import { NavigationParamList } from "@/screens/Navigation/Navigation";
+import { currentAccount } from "@/data/store/accountsStore";
+import { IProfileSocials } from "@/features/profiles/profile-types";
+import { useGroupMembers } from "@/hooks/useGroupMembers";
+import ActivityIndicator from "@/components/ActivityIndicator/ActivityIndicator";
+import { setProfileRecordSocialsQueryData } from "@/queries/useProfileSocialsQuery";
+import { searchProfiles } from "@/utils/api";
+import { isEmptyObject } from "@/utils/objects";
+import { getPreferredName } from "@/utils/profile";
+// import { OldProfileSearchResultsList } from "@/features/search/components/OldProfileSearchResultsList";
+import TableView from "@/components/TableView/TableView";
+import { TableViewPicto } from "@/components/TableView/TableViewImage";
+import AndroidBackAction from "@/components/AndroidBackAction";
+import { getAddressForPeer, isSupportedPeer } from "@/utils/evm/address";
+import config from "@/config";
+import { OldProfileSearchResultsList } from "@/features/search/components/OldProfileSearchResultsList";
+
+export function InviteUsersToExistingGroupScreen({
+ route,
+ navigation,
+}: NativeStackScreenProps) {
+ const colorScheme = useColorScheme();
+ const [group, setGroup] = useState({
+ enabled: !!route.params?.addingToGroupTopic,
+ members: [] as (IProfileSocials & { address: string })[],
+ });
+
+ const { addMembers, members } = useGroupMembers(
+ route.params?.addingToGroupTopic!
+ );
+
+ const [loading, setLoading] = useState(false);
+
+ const handleBack = useCallback(() => navigation.goBack(), [navigation]);
+
+ const styles = useStyles();
+
+ const handleRightAction = useCallback(async () => {
+ setLoading(true);
+ try {
+ // TODO: Support multiple addresses
+ await addMembers(group.members.map((m) => m.address));
+ navigation.goBack();
+ } catch (e) {
+ setLoading(false);
+ console.error(e);
+ Alert.alert("An error occured");
+ }
+ }, [addMembers, group.members, navigation]);
+
+ useEffect(() => {
+ navigation.setOptions({
+ headerLeft: () =>
+ Platform.OS === "ios" ? (
+
+ ) : (
+
+ ),
+ headerTitle: translate("invite_to_group.add_members"),
+ headerRight: () => {
+ if (group.enabled && group.members.length > 0) {
+ if (loading) {
+ return ;
+ } else {
+ return (
+
+ );
+ }
+ }
+ return undefined;
+ },
+ });
+ }, [
+ group,
+ loading,
+ navigation,
+ route.params?.addingToGroupTopic,
+ addMembers,
+ handleBack,
+ handleRightAction,
+ styles.activityIndicator,
+ colorScheme,
+ ]);
+
+ const [value, setValue] = useState("");
+ const searchingForValue = useRef("");
+ const [status, setStatus] = useState({
+ loading: false,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: {} as { [address: string]: IProfileSocials },
+ });
+
+ const debounceDelay = 500;
+ const debounceTimer = useRef | null>(null);
+
+ useEffect(() => {
+ if (value.length < 3) {
+ // If the input is less than 3 characters, do nothing
+ setStatus({
+ loading: false,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: {},
+ });
+ return;
+ }
+
+ if (debounceTimer.current !== null) {
+ clearTimeout(debounceTimer.current);
+ }
+
+ debounceTimer.current = setTimeout(async () => {
+ const searchForValue = async () => {
+ setStatus(({ loading }) => ({
+ loading,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: {},
+ }));
+
+ if (isSupportedPeer(value)) {
+ setStatus(({ error }) => ({
+ loading: true,
+ error,
+ inviteToConverse: "",
+ profileSearchResults: {},
+ }));
+ searchingForValue.current = value;
+ const resolvedAddress = await getAddressForPeer(value);
+ if (searchingForValue.current === value) {
+ // If we're still searching for this one
+ if (!resolvedAddress) {
+ const isLens = value.endsWith(config.lensSuffix);
+ const isFarcaster = value.endsWith(".fc");
+ setStatus({
+ loading: false,
+ profileSearchResults: {},
+ inviteToConverse: "",
+ error:
+ isLens || isFarcaster
+ ? "This handle does not exist. Please try again."
+ : "No address has been set for this domain.",
+ });
+
+ return;
+ }
+ const address = getCleanAddress(resolvedAddress);
+ const addressIsOnXmtp = await canMessageByAccount({
+ account: currentAccount(),
+ peer: address,
+ });
+ if (searchingForValue.current === value) {
+ if (addressIsOnXmtp) {
+ // Let's search with the exact address!
+ const profiles = await searchProfiles(
+ address,
+ currentAccount()
+ );
+
+ if (!isEmptyObject(profiles)) {
+ // Let's save the profiles for future use
+ setProfileRecordSocialsQueryData(currentAccount(), profiles);
+ setStatus({
+ loading: false,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: profiles,
+ });
+ } else {
+ setStatus({
+ loading: false,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: {},
+ });
+ }
+ } else {
+ setStatus({
+ loading: false,
+ error: `${value} does not use Converse or XMTP yet`,
+ inviteToConverse: value,
+ profileSearchResults: {},
+ });
+ }
+ }
+ }
+ } else {
+ setStatus({
+ loading: true,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: {},
+ });
+
+ const profiles = await searchProfiles(value, currentAccount());
+
+ if (!isEmptyObject(profiles)) {
+ // Let's save the profiles for future use
+ setProfileRecordSocialsQueryData(currentAccount(), profiles);
+ setStatus({
+ loading: false,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: profiles,
+ });
+ } else {
+ setStatus({
+ loading: false,
+ error: "",
+ inviteToConverse: "",
+ profileSearchResults: {},
+ });
+ }
+ }
+ };
+ searchForValue();
+ }, debounceDelay);
+
+ return () => {
+ if (debounceTimer.current !== null) {
+ clearTimeout(debounceTimer.current);
+ }
+ };
+ }, [value]);
+
+ const inputRef = useRef(null);
+ const initialFocus = useRef(false);
+
+ const inputPlaceholder = ".converse.xyz, 0x, .eth, .lens, .fc, .cb.id, UD…";
+
+ const onRef = useCallback(
+ (r: TextInput | null) => {
+ if (!initialFocus.current) {
+ initialFocus.current = true;
+ if (!value) {
+ setTimeout(() => {
+ r?.focus();
+ }, 100);
+ }
+ }
+ inputRef.current = r;
+ },
+ [value]
+ );
+
+ return (
+
+
+
+ {!group.enabled && (
+
+
+ {!status.loading && !isEmptyObject(status.profileSearchResults) && (
+
+ {
+ const searchResultsToShow = { ...status.profileSearchResults };
+ if (group.enabled && group.members) {
+ group.members.forEach((member) => {
+ delete searchResultsToShow[member.address];
+ });
+ }
+ if (members) {
+ members?.ids?.forEach((memberId: InboxId) => {
+ const member = members.byId[memberId];
+ const address = getCleanAddress(member.addresses[0]);
+ delete searchResultsToShow[address];
+ });
+ }
+ return searchResultsToShow;
+ })()}
+ groupMode={group.enabled}
+ addToGroup={async (member) => {
+ setGroup((g) => ({ ...g, members: [...g.members, member] }));
+ setValue("");
+ }}
+ />
+
+ )}
+
+ {
+ inputRef.current?.blur();
+ }}
+ >
+ {!status.loading && isEmptyObject(status.profileSearchResults) && (
+
+ {status.error ? (
+ {status.error}
+ ) : (
+
+
+ Type the full address/domain of your contact (with
+ .converse.xyz, .eth, .lens, .fc, .cb.id…)
+
+
+ )}
+
+ )}
+
+ {status.loading && (
+
+ )}
+
+ {!status.loading && !!status.inviteToConverse && (
+ ,
+ title: translate("invite_to_group.invite_to_converse"),
+ subtitle: "",
+ action: () => {
+ navigation.goBack();
+ navigation.navigate("ShareProfile");
+ },
+ },
+ ]}
+ style={styles.tableView}
+ />
+ )}
+
+
+ );
+}
+
+const useStyles = () => {
+ const colorScheme = useColorScheme();
+ return StyleSheet.create({
+ modal: {
+ flex: 1,
+ backgroundColor: backgroundColor(colorScheme),
+ },
+ messageContainer: {
+ ...Platform.select({
+ default: {
+ marginTop: 23,
+ paddingHorizontal: 16,
+ },
+ android: {
+ marginRight: 16,
+ marginLeft: 16,
+ marginTop: 16,
+ },
+ }),
+ },
+ message: {
+ ...Platform.select({
+ default: {
+ fontSize: 17,
+ textAlign: "center",
+ },
+ android: {
+ fontSize: 14,
+ },
+ }),
+
+ color: textSecondaryColor(colorScheme),
+ },
+ clickableText: {
+ color: primaryColor(colorScheme),
+ fontWeight: "500",
+ },
+ error: {
+ color:
+ Platform.OS === "android"
+ ? textSecondaryColor(colorScheme)
+ : textPrimaryColor(colorScheme),
+ },
+ mainActivityIndicator: {
+ marginTop: 23,
+ },
+ tableView: {
+ marginHorizontal: Platform.OS === "android" ? 0 : 18,
+ },
+ tableViewActivityIndicator: {
+ width: 32,
+ height: 32,
+ ...Platform.select({
+ default: { marginRight: 8 },
+ android: { marginLeft: 12, marginRight: -4 },
+ }),
+ },
+ group: {
+ minHeight: 50,
+ paddingBottom: Platform.OS === "ios" ? 10 : 0,
+ flexDirection: "row",
+ alignItems: "center",
+ paddingLeft: Platform.OS === "ios" ? 16 : 0,
+ justifyContent: "flex-start",
+ borderBottomWidth: Platform.OS === "android" ? 1 : 0.5,
+ borderBottomColor: itemSeparatorColor(colorScheme),
+ backgroundColor: backgroundColor(colorScheme),
+ flexWrap: "wrap",
+ },
+ groupMemberButton: {
+ padding: 0,
+ marginHorizontal: 0,
+ marginRight: 10,
+ // height: Platform.OS === "ios" ? 30 : undefined,
+ marginTop: 10,
+ },
+ activityIndicator: {
+ marginRight: 5,
+ },
+ searchContainer: {
+ flex: 1,
+ backgroundColor: backgroundColor(colorScheme),
+ },
+ newGroupButton: {
+ marginLeft: 7,
+ paddingTop: Platform.OS === "ios" ? 13 : 10,
+ paddingBottom: Platform.OS === "ios" ? 0 : 10,
+ },
+ });
+};
diff --git a/features/new-chat/readme.md b/features/new-chat/readme.md
new file mode 100644
index 000000000..cb75e5ae3
--- /dev/null
+++ b/features/new-chat/readme.md
@@ -0,0 +1,4 @@
+going to make changes to existing
+new conversation flow/new grouip screen
+and then i'm goiung to move those files here
+and reorganize them
\ No newline at end of file
diff --git a/features/notifications/utils/index.ts b/features/notifications/utils/index.ts
index 7efd690a5..c55034f44 100644
--- a/features/notifications/utils/index.ts
+++ b/features/notifications/utils/index.ts
@@ -29,15 +29,23 @@ if (Platform.OS === "android") {
defineTask(BACKGROUND_NOTIFICATION_TASK, async ({ data, error }) => {
if (error) {
logger.error(
- `${Platform.OS} ${BACKGROUND_NOTIFICATION_TASK}: Error! ${JSON.stringify(
- error
- )}`
+ `${
+ Platform.OS
+ } ${BACKGROUND_NOTIFICATION_TASK}: Error! ${JSON.stringify(error)}`
);
return;
}
+
const notificationBody =
- ((data as any).notification.data.body as string | undefined) || // Protocol notifications use body (legacy, to support older versions of the app)
- ((data as any).notification.data.data as string | undefined); // Converse notifications use data (legacy, to support older versions of the app)
+ ((data as any).notification?.data?.body as string | undefined) || // Protocol notifications use body (legacy, to support older versions of the app)
+ ((data as any).notification?.data?.data as string | undefined); // Converse notifications use data (legacy, to support older versions of the app)
+ if (!notificationBody) {
+ logger.error(
+ `${Platform.OS} ${BACKGROUND_NOTIFICATION_TASK}: No notification body found`
+ );
+ return;
+ }
+
handleBackgroundNotification(notificationBody);
});
diff --git a/features/search/components/NoResult.tsx b/features/search/components/NoResult.tsx
deleted file mode 100644
index e6ab2688f..000000000
--- a/features/search/components/NoResult.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import React from "react";
-import { Platform, TextStyle } from "react-native";
-import { useAppTheme, ThemedStyle } from "@theme/useAppTheme";
-import { useRouter } from "@navigation/useNavigation";
-import { translate } from "@i18n";
-import { Text } from "@design-system/Text";
-
-export default function NoResult() {
- const { themed } = useAppTheme();
- const router = useRouter();
-
- return (
- <>
-
- 👀
-
-
- {translate("no_results")}
- {
- router.navigate("NewConversation", {});
- }}
- >
- {translate("no_results_start_convo")}
-
-
- >
- );
-}
-
-const $bigEmoji: ThemedStyle = ({ spacing }) => ({
- ...Platform.select({
- default: {
- textAlign: "center",
- marginTop: spacing["6xl"],
- marginBottom: spacing.sm,
- },
- android: {
- display: "none",
- },
- }),
-});
-
-const $notFoundText: ThemedStyle = ({ spacing }) => ({
- ...Platform.select({
- default: {
- textAlign: "center",
- paddingHorizontal: spacing.xl,
- },
- android: {
- textAlign: "left",
- paddingTop: spacing.xs,
- paddingHorizontal: spacing.md,
- },
- }),
-});
diff --git a/features/search/screens/ProfileSearch.tsx b/features/search/components/OldProfileSearchResultsList.tsx
similarity index 70%
rename from features/search/screens/ProfileSearch.tsx
rename to features/search/components/OldProfileSearchResultsList.tsx
index 770ff3805..a30ff225d 100644
--- a/features/search/screens/ProfileSearch.tsx
+++ b/features/search/components/OldProfileSearchResultsList.tsx
@@ -1,5 +1,5 @@
import { NativeStackNavigationProp } from "@react-navigation/native-stack";
-import { useCallback } from "react";
+import React, { useCallback } from "react";
import {
FlatList,
Keyboard,
@@ -11,7 +11,7 @@ import {
import { useSafeAreaInsets } from "react-native-safe-area-context";
import { Text } from "@design-system/Text";
import { translate } from "@i18n";
-import { ProfileSearchItem } from "../components/ProfileSearchItem";
+import { OldProfileSearchResultsListItem } from "./OldProfileSearchResultsListItem";
import { IProfileSocials } from "@/features/profiles/profile-types";
import { useAppTheme, ThemedStyle } from "@theme/useAppTheme";
@@ -22,7 +22,18 @@ type ProfileSearchProps = {
addToGroup?: (member: IProfileSocials & { address: string }) => void;
};
-export default function ProfileSearch({
+/**
+ * @deprecated
+ * We are redoing our Create new chat flow, and this screen was shared between
+ * that and the add members to existing group flow.
+ *
+ * This screen will need some design work, but is outside of scope of the
+ * current work.
+ *
+ * @see https://github.com/ephemeraHQ/converse-app/issues/1498
+ * @see https://www.figma.com/design/p6mt4tEDltI4mypD3TIgUk/Converse-App?node-id=5026-26989&m=dev
+ */
+export function OldProfileSearchResultsList({
navigation,
profiles,
groupMode,
@@ -35,7 +46,7 @@ export default function ProfileSearch({
const renderItem = useCallback(
({ item }: { item: string }) => (
- (
-
+
{translate("search_results")}
@@ -59,10 +73,10 @@ export default function ProfileSearch({
const renderFooter = useCallback(
() => (
-
+
{translate("full_address_hint", {
providers: ".converse.xyz, .eth, .lens, .fc, .x",
@@ -83,7 +97,6 @@ export default function ProfileSearch({
ListHeaderComponent={renderHeader}
ListFooterComponent={renderFooter}
onTouchStart={Keyboard.dismiss}
- showsVerticalScrollIndicator={false}
/>
);
@@ -102,9 +115,17 @@ const $sectionTitleContainer: ThemedStyle = ({
}),
});
-const $sectionTitleSpacing: ThemedStyle = ({ spacing }) => ({
- marginBottom: spacing.xs,
- marginTop: spacing.lg,
+const $sectionTitleSpacing: ThemedStyle = ({ spacing }) => ({
+ ...Platform.select({
+ default: {
+ marginBottom: spacing.sm,
+ marginTop: spacing.xl,
+ },
+ android: {
+ marginBottom: spacing.md,
+ marginTop: spacing.lg,
+ },
+ }),
});
const $footer: ThemedStyle = ({ spacing }) => ({
@@ -120,3 +141,7 @@ const $footer: ThemedStyle = ({ spacing }) => ({
},
}),
});
+
+const $footerText: ThemedStyle = () => ({
+ textAlign: Platform.OS === "ios" ? "center" : "left",
+});
diff --git a/features/search/components/OldProfileSearchResultsListItem.tsx b/features/search/components/OldProfileSearchResultsListItem.tsx
new file mode 100644
index 000000000..ffe07e18e
--- /dev/null
+++ b/features/search/components/OldProfileSearchResultsListItem.tsx
@@ -0,0 +1,116 @@
+import { shortAddress } from "@/utils/strings/shortAddress";
+import { Avatar } from "@components/Avatar";
+import { IProfileSocials } from "@/features/profiles/profile-types";
+import { Text } from "@design-system/Text";
+import { NativeStackNavigationProp } from "@react-navigation/native-stack";
+import { ThemedStyle, useAppTheme } from "@theme/useAppTheme";
+import {
+ getPreferredAvatar,
+ getPreferredName,
+ getPrimaryNames,
+} from "@utils/profile";
+import { ImageStyle, Platform, View, ViewStyle } from "react-native";
+import { NavigationChatButton } from "./NavigationChatButton";
+
+type ProfileSearchItemProps = {
+ address: string;
+ socials: IProfileSocials;
+ navigation?: NativeStackNavigationProp;
+ groupMode?: boolean;
+ addToGroup?: (member: IProfileSocials & { address: string }) => void;
+};
+
+/**
+ * @deprecated
+ * We are redoing our Create new chat flow, and this screen was shared between
+ * that and the add members to existing group flow.
+ *
+ * This screen will need some design work, but is outside of scope of the
+ * current work.
+ *
+ * @see https://github.com/ephemeraHQ/converse-app/issues/1498
+ * @see https://www.figma.com/design/p6mt4tEDltI4mypD3TIgUk/Converse-App?node-id=5026-26989&m=dev
+ */
+export function OldProfileSearchResultsListItem({
+ address,
+ socials,
+ navigation,
+ groupMode,
+ addToGroup,
+}: ProfileSearchItemProps) {
+ const { theme, themed } = useAppTheme();
+ const preferredName = getPreferredName(socials, address);
+ const preferredAvatar = getPreferredAvatar(socials);
+ const primaryNames = getPrimaryNames(socials);
+ const primaryNamesDisplay = [
+ ...primaryNames.filter((name) => name !== preferredName),
+ shortAddress(address),
+ ];
+
+ return (
+
+
+
+
+
+ {preferredName}
+
+ {primaryNamesDisplay.length > 0 && (
+
+ {primaryNamesDisplay.join(" | ")}
+
+ )}
+
+
+ {navigation && (
+
+ addToGroup({ ...socials, address }) : undefined
+ }
+ />
+
+ )}
+
+ );
+}
+
+const $container: ThemedStyle = ({
+ colors,
+ spacing,
+ borderWidth,
+}) => ({
+ borderBottomWidth: borderWidth.sm,
+ borderBottomColor: colors.border.subtle,
+ paddingVertical: spacing.md,
+ flexDirection: "row",
+ justifyContent: "space-between",
+ alignItems: "center",
+});
+
+const $left: ThemedStyle = () => ({
+ flex: 1,
+ flexDirection: "row",
+ alignItems: "center",
+});
+
+const $textContainer: ThemedStyle = () => ({
+ flex: 1,
+ minWidth: 0,
+});
+
+const $avatar: ThemedStyle = ({ spacing }) => ({
+ marginRight: spacing.sm,
+});
+
+const $right: ThemedStyle = ({ spacing }) => ({
+ justifyContent: "center",
+ marginLeft: Platform.OS === "ios" ? spacing.md : 0,
+});
diff --git a/features/search/components/ProfileSearchItem.tsx b/features/search/components/ProfileSearchItem.tsx
index aa4dd4379..8f20273f1 100644
--- a/features/search/components/ProfileSearchItem.tsx
+++ b/features/search/components/ProfileSearchItem.tsx
@@ -2,30 +2,32 @@ import { shortAddress } from "@/utils/strings/shortAddress";
import { Avatar } from "@components/Avatar";
import { IProfileSocials } from "@/features/profiles/profile-types";
import { Text } from "@design-system/Text";
-import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { ThemedStyle, useAppTheme } from "@theme/useAppTheme";
import {
getPreferredAvatar,
getPreferredName,
getPrimaryNames,
} from "@utils/profile";
-import { ImageStyle, Platform, View, ViewStyle } from "react-native";
-import { NavigationChatButton } from "./NavigationChatButton";
+import { Platform, View, ViewStyle, TextStyle } from "react-native";
+import { Pressable } from "@/design-system/Pressable";
+import logger from "@/utils/logger";
type ProfileSearchItemProps = {
address: string;
socials: IProfileSocials;
- navigation?: NativeStackNavigationProp;
- groupMode?: boolean;
- addToGroup?: (member: IProfileSocials & { address: string }) => void;
+ handleSearchResultItemPress: (args: {
+ address: string;
+ socials: IProfileSocials;
+ }) => void;
};
-export function ProfileSearchItem({
+/**
+ * Figma: https://www.figma.com/design/p6mt4tEDltI4mypD3TIgUk/Converse-App?node-id=5191-4200&t=KDRZMuK1xpiNBKG9-11
+ */
+export function ProfileSearchResultListItem({
address,
socials,
- navigation,
- groupMode,
- addToGroup,
+ handleSearchResultItemPress,
}: ProfileSearchItemProps) {
const { theme, themed } = useAppTheme();
const preferredName = getPreferredName(socials, address);
@@ -37,37 +39,43 @@ export function ProfileSearchItem({
];
return (
-
-
+ {
+ logger.info("ProfileSearchResultListItem onPress", {
+ address,
+ socials,
+ });
+ handleSearchResultItemPress({
+ address,
+ socials,
+ });
+ }}
+ >
+
-
+
{preferredName}
- {primaryNamesDisplay.length > 0 && (
-
- {primaryNamesDisplay.join(" | ")}
-
- )}
+
+ {primaryNamesDisplay[0]}
+
- {navigation && (
-
- addToGroup({ ...socials, address }) : undefined
- }
- />
-
- )}
-
+
);
}
@@ -79,27 +87,35 @@ const $container: ThemedStyle = ({
borderBottomWidth: borderWidth.sm,
borderBottomColor: colors.border.subtle,
paddingVertical: spacing.md,
+ paddingHorizontal: spacing.lg,
flexDirection: "row",
- justifyContent: "space-between",
+ justifyContent: "flex-start",
alignItems: "center",
+ backgroundColor: colors.background.surface,
+ gap: spacing.sm,
});
-const $left: ThemedStyle = () => ({
+const $textContainer: ThemedStyle = () => ({
flex: 1,
- flexDirection: "row",
- alignItems: "center",
+ minWidth: 0,
+ flexDirection: "column",
+ alignItems: "flex-start",
+ justifyContent: "flex-start",
});
-const $textContainer: ThemedStyle = ({ spacing }) => ({
- flex: 1,
- minWidth: 0,
+const $avatar: ThemedStyle = () => ({
+ width: 40,
+ height: 40,
+ borderRadius: 24,
+ overflow: "hidden",
});
-const $avatar: ThemedStyle = ({ spacing }) => ({
- marginRight: spacing.sm,
+const $primaryText: ThemedStyle = () => ({
+ lineHeight: 20,
});
-const $right: ThemedStyle = ({ spacing }) => ({
- justifyContent: "center",
- marginLeft: Platform.OS === "ios" ? spacing.md : 0,
+const $secondaryText: ThemedStyle = ({ colors }) => ({
+ lineHeight: 18,
+ color: colors.text.secondary,
+ fontSize: 14,
});
diff --git a/features/search/components/ProfileSearchResultsList.tsx b/features/search/components/ProfileSearchResultsList.tsx
new file mode 100644
index 000000000..257131ba1
--- /dev/null
+++ b/features/search/components/ProfileSearchResultsList.tsx
@@ -0,0 +1,43 @@
+import { useCallback } from "react";
+import { FlatList, Keyboard } from "react-native";
+import { useSafeAreaInsets } from "react-native-safe-area-context";
+import { ProfileSearchResultListItem } from "./ProfileSearchItem";
+import { IProfileSocials } from "@/features/profiles/profile-types";
+
+type ProfileSearchProps = {
+ profiles: { [address: string]: IProfileSocials };
+ handleSearchResultItemPress: (args: {
+ address: string;
+ socials: IProfileSocials;
+ }) => void;
+};
+
+export function ProfileSearchResultsList({
+ profiles,
+ handleSearchResultItemPress,
+}: ProfileSearchProps) {
+ const insets = useSafeAreaInsets();
+
+ const keyExtractor = useCallback((address: string) => address, []);
+
+ const renderItem = useCallback(
+ ({ item: searchResultEthereumAddress }: { item: string }) => (
+
+ ),
+ [profiles, handleSearchResultItemPress]
+ );
+
+ return (
+
+ );
+}
diff --git a/features/search/components/SearchBar.tsx b/features/search/components/SearchBar.tsx
index e5df9c504..c2c734bd0 100644
--- a/features/search/components/SearchBar.tsx
+++ b/features/search/components/SearchBar.tsx
@@ -15,12 +15,7 @@ type Props = {
onRef: (r: TextInput | null) => void;
};
-export default function SearchBar({
- inputPlaceholder,
- value,
- setValue,
- onRef,
-}: Props) {
+export function SearchBar({ inputPlaceholder, value, setValue, onRef }: Props) {
const { theme, themed } = useAppTheme();
return (
diff --git a/i18n/translations/en.ts b/i18n/translations/en.ts
index 43988348b..5c9e1d942 100644
--- a/i18n/translations/en.ts
+++ b/i18n/translations/en.ts
@@ -340,12 +340,18 @@ export const en = {
title: "New group",
},
- new_conversation: {
+ new_chat: {
create_group: "Create group",
back: "Back",
create: "Create",
add_members: "Add members",
- new_conversation: "New conversation",
+ new_chat: "New chat",
+ invite_to_converse: "Invite them to Converse",
+ },
+
+ invite_to_group: {
+ title: "Invite to group",
+ add_members: "Add members",
invite_to_converse: "Invite them to Converse",
},
diff --git a/i18n/translations/fr.ts b/i18n/translations/fr.ts
index 952479dfb..0f42c2995 100644
--- a/i18n/translations/fr.ts
+++ b/i18n/translations/fr.ts
@@ -343,12 +343,12 @@ export const fr = {
title: "Nouveau groupe",
},
- new_conversation: {
+ new_chat: {
create_group: "Créer un groupe",
back: "Retour",
create: "Créer",
add_members: "Ajouter des membres",
- new_conversation: "Nouvelle conversation",
+ new_chat: "Nouvelle conversation",
invite_to_converse: "Invitez-les à Converse",
},
diff --git a/package.json b/package.json
index f239350e5..43a28794d 100644
--- a/package.json
+++ b/package.json
@@ -229,6 +229,7 @@
"eslint-plugin-react-hooks": "^5.0.0",
"eslint-plugin-react-native": "^4.1.0",
"eslint-plugin-unused-imports": "^4.1.4",
+ "expo-module-scripts": "^4.0.3",
"git-is-clean": "^3.0.1",
"globals": "^15.12.0",
"husky": "^8.0.2",
diff --git a/queries/useDmQuery.ts b/queries/useDmQuery.ts
index 5a7626e00..e3754c208 100644
--- a/queries/useDmQuery.ts
+++ b/queries/useDmQuery.ts
@@ -23,6 +23,11 @@ async function getDm(args: IDmQueryArgs) {
includeSync: true,
});
+ // This will not happen because the above throws if not found
+ if (!conversation) {
+ throw new Error("Conversation not found");
+ }
+
// Update the main conversation query because it's a 1-1
setConversationQueryData({
account,
@@ -45,6 +50,10 @@ export function useDmQuery(args: IDmQueryArgs) {
export function setDmQueryData(args: IDmQueryArgs & { dm: IDmQueryData }) {
const { account, peer, dm } = args;
+ if (!dm) {
+ // todo: better type handling of undefineds
+ throw new Error("DM not found");
+ }
queryClient.setQueryData(dmQueryKey(account, peer), dm);
// Also set there because it's a 1-1
setConversationQueryData({
diff --git a/screens/ConverseMatchMaker.tsx b/screens/ConverseMatchMaker.tsx
deleted file mode 100644
index c494bfabe..000000000
--- a/screens/ConverseMatchMaker.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import { NativeStackScreenProps } from "@react-navigation/native-stack";
-import { backgroundColor } from "@styles/colors";
-import React, { useEffect } from "react";
-import {
- Button,
- Platform,
- StyleSheet,
- View,
- useColorScheme,
-} from "react-native";
-
-import { NavigationParamList } from "./Navigation/Navigation";
-import AndroidBackAction from "../components/AndroidBackAction";
-import Recommendations from "../components/Recommendations/Recommendations";
-import { translate } from "@/i18n";
-
-export default function ConverseMatchMaker({
- route,
- navigation,
-}: NativeStackScreenProps) {
- useEffect(() => {
- navigation.setOptions({
- headerLeft: () =>
- Platform.OS === "ios" ? (
- {
- navigation.goBack();
- }}
- />
- ) : (
-
- ),
- });
- }, [navigation]);
-
- const styles = useStyles();
-
- return (
-
-
-
- );
-}
-
-const useStyles = () => {
- const colorScheme = useColorScheme();
- return StyleSheet.create({
- modal: {
- flex: 1,
- backgroundColor: backgroundColor(colorScheme),
- },
- });
-};
diff --git a/screens/Main.tsx b/screens/Main.tsx
index d3aa9ce2e..568a061a7 100644
--- a/screens/Main.tsx
+++ b/screens/Main.tsx
@@ -18,7 +18,6 @@ import { useAppStore } from "../data/store/appStore";
import { useAuthStatus } from "../data/store/authStore";
import { useSelect } from "../data/store/storeHelpers";
import { useThemeProvider } from "../theme/useAppTheme";
-import { useAddressBookStateHandler } from "../utils/addressBook";
import { useAutoConnectExternalWallet } from "../utils/evm/external";
import { usePrivyAccessToken } from "../utils/evm/privy";
import { setConverseNavigatorRef } from "../utils/navigation";
@@ -30,7 +29,7 @@ import {
SignedInNavigation,
SignedOutNavigation,
} from "./Navigation/Navigation";
-import { NewConversationScreenConfig } from "./Navigation/NewConversationNav";
+import { NewChatScreenConfig } from "./Navigation/NewConversationNav";
import { ProfileScreenConfig } from "./Navigation/ProfileNav";
import { ShareProfileScreenConfig } from "./Navigation/ShareProfileNav";
import { WebviewPreviewScreenConfig } from "./Navigation/WebviewPreviewNav";
@@ -50,7 +49,7 @@ const linking: LinkingOptions = {
screens: {
Chats: "/",
Conversation: ConversationScreenConfig,
- NewConversation: NewConversationScreenConfig,
+ NewConversation: NewChatScreenConfig,
Profile: ProfileScreenConfig,
Group: GroupScreenConfig,
GroupInvite: JoinGroupScreenConfig,
@@ -66,7 +65,6 @@ const linking: LinkingOptions = {
export default function Main() {
// Makes sure we have a Privy token ready to make API calls
usePrivyAccessToken();
- useAddressBookStateHandler();
useCheckCurrentInstallation();
useAutoConnectExternalWallet();
diff --git a/screens/Navigation/ConverseMatchMakerNav.tsx b/screens/Navigation/ConverseMatchMakerNav.tsx
deleted file mode 100644
index e5dd43a53..000000000
--- a/screens/Navigation/ConverseMatchMakerNav.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-import { navigationSecondaryBackgroundColor } from "@styles/colors";
-import { useColorScheme } from "react-native";
-
-import ConverseMatchMaker from "../ConverseMatchMaker";
-import { NativeStack, navigationAnimation } from "./Navigation";
-import { translate } from "@/i18n";
-
-export default function ConverseMatchMakerNav() {
- const colorScheme = useColorScheme();
- return (
-
- );
-}
diff --git a/screens/Navigation/Navigation.tsx b/screens/Navigation/Navigation.tsx
index 5f40bc336..93befe589 100644
--- a/screens/Navigation/Navigation.tsx
+++ b/screens/Navigation/Navigation.tsx
@@ -25,6 +25,7 @@ import { NewAccountPrivateKeyScreen } from "../NewAccount/NewAccountPrivateKeySc
import { NewAccountPrivyScreen } from "../NewAccount/NewAccountPrivyScreen";
import { NewAccountScreen } from "../NewAccount/NewAccountScreen";
import { NewAccountUserProfileScreen } from "../NewAccount/NewAccountUserProfileScreen";
+import { NewConversationNav } from "./NewConversationNav";
import { OnboardingConnectWalletScreen } from "../Onboarding/OnboardingConnectWalletScreen";
import { OnboardingEphemeraScreen } from "../Onboarding/OnboardingEphemeraScreen";
import { OnboardingGetStartedScreen } from "../Onboarding/OnboardingGetStartedScreen";
@@ -32,12 +33,13 @@ import { OnboardingNotificationsScreen } from "../Onboarding/OnboardingNotificat
import { OnboardingPrivateKeyScreen } from "../Onboarding/OnboardingPrivateKeyScreen";
import { OnboardingPrivyScreen } from "../Onboarding/OnboardingPrivyScreen";
import { OnboardingUserProfileScreen } from "../Onboarding/OnboardingUserProfileScreen";
-import ConverseMatchMakerNav from "./ConverseMatchMakerNav";
+import {
+ InviteUsersToExistingGroupNav,
+ InviteUsersToExistingGroupParams,
+} from "@/features/groups/invite-to-group/InviteUsersToExistingGroup.nav";
import GroupNav, { GroupNavParams } from "./GroupNav";
import { screenListeners, stackGroupScreenOptions } from "./navHelpers";
-import NewConversationNav, {
- NewConversationNavParams,
-} from "./NewConversationNav";
+
import ProfileNav, { ProfileNavParams } from "./ProfileNav";
import ShareProfileNav from "./ShareProfileNav";
import TopUpNav from "./TopUpNav";
@@ -61,7 +63,7 @@ export type NavigationParamList = {
OnboardingEphemeral: undefined;
OnboardingUserProfile: undefined;
- // Nwe account
+ // New account
NewAccountNavigator: undefined;
NewAccountUserProfile: undefined;
NewAccountConnectWallet: {
@@ -77,7 +79,7 @@ export type NavigationParamList = {
Chats: undefined;
ChatsRequests: undefined;
Conversation: ConversationNavParams;
- NewConversation: NewConversationNavParams;
+ NewConversation: undefined;
NewGroupSummary: undefined;
ConverseMatchMaker: undefined;
@@ -85,6 +87,7 @@ export type NavigationParamList = {
TopUp: undefined;
Profile: ProfileNavParams;
Group: GroupNavParams;
+ InviteUsersToExistingGroup: InviteUsersToExistingGroupParams;
GroupInvite: JoinGroupNavigationParams;
UserProfile: undefined;
WebviewPreview: WebviewPreviewNavParams;
@@ -136,11 +139,11 @@ export function SignedInNavigation() {
{ConversationRequestsListNav()}
{ConversationNav()}
{NewConversationNav()}
- {ConverseMatchMakerNav()}
{ShareProfileNav()}
{WebviewPreviewNav()}
{ProfileNav()}
{GroupNav()}
+ {InviteUsersToExistingGroupNav()}
{JoinGroupNavigation()}
{TopUpNav()}
diff --git a/screens/Navigation/NewConversationNav.tsx b/screens/Navigation/NewConversationNav.tsx
index a97369eca..a5132b102 100644
--- a/screens/Navigation/NewConversationNav.tsx
+++ b/screens/Navigation/NewConversationNav.tsx
@@ -1,21 +1,11 @@
-import { NativeStackNavigationOptions } from "@react-navigation/native-stack";
-import {
- headerTitleStyle,
- navigationSecondaryBackgroundColor,
-} from "@styles/colors";
+import { headerTitleStyle } from "@styles/colors";
import { useColorScheme } from "react-native";
-import { NativeStack, navigationAnimation } from "./Navigation";
-import NewConversationModal from "../NewConversation/NewConversationModal";
-import type { ConversationTopic } from "@xmtp/react-native-sdk";
-import { translate } from "@/i18n";
+import { NativeStack } from "./Navigation";
+import logger from "@/utils/logger";
+import NewConversation from "../NewConversation/NewConversation";
-export type NewConversationNavParams = {
- peer?: string;
- addingToGroupTopic?: ConversationTopic;
-};
-
-export const NewConversationScreenConfig = {
+export const NewChatScreenConfig = {
path: "/newConversation",
parse: {
peer: decodeURIComponent,
@@ -25,24 +15,19 @@ export const NewConversationScreenConfig = {
},
};
-export default function NewConversationNav() {
+export function NewConversationNav() {
const colorScheme = useColorScheme();
- const options: NativeStackNavigationOptions = {
- headerTitle: translate("new_conversation.new_conversation"),
- presentation: "modal",
- headerStyle: {
- backgroundColor: navigationSecondaryBackgroundColor(colorScheme),
- } as any,
- animation: navigationAnimation,
- };
+
+ logger.debug("[NewConversationNav] Configuring navigation", {
+ colorScheme,
+ });
return (
diff --git a/screens/Navigation/navHelpers.ts b/screens/Navigation/navHelpers.ts
index db8e01b72..e2840115d 100644
--- a/screens/Navigation/navHelpers.ts
+++ b/screens/Navigation/navHelpers.ts
@@ -9,6 +9,7 @@ import { ColorSchemeName, Platform } from "react-native";
import { initialURL } from "../../components/StateHandlers/InitialStateHandler";
import config from "../../config";
+import logger from "@/utils/logger";
/**
* Creates a custom state object from a given path for
@@ -212,6 +213,13 @@ export const screenListeners =
newRoute.params?.peer &&
currentRoute.params?.peer !== newRoute.params?.peer
) {
+ logger.debug("[screenListeners] NewConversation", newRoute.params);
+ // whats happening here
+ logger.debug(
+ "[screenListeners] currentRoute.params",
+ currentRoute.params
+ );
+ logger.debug("setting shouldReplace to true");
shouldReplace = true;
} else if (newRoute.name === "Conversation") {
const isNewPeer =
@@ -234,6 +242,11 @@ export const screenListeners =
}
}
if (shouldReplace) {
+ logger.debug(
+ `[screenListeners] shouldReplace replacing ${newRoute.name} with params ${JSON.stringify(
+ newRoute.params
+ )}`
+ );
navigation.dispatch(
StackActions.replace(newRoute.name, newRoute.params)
);
diff --git a/screens/NewConversation/NewConversation.tsx b/screens/NewConversation/NewConversation.tsx
index c34423456..75196616f 100644
--- a/screens/NewConversation/NewConversation.tsx
+++ b/screens/NewConversation/NewConversation.tsx
@@ -1,143 +1,174 @@
-import { Button } from "@design-system/Button/Button";
-import { NativeStackScreenProps } from "@react-navigation/native-stack";
+/**
+ * BUGS:
+ *
+ * chat is not loaded properly from cold start until chat is visited
+ * solution: proper persistence
+ *
+ * chat flow feels slow on app first launch
+ * solution: proper persistence
+ *
+ * group flow feels slow
+ * solution: requires diagnosing bottleneck
+ *
+ * conversation list is not updated with most recent dm when sent from composer
+ * solution: maybe using the hook instead of imperatively doing stuff?
+ *
+ * group name creation not correct: getting first preferred name correct but
+ * ✅ not using correct preferred name for last two when ephemeral accounts
+ *
+ * messed up old add user to existing group screen
+ * ✅ solution: copy existing screen back in
+ *
+ * UI:
+ *
+ * ✅ search results list needs updating
+ * ✅ create chips for search results
+ * ✅ composer disable send button
+ * ✅ composer hide plus button
+ * ✅ pending members list
+ *
+ * new group joined the group welcome message needs wrapping (not my problem atm)
+ *
+ * CODE ORG:
+ * change file names to lower-kebab-case
+ * move files to features/new-conversation
+ * rename files to indicate where they live within new-conversation domain
+ * use proper suffixes
+ *
+ * ---
+ *
+ * GITHUB:
+ * https://github.com/ephemeraHQ/converse-app/issues/1498
+ *
+ * FIGMA:
+ * new composer: https://www.figma.com/design/p6mt4tEDltI4mypD3TIgUk/Converse-App?node-id=5026-26989&m=dev
+ * search results list: https://www.figma.com/design/p6mt4tEDltI4mypD3TIgUk/Converse-App?node-id=5191-4200&t=KDRZMuK1xpiNBKG9-4
+ */
+import { Text } from "@/design-system/Text";
import React, { useCallback, useEffect, useRef, useState } from "react";
-import {
- Alert,
- Platform,
- ScrollView,
- TextInput,
- View,
- ViewStyle,
- TextStyle,
-} from "react-native";
-
-import { translate } from "@/i18n";
+import { Platform, ScrollView, TextInput, View } from "react-native";
+
import { getCleanAddress } from "@/utils/evm/getCleanAddress";
-import { useGroupQuery } from "@queries/useGroupQuery";
-import SearchBar from "@search/components/SearchBar";
-import ProfileSearch from "@search/screens/ProfileSearch";
+import { SearchBar } from "@search/components/SearchBar";
import { canMessageByAccount } from "@utils/xmtpRN/contacts";
-import { InboxId } from "@xmtp/react-native-sdk";
+import { ConversationTopic, ConversationVersion } from "@xmtp/react-native-sdk";
import AndroidBackAction from "@components/AndroidBackAction";
-import Recommendations from "@components/Recommendations/Recommendations";
-import TableView from "@components/TableView/TableView";
-import { TableViewPicto } from "@components/TableView/TableViewImage";
-import config from "@config";
-import {
- currentAccount,
- useRecommendationsStore,
-} from "@data/store/accountsStore";
+import { currentAccount } from "@data/store/accountsStore";
import { IProfileSocials } from "@/features/profiles/profile-types";
-import { useSelect } from "@data/store/storeHelpers";
-import { useGroupMembers } from "@hooks/useGroupMembers";
import { searchProfiles } from "@utils/api";
import { getAddressForPeer, isSupportedPeer } from "@utils/evm/address";
-import { navigate } from "@utils/navigation";
import { isEmptyObject } from "@utils/objects";
-import { getPreferredName } from "@utils/profile";
-import { NewConversationModalParams } from "./NewConversationModal";
+import { getPreferredAvatar, getPreferredName } from "@utils/profile";
import { setProfileRecordSocialsQueryData } from "@/queries/useProfileSocialsQuery";
-import { Text } from "@design-system/Text";
-import { ThemedStyle, useAppTheme } from "@/theme/useAppTheme";
+import { useAppTheme } from "@/theme/useAppTheme";
import { Loader } from "@/design-system/loader";
-import { textSizeStyles } from "@/design-system/Text/Text.styles";
+import logger from "@/utils/logger";
+import { ProfileSearchResultsList } from "@/features/search/components/ProfileSearchResultsList";
+import { Composer } from "@/features/conversation/conversation-composer/conversation-composer";
+import { ConversationComposerStoreProvider } from "@/features/conversation/conversation-composer/conversation-composer.store-context";
+import { ConversationComposerContainer } from "@/features/conversation/conversation-composer/conversation-composer-container";
+import { ConversationKeyboardFiller } from "@/features/conversation/conversation-keyboard-filler";
+import { shortAddress } from "@/utils/strings/shortAddress";
+import {
+ createConversationByAccount,
+ createGroupWithDefaultsByAccount,
+ getOptionalConversationByPeerByAccount,
+} from "@/utils/xmtpRN/conversations";
+import { setConversationQueryData } from "@/queries/useConversationQuery";
+import { sendMessage } from "@/features/conversation/hooks/use-send-message";
+import { useNavigation } from "@react-navigation/native";
+import { Button } from "@/design-system/Button/Button";
+import { stylesNewChat } from "./newChat.styles";
+import { Chip } from "@/design-system/chip";
+import { NativeStackNavigationProp } from "@react-navigation/native-stack";
+import { NavigationParamList } from "../Navigation/Navigation";
+
+/**
+ * Screen shown for when user wants to create a new Chat.
+ *
+ * User can search for peers, create a new group, create a dm,
+ * or navigate to an existing dm.
+ */
+type NavigationProps = NativeStackNavigationProp<
+ NavigationParamList,
+ "NewConversation"
+>;
export default function NewConversation({
- route,
navigation,
-}: NativeStackScreenProps<
- NewConversationModalParams,
- "NewConversationScreen"
->) {
- const handleBack = useCallback(() => navigation.goBack(), [navigation]);
-
+}: {
+ navigation: NavigationProps;
+}) {
const { theme, themed } = useAppTheme();
+ const [conversationCreationMode, setConversationCreationMode] =
+ useState(ConversationVersion.DM);
+ // const navigation = useNavigation();
- // TODO: Unused. Should we remove this once we have a proper group query?
- const { data: existingGroup } = useGroupQuery({
- account: currentAccount(),
- topic: route.params?.addingToGroupTopic!,
- });
+ const handleBack = useCallback(() => {
+ logger.debug("[NewConversation] Navigating back");
+ navigation.goBack();
+ }, [navigation]);
- const [group, setGroup] = useState({
- enabled: !!route.params?.addingToGroupTopic,
+ const [pendingChatMembers, setPendingGroupMembers] = useState({
members: [] as (IProfileSocials & { address: string })[],
});
+ const pendingChatMembersCount = pendingChatMembers.members.length;
+ const composerSendButtonDisabled = pendingChatMembersCount === 0;
- const { addMembers, members } = useGroupMembers(
- route.params?.addingToGroupTopic!
- );
+ useEffect(() => {
+ if (pendingChatMembersCount > 1) {
+ setConversationCreationMode(ConversationVersion.GROUP);
+ } else if (pendingChatMembersCount === 1) {
+ setConversationCreationMode(ConversationVersion.DM);
+ }
+ }, [pendingChatMembersCount]);
const [loading, setLoading] = useState(false);
- const handleRightAction = useCallback(async () => {
- if (route.params?.addingToGroupTopic) {
- setLoading(true);
- try {
- // TODO: Support multiple addresses
- await addMembers(group.members.map((m) => m.address));
- navigation.goBack();
- } catch (e) {
- setLoading(false);
- console.error(e);
- Alert.alert("An error occured");
- }
- } else {
- navigation.push("NewGroupSummary", {
- members: group.members,
- });
- }
- }, [addMembers, group.members, navigation, route.params?.addingToGroupTopic]);
-
useEffect(() => {
+ logger.debug("[NewConversation] Setting navigation options", {
+ memberCount: pendingChatMembersCount,
+ conversationCreationMode,
+ loading,
+ });
+
navigation.setOptions({
headerLeft: () =>
Platform.OS === "ios" ? (
-
+
) : (
-
+
),
- headerTitle: group.enabled
- ? route.params?.addingToGroupTopic
- ? translate("new_conversation.add_members")
- : translate("new_conversation.create_group")
- : translate("new_conversation.new_conversation"),
+ headerBackButtonDisplayMode: "default",
+ headerTitle: "New chat",
headerRight: () => {
- if (group.enabled && group.members.length > 0) {
- if (loading) {
- return ;
- } else {
- return (
-
- );
- }
- }
- return undefined;
+ return (
+
+ );
},
});
}, [
- group,
+ pendingChatMembersCount,
+ conversationCreationMode,
loading,
navigation,
- route.params?.addingToGroupTopic,
- addMembers,
handleBack,
- handleRightAction,
themed,
theme.spacing,
]);
- const [value, setValue] = useState(route.params?.peer || "");
- const searchingForValue = useRef("");
+ const [
+ searchQueryState,
+ /*weird name becuase I'm not exactly sure what the ref below does so being expliti as state vs ref*/ setSearchQueryState,
+ ] = useState("");
+ const searchQueryRef = useRef("");
const [status, setStatus] = useState({
loading: false,
error: "",
@@ -145,20 +176,25 @@ export default function NewConversation({
profileSearchResults: {} as { [address: string]: IProfileSocials },
});
- const {
- updatedAt: recommendationsUpdatedAt,
- loading: recommendationsLoading,
- frens,
- } = useRecommendationsStore(useSelect(["updatedAt", "loading", "frens"]));
- const recommendationsLoadedOnce = recommendationsUpdatedAt > 0;
- const recommendationsFrensCount = Object.keys(frens).length;
-
+ // todo: abstract debounce and provide option for eager vs lazy debounce
+ // ie: lets perform the query but not necessarily rerender until the debounce
+ // this will feel snappier
const debounceDelay = 500;
const debounceTimer = useRef | null>(null);
useEffect(() => {
- if (value.length < 3) {
- // If the input is less than 3 characters, do nothing
+ // Log initial effect trigger
+ logger.info("[NewConversation] Search effect triggered", {
+ searchQueryState,
+ });
+
+ if (searchQueryState.length < 3) {
+ logger.info(
+ "[NewConversation] Search searchQueryState too short, resetting state",
+ {
+ searchQueryState,
+ }
+ );
setStatus({
loading: false,
error: "",
@@ -168,12 +204,17 @@ export default function NewConversation({
return;
}
+ // Log debounce timer clear
if (debounceTimer.current !== null) {
+ logger.info("[NewConversation] Clearing existing debounce timer");
clearTimeout(debounceTimer.current);
}
debounceTimer.current = setTimeout(async () => {
const searchForValue = async () => {
+ logger.info("[NewConversation] Starting search after debounce", {
+ searchQueryState,
+ });
setStatus(({ loading }) => ({
loading,
error: "",
@@ -181,39 +222,47 @@ export default function NewConversation({
profileSearchResults: {},
}));
- if (isSupportedPeer(value)) {
+ if (isSupportedPeer(searchQueryState)) {
+ logger.info("[NewConversation] Searching for supported peer", {
+ searchQueryState,
+ });
setStatus(({ error }) => ({
loading: true,
error,
inviteToConverse: "",
profileSearchResults: {},
}));
- searchingForValue.current = value;
- const resolvedAddress = await getAddressForPeer(value);
- if (searchingForValue.current === value) {
+ searchQueryRef.current = searchQueryState;
+ const resolvedAddress = await getAddressForPeer(searchQueryState);
+ if (searchQueryRef.current === searchQueryState) {
// If we're still searching for this one
if (!resolvedAddress) {
- const isLens = value.endsWith(config.lensSuffix);
- const isFarcaster = value.endsWith(".fc");
setStatus({
loading: false,
profileSearchResults: {},
inviteToConverse: "",
- error:
- isLens || isFarcaster
- ? "This handle does not exist. Please try again."
- : "No address has been set for this domain.",
+ error: "No address has been set for this domain.",
});
return;
}
const address = getCleanAddress(resolvedAddress);
+ logger.info("[NewConversation] Checking if address is on XMTP", {
+ address,
+ });
const addressIsOnXmtp = await canMessageByAccount({
account: currentAccount(),
peer: address,
});
- if (searchingForValue.current === value) {
+ if (searchQueryRef.current === searchQueryState) {
if (addressIsOnXmtp) {
+ logger.info(
+ "[NewConversation] Address found on XMTP, searching profiles",
+ {
+ address,
+ searchQueryState,
+ }
+ );
// Let's search with the exact address!
const profiles = await searchProfiles(
address,
@@ -221,8 +270,15 @@ export default function NewConversation({
);
if (!isEmptyObject(profiles)) {
+ logger.info("[NewConversation] Found and saving profiles", {
+ profileCount: Object.keys(profiles).length,
+ });
// Let's save the profiles for future use
setProfileRecordSocialsQueryData(currentAccount(), profiles);
+ // delete pending chat memebers from search results
+ pendingChatMembers.members.forEach((member) => {
+ delete profiles[member.address];
+ });
setStatus({
loading: false,
error: "",
@@ -230,6 +286,9 @@ export default function NewConversation({
profileSearchResults: profiles,
});
} else {
+ logger.info(
+ "[NewConversation] No profiles found for XMTP user"
+ );
setStatus({
loading: false,
error: "",
@@ -238,16 +297,24 @@ export default function NewConversation({
});
}
} else {
+ logger.info("[NewConversation] Address not on XMTP", {
+ searchQueryState,
+ address,
+ });
setStatus({
loading: false,
- error: `${value} does not use Converse or XMTP yet`,
- inviteToConverse: value,
+ error: `${shortAddress(searchQueryState)} is not on the XMTP network yet`,
+ inviteToConverse: searchQueryState,
profileSearchResults: {},
});
}
}
}
} else {
+ logger.info(
+ "[NewConversation] Searching profiles for non-peer searchQueryState",
+ { searchQueryState }
+ );
setStatus({
loading: true,
error: "",
@@ -255,9 +322,16 @@ export default function NewConversation({
profileSearchResults: {},
});
- const profiles = await searchProfiles(value, currentAccount());
+ const profiles = await searchProfiles(
+ searchQueryState,
+ currentAccount()
+ );
if (!isEmptyObject(profiles)) {
+ logger.info("[NewConversation] Found and saving profiles", {
+ searchQueryState,
+ profileCount: Object.keys(profiles).length,
+ });
// Let's save the profiles for future use
setProfileRecordSocialsQueryData(currentAccount(), profiles);
setStatus({
@@ -267,6 +341,9 @@ export default function NewConversation({
profileSearchResults: profiles,
});
} else {
+ logger.info("[NewConversation] No profiles found", {
+ searchQueryState,
+ });
setStatus({
loading: false,
error: "",
@@ -281,29 +358,21 @@ export default function NewConversation({
return () => {
if (debounceTimer.current !== null) {
+ logger.info("[NewConversation] Cleanup: clearing debounce timer");
clearTimeout(debounceTimer.current);
}
};
- }, [value]);
+ }, [searchQueryState, pendingChatMembers.members]);
const inputRef = useRef(null);
const initialFocus = useRef(false);
- const showRecommendations =
- !status.loading && value.length === 0 && recommendationsFrensCount > 0;
-
- const inputPlaceholder = ".converse.xyz, 0x, .eth, .lens, .fc, .cb.id, UD…";
-
const onRef = useCallback(
(r: TextInput | null) => {
if (!initialFocus.current) {
initialFocus.current = true;
- if (
- !value &&
- !recommendationsLoading &&
- recommendationsLoadedOnce &&
- recommendationsFrensCount === 0
- ) {
+ if (!searchQueryState) {
+ logger.debug("[NewConversation] Auto-focusing input");
setTimeout(() => {
r?.focus();
}, 100);
@@ -311,232 +380,193 @@ export default function NewConversation({
}
inputRef.current = r;
},
- [
- recommendationsFrensCount,
- recommendationsLoadedOnce,
- recommendationsLoading,
- value,
- ]
+ [searchQueryState]
);
+ const shouldDisplaySearchResults =
+ !status.loading &&
+ !status.error &&
+ !isEmptyObject(status.profileSearchResults);
+
+ const shouldDisplayLoading =
+ status.loading &&
+ !status.error &&
+ !isEmptyObject(status.profileSearchResults);
+
+ const shouldDisplayPendingMembers = pendingChatMembers.members.length > 0;
+
+ const shouldDisplayErrorMessage =
+ status.error && isEmptyObject(status.profileSearchResults);
+
return (
-
+
-
- {!group.enabled && (
- {
- setGroup({ enabled: true, members: [] });
- }}
- />
- )}
- {group.enabled &&
- group.members.length > 0 &&
- group.members.map((m, index) => {
+ {shouldDisplayPendingMembers && (
+
+ {pendingChatMembers.members.map((m) => {
const preferredName = getPreferredName(m, m.address);
return (
-
- setGroup((g) => {
- const members = [...g.members];
- members.splice(index, 1);
- return {
- ...g,
- members,
- };
- })
- }
+ avatarUrl={getPreferredAvatar(m)}
+ onPress={() => {
+ setPendingGroupMembers((g) => ({
+ ...g,
+ members: g.members.filter(
+ (member) => member.address !== m.address
+ ),
+ }));
+ }}
/>
);
})}
-
+
+ )}
- {!status.loading && !isEmptyObject(status.profileSearchResults) ? (
-
-
+ {shouldDisplaySearchResults && (
+ {
const searchResultsToShow = { ...status.profileSearchResults };
- if (group.enabled && group.members) {
- group.members.forEach((member) => {
+ if (pendingChatMembers.members) {
+ pendingChatMembers.members.forEach((member) => {
delete searchResultsToShow[member.address];
});
}
- if (members) {
- members?.ids?.forEach((memberId: InboxId) => {
- const member = members.byId[memberId];
- const address = getCleanAddress(member.addresses[0]);
- delete searchResultsToShow[address];
- });
- }
return searchResultsToShow;
})()}
- groupMode={group.enabled}
- addToGroup={async (member) => {
- setGroup((g) => ({ ...g, members: [...g.members, member] }));
- setValue("");
+ handleSearchResultItemPress={(args) => {
+ logger.info("[NewConversation] handleSearchResultItemPress", {
+ args,
+ });
+ setPendingGroupMembers((g) => ({
+ ...g,
+ members: [
+ ...g.members,
+ { ...args.socials, address: args.address },
+ ],
+ }));
+ setSearchQueryState("");
}}
/>
-
- ) : (
+ )}
+
+
+ {shouldDisplayErrorMessage && (
{
inputRef.current?.blur();
}}
>
- {isEmptyObject(status.profileSearchResults) && (
-
- {
- setGroup((g) => ({ ...g, members: [...g.members, member] }));
- setValue("");
- }}
- />
+ {status.error && isEmptyObject(status.profileSearchResults) && (
+
+
+ {status.error}
+
)}
- {!status.loading && isEmptyObject(status.profileSearchResults) && (
-
- {status.error ? (
-
- {status.error}
-
- ) : (
-
-
- Type the full address/domain of your contact (with
- .converse.xyz, .eth, .lens, .fc, .cb.id…)
-
-
- )}
-
- )}
-
- {status.loading && }
-
- {!status.loading && !!status.inviteToConverse && (
- ,
- title: translate("new_conversation.invite_to_converse"),
- subtitle: "",
- action: () => {
- navigation.goBack();
- navigate("ShareProfile");
- },
- },
- ]}
- style={themed($tableView)}
- />
+ {shouldDisplayLoading && (
+
)}
)}
+
+ {/* todo: review this pattern with Thierry */}
+
+
+ {
+ const dmCreationMessageText = something.content.text || "";
+ if (
+ !dmCreationMessageText ||
+ dmCreationMessageText.length === 0
+ ) {
+ return;
+ }
+ logger.info(
+ "[NewConversation] Sending message",
+ something.content.text
+ );
+
+ if (conversationCreationMode === ConversationVersion.DM) {
+ let dm = await getOptionalConversationByPeerByAccount({
+ account: currentAccount(),
+ peer: pendingChatMembers.members[0].address,
+ includeSync: true,
+ });
+ if (!dm) {
+ dm = await createConversationByAccount(
+ currentAccount(),
+ pendingChatMembers.members[0].address
+ );
+ }
+ await sendMessage({
+ conversation: dm,
+ params: {
+ content: { text: dmCreationMessageText },
+ },
+ });
+ setConversationQueryData({
+ account: currentAccount(),
+ topic: dm.topic,
+ conversation: dm,
+ });
+ navigation.replace("Conversation", { topic: dm.topic });
+ } else {
+ const group = await createGroupWithDefaultsByAccount({
+ account: currentAccount(),
+ peerEthereumAddresses: pendingChatMembers.members.map(
+ (m) => m.address
+ ),
+ });
+ await sendMessage({
+ conversation: group,
+ params: {
+ content: { text: dmCreationMessageText },
+ },
+ });
+ setConversationQueryData({
+ account: currentAccount(),
+ topic: group.topic,
+ conversation: group,
+ });
+ navigation.replace("Conversation", { topic: group.topic });
+ }
+ }}
+ />
+
+
+
);
}
-
-const $modal: ThemedStyle = ({ colors }) => ({
- flex: 1,
- backgroundColor: colors.background.surface,
-});
-
-const $messageContainer: ThemedStyle = ({ spacing }) => ({
- ...Platform.select({
- default: {
- marginTop: spacing.lg,
- paddingHorizontal: spacing.md,
- },
- android: {
- marginRight: spacing.md,
- marginLeft: spacing.md,
- marginTop: spacing.md,
- },
- }),
-});
-
-const $message: ThemedStyle = ({ colors }) => ({
- color: colors.text.secondary,
- ...textSizeStyles.sm,
- ...Platform.select({
- default: {
- textAlign: "center",
- },
- }),
-});
-
-const $error: ThemedStyle = ({ colors }) => ({
- color:
- Platform.OS === "android" ? colors.text.secondary : colors.text.primary,
-});
-
-const $tableView: ThemedStyle = () => ({
- marginHorizontal: Platform.OS === "android" ? 0 : 18,
-});
-
-const $group: ThemedStyle = ({ colors, spacing }) => ({
- minHeight: 50,
- paddingBottom: Platform.OS === "ios" ? spacing.xs : 0,
- flexDirection: "row",
- alignItems: "center",
- paddingLeft: Platform.OS === "ios" ? spacing.md : 0,
- justifyContent: "flex-start",
- borderBottomWidth: Platform.OS === "android" ? 1 : 0.5,
- borderBottomColor: colors.border.subtle,
- backgroundColor: colors.background.surface,
- flexWrap: "wrap",
-});
-
-const $groupMemberButton: ThemedStyle = ({ spacing }) => ({
- padding: 0,
- marginHorizontal: 0,
- marginRight: spacing.xs,
- marginTop: spacing.xs,
-});
-
-const $searchContainer: ThemedStyle = ({ colors }) => ({
- flex: 1,
- backgroundColor: colors.background.surface,
-});
-
-const $newGroupButton: ThemedStyle = ({ spacing }) => ({
- marginLeft: spacing["6xs"],
- paddingTop: Platform.OS === "ios" ? spacing.sm : spacing.xs,
- paddingBottom: Platform.OS === "ios" ? 0 : spacing.xs,
-});
diff --git a/screens/NewConversation/NewConversationModal.tsx b/screens/NewConversation/NewConversationModal.tsx
index 02bc91c38..a9f05ce14 100644
--- a/screens/NewConversation/NewConversationModal.tsx
+++ b/screens/NewConversation/NewConversationModal.tsx
@@ -1,87 +1,65 @@
-import {
- NativeStackScreenProps,
- createNativeStackNavigator,
-} from "@react-navigation/native-stack";
-import {
- headerTitleStyle,
- navigationSecondaryBackgroundColor,
- textPrimaryColor,
-} from "@styles/colors";
-import { Platform, useColorScheme } from "react-native";
+// import {
+// NativeStackScreenProps,
+// createNativeStackNavigator,
+// } from "@react-navigation/native-stack";
+// import {
+// headerTitleStyle,
+// navigationSecondaryBackgroundColor,
+// textPrimaryColor,
+// } from "@styles/colors";
+// import { Platform, useColorScheme } from "react-native";
-import NewConversation from "./NewConversation";
-import NewGroupSummary from "./NewGroupSummary";
-import Button from "../../components/Button/Button";
-import { IProfileSocials } from "@/features/profiles/profile-types";
-import {
- NavigationParamList,
- navigationAnimation,
-} from "../Navigation/Navigation";
-import { NewConversationNavParams } from "../Navigation/NewConversationNav";
-import { translate } from "@/i18n";
+// import NewConversation from "./NewConversation";
+// import NewGroupSummary from "./NewGroupSummary";
+// import { IProfileSocials } from "@/features/profiles/profile-types";
+// import {
+// NavigationParamList,
+// navigationAnimation,
+// } from "../Navigation/Navigation";
+// import { NewChatNavParams } from "../Navigation/NewConversationNav";
+// import { translate } from "@/i18n";
+// import logger from "@/utils/logger";
+// import { Button } from "@/design-system/Button/Button";
-export type NewConversationModalParams = {
- NewConversationScreen: NewConversationNavParams;
- NewGroupSummary: {
- members: (IProfileSocials & { address: string })[];
- };
-};
+// export type NewConversationModalParams = {
+// NewChatComposerScreen: NewChatNavParams;
+// NewGroupSummary: {
+// members: (IProfileSocials & { address: string })[];
+// };
+// };
-const ModalStack = createNativeStackNavigator();
+// const ModalStack = createNativeStackNavigator();
-const NewConversationModal = ({
- route,
-}: NativeStackScreenProps) => {
- const colorScheme = useColorScheme();
- return (
-
-
- {(props) => {
- const newRoute = { ...props.route };
- if (route.params) {
- newRoute.params = route.params;
- }
- return (
-
- );
- }}
-
- (
-
- ), // Dummy button for style
- }}
- />
-
- );
-};
+// const NewConversationModal = ({
+// route,
+// }: NativeStackScreenProps) => {
+// const colorScheme = useColorScheme();
-export default NewConversationModal;
+// logger.debug("[NewConversationModal] Rendering with params:", {
+// addingToGroupTopic: route.params?.addingToGroupTopic,
+// peer: route.params?.peer
+// });
+
+// return (
+//
+//
+//
+//
+// );
+// };
+
+// export default NewConversationModal;
diff --git a/screens/NewConversation/NewGroupSummary.tsx b/screens/NewConversation/NewGroupSummary.tsx
index 43d1e6103..49c619a42 100644
--- a/screens/NewConversation/NewGroupSummary.tsx
+++ b/screens/NewConversation/NewGroupSummary.tsx
@@ -1,350 +1,344 @@
-import { translate } from "@i18n";
-import { NativeStackScreenProps } from "@react-navigation/native-stack";
-import {
- backgroundColor,
- textInputStyle,
- textSecondaryColor,
-} from "@styles/colors";
-import logger from "@utils/logger";
-import { PermissionPolicySet } from "@xmtp/react-native-sdk/build/lib/types/PermissionPolicySet";
-import { useCallback, useEffect, useMemo, useState } from "react";
-import {
- Alert,
- Platform,
- ScrollView,
- StyleSheet,
- Switch,
- Text,
- TextInput,
- View,
- useColorScheme,
-} from "react-native";
-import { List } from "react-native-paper";
-import { useSafeAreaInsets } from "react-native-safe-area-context";
+// import { translate } from "@i18n";
+// import { NativeStackScreenProps } from "@react-navigation/native-stack";
+// import {
+// backgroundColor,
+// textInputStyle,
+// textSecondaryColor,
+// } from "@styles/colors";
+// import logger from "@utils/logger";
+// import { PermissionPolicySet } from "@xmtp/react-native-sdk/build/lib/types/PermissionPolicySet";
+// import { useCallback, useEffect, useMemo, useState } from "react";
+// import {
+// Alert,
+// Platform,
+// ScrollView,
+// StyleSheet,
+// Switch,
+// Text,
+// TextInput,
+// View,
+// useColorScheme,
+// } from "react-native";
+// import { List } from "react-native-paper";
+// import { useSafeAreaInsets } from "react-native-safe-area-context";
-import { uploadFile } from "@utils/attachment/uploadFile";
-import ActivityIndicator from "../../components/ActivityIndicator/ActivityIndicator";
-import Button from "../../components/Button/Button";
-import GroupAvatar from "../../components/GroupAvatar";
-import TableView from "../../components/TableView/TableView";
-import {
- currentAccount,
- useCurrentAccount,
-} from "../../data/store/accountsStore";
-import { usePhotoSelect } from "../../hooks/usePhotoSelect";
-import { navigate } from "../../utils/navigation";
-import {
- getPreferredAvatar,
- getPreferredName,
- getProfile,
-} from "../../utils/profile";
-import { createGroupByAccount } from "../../utils/xmtpRN/conversations";
-import { NewConversationModalParams } from "./NewConversationModal";
-import { captureErrorWithToast } from "@/utils/capture-error";
-import { getProfileSocialsQueryData } from "@/queries/useProfileSocialsQuery";
-import { useProfilesSocials } from "@/hooks/useProfilesSocials";
+// import { uploadFile } from "@utils/attachment/uploadFile";
+// import ActivityIndicator from "../../components/ActivityIndicator/ActivityIndicator";
+// import Button from "../../components/Button/Button";
+// import GroupAvatar from "../../components/GroupAvatar";
+// import TableView from "../../components/TableView/TableView";
+// import {
+// currentAccount,
+// useCurrentAccount,
+// } from "../../data/store/accountsStore";
+// import { usePhotoSelect } from "../../hooks/usePhotoSelect";
+// import { navigate } from "../../utils/navigation";
+// import {
+// getPreferredAvatar,
+// getPreferredName,
+// getProfile,
+// } from "../../utils/profile";
+// import {
+// createGroupByAccount,
+// defaultPermissionPolicySet,
+// } from "../../utils/xmtpRN/conversations";
+// import { NewConversationModalParams } from "./NewConversationModal";
+// import { captureErrorWithToast } from "@/utils/capture-error";
+// import { getProfileSocialsQueryData } from "@/queries/useProfileSocialsQuery";
+// import { useProfilesSocials } from "@/hooks/useProfilesSocials";
-export default function NewGroupSummary({
- route,
- navigation,
-}: NativeStackScreenProps) {
- const styles = useStyles();
- const insets = useSafeAreaInsets();
- const [creatingGroup, setCreatingGroup] = useState(false);
- const [permissionPolicySet, setPermissionPolicySet] =
- useState({
- addMemberPolicy: "allow",
- removeMemberPolicy: "admin",
- addAdminPolicy: "superAdmin",
- removeAdminPolicy: "superAdmin",
- updateGroupNamePolicy: "allow",
- updateGroupDescriptionPolicy: "allow",
- updateGroupImagePolicy: "allow",
- updateGroupPinnedFrameUrlPolicy: "allow",
- });
- const account = useCurrentAccount();
- const { photo: groupPhoto, addPhoto: addGroupPhoto } = usePhotoSelect();
- const [
- { remotePhotoUrl, isLoading: isUploadingGroupPhoto },
- setRemotePhotUrl,
- ] = useState<{ remotePhotoUrl: string | undefined; isLoading: boolean }>({
- remotePhotoUrl: undefined,
- isLoading: false,
- });
+// export default function NewGroupSummary({
+// route,
+// navigation,
+// }: NativeStackScreenProps) {
+// const styles = useStyles();
+// const insets = useSafeAreaInsets();
+// const [creatingGroup, setCreatingGroup] = useState(false);
+// const [permissionPolicySet, setPermissionPolicySet] =
+// useState(defaultPermissionPolicySet);
+// const account = useCurrentAccount();
+// const { photo: groupPhoto, addPhoto: addGroupPhoto } = usePhotoSelect();
+// const [
+// { remotePhotoUrl, isLoading: isUploadingGroupPhoto },
+// setRemotePhotUrl,
+// ] = useState<{ remotePhotoUrl: string | undefined; isLoading: boolean }>({
+// remotePhotoUrl: undefined,
+// isLoading: false,
+// });
- const defaultGroupName = useMemo(() => {
- if (!account) return "";
- const members = route.params.members.slice(0, 3);
- const currentAccountSocials =
- getProfileSocialsQueryData(account, account) ?? undefined;
- let groupName = getPreferredName(currentAccountSocials, account);
- if (members.length) {
- groupName += ", ";
- }
- for (let i = 0; i < members.length; i++) {
- groupName += getPreferredName(members[i], members[i].address);
- if (i < members.length - 1) {
- groupName += ", ";
- }
- }
+// const defaultGroupName = useMemo(() => {
+// if (!account) return "";
+// const members = route.params.members.slice(0, 3);
+// const currentAccountSocials =
+// getProfileSocialsQueryData(account, account) ?? undefined;
+// let groupName = getPreferredName(currentAccountSocials, account);
+// if (members.length) {
+// groupName += ", ";
+// }
+// for (let i = 0; i < members.length; i++) {
+// groupName += getPreferredName(members[i], members[i].address);
+// if (i < members.length - 1) {
+// groupName += ", ";
+// }
+// }
- return groupName;
- }, [route.params.members, account]);
- const colorScheme = useColorScheme();
- const [groupName, setGroupName] = useState(defaultGroupName);
- const [groupDescription, setGroupDescription] = useState("");
+// return groupName;
+// }, [route.params.members, account]);
+// const colorScheme = useColorScheme();
+// const [groupName, setGroupName] = useState(defaultGroupName);
+// const [groupDescription, setGroupDescription] = useState("");
- useEffect(() => {
- if (!groupPhoto) return;
- setRemotePhotUrl({ remotePhotoUrl: undefined, isLoading: true });
- uploadFile({
- account: currentAccount(),
- filePath: groupPhoto,
- contentType: "image/jpeg",
- })
- .then((url) => {
- setRemotePhotUrl({
- remotePhotoUrl: url,
- isLoading: false,
- });
- })
- .catch((e) => {
- captureErrorWithToast(e, {
- message: translate("upload_group_photo_error"),
- });
- setRemotePhotUrl({
- remotePhotoUrl: undefined,
- isLoading: false,
- });
- });
- }, [groupPhoto, setRemotePhotUrl]);
+// useEffect(() => {
+// if (!groupPhoto) return;
+// setRemotePhotUrl({ remotePhotoUrl: undefined, isLoading: true });
+// uploadFile({
+// account: currentAccount(),
+// filePath: groupPhoto,
+// contentType: "image/jpeg",
+// })
+// .then((url) => {
+// setRemotePhotUrl({
+// remotePhotoUrl: url,
+// isLoading: false,
+// });
+// })
+// .catch((e) => {
+// captureErrorWithToast(e, {
+// message: translate("upload_group_photo_error"),
+// });
+// setRemotePhotUrl({
+// remotePhotoUrl: undefined,
+// isLoading: false,
+// });
+// });
+// }, [groupPhoto, setRemotePhotUrl]);
- const onCreateGroupPress = useCallback(async () => {
- setCreatingGroup(true);
- try {
- const group = await createGroupByAccount({
- account: currentAccount(),
- peers: route.params.members.map((m) => m.address),
- permissionPolicySet,
- groupName,
- groupPhoto: remotePhotoUrl,
- groupDescription,
- });
+// const onCreateGroupPress = useCallback(async () => {
+// setCreatingGroup(true);
+// try {
+// const group = await createGroupByAccount({
+// account: currentAccount(),
+// peers: route.params.members.map((m) => m.address),
+// permissionPolicySet,
+// groupName,
+// groupPhoto: remotePhotoUrl,
+// groupDescription,
+// });
- navigation.getParent()?.goBack();
+// navigation.getParent()?.goBack();
- setTimeout(() => {
- navigate("Conversation", {
- topic: group.topic,
- });
- }, 300);
- } catch (e) {
- logger.error(e);
- Alert.alert("An error occurred");
- setCreatingGroup(false);
- }
- }, [
- groupDescription,
- groupName,
- permissionPolicySet,
- navigation,
- remotePhotoUrl,
- route.params.members,
- ]);
+// setTimeout(() => {
+// navigate("Conversation", {
+// topic: group.topic,
+// });
+// }, 300);
+// } catch (e) {
+// logger.error(e);
+// Alert.alert("An error occurred");
+// setCreatingGroup(false);
+// }
+// }, [
+// groupDescription,
+// groupName,
+// permissionPolicySet,
+// navigation,
+// remotePhotoUrl,
+// route.params.members,
+// ]);
- useEffect(() => {
- navigation.setOptions({
- headerRight: () =>
- creatingGroup || isUploadingGroupPhoto ? (
-
- ) : (
-
- ),
- });
- }, [
- creatingGroup,
- isUploadingGroupPhoto,
- navigation,
- onCreateGroupPress,
- styles,
- ]);
+// useEffect(() => {
+// navigation.setOptions({
+// headerRight: () =>
+// creatingGroup || isUploadingGroupPhoto ? (
+//
+// ) : (
+//
+// ),
+// });
+// }, [
+// creatingGroup,
+// isUploadingGroupPhoto,
+// navigation,
+// onCreateGroupPress,
+// styles,
+// ]);
- const handlePermissionSwitch = useCallback(
- (permissionName: "addMembers" | "editMetadata") => () => {
- if (permissionName === "addMembers") {
- const currentPermission = permissionPolicySet.addMemberPolicy;
- const newPermission = currentPermission === "allow" ? "admin" : "allow";
- setPermissionPolicySet((currentSet) => ({
- ...currentSet,
- addMemberPolicy: newPermission,
- }));
- } else if (permissionName === "editMetadata") {
- const currentPermission = permissionPolicySet.updateGroupNamePolicy;
- const newPermission = currentPermission === "allow" ? "admin" : "allow";
- setPermissionPolicySet((currentSet) => ({
- ...currentSet,
- updateGroupDescriptionPolicy: newPermission,
- updateGroupImagePolicy: newPermission,
- updateGroupNamePolicy: newPermission,
- updateGroupPinnedFrameUrlPolicy: newPermission,
- }));
- }
- },
- [
- permissionPolicySet.addMemberPolicy,
- permissionPolicySet.updateGroupNamePolicy,
- ]
- );
+// const handlePermissionSwitch = useCallback(
+// (permissionName: "addMembers" | "editMetadata") => () => {
+// if (permissionName === "addMembers") {
+// const currentPermission = permissionPolicySet.addMemberPolicy;
+// const newPermission = currentPermission === "allow" ? "admin" : "allow";
+// setPermissionPolicySet((currentSet) => ({
+// ...currentSet,
+// addMemberPolicy: newPermission,
+// }));
+// } else if (permissionName === "editMetadata") {
+// const currentPermission = permissionPolicySet.updateGroupNamePolicy;
+// const newPermission = currentPermission === "allow" ? "admin" : "allow";
+// setPermissionPolicySet((currentSet) => ({
+// ...currentSet,
+// updateGroupDescriptionPolicy: newPermission,
+// updateGroupImagePolicy: newPermission,
+// updateGroupNamePolicy: newPermission,
+// updateGroupPinnedFrameUrlPolicy: newPermission,
+// }));
+// }
+// },
+// [
+// permissionPolicySet.addMemberPolicy,
+// permissionPolicySet.updateGroupNamePolicy,
+// ]
+// );
- const profileQueries = useProfilesSocials(
- route.params.members.map((m) => m.address)
- );
+// const profileQueries = useProfilesSocials(
+// route.params.members.map((m) => m.address)
+// );
- const pendingGroupMembers = useMemo(() => {
- return profileQueries.map(({ data: socials }, index) => {
- const address = route.params.members[index].address;
- return {
- address,
- uri: getPreferredAvatar(socials ?? undefined),
- name: getPreferredName(socials ?? undefined, account!),
- };
- });
- }, [profileQueries, route.params.members, account]);
+// const pendingGroupMembers = useMemo(() => {
+// return profileQueries.map(({ data: socials }, index) => {
+// const address = route.params.members[index].address;
+// return {
+// address,
+// uri: getPreferredAvatar(socials ?? undefined),
+// name: getPreferredName(socials ?? undefined, account!),
+// };
+// });
+// }, [profileQueries, route.params.members, account]);
- return (
-
-
-
-
-
-
-
+// return (
+//
+//
+//
+//
+//
+//
+//
-
-
- {translate("group_name")}
-
-
-
-
-
- {translate("group_description")}
-
-
-
- ({
- id: a.address,
- title: getPreferredName(a, a.address),
- }))}
- title={translate("members_title")}
- />
-
- ),
- },
- {
- title: translate("new_group.edit_group_info"),
- id: "editGroupInfo",
- rightView: (
-
- ),
- },
- ]}
- title={translate("new_group.members_can")}
- />
-
- {translate("promote_to_admin_to_manage_group")}
-
-
-
- );
-}
+//
+//
+// {translate("group_name")}
+//
+//
+//
+//
+//
+// {translate("group_description")}
+//
+//
+//
+// ({
+// id: a.address,
+// title: getPreferredName(a, a.address),
+// }))}
+// title={translate("members_title")}
+// />
+//
+// ),
+// },
+// {
+// title: translate("new_group.edit_group_info"),
+// id: "editGroupInfo",
+// rightView: (
+//
+// ),
+// },
+// ]}
+// title={translate("new_group.members_can")}
+// />
+//
+// {translate("promote_to_admin_to_manage_group")}
+//
+//
+//
+// );
+// }
-const useStyles = () => {
- const colorScheme = useColorScheme();
- return useMemo(
- () =>
- StyleSheet.create({
- avatar: {
- marginBottom: 10,
- marginTop: 23,
- },
- group: {
- backgroundColor: backgroundColor(colorScheme),
- },
- groupContent: {
- paddingHorizontal: Platform.OS === "ios" ? 18 : 0,
- },
- sectionTitle: {
- marginBottom: -8,
- color: textSecondaryColor(colorScheme),
- fontSize: 13,
- fontWeight: "500",
- },
- activitySpinner: {
- marginRight: 5,
- },
- listSectionContainer: {
- alignItems: "center",
- },
- buttonText: {
- fontWeight: "500",
- },
- nameInput: {
- fontSize: 16,
- },
- p: {
- textAlign: "center",
- marginLeft: 32,
- marginRight: 32,
- ...Platform.select({
- default: {
- fontSize: 13,
- lineHeight: 17,
- color: textSecondaryColor(colorScheme),
- },
- }),
- },
- }),
- [colorScheme]
- );
-};
+// const useStyles = () => {
+// const colorScheme = useColorScheme();
+// return useMemo(
+// () =>
+// StyleSheet.create({
+// avatar: {
+// marginBottom: 10,
+// marginTop: 23,
+// },
+// group: {
+// backgroundColor: backgroundColor(colorScheme),
+// },
+// groupContent: {
+// paddingHorizontal: Platform.OS === "ios" ? 18 : 0,
+// },
+// sectionTitle: {
+// marginBottom: -8,
+// color: textSecondaryColor(colorScheme),
+// fontSize: 13,
+// fontWeight: "500",
+// },
+// activitySpinner: {
+// marginRight: 5,
+// },
+// listSectionContainer: {
+// alignItems: "center",
+// },
+// buttonText: {
+// fontWeight: "500",
+// },
+// nameInput: {
+// fontSize: 16,
+// },
+// p: {
+// textAlign: "center",
+// marginLeft: 32,
+// marginRight: 32,
+// ...Platform.select({
+// default: {
+// fontSize: 13,
+// lineHeight: 17,
+// color: textSecondaryColor(colorScheme),
+// },
+// }),
+// },
+// }),
+// [colorScheme]
+// );
+// };
diff --git a/screens/NewConversation/newChat.styles.tsx b/screens/NewConversation/newChat.styles.tsx
new file mode 100644
index 000000000..04e490940
--- /dev/null
+++ b/screens/NewConversation/newChat.styles.tsx
@@ -0,0 +1,57 @@
+import { Platform, ViewStyle, TextStyle } from "react-native";
+
+import { ThemedStyle } from "@/theme/useAppTheme";
+import { textSizeStyles } from "@/design-system/Text/Text.styles";
+
+const $modal: ThemedStyle = ({ colors }) => ({
+ flex: 1,
+ backgroundColor: colors.background.surface,
+});
+
+const $messageContainer: ThemedStyle = ({ spacing }) => ({
+ marginTop: spacing.lg,
+ paddingHorizontal: spacing.md,
+});
+
+const $message: ThemedStyle = ({ colors }) => ({
+ color: colors.text.secondary,
+ ...textSizeStyles.sm,
+ textAlign: "center",
+});
+
+const $error: ThemedStyle = ({ colors }) => ({
+ color: colors.text.primary,
+});
+
+const $pendingChatMembers: ThemedStyle = ({ colors, spacing }) => ({
+ minHeight: 50,
+ padding: spacing.xs,
+ gap: spacing.xs,
+ flexDirection: "row",
+ alignItems: "center",
+ justifyContent: "flex-start",
+ borderBottomWidth: 0.5,
+ backgroundColor: colors.background.surface,
+ flexWrap: "wrap",
+});
+
+const $searchContainer: ThemedStyle = ({ colors }) => ({
+ flex: 1,
+ backgroundColor: colors.background.surface,
+});
+
+const $newGroupButton: ThemedStyle = ({ spacing }) => ({
+ marginLeft: spacing["6xs"],
+ paddingTop: spacing.sm,
+ paddingBottom: 0,
+});
+
+export const stylesNewChat = {
+ $modal,
+ $messageContainer,
+ $message,
+ $error,
+ $pendingChatMembers,
+ $searchContainer,
+ $newGroupButton,
+} as const;
diff --git a/utils/addressBook.ts b/utils/addressBook.ts
deleted file mode 100644
index ef3570b90..000000000
--- a/utils/addressBook.ts
+++ /dev/null
@@ -1,138 +0,0 @@
-import * as Contacts from "expo-contacts";
-import type { CountryCode } from "libphonenumber-js";
-import { useEffect, useRef } from "react";
-import { AppState } from "react-native";
-import * as RNLocalize from "react-native-localize";
-
-import { postAddressBook } from "./api";
-import { getDeviceId } from "./keychain/helpers";
-import { refreshRecommendationsForAccount } from "./recommendations";
-import { useCurrentAccount } from "../data/store/accountsStore";
-import { useAppStore } from "../data/store/appStore";
-
-export type AddressBookPermissionStatus = "granted" | "undetermined" | "denied";
-
-const getAddressBookPermissionStatus = async (): Promise<
- AddressBookPermissionStatus | undefined
-> => {
- const { status } = await Contacts.getPermissionsAsync();
- return status;
-};
-
-export const saveAddressBookPermissionsStatus = async () => {
- const addressBookStatus = await getAddressBookPermissionStatus();
-
- if (
- addressBookStatus === "undetermined" ||
- addressBookStatus === "granted" ||
- addressBookStatus === "denied"
- ) {
- useAppStore.getState().setAddressBookPermissionStatus(addressBookStatus);
- }
-
- return addressBookStatus;
-};
-
-// @todo => handle multiple accounts
-let lastUpdate = 0;
-
-export const useAddressBookStateHandler = () => {
- const appState = useRef(AppState.currentState);
- const addressBookPermissionStatus = useAppStore(
- (s) => s.addressBookPermissionStatus
- );
- const previousPermissionStatus = useRef(addressBookPermissionStatus);
- // @todo => handle multiple accounts
- const currentAccount = useCurrentAccount();
- const stateHasBeenActiveOnce = useRef(false);
- useEffect(() => {
- // Things to do when app opens
- saveAddressBookPermissionsStatus();
- // Things to do when app status changes (does NOT include first load)
- const subscription = AppState.addEventListener(
- "change",
- async (nextAppState) => {
- if (
- nextAppState === "active" &&
- appState.current.match(/inactive|background/)
- ) {
- const hadBeenActiveOnce = stateHasBeenActiveOnce.current;
- stateHasBeenActiveOnce.current = true;
- const permission = await saveAddressBookPermissionsStatus();
- const timeSpent = new Date().getTime() - lastUpdate;
-
- if (
- timeSpent >= 86400000 &&
- currentAccount &&
- permission === "granted" &&
- hadBeenActiveOnce
- ) {
- shareAddressBook(currentAccount);
- }
- }
-
- appState.current = nextAppState;
- }
- );
-
- return () => {
- subscription.remove();
- };
- }, [currentAccount]);
- useEffect(() => {
- // On load, share address book
- if (previousPermissionStatus.current === "granted" && currentAccount) {
- shareAddressBook(currentAccount);
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, []);
- useEffect(() => {
- if (
- addressBookPermissionStatus === "granted" &&
- previousPermissionStatus.current !== "granted" &&
- currentAccount
- ) {
- shareAddressBook(currentAccount).then(() => {
- refreshRecommendationsForAccount(currentAccount);
- });
- }
-
- previousPermissionStatus.current = addressBookPermissionStatus;
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [addressBookPermissionStatus]);
-};
-
-export const requestAddressBookPermissions = async (): Promise<
- AddressBookPermissionStatus | undefined
-> => {
- const { status: existingStatus } = await Contacts.getPermissionsAsync();
- let finalStatus = existingStatus;
-
- if (existingStatus !== "granted") {
- const { status } = await Contacts.requestPermissionsAsync();
- finalStatus = status;
- }
-
- return finalStatus;
-};
-
-export const shareAddressBook = async (account: string) => {
- const { data } = await Contacts.getContactsAsync({
- fields: [
- Contacts.Fields.Addresses,
- Contacts.Fields.Emails,
- Contacts.Fields.FirstName,
- Contacts.Fields.LastName,
- Contacts.Fields.PhoneNumbers,
- Contacts.Fields.SocialProfiles,
- ],
- });
- const phoneCountryCode = RNLocalize.getCountry() as CountryCode;
- const deviceId = await getDeviceId();
- await postAddressBook(account, {
- deviceId,
- countryCode: phoneCountryCode,
- contacts: data,
- });
- lastUpdate = new Date().getTime();
-};
diff --git a/utils/api.ts b/utils/api.ts
index e3691de93..85a34e213 100644
--- a/utils/api.ts
+++ b/utils/api.ts
@@ -218,9 +218,9 @@ export async function getXmtpApiHeaders(
if (!appCheckToken) {
throw new Error(`
-No App Check Token Available. This indicates that we believe the app is not running on an authentic build of
-our application on a device that has not been tampered with.
-`);
+ No App Check Token Available. This indicates that we believe the app is not running on an authentic build of
+ our application on a device that has not been tampered with.
+ `);
}
if (!accessToken) {
diff --git a/utils/recommendations.ts b/utils/recommendations.ts
deleted file mode 100644
index 24d9b8593..000000000
--- a/utils/recommendations.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { findFrens } from "./api";
-import { getRecommendationsStore } from "../data/store/accountsStore";
-
-export const refreshRecommendationsForAccount = async (account: string) => {
- const frens = await findFrens(account);
- const now = new Date().getTime();
- getRecommendationsStore(account).getState().setRecommendations(frens, now);
-};
diff --git a/utils/xmtpRN/conversations.ts b/utils/xmtpRN/conversations.ts
index 504183f55..932980627 100644
--- a/utils/xmtpRN/conversations.ts
+++ b/utils/xmtpRN/conversations.ts
@@ -10,6 +10,9 @@ import {
} from "./client.types";
import { streamAllMessages } from "./messages";
import { getXmtpClient } from "./sync";
+import { getPreferredName } from "../profile";
+import { getProfileSocialsQueryData } from "@/queries/useProfileSocialsQuery";
+import { getCurrentAccount } from "@/data/store/accountsStore";
export const streamConversations = async (account: string) => {
await stopStreamingConversations(account);
@@ -134,8 +137,14 @@ async function findDm(args: {
client: ConverseXmtpClientType;
peer: string;
includeSync?: boolean;
+ throwIfNotFound?: boolean;
}) {
- const { client, peer, includeSync = false } = args;
+ const {
+ client,
+ peer,
+ includeSync = false,
+ /** this shouldnt throw, but that was default behavior so maintaining for now */ throwIfNotFound = true,
+ } = args;
logger.debug(`[XMTPRN Conversations] Getting DM by ${peer}`);
const start = new Date().getTime();
@@ -157,7 +166,11 @@ async function findDm(args: {
dm = await client.conversations.findDmByAddress(peer);
if (!dm) {
- throw new Error(`DM with peer ${peer} not found`);
+ if (throwIfNotFound) {
+ throw new Error(`DM with peer ${peer} not found`);
+ } else {
+ return undefined;
+ }
}
}
@@ -259,12 +272,14 @@ export const getConversationByPeer = async (args: {
client: ConverseXmtpClientType;
peer: string;
includeSync?: boolean;
+ throwIfNotFound?: boolean;
}) => {
- const { client, peer, includeSync = false } = args;
+ const { client, peer, includeSync = false, throwIfNotFound = true } = args;
return findDm({
client,
peer,
includeSync,
+ throwIfNotFound,
});
};
@@ -346,6 +361,53 @@ export const createGroup = async (args: {
return group;
};
+export const defaultPermissionPolicySet: PermissionPolicySet = {
+ addMemberPolicy: "allow",
+ removeMemberPolicy: "admin",
+ addAdminPolicy: "superAdmin",
+ removeAdminPolicy: "superAdmin",
+ updateGroupNamePolicy: "allow",
+ updateGroupDescriptionPolicy: "allow",
+ updateGroupImagePolicy: "allow",
+ updateGroupPinnedFrameUrlPolicy: "allow",
+};
+
+const createGroupName = (peerEthereumAddresses: string[]) => {
+ const currentAccount = getCurrentAccount()!;
+ const firstThreeMembers = peerEthereumAddresses.slice(0, 3);
+ const currentAccountSocials =
+ getProfileSocialsQueryData(currentAccount, currentAccount) ?? undefined;
+ let groupName = getPreferredName(currentAccountSocials, currentAccount);
+ if (firstThreeMembers.length) {
+ groupName += ", ";
+ }
+ for (let i = 0; i < firstThreeMembers.length; i++) {
+ const member = firstThreeMembers[i];
+ const memberSocials = getProfileSocialsQueryData(currentAccount, member);
+ groupName += getPreferredName(memberSocials, member);
+ if (i < firstThreeMembers.length - 1) {
+ groupName += ", ";
+ }
+ }
+ return groupName;
+};
+
+export const createGroupWithDefaultsByAccount = async (args: {
+ account: string;
+ peerEthereumAddresses: string[];
+}) => {
+ const { account, peerEthereumAddresses } = args;
+
+ const groupName = createGroupName(peerEthereumAddresses);
+
+ return createGroupByAccount({
+ account,
+ peers: peerEthereumAddresses,
+ permissionPolicySet: defaultPermissionPolicySet,
+ groupName,
+ });
+};
+
export const createGroupByAccount = async (args: {
account: string;
peers: string[];
@@ -397,7 +459,22 @@ export const getConversationByPeerByAccount = async (args: {
}) => {
const { account, peer, includeSync = false } = args;
const client = (await getXmtpClient(account)) as ConverseXmtpClientType;
- return getConversationByPeer({ client, peer, includeSync });
+ return getConversationByPeer({ client, peer, includeSync })!;
+};
+
+export const getOptionalConversationByPeerByAccount = async (args: {
+ account: string;
+ peer: string;
+ includeSync?: boolean;
+}) => {
+ const { account, peer, includeSync = false } = args;
+ const client = (await getXmtpClient(account)) as ConverseXmtpClientType;
+ return getConversationByPeer({
+ client,
+ peer,
+ includeSync,
+ throwIfNotFound: false,
+ });
};
export const getPeerAddressDm = async (
diff --git a/yarn.lock b/yarn.lock
index fd8f27c7b..8d9490cde 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -775,6 +775,33 @@ __metadata:
languageName: node
linkType: hard
+"@babel/cli@npm:^7.23.4":
+ version: 7.26.4
+ resolution: "@babel/cli@npm:7.26.4"
+ dependencies:
+ "@jridgewell/trace-mapping": "npm:^0.3.25"
+ "@nicolo-ribaudo/chokidar-2": "npm:2.1.8-no-fsevents.3"
+ chokidar: "npm:^3.6.0"
+ commander: "npm:^6.2.0"
+ convert-source-map: "npm:^2.0.0"
+ fs-readdir-recursive: "npm:^1.1.0"
+ glob: "npm:^7.2.0"
+ make-dir: "npm:^2.1.0"
+ slash: "npm:^2.0.0"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ dependenciesMeta:
+ "@nicolo-ribaudo/chokidar-2":
+ optional: true
+ chokidar:
+ optional: true
+ bin:
+ babel: ./bin/babel.js
+ babel-external-helpers: ./bin/babel-external-helpers.js
+ checksum: 10c0/f2d4fc3c4a34dd3001e3bd7084b78b38211003c36afaf2dc8fedf4565c0442bd59b1c64a9f91a0b7b2450e089123f197e09577ae50dc994307c3348b310ce34c
+ languageName: node
+ linkType: hard
+
"@babel/code-frame@npm:7.10.4, @babel/code-frame@npm:~7.10.4":
version: 7.10.4
resolution: "@babel/code-frame@npm:7.10.4"
@@ -826,6 +853,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/compat-data@npm:^7.26.0":
+ version: 7.26.5
+ resolution: "@babel/compat-data@npm:7.26.5"
+ checksum: 10c0/9d2b41f0948c3dfc5de44d9f789d2208c2ea1fd7eb896dfbb297fe955e696728d6f363c600cd211e7f58ccbc2d834fe516bb1e4cf883bbabed8a32b038afc1a0
+ languageName: node
+ linkType: hard
+
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.20.0, @babel/core@npm:^7.21.3, @babel/core@npm:^7.23.9":
version: 7.24.7
resolution: "@babel/core@npm:7.24.7"
@@ -1014,29 +1048,29 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7"
+"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.9":
+ version: 7.26.3
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.26.3"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.24.7"
- regexpu-core: "npm:^5.3.1"
+ "@babel/helper-annotate-as-pure": "npm:^7.25.9"
+ regexpu-core: "npm:^6.2.0"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10c0/ed611a7eb0c71843f9cdc471eeb38767972229f9225f7aaa90d124d7ee0062cf6908fd53ee9c34f731394c429594f06049a7738a71d342e0191d4047b2fc0ac2
+ checksum: 10c0/266f30b99af621559467ed67634cb653408a9262930c0627c3d17691a9d477329fb4dabe4b1785cbf0490e892513d247836674271842d6a8da49fd0afae7d435
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.25.9":
- version: 7.26.3
- resolution: "@babel/helper-create-regexp-features-plugin@npm:7.26.3"
+"@babel/helper-create-regexp-features-plugin@npm:^7.24.7":
+ version: 7.24.7
+ resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7"
dependencies:
- "@babel/helper-annotate-as-pure": "npm:^7.25.9"
- regexpu-core: "npm:^6.2.0"
+ "@babel/helper-annotate-as-pure": "npm:^7.24.7"
+ regexpu-core: "npm:^5.3.1"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10c0/266f30b99af621559467ed67634cb653408a9262930c0627c3d17691a9d477329fb4dabe4b1785cbf0490e892513d247836674271842d6a8da49fd0afae7d435
+ checksum: 10c0/ed611a7eb0c71843f9cdc471eeb38767972229f9225f7aaa90d124d7ee0062cf6908fd53ee9c34f731394c429594f06049a7738a71d342e0191d4047b2fc0ac2
languageName: node
linkType: hard
@@ -1152,7 +1186,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.26.0":
+"@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0":
version: 7.26.0
resolution: "@babel/helper-module-transforms@npm:7.26.0"
dependencies:
@@ -1204,6 +1238,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-plugin-utils@npm:^7.26.5":
+ version: 7.26.5
+ resolution: "@babel/helper-plugin-utils@npm:7.26.5"
+ checksum: 10c0/cdaba71d4b891aa6a8dfbe5bac2f94effb13e5fa4c2c487667fdbaa04eae059b78b28d85a885071f45f7205aeb56d16759e1bed9c118b94b16e4720ef1ab0f65
+ languageName: node
+ linkType: hard
+
"@babel/helper-remap-async-to-generator@npm:^7.18.9, @babel/helper-remap-async-to-generator@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/helper-remap-async-to-generator@npm:7.24.7"
@@ -1437,6 +1478,65 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/traverse": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/7aab47fcbb8c1ddc195a3cd66609edcad54c5022f018db7de40185f0182950389690e953e952f117a1737b72f665ff02ad30de6c02b49b97f1d8f4ccdffedc34
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/3a652b3574ca62775c5f101f8457950edc540c3581226579125da535d67765f41ad7f0e6327f8efeb2540a5dad5bb0c60a89fb934af3f67472e73fb63612d004
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/18fc9004104a150f9f5da9f3307f361bc3104d16778bb593b7523d5110f04a8df19a2587e6bdd5e726fb1d397191add45223f4f731bb556c33f14f2779d596e8
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
+ "@babel/plugin-transform-optional-chaining": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.13.0
+ checksum: 10c0/3f6c8781a2f7aa1791a31d2242399ca884df2ab944f90c020b6f112fb19f05fa6dad5be143d274dad1377e40415b63d24d5489faf5060b9c4a99e55d8f0c317c
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/traverse": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/02b365f0cc4df8b8b811c68697c93476da387841e5f153fe42766f34241b685503ea51110d5ed6df7132759820b93e48d9fa3743cffc091eed97c19f7e5fe272
+ languageName: node
+ linkType: hard
+
"@babel/plugin-proposal-async-generator-functions@npm:^7.0.0":
version: 7.20.7
resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7"
@@ -1575,6 +1675,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2":
+ version: 7.21.0-placeholder-for-preset-env.2
+ resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/e605e0070da087f6c35579499e65801179a521b6842c15181a1e305c04fded2393f11c1efd09b087be7f8b083d1b75e8f3efcbc1292b4f60d3369e14812cff63
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-async-generators@npm:^7.8.4":
version: 7.8.4
resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4"
@@ -1663,6 +1772,28 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-import-assertions@npm:^7.26.0":
+ version: 7.26.0
+ resolution: "@babel/plugin-syntax-import-assertions@npm:7.26.0"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/525b174e60b210d96c1744c1575fc2ddedcc43a479cba64a5344cf77bd0541754fc58120b5a11ff832ba098437bb05aa80900d1f49bb3d888c5e349a4a3a356e
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-syntax-import-attributes@npm:^7.26.0":
+ version: 7.26.0
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.26.0"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/e594c185b12bfe0bbe7ca78dfeebe870e6d569a12128cac86f3164a075fe0ff70e25ddbd97fd0782906b91f65560c9dc6957716b7b4a68aba2516c9b7455e352
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-import-meta@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
@@ -1817,6 +1948,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-unicode-sets-regex@npm:^7.18.6":
+ version: 7.18.6
+ resolution: "@babel/plugin-syntax-unicode-sets-regex@npm:7.18.6"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.18.6"
+ "@babel/helper-plugin-utils": "npm:^7.18.6"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/9144e5b02a211a4fb9a0ce91063f94fbe1004e80bde3485a0910c9f14897cf83fabd8c21267907cff25db8e224858178df0517f14333cfcf3380ad9a4139cb50
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.0.0-0":
version: 7.24.7
resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7"
@@ -1828,7 +1971,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-arrow-functions@npm:^7.24.7":
+"@babel/plugin-transform-arrow-functions@npm:^7.24.7, @babel/plugin-transform-arrow-functions@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.9"
dependencies:
@@ -1839,7 +1982,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-async-generator-functions@npm:^7.25.4":
+"@babel/plugin-transform-async-generator-functions@npm:^7.25.4, @babel/plugin-transform-async-generator-functions@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.9"
dependencies:
@@ -1865,7 +2008,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-async-to-generator@npm:^7.24.7":
+"@babel/plugin-transform-async-to-generator@npm:^7.24.7, @babel/plugin-transform-async-to-generator@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.9"
dependencies:
@@ -1878,6 +2021,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-block-scoped-functions@npm:^7.25.9":
+ version: 7.26.5
+ resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.26.5"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.26.5"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/2f3060800ead46b09971dd7bf830d66383b7bc61ced9945633b4ef9bf87787956ea83fcf49b387cecb377812588c6b81681714c760f9cf89ecba45edcbab1192
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-block-scoping@npm:^7.0.0":
version: 7.24.7
resolution: "@babel/plugin-transform-block-scoping@npm:7.24.7"
@@ -1889,7 +2043,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoping@npm:^7.25.0":
+"@babel/plugin-transform-block-scoping@npm:^7.25.0, @babel/plugin-transform-block-scoping@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-block-scoping@npm:7.25.9"
dependencies:
@@ -1900,7 +2054,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-class-properties@npm:^7.0.0-0, @babel/plugin-transform-class-properties@npm:^7.25.4":
+"@babel/plugin-transform-class-properties@npm:^7.0.0-0, @babel/plugin-transform-class-properties@npm:^7.25.4, @babel/plugin-transform-class-properties@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-class-properties@npm:7.25.9"
dependencies:
@@ -1924,6 +2078,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-class-static-block@npm:^7.26.0":
+ version: 7.26.0
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.26.0"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.12.0
+ checksum: 10c0/cdcf5545ae6514ed75fbd73cccfa209c6a5dfdf0c2bb7bb62c0fb4ec334a32281bcf1bc16ace494d9dbe93feb8bdc0bd3cf9d9ccb6316e634a67056fa13b741b
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-classes@npm:^7.0.0":
version: 7.24.7
resolution: "@babel/plugin-transform-classes@npm:7.24.7"
@@ -1942,7 +2108,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.0.0-0, @babel/plugin-transform-classes@npm:^7.25.4":
+"@babel/plugin-transform-classes@npm:^7.0.0-0, @babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-classes@npm:7.25.9"
dependencies:
@@ -1970,7 +2136,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-computed-properties@npm:^7.24.7":
+"@babel/plugin-transform-computed-properties@npm:^7.24.7, @babel/plugin-transform-computed-properties@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-computed-properties@npm:7.25.9"
dependencies:
@@ -1993,7 +2159,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-destructuring@npm:^7.24.8":
+"@babel/plugin-transform-destructuring@npm:^7.24.8, @babel/plugin-transform-destructuring@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-destructuring@npm:7.25.9"
dependencies:
@@ -2004,6 +2170,63 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-dotall-regex@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.9"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/7c3471ae5cf7521fd8da5b03e137e8d3733fc5ee4524ce01fb0c812f0bb77cb2c9657bc8a6253186be3a15bb4caa8974993c7ddc067f554ecc6a026f0a3b5e12
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-duplicate-keys@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/d0c74894b9bf6ff2a04189afffb9cd43d87ebd7b7943e51a827c92d2aaa40fa89ac81565a2fd6fbeabf9e38413a9264c45862eee2b017f1d49046cc3c8ff06b4
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.9"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/a8039a6d2b90e011c7b30975edee47b5b1097cf3c2f95ec1f5ddd029898d783a995f55f7d6eb8d6bb8873c060fb64f9f1ccba938dfe22d118d09cf68e0cd3bf6
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-dynamic-import@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/5e643a8209072b668350f5788f23c64e9124f81f958b595c80fecca6561086d8ef346c04391b9e5e4cad8b8cbe22c258f0cd5f4ea89b97e74438e7d1abfd98cf
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-exponentiation-operator@npm:^7.25.9":
+ version: 7.26.3
+ resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.26.3"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/cac922e851c6a0831fdd2e3663564966916015aeff7f4485825fc33879cbc3a313ceb859814c9200248e2875d65bb13802a723e5d7d7b40a2e90da82a5a1e15c
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-export-namespace-from@npm:^7.22.11":
version: 7.24.7
resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7"
@@ -2016,6 +2239,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-export-namespace-from@npm:^7.23.4, @babel/plugin-transform-export-namespace-from@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/f291ea2ec5f36de9028a00cbd5b32f08af281b8183bf047200ff001f4cb260be56f156b2449f42149448a4a033bd6e86a3a7f06d0c2825532eb0ae6b03058dfb
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-flow-strip-types@npm:^7.13.0, @babel/plugin-transform-flow-strip-types@npm:^7.20.0, @babel/plugin-transform-flow-strip-types@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.7"
@@ -2040,7 +2274,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-for-of@npm:^7.24.7":
+"@babel/plugin-transform-for-of@npm:^7.24.7, @babel/plugin-transform-for-of@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-for-of@npm:7.25.9"
dependencies:
@@ -2065,7 +2299,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-function-name@npm:^7.25.1":
+"@babel/plugin-transform-function-name@npm:^7.25.1, @babel/plugin-transform-function-name@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-function-name@npm:7.25.9"
dependencies:
@@ -2078,6 +2312,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-json-strings@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-json-strings@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/00bc2d4751dfc9d44ab725be16ee534de13cfd7e77dfb386e5dac9e48101ce8fcbc5971df919dc25b3f8a0fa85d6dc5f2a0c3cf7ec9d61c163d9823c091844f0
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-literals@npm:^7.0.0":
version: 7.24.7
resolution: "@babel/plugin-transform-literals@npm:7.24.7"
@@ -2089,7 +2334,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-literals@npm:^7.25.2":
+"@babel/plugin-transform-literals@npm:^7.25.2, @babel/plugin-transform-literals@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-literals@npm:7.25.9"
dependencies:
@@ -2100,7 +2345,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7":
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7, @babel/plugin-transform-logical-assignment-operators@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.9"
dependencies:
@@ -2111,6 +2356,29 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-member-expression-literals@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/91d17b451bcc5ea9f1c6f8264144057ade3338d4b92c0b248366e4db3a7790a28fd59cc56ac433a9627a9087a17a5684e53f4995dd6ae92831cb72f1bd540b54
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-modules-amd@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-modules-amd@npm:7.25.9"
+ dependencies:
+ "@babel/helper-module-transforms": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/849957d9484d0a2d93331226ed6cf840cee7d57454549534c447c93f8b839ef8553eae9877f8f550e3c39f14d60992f91244b2e8e7502a46064b56c5d68ba855
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.7"
@@ -2124,7 +2392,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.24.8":
+"@babel/plugin-transform-modules-commonjs@npm:^7.24.8, @babel/plugin-transform-modules-commonjs@npm:^7.25.9":
version: 7.26.3
resolution: "@babel/plugin-transform-modules-commonjs@npm:7.26.3"
dependencies:
@@ -2136,6 +2404,32 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-modules-systemjs@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.9"
+ dependencies:
+ "@babel/helper-module-transforms": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-validator-identifier": "npm:^7.25.9"
+ "@babel/traverse": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/8299e3437542129c2684b86f98408c690df27db4122a79edded4782cf04e755d6ecb05b1e812c81a34224a81e664303392d5f3c36f3d2d51fdc99bb91c881e9a
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-modules-umd@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-modules-umd@npm:7.25.9"
+ dependencies:
+ "@babel/helper-module-transforms": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/fa11a621f023e2ac437b71d5582f819e667c94306f022583d77da9a8f772c4128861a32bbb63bef5cba581a70cd7dbe87a37238edaafcfacf889470c395e7076
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.0.0":
version: 7.24.7
resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7"
@@ -2148,7 +2442,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7":
+"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7, @babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.9"
dependencies:
@@ -2160,6 +2454,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-new-target@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-new-target@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/7b5f1b7998f1cf183a7fa646346e2f3742e5805b609f28ad5fee22d666a15010f3e398b7e1ab78cddb7901841a3d3f47135929af23d54e8bf4ce69b72051f71e
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.0.0-0":
version: 7.24.7
resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7"
@@ -2183,7 +2488,18 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-numeric-separator@npm:^7.24.7":
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.9":
+ version: 7.26.6
+ resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.26.6"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.26.5"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/574d6db7cbc5c092db5d1dece8ce26195e642b9c40dbfeaf3082058a78ad7959c1c333471cdd45f38b784ec488850548075d527b178c5010ee9bff7aa527cc7a
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-numeric-separator@npm:^7.24.7, @babel/plugin-transform-numeric-separator@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.9"
dependencies:
@@ -2208,7 +2524,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-object-rest-spread@npm:^7.24.7":
+"@babel/plugin-transform-object-rest-spread@npm:^7.24.7, @babel/plugin-transform-object-rest-spread@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.9"
dependencies:
@@ -2221,7 +2537,19 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7":
+"@babel/plugin-transform-object-super@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-object-super@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-replace-supers": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/0348d00e76f1f15ada44481a76e8c923d24cba91f6e49ee9b30d6861eb75344e7f84d62a18df8a6f9e9a7eacf992f388174b7f9cc4ce48287bcefca268c07600
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7, @babel/plugin-transform-optional-catch-binding@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.9"
dependencies:
@@ -2245,7 +2573,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.24.8":
+"@babel/plugin-transform-optional-chaining@npm:^7.24.8, @babel/plugin-transform-optional-chaining@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.9"
dependencies:
@@ -2291,6 +2619,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-private-methods@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-private-methods@npm:7.25.9"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/64bd71de93d39daefa3e6c878d6f2fd238ed7d4ecfb13b0e771ddbbc131487def3ceb405b62b534a5cbb5043046b504e1b189b0a45229cc75af979a9fbcaa7bd
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-private-property-in-object@npm:^7.22.11":
version: 7.24.7
resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7"
@@ -2305,7 +2645,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-private-property-in-object@npm:^7.24.7":
+"@babel/plugin-transform-private-property-in-object@npm:^7.24.7, @babel/plugin-transform-private-property-in-object@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.9"
dependencies:
@@ -2318,6 +2658,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-property-literals@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-property-literals@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/1639e35b2438ccf3107af760d34e6a8e4f9acdd3ae6186ae771a6e3029bd59dfe778e502d67090f1185ecda5c16addfed77561e39c518a3f51ff10d41790e106
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.24.7":
version: 7.24.7
resolution: "@babel/plugin-transform-react-display-name@npm:7.24.7"
@@ -2426,7 +2777,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-regenerator@npm:^7.24.7":
+"@babel/plugin-transform-regenerator@npm:^7.24.7, @babel/plugin-transform-regenerator@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-regenerator@npm:7.25.9"
dependencies:
@@ -2438,6 +2789,29 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-regexp-modifiers@npm:^7.26.0":
+ version: 7.26.0
+ resolution: "@babel/plugin-transform-regexp-modifiers@npm:7.26.0"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/4abc1db6c964efafc7a927cda814c7275275afa4b530483e0936fd614de23cb5802f7ca43edaa402008a723d4e7eac282b6f5283aa2eeb3b27da6d6c1dd7f8ed
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-reserved-words@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-reserved-words@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/8b028b80d1983e3e02f74e21924323cc66ba930e5c5758909a122aa7d80e341b8b0f42e1698e42b50d47a6ba911332f584200b28e1a4e2104b7514d9dc011e96
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-runtime@npm:^7.0.0":
version: 7.24.7
resolution: "@babel/plugin-transform-runtime@npm:7.24.7"
@@ -2481,7 +2855,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-shorthand-properties@npm:^7.24.7":
+"@babel/plugin-transform-shorthand-properties@npm:^7.24.7, @babel/plugin-transform-shorthand-properties@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.9"
dependencies:
@@ -2504,7 +2878,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-spread@npm:^7.24.7":
+"@babel/plugin-transform-spread@npm:^7.24.7, @babel/plugin-transform-spread@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-spread@npm:7.25.9"
dependencies:
@@ -2527,7 +2901,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-sticky-regex@npm:^7.24.7":
+"@babel/plugin-transform-sticky-regex@npm:^7.24.7, @babel/plugin-transform-sticky-regex@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.9"
dependencies:
@@ -2549,6 +2923,28 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-template-literals@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-template-literals@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/5144da6036807bbd4e9d2a8b92ae67a759543929f34f4db9b463448a77298f4a40bf1e92e582db208fe08ee116224806a3bd0bed75d9da404fc2c0af9e6da540
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-typeof-symbol@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/2b19fd88608589d9bc6b607ff17b06791d35c67ef3249f4659283454e6a9984241e3bd4c4eb72bb8b3d860a73223f3874558b861adb7314aa317c1c6a2f0cafb
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-typescript@npm:^7.13.0, @babel/plugin-transform-typescript@npm:^7.24.7, @babel/plugin-transform-typescript@npm:^7.5.0":
version: 7.24.7
resolution: "@babel/plugin-transform-typescript@npm:7.24.7"
@@ -2578,6 +2974,44 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-typescript@npm:^7.25.9":
+ version: 7.26.5
+ resolution: "@babel/plugin-transform-typescript@npm:7.26.5"
+ dependencies:
+ "@babel/helper-annotate-as-pure": "npm:^7.25.9"
+ "@babel/helper-create-class-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.26.5"
+ "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
+ "@babel/plugin-syntax-typescript": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/64204b1f1c77d896142071cc174e7bb4fbc597bdc0ea73aec8de1a72d252755db381b9ed40342fc283c32387d7375d0803d0aed8262dd503633f5035148d47a0
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-unicode-escapes@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.9"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/615c84d7c53e1575d54ba9257e753e0b98c5de1e3225237d92f55226eaab8eb5bceb74df43f50f4aa162b0bbcc934ed11feafe2b60b8ec4934ce340fad4b8828
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-unicode-property-regex@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.9"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/1685836fc38af4344c3d2a9edbd46f7c7b28d369b63967d5b83f2f6849ec45b97223461cea3d14cc3f0be6ebb284938e637a5ca3955c0e79c873d62f593d615c
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-regex@npm:^7.0.0":
version: 7.24.7
resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7"
@@ -2590,7 +3024,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-unicode-regex@npm:^7.0.0-0, @babel/plugin-transform-unicode-regex@npm:^7.24.7":
+"@babel/plugin-transform-unicode-regex@npm:^7.0.0-0, @babel/plugin-transform-unicode-regex@npm:^7.24.7, @babel/plugin-transform-unicode-regex@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.9"
dependencies:
@@ -2602,6 +3036,97 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.9":
+ version: 7.25.9
+ resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.9"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/56ee04fbe236b77cbcd6035cbf0be7566d1386b8349154ac33244c25f61170c47153a9423cd1d92855f7d6447b53a4a653d9e8fd1eaeeee14feb4b2baf59bd9f
+ languageName: node
+ linkType: hard
+
+"@babel/preset-env@npm:^7.23.8":
+ version: 7.26.0
+ resolution: "@babel/preset-env@npm:7.26.0"
+ dependencies:
+ "@babel/compat-data": "npm:^7.26.0"
+ "@babel/helper-compilation-targets": "npm:^7.25.9"
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-validator-option": "npm:^7.25.9"
+ "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.9"
+ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.9"
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.9"
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.9"
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.9"
+ "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2"
+ "@babel/plugin-syntax-import-assertions": "npm:^7.26.0"
+ "@babel/plugin-syntax-import-attributes": "npm:^7.26.0"
+ "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6"
+ "@babel/plugin-transform-arrow-functions": "npm:^7.25.9"
+ "@babel/plugin-transform-async-generator-functions": "npm:^7.25.9"
+ "@babel/plugin-transform-async-to-generator": "npm:^7.25.9"
+ "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.9"
+ "@babel/plugin-transform-block-scoping": "npm:^7.25.9"
+ "@babel/plugin-transform-class-properties": "npm:^7.25.9"
+ "@babel/plugin-transform-class-static-block": "npm:^7.26.0"
+ "@babel/plugin-transform-classes": "npm:^7.25.9"
+ "@babel/plugin-transform-computed-properties": "npm:^7.25.9"
+ "@babel/plugin-transform-destructuring": "npm:^7.25.9"
+ "@babel/plugin-transform-dotall-regex": "npm:^7.25.9"
+ "@babel/plugin-transform-duplicate-keys": "npm:^7.25.9"
+ "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.9"
+ "@babel/plugin-transform-dynamic-import": "npm:^7.25.9"
+ "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.9"
+ "@babel/plugin-transform-export-namespace-from": "npm:^7.25.9"
+ "@babel/plugin-transform-for-of": "npm:^7.25.9"
+ "@babel/plugin-transform-function-name": "npm:^7.25.9"
+ "@babel/plugin-transform-json-strings": "npm:^7.25.9"
+ "@babel/plugin-transform-literals": "npm:^7.25.9"
+ "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.9"
+ "@babel/plugin-transform-member-expression-literals": "npm:^7.25.9"
+ "@babel/plugin-transform-modules-amd": "npm:^7.25.9"
+ "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9"
+ "@babel/plugin-transform-modules-systemjs": "npm:^7.25.9"
+ "@babel/plugin-transform-modules-umd": "npm:^7.25.9"
+ "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.9"
+ "@babel/plugin-transform-new-target": "npm:^7.25.9"
+ "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.9"
+ "@babel/plugin-transform-numeric-separator": "npm:^7.25.9"
+ "@babel/plugin-transform-object-rest-spread": "npm:^7.25.9"
+ "@babel/plugin-transform-object-super": "npm:^7.25.9"
+ "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.9"
+ "@babel/plugin-transform-optional-chaining": "npm:^7.25.9"
+ "@babel/plugin-transform-parameters": "npm:^7.25.9"
+ "@babel/plugin-transform-private-methods": "npm:^7.25.9"
+ "@babel/plugin-transform-private-property-in-object": "npm:^7.25.9"
+ "@babel/plugin-transform-property-literals": "npm:^7.25.9"
+ "@babel/plugin-transform-regenerator": "npm:^7.25.9"
+ "@babel/plugin-transform-regexp-modifiers": "npm:^7.26.0"
+ "@babel/plugin-transform-reserved-words": "npm:^7.25.9"
+ "@babel/plugin-transform-shorthand-properties": "npm:^7.25.9"
+ "@babel/plugin-transform-spread": "npm:^7.25.9"
+ "@babel/plugin-transform-sticky-regex": "npm:^7.25.9"
+ "@babel/plugin-transform-template-literals": "npm:^7.25.9"
+ "@babel/plugin-transform-typeof-symbol": "npm:^7.25.9"
+ "@babel/plugin-transform-unicode-escapes": "npm:^7.25.9"
+ "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.9"
+ "@babel/plugin-transform-unicode-regex": "npm:^7.25.9"
+ "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.9"
+ "@babel/preset-modules": "npm:0.1.6-no-external-plugins"
+ babel-plugin-polyfill-corejs2: "npm:^0.4.10"
+ babel-plugin-polyfill-corejs3: "npm:^0.10.6"
+ babel-plugin-polyfill-regenerator: "npm:^0.6.1"
+ core-js-compat: "npm:^3.38.1"
+ semver: "npm:^6.3.1"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/26e19dc407cfa1c5166be638b4c54239d084fe15d8d7e6306d8c6dc7bc1decc51070a8dcf28352c1a2feeefbe52a06d193a12e302327ad5f529583df75fb7a26
+ languageName: node
+ linkType: hard
+
"@babel/preset-flow@npm:^7.13.13":
version: 7.24.7
resolution: "@babel/preset-flow@npm:7.24.7"
@@ -2615,6 +3140,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/preset-modules@npm:0.1.6-no-external-plugins":
+ version: 0.1.6-no-external-plugins
+ resolution: "@babel/preset-modules@npm:0.1.6-no-external-plugins"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.0.0"
+ "@babel/types": "npm:^7.4.4"
+ esutils: "npm:^2.0.2"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0 || ^8.0.0-0 <8.0.0
+ checksum: 10c0/9d02f70d7052446c5f3a4fb39e6b632695fb6801e46d31d7f7c5001f7c18d31d1ea8369212331ca7ad4e7877b73231f470b0d559162624128f1b80fe591409e6
+ languageName: node
+ linkType: hard
+
"@babel/preset-react@npm:^7.22.15":
version: 7.24.7
resolution: "@babel/preset-react@npm:7.24.7"
@@ -2646,6 +3184,21 @@ __metadata:
languageName: node
linkType: hard
+"@babel/preset-typescript@npm:^7.23.3":
+ version: 7.26.0
+ resolution: "@babel/preset-typescript@npm:7.26.0"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.25.9"
+ "@babel/helper-validator-option": "npm:^7.25.9"
+ "@babel/plugin-syntax-jsx": "npm:^7.25.9"
+ "@babel/plugin-transform-modules-commonjs": "npm:^7.25.9"
+ "@babel/plugin-transform-typescript": "npm:^7.25.9"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/20d86bc45d2bbfde2f84fc7d7b38746fa6481d4bde6643039ad4b1ff0b804c6d210ee43e6830effd8571f2ff43fa7ffd27369f42f2b3a2518bb92dc86c780c61
+ languageName: node
+ linkType: hard
+
"@babel/register@npm:^7.13.16":
version: 7.24.6
resolution: "@babel/register@npm:7.24.6"
@@ -2837,7 +3390,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/types@npm:^7.8.3":
+"@babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
version: 7.26.5
resolution: "@babel/types@npm:7.26.5"
dependencies:
@@ -4347,6 +4900,28 @@ __metadata:
languageName: node
linkType: hard
+"@expo/config-plugins@npm:~9.0.14":
+ version: 9.0.14
+ resolution: "@expo/config-plugins@npm:9.0.14"
+ dependencies:
+ "@expo/config-types": "npm:^52.0.3"
+ "@expo/json-file": "npm:~9.0.1"
+ "@expo/plist": "npm:^0.2.1"
+ "@expo/sdk-runtime-versions": "npm:^1.0.0"
+ chalk: "npm:^4.1.2"
+ debug: "npm:^4.3.5"
+ getenv: "npm:^1.0.0"
+ glob: "npm:^10.4.2"
+ resolve-from: "npm:^5.0.0"
+ semver: "npm:^7.5.4"
+ slash: "npm:^3.0.0"
+ slugify: "npm:^1.6.6"
+ xcode: "npm:^3.0.1"
+ xml2js: "npm:0.6.0"
+ checksum: 10c0/b688546c1e4af478b95146981b687992eb9bac80992b33fe1ff776735d930a58424642743b33a87d5bc7284c4b9c79b9cd0f72abee7a324c9ce619a21bd73faa
+ languageName: node
+ linkType: hard
+
"@expo/config-types@npm:^45.0.0":
version: 45.0.0
resolution: "@expo/config-types@npm:45.0.0"
@@ -4361,6 +4936,13 @@ __metadata:
languageName: node
linkType: hard
+"@expo/config-types@npm:^52.0.3":
+ version: 52.0.3
+ resolution: "@expo/config-types@npm:52.0.3"
+ checksum: 10c0/babf090f791594232b10dbcedaa43c2705167b03b5681ecc21bab53a181950d22eb05939e3fea079eeef5111e641ee28d74b580b6503057a6ba7b5673d3594c6
+ languageName: node
+ linkType: hard
+
"@expo/config@npm:~10.0.4, @expo/config@npm:~10.0.6":
version: 10.0.6
resolution: "@expo/config@npm:10.0.6"
@@ -4382,6 +4964,27 @@ __metadata:
languageName: node
linkType: hard
+"@expo/config@npm:~10.0.8":
+ version: 10.0.8
+ resolution: "@expo/config@npm:10.0.8"
+ dependencies:
+ "@babel/code-frame": "npm:~7.10.4"
+ "@expo/config-plugins": "npm:~9.0.14"
+ "@expo/config-types": "npm:^52.0.3"
+ "@expo/json-file": "npm:^9.0.1"
+ deepmerge: "npm:^4.3.1"
+ getenv: "npm:^1.0.0"
+ glob: "npm:^10.4.2"
+ require-from-string: "npm:^2.0.2"
+ resolve-from: "npm:^5.0.0"
+ resolve-workspace-root: "npm:^2.0.0"
+ semver: "npm:^7.6.0"
+ slugify: "npm:^1.3.4"
+ sucrase: "npm:3.35.0"
+ checksum: 10c0/689d53ab18e66d7fa382db1664404bad2f180a067fa98714a4a2577debd733339a27cb98ddadfb12c9182f62e4c22f25d5db6cf9ccb9ea29598abe5e11bd683a
+ languageName: node
+ linkType: hard
+
"@expo/devcert@npm:^1.1.2":
version: 1.1.4
resolution: "@expo/devcert@npm:1.1.4"
@@ -4486,6 +5089,17 @@ __metadata:
languageName: node
linkType: hard
+"@expo/json-file@npm:^9.0.1, @expo/json-file@npm:~9.0.1":
+ version: 9.0.1
+ resolution: "@expo/json-file@npm:9.0.1"
+ dependencies:
+ "@babel/code-frame": "npm:~7.10.4"
+ json5: "npm:^2.2.3"
+ write-file-atomic: "npm:^2.3.0"
+ checksum: 10c0/d13f4b5b3024c4e6cb02491ab4d16575dbefe68180823e590170ecf64b1849860b765da0ed3b08f51448c027216775c07addd8ae188fe7fe35da43b2caf426ee
+ languageName: node
+ linkType: hard
+
"@expo/metro-config@npm:0.19.8, @expo/metro-config@npm:~0.19.0, @expo/metro-config@npm:~0.19.8":
version: 0.19.8
resolution: "@expo/metro-config@npm:0.19.8"
@@ -4521,6 +5135,17 @@ __metadata:
languageName: node
linkType: hard
+"@expo/npm-proofread@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "@expo/npm-proofread@npm:1.0.1"
+ dependencies:
+ semver: "npm:^5.3.0"
+ bin:
+ proofread: ./proofread.js
+ checksum: 10c0/8f4cdf5d5297fc7aefb398177aca4bbd28bcc18d7e0736d1bc85e0225e9c41f3e74d7e075dcc61682e880d0507cfdd25508a8e378ab06ad7ae40f320c2b7ec56
+ languageName: node
+ linkType: hard
+
"@expo/osascript@npm:^2.0.31":
version: 2.1.3
resolution: "@expo/osascript@npm:2.1.3"
@@ -4573,6 +5198,17 @@ __metadata:
languageName: node
linkType: hard
+"@expo/plist@npm:^0.2.1":
+ version: 0.2.1
+ resolution: "@expo/plist@npm:0.2.1"
+ dependencies:
+ "@xmldom/xmldom": "npm:~0.7.7"
+ base64-js: "npm:^1.2.3"
+ xmlbuilder: "npm:^14.0.0"
+ checksum: 10c0/e8302a730adc4fb262f5cf2c8120c8d61de73f6edc869ef9c31c5f49c16e8d43ed895fbb76b97014e815ba7c979b80e003f4a759a818d6deacde8b0f8fa17c69
+ languageName: node
+ linkType: hard
+
"@expo/prebuild-config@npm:^8.0.23":
version: 8.0.23
resolution: "@expo/prebuild-config@npm:8.0.23"
@@ -6329,6 +6965,13 @@ __metadata:
languageName: node
linkType: hard
+"@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3":
+ version: 2.1.8-no-fsevents.3
+ resolution: "@nicolo-ribaudo/chokidar-2@npm:2.1.8-no-fsevents.3"
+ checksum: 10c0/27dcabaa0c9a29b3a60217bd3fff87a22cb43ed77863da570c6828e4d0b8f1c6ee52582cd3d439275a2b1f2051005e648ed866b981f2a03b61c645b7e4806ba7
+ languageName: node
+ linkType: hard
+
"@noble/ciphers@npm:^0.1.4":
version: 0.1.4
resolution: "@noble/ciphers@npm:0.1.4"
@@ -6856,6 +7499,13 @@ __metadata:
languageName: node
linkType: hard
+"@pkgr/core@npm:^0.1.0":
+ version: 0.1.1
+ resolution: "@pkgr/core@npm:0.1.1"
+ checksum: 10c0/3f7536bc7f57320ab2cf96f8973664bef624710c403357429fbf680a5c3b4843c1dbd389bb43daa6b1f6f1f007bb082f5abcb76bb2b5dc9f421647743b71d3d8
+ languageName: node
+ linkType: hard
+
"@privy-io/api-base@npm:1.1.0, @privy-io/api-base@npm:^1.1.0":
version: 1.1.0
resolution: "@privy-io/api-base@npm:1.1.0"
@@ -7583,6 +8233,15 @@ __metadata:
languageName: node
linkType: hard
+"@react-native/babel-plugin-codegen@npm:0.76.6":
+ version: 0.76.6
+ resolution: "@react-native/babel-plugin-codegen@npm:0.76.6"
+ dependencies:
+ "@react-native/codegen": "npm:0.76.6"
+ checksum: 10c0/77afdbc519557eff8d80899044413029199b0f7bf8d8f210cf0f132f1a8ee7a8ee6673eda54c862a5fda1eefd38c22f960902454a079448495d11c435eb20842
+ languageName: node
+ linkType: hard
+
"@react-native/babel-preset@npm:0.73.19":
version: 0.73.19
resolution: "@react-native/babel-preset@npm:0.73.19"
@@ -7690,6 +8349,61 @@ __metadata:
languageName: node
linkType: hard
+"@react-native/babel-preset@npm:0.76.6":
+ version: 0.76.6
+ resolution: "@react-native/babel-preset@npm:0.76.6"
+ dependencies:
+ "@babel/core": "npm:^7.25.2"
+ "@babel/plugin-proposal-export-default-from": "npm:^7.24.7"
+ "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3"
+ "@babel/plugin-syntax-export-default-from": "npm:^7.24.7"
+ "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3"
+ "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3"
+ "@babel/plugin-transform-arrow-functions": "npm:^7.24.7"
+ "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4"
+ "@babel/plugin-transform-async-to-generator": "npm:^7.24.7"
+ "@babel/plugin-transform-block-scoping": "npm:^7.25.0"
+ "@babel/plugin-transform-class-properties": "npm:^7.25.4"
+ "@babel/plugin-transform-classes": "npm:^7.25.4"
+ "@babel/plugin-transform-computed-properties": "npm:^7.24.7"
+ "@babel/plugin-transform-destructuring": "npm:^7.24.8"
+ "@babel/plugin-transform-flow-strip-types": "npm:^7.25.2"
+ "@babel/plugin-transform-for-of": "npm:^7.24.7"
+ "@babel/plugin-transform-function-name": "npm:^7.25.1"
+ "@babel/plugin-transform-literals": "npm:^7.25.2"
+ "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7"
+ "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8"
+ "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7"
+ "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7"
+ "@babel/plugin-transform-numeric-separator": "npm:^7.24.7"
+ "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7"
+ "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7"
+ "@babel/plugin-transform-optional-chaining": "npm:^7.24.8"
+ "@babel/plugin-transform-parameters": "npm:^7.24.7"
+ "@babel/plugin-transform-private-methods": "npm:^7.24.7"
+ "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7"
+ "@babel/plugin-transform-react-display-name": "npm:^7.24.7"
+ "@babel/plugin-transform-react-jsx": "npm:^7.25.2"
+ "@babel/plugin-transform-react-jsx-self": "npm:^7.24.7"
+ "@babel/plugin-transform-react-jsx-source": "npm:^7.24.7"
+ "@babel/plugin-transform-regenerator": "npm:^7.24.7"
+ "@babel/plugin-transform-runtime": "npm:^7.24.7"
+ "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7"
+ "@babel/plugin-transform-spread": "npm:^7.24.7"
+ "@babel/plugin-transform-sticky-regex": "npm:^7.24.7"
+ "@babel/plugin-transform-typescript": "npm:^7.25.2"
+ "@babel/plugin-transform-unicode-regex": "npm:^7.24.7"
+ "@babel/template": "npm:^7.25.0"
+ "@react-native/babel-plugin-codegen": "npm:0.76.6"
+ babel-plugin-syntax-hermes-parser: "npm:^0.25.1"
+ babel-plugin-transform-flow-enums: "npm:^0.0.2"
+ react-refresh: "npm:^0.14.0"
+ peerDependencies:
+ "@babel/core": "*"
+ checksum: 10c0/c401281032de843be8eb5063832426788077d7ab6d3e577fb21e44914b7156b31dd5ef6318a5f0cba2f2f83a58750933ec57416856343ffc2ec8e0b75f292d09
+ languageName: node
+ linkType: hard
+
"@react-native/codegen@npm:0.73.2":
version: 0.73.2
resolution: "@react-native/codegen@npm:0.73.2"
@@ -7703,13 +8417,31 @@ __metadata:
nullthrows: "npm:^1.1.1"
peerDependencies:
"@babel/preset-env": ^7.1.6
- checksum: 10c0/2770747c514f488c7cb428034a1b28023ecc6950b2ee5aab99904457479f494df5760b6743f3154cb1bcc27a25c5890cad760af2a6bf67b15091ea5352d3b8ed
+ checksum: 10c0/2770747c514f488c7cb428034a1b28023ecc6950b2ee5aab99904457479f494df5760b6743f3154cb1bcc27a25c5890cad760af2a6bf67b15091ea5352d3b8ed
+ languageName: node
+ linkType: hard
+
+"@react-native/codegen@npm:0.76.5":
+ version: 0.76.5
+ resolution: "@react-native/codegen@npm:0.76.5"
+ dependencies:
+ "@babel/parser": "npm:^7.25.3"
+ glob: "npm:^7.1.1"
+ hermes-parser: "npm:0.23.1"
+ invariant: "npm:^2.2.4"
+ jscodeshift: "npm:^0.14.0"
+ mkdirp: "npm:^0.5.1"
+ nullthrows: "npm:^1.1.1"
+ yargs: "npm:^17.6.2"
+ peerDependencies:
+ "@babel/preset-env": ^7.1.6
+ checksum: 10c0/e4c160b0100bf0c44a6a621e1cf14fa50203671350a22da6d87d86af8427d24bc836ed6e8b6958438695655d2bea3bec19058587286e027c5f68477ca267067b
languageName: node
linkType: hard
-"@react-native/codegen@npm:0.76.5":
- version: 0.76.5
- resolution: "@react-native/codegen@npm:0.76.5"
+"@react-native/codegen@npm:0.76.6":
+ version: 0.76.6
+ resolution: "@react-native/codegen@npm:0.76.6"
dependencies:
"@babel/parser": "npm:^7.25.3"
glob: "npm:^7.1.1"
@@ -7721,7 +8453,7 @@ __metadata:
yargs: "npm:^17.6.2"
peerDependencies:
"@babel/preset-env": ^7.1.6
- checksum: 10c0/e4c160b0100bf0c44a6a621e1cf14fa50203671350a22da6d87d86af8427d24bc836ed6e8b6958438695655d2bea3bec19058587286e027c5f68477ca267067b
+ checksum: 10c0/fd19240b793670041c458c5fa7beee8d8b0c476df825fb0a70f100453feea2188a57276fd1f2df28c2602656dab518b33ffd6c4f34e39690a94286735e883891
languageName: node
linkType: hard
@@ -9572,6 +10304,25 @@ __metadata:
languageName: node
linkType: hard
+"@testing-library/react-native@npm:^12.5.2":
+ version: 12.9.0
+ resolution: "@testing-library/react-native@npm:12.9.0"
+ dependencies:
+ jest-matcher-utils: "npm:^29.7.0"
+ pretty-format: "npm:^29.7.0"
+ redent: "npm:^3.0.0"
+ peerDependencies:
+ jest: ">=28.0.0"
+ react: ">=16.8.0"
+ react-native: ">=0.59"
+ react-test-renderer: ">=16.8.0"
+ peerDependenciesMeta:
+ jest:
+ optional: true
+ checksum: 10c0/d29a2c9a4f1318a8fbf7d53927e42c34bd3bc00c46ba7e4010828c927a2b504cbaa3284deba7780fa467b6b1b2d5ce1a4a2ab9f2d1d08d7a1740dc5b2242df21
+ languageName: node
+ linkType: hard
+
"@testing-library/react-native@npm:^12.6.1":
version: 12.6.1
resolution: "@testing-library/react-native@npm:12.6.1"
@@ -9669,6 +10420,13 @@ __metadata:
languageName: node
linkType: hard
+"@tsconfig/node18@npm:^18.2.2":
+ version: 18.2.4
+ resolution: "@tsconfig/node18@npm:18.2.4"
+ checksum: 10c0/cdfd17f212660374eb2765cd5907b2252e43cfa2623cd52307a49f004327ef49bbe7d53c78b0aca57f33e9a5cb0d7d2eb5ded9be1235e6212f65c9f0699322b6
+ languageName: node
+ linkType: hard
+
"@types/babel__core@npm:^7.1.14":
version: 7.20.5
resolution: "@types/babel__core@npm:7.20.5"
@@ -9891,6 +10649,16 @@ __metadata:
languageName: node
linkType: hard
+"@types/jest@npm:^29.2.1":
+ version: 29.5.14
+ resolution: "@types/jest@npm:29.5.14"
+ dependencies:
+ expect: "npm:^29.0.0"
+ pretty-format: "npm:^29.0.0"
+ checksum: 10c0/18e0712d818890db8a8dab3d91e9ea9f7f19e3f83c2e50b312f557017dc81466207a71f3ed79cf4428e813ba939954fa26ffa0a9a7f153181ba174581b1c2aed
+ languageName: node
+ linkType: hard
+
"@types/jest@npm:^29.5.12":
version: 29.5.12
resolution: "@types/jest@npm:29.5.12"
@@ -10150,6 +10918,27 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/eslint-plugin@npm:^8.9.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/eslint-plugin@npm:8.20.0"
+ dependencies:
+ "@eslint-community/regexpp": "npm:^4.10.0"
+ "@typescript-eslint/scope-manager": "npm:8.20.0"
+ "@typescript-eslint/type-utils": "npm:8.20.0"
+ "@typescript-eslint/utils": "npm:8.20.0"
+ "@typescript-eslint/visitor-keys": "npm:8.20.0"
+ graphemer: "npm:^1.4.0"
+ ignore: "npm:^5.3.1"
+ natural-compare: "npm:^1.4.0"
+ ts-api-utils: "npm:^2.0.0"
+ peerDependencies:
+ "@typescript-eslint/parser": ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/c68d0dc5419db93c38eea8adecac19e27f8b023d015a944ffded112d584e87fa7fe512070a6a1085899cab2e12e1c8db276e10412b74bf639ca6b04052bbfedc
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/parser@npm:8.13.0":
version: 8.13.0
resolution: "@typescript-eslint/parser@npm:8.13.0"
@@ -10168,6 +10957,22 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/parser@npm:^8.9.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/parser@npm:8.20.0"
+ dependencies:
+ "@typescript-eslint/scope-manager": "npm:8.20.0"
+ "@typescript-eslint/types": "npm:8.20.0"
+ "@typescript-eslint/typescript-estree": "npm:8.20.0"
+ "@typescript-eslint/visitor-keys": "npm:8.20.0"
+ debug: "npm:^4.3.4"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/fff4a86be27f603ad8d6f7dd9758c46b04a254828f0c6d8a34869c1cf30b5828b60a1dc088f72680a7b65cc5fc696848df4605de19e59a18467306d7ca56c11d
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/scope-manager@npm:8.13.0":
version: 8.13.0
resolution: "@typescript-eslint/scope-manager@npm:8.13.0"
@@ -10178,6 +10983,16 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/scope-manager@npm:8.20.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/scope-manager@npm:8.20.0"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.20.0"
+ "@typescript-eslint/visitor-keys": "npm:8.20.0"
+ checksum: 10c0/a8074768d06c863169294116624a45c19377ff0b8635ad5fa4ae673b43cf704d1b9b79384ceef0ff0abb78b107d345cd90fe5572354daf6ad773fe462ee71e6a
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/type-utils@npm:8.13.0":
version: 8.13.0
resolution: "@typescript-eslint/type-utils@npm:8.13.0"
@@ -10193,6 +11008,21 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/type-utils@npm:8.20.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/type-utils@npm:8.20.0"
+ dependencies:
+ "@typescript-eslint/typescript-estree": "npm:8.20.0"
+ "@typescript-eslint/utils": "npm:8.20.0"
+ debug: "npm:^4.3.4"
+ ts-api-utils: "npm:^2.0.0"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/7d46143f26ec606b71d20f0f5535b16abba2ba7a5a2daecd2584ddb61d1284dd8404f34265cc1fdfd541068b24b0211f7ad94801c94e4c60869d9f26bf3c0b9b
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/types@npm:8.13.0":
version: 8.13.0
resolution: "@typescript-eslint/types@npm:8.13.0"
@@ -10200,6 +11030,13 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/types@npm:8.20.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/types@npm:8.20.0"
+ checksum: 10c0/21292d4ca089897015d2bf5ab99909a7b362902f63f4ba10696676823b50d00c7b4cd093b4b43fba01d12bc3feca3852d2c28528c06d8e45446b7477887dbee7
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/typescript-estree@npm:8.13.0":
version: 8.13.0
resolution: "@typescript-eslint/typescript-estree@npm:8.13.0"
@@ -10219,6 +11056,24 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/typescript-estree@npm:8.20.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/typescript-estree@npm:8.20.0"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.20.0"
+ "@typescript-eslint/visitor-keys": "npm:8.20.0"
+ debug: "npm:^4.3.4"
+ fast-glob: "npm:^3.3.2"
+ is-glob: "npm:^4.0.3"
+ minimatch: "npm:^9.0.4"
+ semver: "npm:^7.6.0"
+ ts-api-utils: "npm:^2.0.0"
+ peerDependencies:
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/54a2c1da7d1c5f7e865b941e8a3c98eb4b5f56ed8741664a84065173bde9602cdb8866b0984b26816d6af885c1528311c11e7286e869ed424483b74366514cbd
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/utils@npm:8.13.0":
version: 8.13.0
resolution: "@typescript-eslint/utils@npm:8.13.0"
@@ -10233,6 +11088,21 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/utils@npm:8.20.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/utils@npm:8.20.0"
+ dependencies:
+ "@eslint-community/eslint-utils": "npm:^4.4.0"
+ "@typescript-eslint/scope-manager": "npm:8.20.0"
+ "@typescript-eslint/types": "npm:8.20.0"
+ "@typescript-eslint/typescript-estree": "npm:8.20.0"
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: ">=4.8.4 <5.8.0"
+ checksum: 10c0/dd36c3b22a2adde1e1462aed0c8b4720f61859b4ebb0c3ef935a786a6b1cb0ec21eb0689f5a8debe8db26d97ebb979bab68d6f8fe7b0098e6200a485cfe2991b
+ languageName: node
+ linkType: hard
+
"@typescript-eslint/visitor-keys@npm:8.13.0":
version: 8.13.0
resolution: "@typescript-eslint/visitor-keys@npm:8.13.0"
@@ -10243,6 +11113,16 @@ __metadata:
languageName: node
linkType: hard
+"@typescript-eslint/visitor-keys@npm:8.20.0":
+ version: 8.20.0
+ resolution: "@typescript-eslint/visitor-keys@npm:8.20.0"
+ dependencies:
+ "@typescript-eslint/types": "npm:8.20.0"
+ eslint-visitor-keys: "npm:^4.2.0"
+ checksum: 10c0/e95d8b2685e8beb6637bf2e9d06e4177a400d3a2b142ba749944690f969ee3186b750082fd9bf34ada82acf1c5dd5970201dfd97619029c8ecca85fb4b50dbd8
+ languageName: node
+ linkType: hard
+
"@urql/core@npm:^5.0.0, @urql/core@npm:^5.0.6":
version: 5.1.0
resolution: "@urql/core@npm:5.1.0"
@@ -12095,6 +12975,16 @@ __metadata:
languageName: node
linkType: hard
+"array-buffer-byte-length@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "array-buffer-byte-length@npm:1.0.2"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ is-array-buffer: "npm:^3.0.5"
+ checksum: 10c0/74e1d2d996941c7a1badda9cabb7caab8c449db9086407cad8a1b71d2604cc8abf105db8ca4e02c04579ec58b7be40279ddb09aea4784832984485499f48432d
+ languageName: node
+ linkType: hard
+
"array-flatten@npm:1.1.1":
version: 1.1.1
resolution: "array-flatten@npm:1.1.1"
@@ -12197,6 +13087,18 @@ __metadata:
languageName: node
linkType: hard
+"array.prototype.flatmap@npm:^1.3.3":
+ version: 1.3.3
+ resolution: "array.prototype.flatmap@npm:1.3.3"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ define-properties: "npm:^1.2.1"
+ es-abstract: "npm:^1.23.5"
+ es-shim-unscopables: "npm:^1.0.2"
+ checksum: 10c0/ba899ea22b9dc9bf276e773e98ac84638ed5e0236de06f13d63a90b18ca9e0ec7c97d622d899796e3773930b946cd2413d098656c0c5d8cc58c6f25c21e6bd54
+ languageName: node
+ linkType: hard
+
"array.prototype.tosorted@npm:^1.1.4":
version: 1.1.4
resolution: "array.prototype.tosorted@npm:1.1.4"
@@ -12240,6 +13142,21 @@ __metadata:
languageName: node
linkType: hard
+"arraybuffer.prototype.slice@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "arraybuffer.prototype.slice@npm:1.0.4"
+ dependencies:
+ array-buffer-byte-length: "npm:^1.0.1"
+ call-bind: "npm:^1.0.8"
+ define-properties: "npm:^1.2.1"
+ es-abstract: "npm:^1.23.5"
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.6"
+ is-array-buffer: "npm:^3.0.4"
+ checksum: 10c0/2f2459caa06ae0f7f615003f9104b01f6435cc803e11bd2a655107d52a1781dc040532dc44d93026b694cc18793993246237423e13a5337e86b43ed604932c06
+ languageName: node
+ linkType: hard
+
"arrify@npm:^1.0.1":
version: 1.0.1
resolution: "arrify@npm:1.0.1"
@@ -12461,6 +13378,15 @@ __metadata:
languageName: node
linkType: hard
+"babel-plugin-dynamic-import-node@npm:^2.3.3":
+ version: 2.3.3
+ resolution: "babel-plugin-dynamic-import-node@npm:2.3.3"
+ dependencies:
+ object.assign: "npm:^4.1.0"
+ checksum: 10c0/1bd80df981e1fc1aff0cd4e390cf27aaa34f95f7620cd14dff07ba3bad56d168c098233a7d2deb2c9b1dc13643e596a6b94fc608a3412ee3c56e74a25cd2167e
+ languageName: node
+ linkType: hard
+
"babel-plugin-istanbul@npm:^6.1.1":
version: 6.1.1
resolution: "babel-plugin-istanbul@npm:6.1.1"
@@ -12696,6 +13622,31 @@ __metadata:
languageName: node
linkType: hard
+"babel-preset-expo@npm:~12.0.6":
+ version: 12.0.6
+ resolution: "babel-preset-expo@npm:12.0.6"
+ dependencies:
+ "@babel/plugin-proposal-decorators": "npm:^7.12.9"
+ "@babel/plugin-transform-export-namespace-from": "npm:^7.22.11"
+ "@babel/plugin-transform-object-rest-spread": "npm:^7.12.13"
+ "@babel/plugin-transform-parameters": "npm:^7.22.15"
+ "@babel/preset-react": "npm:^7.22.15"
+ "@babel/preset-typescript": "npm:^7.23.0"
+ "@react-native/babel-preset": "npm:0.76.6"
+ babel-plugin-react-native-web: "npm:~0.19.13"
+ react-refresh: "npm:^0.14.2"
+ peerDependencies:
+ babel-plugin-react-compiler: ^19.0.0-beta-9ee70a1-20241017
+ react-compiler-runtime: ^19.0.0-beta-8a03594-20241020
+ peerDependenciesMeta:
+ babel-plugin-react-compiler:
+ optional: true
+ react-compiler-runtime:
+ optional: true
+ checksum: 10c0/a55d30877d43f59a1d7615c4305faaaf93f4865c73b57fac653693d3245e973e65921a55df5c4fcf8ad388b561db44ce9dabd39dff513307bedf9815c44e525b
+ languageName: node
+ linkType: hard
+
"babel-preset-jest@npm:^29.6.3":
version: 29.6.3
resolution: "babel-preset-jest@npm:29.6.3"
@@ -13177,6 +14128,29 @@ __metadata:
languageName: node
linkType: hard
+"browserslist@npm:^4.24.3":
+ version: 4.24.4
+ resolution: "browserslist@npm:4.24.4"
+ dependencies:
+ caniuse-lite: "npm:^1.0.30001688"
+ electron-to-chromium: "npm:^1.5.73"
+ node-releases: "npm:^2.0.19"
+ update-browserslist-db: "npm:^1.1.1"
+ bin:
+ browserslist: cli.js
+ checksum: 10c0/db7ebc1733cf471e0b490b4f47e3e2ea2947ce417192c9246644e92c667dd56a71406cc58f62ca7587caf828364892e9952904a02b7aead752bc65b62a37cfe9
+ languageName: node
+ linkType: hard
+
+"bs-logger@npm:0.x":
+ version: 0.2.6
+ resolution: "bs-logger@npm:0.2.6"
+ dependencies:
+ fast-json-stable-stringify: "npm:2.x"
+ checksum: 10c0/80e89aaaed4b68e3374ce936f2eb097456a0dddbf11f75238dbd53140b1e39259f0d248a5089ed456f1158984f22191c3658d54a713982f676709fbe1a6fa5a0
+ languageName: node
+ linkType: hard
+
"bs58@npm:^4.0.0, bs58@npm:^4.0.1":
version: 4.0.1
resolution: "bs58@npm:4.0.1"
@@ -13398,6 +14372,16 @@ __metadata:
languageName: node
linkType: hard
+"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "call-bind-apply-helpers@npm:1.0.1"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ function-bind: "npm:^1.1.2"
+ checksum: 10c0/acb2ab68bf2718e68a3e895f0d0b73ccc9e45b9b6f210f163512ba76f91dab409eb8792f6dae188356f9095747512a3101646b3dea9d37fb8c7c6bf37796d18c
+ languageName: node
+ linkType: hard
+
"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2":
version: 1.0.2
resolution: "call-bind@npm:1.0.2"
@@ -13421,6 +14405,28 @@ __metadata:
languageName: node
linkType: hard
+"call-bind@npm:^1.0.8":
+ version: 1.0.8
+ resolution: "call-bind@npm:1.0.8"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.0"
+ es-define-property: "npm:^1.0.0"
+ get-intrinsic: "npm:^1.2.4"
+ set-function-length: "npm:^1.2.2"
+ checksum: 10c0/a13819be0681d915144467741b69875ae5f4eba8961eb0bf322aab63ec87f8250eb6d6b0dcbb2e1349876412a56129ca338592b3829ef4343527f5f18a0752d4
+ languageName: node
+ linkType: hard
+
+"call-bound@npm:^1.0.2, call-bound@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "call-bound@npm:1.0.3"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.1"
+ get-intrinsic: "npm:^1.2.6"
+ checksum: 10c0/45257b8e7621067304b30dbd638e856cac913d31e8e00a80d6cf172911acd057846572d0b256b45e652d515db6601e2974a1b1a040e91b4fc36fb3dd86fa69cf
+ languageName: node
+ linkType: hard
+
"caller-callsite@npm:^2.0.0":
version: 2.0.0
resolution: "caller-callsite@npm:2.0.0"
@@ -13610,6 +14616,25 @@ __metadata:
languageName: node
linkType: hard
+"chokidar@npm:^3.6.0":
+ version: 3.6.0
+ resolution: "chokidar@npm:3.6.0"
+ dependencies:
+ anymatch: "npm:~3.1.2"
+ braces: "npm:~3.0.2"
+ fsevents: "npm:~2.3.2"
+ glob-parent: "npm:~5.1.2"
+ is-binary-path: "npm:~2.1.0"
+ is-glob: "npm:~4.0.1"
+ normalize-path: "npm:~3.0.0"
+ readdirp: "npm:~3.6.0"
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462
+ languageName: node
+ linkType: hard
+
"chownr@npm:^1.1.1, chownr@npm:^1.1.4":
version: 1.1.4
resolution: "chownr@npm:1.1.4"
@@ -13988,7 +15013,7 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:^12.0.0":
+"commander@npm:^12.0.0, commander@npm:^12.1.0":
version: 12.1.0
resolution: "commander@npm:12.1.0"
checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9
@@ -14009,6 +15034,13 @@ __metadata:
languageName: node
linkType: hard
+"commander@npm:^6.2.0":
+ version: 6.2.1
+ resolution: "commander@npm:6.2.1"
+ checksum: 10c0/85748abd9d18c8bc88febed58b98f66b7c591d9b5017cad459565761d7b29ca13b7783ea2ee5ce84bf235897333706c4ce29adf1ce15c8252780e7000e2ce9ea
+ languageName: node
+ linkType: hard
+
"commander@npm:^7.2.0":
version: 7.2.0
resolution: "commander@npm:7.2.0"
@@ -14254,6 +15286,7 @@ __metadata:
expo-linear-gradient: "npm:~14.0.1"
expo-linking: "npm:~7.0.3"
expo-localization: "npm:~16.0.0"
+ expo-module-scripts: "npm:^4.0.3"
expo-navigation-bar: "npm:~4.0.4"
expo-notifications: "npm:~0.29.8"
expo-router: "npm:~4.0.9"
@@ -14430,6 +15463,15 @@ __metadata:
languageName: node
linkType: hard
+"core-js-compat@npm:^3.38.1":
+ version: 3.40.0
+ resolution: "core-js-compat@npm:3.40.0"
+ dependencies:
+ browserslist: "npm:^4.24.3"
+ checksum: 10c0/44f6e88726fe266a5be9581a79766800478a8d5c492885f2d4c2a4e2babd9b06bc1689d5340d3a61ae7332f990aff2e83b6203ff8773137a627cfedfbeefabeb
+ languageName: node
+ linkType: hard
+
"core-js@npm:^3.8.2":
version: 3.38.1
resolution: "core-js@npm:3.38.1"
@@ -14878,6 +15920,17 @@ __metadata:
languageName: node
linkType: hard
+"data-view-buffer@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "data-view-buffer@npm:1.0.2"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ es-errors: "npm:^1.3.0"
+ is-data-view: "npm:^1.0.2"
+ checksum: 10c0/7986d40fc7979e9e6241f85db8d17060dd9a71bd53c894fa29d126061715e322a4cd47a00b0b8c710394854183d4120462b980b8554012acc1c0fa49df7ad38c
+ languageName: node
+ linkType: hard
+
"data-view-byte-length@npm:^1.0.1":
version: 1.0.1
resolution: "data-view-byte-length@npm:1.0.1"
@@ -14889,6 +15942,17 @@ __metadata:
languageName: node
linkType: hard
+"data-view-byte-length@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "data-view-byte-length@npm:1.0.2"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ es-errors: "npm:^1.3.0"
+ is-data-view: "npm:^1.0.2"
+ checksum: 10c0/f8a4534b5c69384d95ac18137d381f18a5cfae1f0fc1df0ef6feef51ef0d568606d970b69e02ea186c6c0f0eac77fe4e6ad96fec2569cc86c3afcc7475068c55
+ languageName: node
+ linkType: hard
+
"data-view-byte-offset@npm:^1.0.0":
version: 1.0.0
resolution: "data-view-byte-offset@npm:1.0.0"
@@ -14900,6 +15964,17 @@ __metadata:
languageName: node
linkType: hard
+"data-view-byte-offset@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "data-view-byte-offset@npm:1.0.1"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ es-errors: "npm:^1.3.0"
+ is-data-view: "npm:^1.0.1"
+ checksum: 10c0/fa7aa40078025b7810dcffc16df02c480573b7b53ef1205aa6a61533011005c1890e5ba17018c692ce7c900212b547262d33279fde801ad9843edc0863bf78c4
+ languageName: node
+ linkType: hard
+
"date-fns@npm:^2.29.3":
version: 2.29.3
resolution: "date-fns@npm:2.29.3"
@@ -15377,6 +16452,17 @@ __metadata:
languageName: node
linkType: hard
+"dunder-proto@npm:^1.0.0, dunder-proto@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "dunder-proto@npm:1.0.1"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.1"
+ es-errors: "npm:^1.3.0"
+ gopd: "npm:^1.2.0"
+ checksum: 10c0/199f2a0c1c16593ca0a145dbf76a962f8033ce3129f01284d48c45ed4e14fea9bbacd7b3610b6cdc33486cef20385ac054948fefc6272fcce645c09468f93031
+ languageName: node
+ linkType: hard
+
"duplexify@npm:^4.1.2":
version: 4.1.2
resolution: "duplexify@npm:4.1.2"
@@ -15796,6 +16882,65 @@ __metadata:
languageName: node
linkType: hard
+"es-abstract@npm:^1.23.5, es-abstract@npm:^1.23.6, es-abstract@npm:^1.23.9":
+ version: 1.23.9
+ resolution: "es-abstract@npm:1.23.9"
+ dependencies:
+ array-buffer-byte-length: "npm:^1.0.2"
+ arraybuffer.prototype.slice: "npm:^1.0.4"
+ available-typed-arrays: "npm:^1.0.7"
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ data-view-buffer: "npm:^1.0.2"
+ data-view-byte-length: "npm:^1.0.2"
+ data-view-byte-offset: "npm:^1.0.1"
+ es-define-property: "npm:^1.0.1"
+ es-errors: "npm:^1.3.0"
+ es-object-atoms: "npm:^1.0.0"
+ es-set-tostringtag: "npm:^2.1.0"
+ es-to-primitive: "npm:^1.3.0"
+ function.prototype.name: "npm:^1.1.8"
+ get-intrinsic: "npm:^1.2.7"
+ get-proto: "npm:^1.0.0"
+ get-symbol-description: "npm:^1.1.0"
+ globalthis: "npm:^1.0.4"
+ gopd: "npm:^1.2.0"
+ has-property-descriptors: "npm:^1.0.2"
+ has-proto: "npm:^1.2.0"
+ has-symbols: "npm:^1.1.0"
+ hasown: "npm:^2.0.2"
+ internal-slot: "npm:^1.1.0"
+ is-array-buffer: "npm:^3.0.5"
+ is-callable: "npm:^1.2.7"
+ is-data-view: "npm:^1.0.2"
+ is-regex: "npm:^1.2.1"
+ is-shared-array-buffer: "npm:^1.0.4"
+ is-string: "npm:^1.1.1"
+ is-typed-array: "npm:^1.1.15"
+ is-weakref: "npm:^1.1.0"
+ math-intrinsics: "npm:^1.1.0"
+ object-inspect: "npm:^1.13.3"
+ object-keys: "npm:^1.1.1"
+ object.assign: "npm:^4.1.7"
+ own-keys: "npm:^1.0.1"
+ regexp.prototype.flags: "npm:^1.5.3"
+ safe-array-concat: "npm:^1.1.3"
+ safe-push-apply: "npm:^1.0.0"
+ safe-regex-test: "npm:^1.1.0"
+ set-proto: "npm:^1.0.0"
+ string.prototype.trim: "npm:^1.2.10"
+ string.prototype.trimend: "npm:^1.0.9"
+ string.prototype.trimstart: "npm:^1.0.8"
+ typed-array-buffer: "npm:^1.0.3"
+ typed-array-byte-length: "npm:^1.0.3"
+ typed-array-byte-offset: "npm:^1.0.4"
+ typed-array-length: "npm:^1.0.7"
+ unbox-primitive: "npm:^1.1.0"
+ which-typed-array: "npm:^1.1.18"
+ checksum: 10c0/1de229c9e08fe13c17fe5abaec8221545dfcd57e51f64909599a6ae896df84b8fd2f7d16c60cb00d7bf495b9298ca3581aded19939d4b7276854a4b066f8422b
+ languageName: node
+ linkType: hard
+
"es-define-property@npm:^1.0.0":
version: 1.0.0
resolution: "es-define-property@npm:1.0.0"
@@ -15805,6 +16950,13 @@ __metadata:
languageName: node
linkType: hard
+"es-define-property@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "es-define-property@npm:1.0.1"
+ checksum: 10c0/3f54eb49c16c18707949ff25a1456728c883e81259f045003499efba399c08bad00deebf65cccde8c0e07908c1a225c9d472b7107e558f2a48e28d530e34527c
+ languageName: node
+ linkType: hard
+
"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0":
version: 1.3.0
resolution: "es-errors@npm:1.3.0"
@@ -15835,6 +16987,30 @@ __metadata:
languageName: node
linkType: hard
+"es-iterator-helpers@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "es-iterator-helpers@npm:1.2.1"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ define-properties: "npm:^1.2.1"
+ es-abstract: "npm:^1.23.6"
+ es-errors: "npm:^1.3.0"
+ es-set-tostringtag: "npm:^2.0.3"
+ function-bind: "npm:^1.1.2"
+ get-intrinsic: "npm:^1.2.6"
+ globalthis: "npm:^1.0.4"
+ gopd: "npm:^1.2.0"
+ has-property-descriptors: "npm:^1.0.2"
+ has-proto: "npm:^1.2.0"
+ has-symbols: "npm:^1.1.0"
+ internal-slot: "npm:^1.1.0"
+ iterator.prototype: "npm:^1.1.4"
+ safe-array-concat: "npm:^1.1.3"
+ checksum: 10c0/97e3125ca472d82d8aceea11b790397648b52c26d8768ea1c1ee6309ef45a8755bb63225a43f3150c7591cffc17caf5752459f1e70d583b4184370a8f04ebd2f
+ languageName: node
+ linkType: hard
+
"es-object-atoms@npm:^1.0.0":
version: 1.0.0
resolution: "es-object-atoms@npm:1.0.0"
@@ -15866,6 +17042,18 @@ __metadata:
languageName: node
linkType: hard
+"es-set-tostringtag@npm:^2.1.0":
+ version: 2.1.0
+ resolution: "es-set-tostringtag@npm:2.1.0"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.6"
+ has-tostringtag: "npm:^1.0.2"
+ hasown: "npm:^2.0.2"
+ checksum: 10c0/ef2ca9ce49afe3931cb32e35da4dcb6d86ab02592cfc2ce3e49ced199d9d0bb5085fc7e73e06312213765f5efa47cc1df553a6a5154584b21448e9fb8355b1af
+ languageName: node
+ linkType: hard
+
"es-shim-unscopables@npm:^1.0.0":
version: 1.0.0
resolution: "es-shim-unscopables@npm:1.0.0"
@@ -15895,6 +17083,17 @@ __metadata:
languageName: node
linkType: hard
+"es-to-primitive@npm:^1.3.0":
+ version: 1.3.0
+ resolution: "es-to-primitive@npm:1.3.0"
+ dependencies:
+ is-callable: "npm:^1.2.7"
+ is-date-object: "npm:^1.0.5"
+ is-symbol: "npm:^1.0.4"
+ checksum: 10c0/c7e87467abb0b438639baa8139f701a06537d2b9bc758f23e8622c3b42fd0fdb5bde0f535686119e446dd9d5e4c0f238af4e14960f4771877cf818d023f6730b
+ languageName: node
+ linkType: hard
+
"es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50":
version: 0.10.62
resolution: "es5-ext@npm:0.10.62"
@@ -16036,6 +17235,39 @@ __metadata:
languageName: node
linkType: hard
+"eslint-config-prettier@npm:^9.1.0":
+ version: 9.1.0
+ resolution: "eslint-config-prettier@npm:9.1.0"
+ peerDependencies:
+ eslint: ">=7.0.0"
+ bin:
+ eslint-config-prettier: bin/cli.js
+ checksum: 10c0/6d332694b36bc9ac6fdb18d3ca2f6ac42afa2ad61f0493e89226950a7091e38981b66bac2b47ba39d15b73fff2cd32c78b850a9cf9eed9ca9a96bfb2f3a2f10d
+ languageName: node
+ linkType: hard
+
+"eslint-config-universe@npm:^14.0.0":
+ version: 14.0.0
+ resolution: "eslint-config-universe@npm:14.0.0"
+ dependencies:
+ "@typescript-eslint/eslint-plugin": "npm:^8.9.0"
+ "@typescript-eslint/parser": "npm:^8.9.0"
+ eslint-config-prettier: "npm:^9.1.0"
+ eslint-plugin-import: "npm:^2.30.0"
+ eslint-plugin-node: "npm:^11.1.0"
+ eslint-plugin-prettier: "npm:^5.2.1"
+ eslint-plugin-react: "npm:^7.36.1"
+ eslint-plugin-react-hooks: "npm:^4.6.2"
+ peerDependencies:
+ eslint: ">=8.10 <9"
+ prettier: ">=3"
+ peerDependenciesMeta:
+ prettier:
+ optional: true
+ checksum: 10c0/a8620c20d4a9ff924823d443032f8e965fbd55af53dc025cc2ee6f2e9953c24fb3426e1792b0e6220d672d2f3aa2026995712399ecc74dac2326830310d388b4
+ languageName: node
+ linkType: hard
+
"eslint-import-resolver-node@npm:^0.3.9":
version: 0.3.9
resolution: "eslint-import-resolver-node@npm:0.3.9"
@@ -16084,7 +17316,19 @@ __metadata:
languageName: node
linkType: hard
-"eslint-plugin-import@npm:^2.31.0":
+"eslint-plugin-es@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "eslint-plugin-es@npm:3.0.1"
+ dependencies:
+ eslint-utils: "npm:^2.0.0"
+ regexpp: "npm:^3.0.0"
+ peerDependencies:
+ eslint: ">=4.19.1"
+ checksum: 10c0/12ae730aa9603e680af048e1653aac15e529411b68b8d0da6e290700b17c695485af7c3f5360f531f80970786cab7288c2c1d4a58c35ec1bb89649897c016c4a
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-import@npm:^2.30.0, eslint-plugin-import@npm:^2.31.0":
version: 2.31.0
resolution: "eslint-plugin-import@npm:2.31.0"
dependencies:
@@ -16113,6 +17357,51 @@ __metadata:
languageName: node
linkType: hard
+"eslint-plugin-node@npm:^11.1.0":
+ version: 11.1.0
+ resolution: "eslint-plugin-node@npm:11.1.0"
+ dependencies:
+ eslint-plugin-es: "npm:^3.0.0"
+ eslint-utils: "npm:^2.0.0"
+ ignore: "npm:^5.1.1"
+ minimatch: "npm:^3.0.4"
+ resolve: "npm:^1.10.1"
+ semver: "npm:^6.1.0"
+ peerDependencies:
+ eslint: ">=5.16.0"
+ checksum: 10c0/c7716adac4020cb852fd2410dcd8bdb13a227004de77f96d7f9806d0cf2274f24e0920a7ca73bcd72d90003696c1f17fdd9fe3ca218e64ee03dc2b840e4416fa
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-prettier@npm:^5.2.1":
+ version: 5.2.1
+ resolution: "eslint-plugin-prettier@npm:5.2.1"
+ dependencies:
+ prettier-linter-helpers: "npm:^1.0.0"
+ synckit: "npm:^0.9.1"
+ peerDependencies:
+ "@types/eslint": ">=8.0.0"
+ eslint: ">=8.0.0"
+ eslint-config-prettier: "*"
+ prettier: ">=3.0.0"
+ peerDependenciesMeta:
+ "@types/eslint":
+ optional: true
+ eslint-config-prettier:
+ optional: true
+ checksum: 10c0/4bc8bbaf5bb556c9c501dcdff369137763c49ccaf544f9fa91400360ed5e3a3f1234ab59690e06beca5b1b7e6f6356978cdd3b02af6aba3edea2ffe69ca6e8b2
+ languageName: node
+ linkType: hard
+
+"eslint-plugin-react-hooks@npm:^4.6.2":
+ version: 4.6.2
+ resolution: "eslint-plugin-react-hooks@npm:4.6.2"
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ checksum: 10c0/4844e58c929bc05157fb70ba1e462e34f1f4abcbc8dd5bbe5b04513d33e2699effb8bca668297976ceea8e7ebee4e8fc29b9af9d131bcef52886feaa2308b2cc
+ languageName: node
+ linkType: hard
+
"eslint-plugin-react-hooks@npm:^5.0.0":
version: 5.0.0
resolution: "eslint-plugin-react-hooks@npm:5.0.0"
@@ -16140,6 +17429,34 @@ __metadata:
languageName: node
linkType: hard
+"eslint-plugin-react@npm:^7.36.1":
+ version: 7.37.4
+ resolution: "eslint-plugin-react@npm:7.37.4"
+ dependencies:
+ array-includes: "npm:^3.1.8"
+ array.prototype.findlast: "npm:^1.2.5"
+ array.prototype.flatmap: "npm:^1.3.3"
+ array.prototype.tosorted: "npm:^1.1.4"
+ doctrine: "npm:^2.1.0"
+ es-iterator-helpers: "npm:^1.2.1"
+ estraverse: "npm:^5.3.0"
+ hasown: "npm:^2.0.2"
+ jsx-ast-utils: "npm:^2.4.1 || ^3.0.0"
+ minimatch: "npm:^3.1.2"
+ object.entries: "npm:^1.1.8"
+ object.fromentries: "npm:^2.0.8"
+ object.values: "npm:^1.2.1"
+ prop-types: "npm:^15.8.1"
+ resolve: "npm:^2.0.0-next.5"
+ semver: "npm:^6.3.1"
+ string.prototype.matchall: "npm:^4.0.12"
+ string.prototype.repeat: "npm:^1.0.0"
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
+ checksum: 10c0/4acbbdb19669dfa9a162ed8847c3ad1918f6aea1ceb675ee320b5d903b4e463fdef25e15233295b6d0a726fef2ea8b015c527da769c7690932ddc52d5b82ba12
+ languageName: node
+ linkType: hard
+
"eslint-plugin-react@npm:^7.37.2":
version: 7.37.2
resolution: "eslint-plugin-react@npm:7.37.2"
@@ -16191,6 +17508,22 @@ __metadata:
languageName: node
linkType: hard
+"eslint-utils@npm:^2.0.0":
+ version: 2.1.0
+ resolution: "eslint-utils@npm:2.1.0"
+ dependencies:
+ eslint-visitor-keys: "npm:^1.1.0"
+ checksum: 10c0/69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611
+ languageName: node
+ linkType: hard
+
+"eslint-visitor-keys@npm:^1.1.0":
+ version: 1.3.0
+ resolution: "eslint-visitor-keys@npm:1.3.0"
+ checksum: 10c0/10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3
+ languageName: node
+ linkType: hard
+
"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.3":
version: 3.4.3
resolution: "eslint-visitor-keys@npm:3.4.3"
@@ -17108,6 +18441,35 @@ __metadata:
languageName: node
linkType: hard
+"expo-module-scripts@npm:^4.0.3":
+ version: 4.0.3
+ resolution: "expo-module-scripts@npm:4.0.3"
+ dependencies:
+ "@babel/cli": "npm:^7.23.4"
+ "@babel/plugin-transform-export-namespace-from": "npm:^7.23.4"
+ "@babel/preset-env": "npm:^7.23.8"
+ "@babel/preset-typescript": "npm:^7.23.3"
+ "@expo/npm-proofread": "npm:^1.0.1"
+ "@testing-library/react-native": "npm:^12.5.2"
+ "@tsconfig/node18": "npm:^18.2.2"
+ "@types/jest": "npm:^29.2.1"
+ babel-plugin-dynamic-import-node: "npm:^2.3.3"
+ babel-preset-expo: "npm:~12.0.6"
+ commander: "npm:^12.1.0"
+ eslint-config-universe: "npm:^14.0.0"
+ glob: "npm:^10.4.2"
+ jest-expo: "npm:~52.0.3"
+ jest-snapshot-prettier: "npm:prettier@^2"
+ jest-watch-typeahead: "npm:2.2.1"
+ resolve-workspace-root: "npm:^2.0.0"
+ ts-jest: "npm:~29.0.4"
+ typescript: "npm:^5.1.3"
+ bin:
+ expo-module: bin/expo-module.js
+ checksum: 10c0/6fe53a4d21684015daecda9690c35bbe34842264e30f7789549a8678f8a9dd3e0a219c11b102c111795dd12bc0c897a10bc37d424087a62074b323f2de05d55d
+ languageName: node
+ linkType: hard
+
"expo-modules-autolinking@npm:2.0.4":
version: 2.0.4
resolution: "expo-modules-autolinking@npm:2.0.4"
@@ -17504,6 +18866,13 @@ __metadata:
languageName: node
linkType: hard
+"fast-diff@npm:^1.1.2":
+ version: 1.3.0
+ resolution: "fast-diff@npm:1.3.0"
+ checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29
+ languageName: node
+ linkType: hard
+
"fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0":
version: 1.3.2
resolution: "fast-fifo@npm:1.3.2"
@@ -17531,7 +18900,7 @@ __metadata:
languageName: node
linkType: hard
-"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
+"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0":
version: 2.1.0
resolution: "fast-json-stable-stringify@npm:2.1.0"
checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b
@@ -18142,6 +19511,13 @@ __metadata:
languageName: node
linkType: hard
+"fs-readdir-recursive@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "fs-readdir-recursive@npm:1.1.0"
+ checksum: 10c0/7e190393952143e674b6d1ad4abcafa1b5d3e337fcc21b0cb051079a7140a54617a7df193d562ef9faf21bd7b2148a38601b3d5c16261fa76f278d88dc69989c
+ languageName: node
+ linkType: hard
+
"fs.realpath@npm:^1.0.0":
version: 1.0.0
resolution: "fs.realpath@npm:1.0.0"
@@ -18206,6 +19582,20 @@ __metadata:
languageName: node
linkType: hard
+"function.prototype.name@npm:^1.1.8":
+ version: 1.1.8
+ resolution: "function.prototype.name@npm:1.1.8"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ define-properties: "npm:^1.2.1"
+ functions-have-names: "npm:^1.2.3"
+ hasown: "npm:^2.0.2"
+ is-callable: "npm:^1.2.7"
+ checksum: 10c0/e920a2ab52663005f3cbe7ee3373e3c71c1fb5558b0b0548648cdf3e51961085032458e26c71ff1a8c8c20e7ee7caeb03d43a5d1fa8610c459333323a2e71253
+ languageName: node
+ linkType: hard
+
"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3":
version: 1.2.3
resolution: "functions-have-names@npm:1.2.3"
@@ -18284,6 +19674,24 @@ __metadata:
languageName: node
linkType: hard
+"get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7":
+ version: 1.2.7
+ resolution: "get-intrinsic@npm:1.2.7"
+ dependencies:
+ call-bind-apply-helpers: "npm:^1.0.1"
+ es-define-property: "npm:^1.0.1"
+ es-errors: "npm:^1.3.0"
+ es-object-atoms: "npm:^1.0.0"
+ function-bind: "npm:^1.1.2"
+ get-proto: "npm:^1.0.0"
+ gopd: "npm:^1.2.0"
+ has-symbols: "npm:^1.1.0"
+ hasown: "npm:^2.0.2"
+ math-intrinsics: "npm:^1.1.0"
+ checksum: 10c0/b475dec9f8bff6f7422f51ff4b7b8d0b68e6776ee83a753c1d627e3008c3442090992788038b37eff72e93e43dceed8c1acbdf2d6751672687ec22127933080d
+ languageName: node
+ linkType: hard
+
"get-nonce@npm:^1.0.0":
version: 1.0.1
resolution: "get-nonce@npm:1.0.1"
@@ -18312,6 +19720,16 @@ __metadata:
languageName: node
linkType: hard
+"get-proto@npm:^1.0.0, get-proto@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "get-proto@npm:1.0.1"
+ dependencies:
+ dunder-proto: "npm:^1.0.1"
+ es-object-atoms: "npm:^1.0.0"
+ checksum: 10c0/9224acb44603c5526955e83510b9da41baf6ae73f7398875fba50edc5e944223a89c4a72b070fcd78beb5f7bdda58ecb6294adc28f7acfc0da05f76a2399643c
+ languageName: node
+ linkType: hard
+
"get-stdin@npm:^6.0.0":
version: 6.0.0
resolution: "get-stdin@npm:6.0.0"
@@ -18372,6 +19790,17 @@ __metadata:
languageName: node
linkType: hard
+"get-symbol-description@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "get-symbol-description@npm:1.1.0"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.6"
+ checksum: 10c0/d6a7d6afca375779a4b307738c9e80dbf7afc0bdbe5948768d54ab9653c865523d8920e670991a925936eb524b7cb6a6361d199a760b21d0ca7620194455aa4b
+ languageName: node
+ linkType: hard
+
"get-tsconfig@npm:^4.7.5":
version: 4.8.1
resolution: "get-tsconfig@npm:4.8.1"
@@ -18522,7 +19951,7 @@ __metadata:
languageName: node
linkType: hard
-"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6":
+"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.2.0":
version: 7.2.3
resolution: "glob@npm:7.2.3"
dependencies:
@@ -18629,6 +20058,13 @@ __metadata:
languageName: node
linkType: hard
+"gopd@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "gopd@npm:1.2.0"
+ checksum: 10c0/50fff1e04ba2b7737c097358534eacadad1e68d24cccee3272e04e007bed008e68d2614f3987788428fd192a5ae3889d08fb2331417e4fc4a9ab366b2043cead
+ languageName: node
+ linkType: hard
+
"got@npm:12.1.0":
version: 12.1.0
resolution: "got@npm:12.1.0"
@@ -18793,6 +20229,15 @@ __metadata:
languageName: node
linkType: hard
+"has-proto@npm:^1.2.0":
+ version: 1.2.0
+ resolution: "has-proto@npm:1.2.0"
+ dependencies:
+ dunder-proto: "npm:^1.0.0"
+ checksum: 10c0/46538dddab297ec2f43923c3d35237df45d8c55a6fc1067031e04c13ed8a9a8f94954460632fd4da84c31a1721eefee16d901cbb1ae9602bab93bb6e08f93b95
+ languageName: node
+ linkType: hard
+
"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3":
version: 1.0.3
resolution: "has-symbols@npm:1.0.3"
@@ -18800,6 +20245,13 @@ __metadata:
languageName: node
linkType: hard
+"has-symbols@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "has-symbols@npm:1.1.0"
+ checksum: 10c0/dde0a734b17ae51e84b10986e651c664379018d10b91b6b0e9b293eddb32f0f069688c841fb40f19e9611546130153e0a2a48fd7f512891fb000ddfa36f5a20e
+ languageName: node
+ linkType: hard
+
"has-tostringtag@npm:^1.0.0":
version: 1.0.0
resolution: "has-tostringtag@npm:1.0.0"
@@ -19283,6 +20735,13 @@ __metadata:
languageName: node
linkType: hard
+"ignore@npm:^5.1.1":
+ version: 5.3.2
+ resolution: "ignore@npm:5.3.2"
+ checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337
+ languageName: node
+ linkType: hard
+
"ignore@npm:^5.1.8, ignore@npm:^5.2.0, ignore@npm:^5.2.4, ignore@npm:^5.3.1":
version: 5.3.1
resolution: "ignore@npm:5.3.1"
@@ -19456,6 +20915,17 @@ __metadata:
languageName: node
linkType: hard
+"internal-slot@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "internal-slot@npm:1.1.0"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ hasown: "npm:^2.0.2"
+ side-channel: "npm:^1.1.0"
+ checksum: 10c0/03966f5e259b009a9bf1a78d60da920df198af4318ec004f57b8aef1dd3fe377fbc8cce63a96e8c810010302654de89f9e19de1cd8ad0061d15be28a695465c7
+ languageName: node
+ linkType: hard
+
"invariant@npm:2.2.4, invariant@npm:^2.2.4":
version: 2.2.4
resolution: "invariant@npm:2.2.4"
@@ -19609,6 +21079,17 @@ __metadata:
languageName: node
linkType: hard
+"is-array-buffer@npm:^3.0.5":
+ version: 3.0.5
+ resolution: "is-array-buffer@npm:3.0.5"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ get-intrinsic: "npm:^1.2.6"
+ checksum: 10c0/c5c9f25606e86dbb12e756694afbbff64bc8b348d1bc989324c037e1068695131930199d6ad381952715dad3a9569333817f0b1a72ce5af7f883ce802e49c83d
+ languageName: node
+ linkType: hard
+
"is-arrayish@npm:^0.2.1":
version: 0.2.1
resolution: "is-arrayish@npm:0.2.1"
@@ -19641,6 +21122,15 @@ __metadata:
languageName: node
linkType: hard
+"is-bigint@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "is-bigint@npm:1.1.0"
+ dependencies:
+ has-bigints: "npm:^1.0.2"
+ checksum: 10c0/f4f4b905ceb195be90a6ea7f34323bf1c18e3793f18922e3e9a73c684c29eeeeff5175605c3a3a74cc38185fe27758f07efba3dbae812e5c5afbc0d2316b40e4
+ languageName: node
+ linkType: hard
+
"is-binary-path@npm:~2.1.0":
version: 2.1.0
resolution: "is-binary-path@npm:2.1.0"
@@ -19660,6 +21150,16 @@ __metadata:
languageName: node
linkType: hard
+"is-boolean-object@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "is-boolean-object@npm:1.2.1"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ has-tostringtag: "npm:^1.0.2"
+ checksum: 10c0/2ef601d255a39fdbde79cfe6be80c27b47430ed6712407f29b17d002e20f64c1e3d6692f1d842ba16bf1e9d8ddf1c4f13cac3ed7d9a4a21290f44879ebb4e8f5
+ languageName: node
+ linkType: hard
+
"is-buffer@npm:~1.1.6":
version: 1.1.6
resolution: "is-buffer@npm:1.1.6"
@@ -19712,6 +21212,15 @@ __metadata:
languageName: node
linkType: hard
+"is-core-module@npm:^2.16.0":
+ version: 2.16.1
+ resolution: "is-core-module@npm:2.16.1"
+ dependencies:
+ hasown: "npm:^2.0.2"
+ checksum: 10c0/898443c14780a577e807618aaae2b6f745c8538eca5c7bc11388a3f2dc6de82b9902bcc7eb74f07be672b11bbe82dd6a6edded44a00cb3d8f933d0459905eedd
+ languageName: node
+ linkType: hard
+
"is-data-view@npm:^1.0.1":
version: 1.0.1
resolution: "is-data-view@npm:1.0.1"
@@ -19721,6 +21230,17 @@ __metadata:
languageName: node
linkType: hard
+"is-data-view@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "is-data-view@npm:1.0.2"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ get-intrinsic: "npm:^1.2.6"
+ is-typed-array: "npm:^1.1.13"
+ checksum: 10c0/ef3548a99d7e7f1370ce21006baca6d40c73e9f15c941f89f0049c79714c873d03b02dae1c64b3f861f55163ecc16da06506c5b8a1d4f16650b3d9351c380153
+ languageName: node
+ linkType: hard
+
"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5":
version: 1.0.5
resolution: "is-date-object@npm:1.0.5"
@@ -19730,6 +21250,16 @@ __metadata:
languageName: node
linkType: hard
+"is-date-object@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "is-date-object@npm:1.1.0"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ has-tostringtag: "npm:^1.0.2"
+ checksum: 10c0/1a4d199c8e9e9cac5128d32e6626fa7805175af9df015620ac0d5d45854ccf348ba494679d872d37301032e35a54fc7978fba1687e8721b2139aea7870cafa2f
+ languageName: node
+ linkType: hard
+
"is-directory@npm:^0.3.1":
version: 0.3.1
resolution: "is-directory@npm:0.3.1"
@@ -19778,6 +21308,15 @@ __metadata:
languageName: node
linkType: hard
+"is-finalizationregistry@npm:^1.1.0":
+ version: 1.1.1
+ resolution: "is-finalizationregistry@npm:1.1.1"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ checksum: 10c0/818dff679b64f19e228a8205a1e2d09989a98e98def3a817f889208cfcbf918d321b251aadf2c05918194803ebd2eb01b14fc9d0b2bea53d984f4137bfca5e97
+ languageName: node
+ linkType: hard
+
"is-fullwidth-code-point@npm:^2.0.0":
version: 2.0.0
resolution: "is-fullwidth-code-point@npm:2.0.0"
@@ -19896,6 +21435,16 @@ __metadata:
languageName: node
linkType: hard
+"is-number-object@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "is-number-object@npm:1.1.1"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ has-tostringtag: "npm:^1.0.2"
+ checksum: 10c0/97b451b41f25135ff021d85c436ff0100d84a039bb87ffd799cbcdbea81ef30c464ced38258cdd34f080be08fc3b076ca1f472086286d2aa43521d6ec6a79f53
+ languageName: node
+ linkType: hard
+
"is-number@npm:^4.0.0":
version: 4.0.0
resolution: "is-number@npm:4.0.0"
@@ -19964,6 +21513,18 @@ __metadata:
languageName: node
linkType: hard
+"is-regex@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "is-regex@npm:1.2.1"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ gopd: "npm:^1.2.0"
+ has-tostringtag: "npm:^1.0.2"
+ hasown: "npm:^2.0.2"
+ checksum: 10c0/1d3715d2b7889932349241680032e85d0b492cfcb045acb75ffc2c3085e8d561184f1f7e84b6f8321935b4aea39bc9c6ba74ed595b57ce4881a51dfdbc214e04
+ languageName: node
+ linkType: hard
+
"is-set@npm:^2.0.3":
version: 2.0.3
resolution: "is-set@npm:2.0.3"
@@ -19989,6 +21550,15 @@ __metadata:
languageName: node
linkType: hard
+"is-shared-array-buffer@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "is-shared-array-buffer@npm:1.0.4"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ checksum: 10c0/65158c2feb41ff1edd6bbd6fd8403a69861cf273ff36077982b5d4d68e1d59278c71691216a4a64632bd76d4792d4d1d2553901b6666d84ade13bba5ea7bc7db
+ languageName: node
+ linkType: hard
+
"is-stream@npm:^1.1.0":
version: 1.1.0
resolution: "is-stream@npm:1.1.0"
@@ -20019,6 +21589,16 @@ __metadata:
languageName: node
linkType: hard
+"is-string@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "is-string@npm:1.1.1"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ has-tostringtag: "npm:^1.0.2"
+ checksum: 10c0/2f518b4e47886bb81567faba6ffd0d8a8333cf84336e2e78bf160693972e32ad00fe84b0926491cc598dee576fdc55642c92e62d0cbe96bf36f643b6f956f94d
+ languageName: node
+ linkType: hard
+
"is-subdir@npm:^1.1.1":
version: 1.2.0
resolution: "is-subdir@npm:1.2.0"
@@ -20037,6 +21617,17 @@ __metadata:
languageName: node
linkType: hard
+"is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "is-symbol@npm:1.1.1"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ has-symbols: "npm:^1.1.0"
+ safe-regex-test: "npm:^1.1.0"
+ checksum: 10c0/f08f3e255c12442e833f75a9e2b84b2d4882fdfd920513cf2a4a2324f0a5b076c8fd913778e3ea5d258d5183e9d92c0cd20e04b03ab3df05316b049b2670af1e
+ languageName: node
+ linkType: hard
+
"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9":
version: 1.1.12
resolution: "is-typed-array@npm:1.1.12"
@@ -20055,6 +21646,15 @@ __metadata:
languageName: node
linkType: hard
+"is-typed-array@npm:^1.1.14, is-typed-array@npm:^1.1.15":
+ version: 1.1.15
+ resolution: "is-typed-array@npm:1.1.15"
+ dependencies:
+ which-typed-array: "npm:^1.1.16"
+ checksum: 10c0/415511da3669e36e002820584e264997ffe277ff136643a3126cc949197e6ca3334d0f12d084e83b1994af2e9c8141275c741cf2b7da5a2ff62dd0cac26f76c4
+ languageName: node
+ linkType: hard
+
"is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0":
version: 1.0.0
resolution: "is-typedarray@npm:1.0.0"
@@ -20078,6 +21678,15 @@ __metadata:
languageName: node
linkType: hard
+"is-weakref@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "is-weakref@npm:1.1.0"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ checksum: 10c0/aa835f62e29cb60132ecb3ec7d11bd0f39ec7322325abe8412b805aef47153ec2daefdb21759b049711c674f49b13202a31d8d126bcdff7d8671c78babd4ae5b
+ languageName: node
+ linkType: hard
+
"is-weakset@npm:^2.0.3":
version: 2.0.3
resolution: "is-weakset@npm:2.0.3"
@@ -20379,6 +21988,20 @@ __metadata:
languageName: node
linkType: hard
+"iterator.prototype@npm:^1.1.4":
+ version: 1.1.5
+ resolution: "iterator.prototype@npm:1.1.5"
+ dependencies:
+ define-data-property: "npm:^1.1.4"
+ es-object-atoms: "npm:^1.0.0"
+ get-intrinsic: "npm:^1.2.6"
+ get-proto: "npm:^1.0.0"
+ has-symbols: "npm:^1.1.0"
+ set-function-name: "npm:^2.0.2"
+ checksum: 10c0/f7a262808e1b41049ab55f1e9c29af7ec1025a000d243b83edf34ce2416eedd56079b117fa59376bb4a724110690f13aa8427f2ee29a09eec63a7e72367626d0
+ languageName: node
+ linkType: hard
+
"jackspeak@npm:^2.0.3":
version: 2.2.2
resolution: "jackspeak@npm:2.2.2"
@@ -20636,6 +22259,36 @@ __metadata:
languageName: node
linkType: hard
+"jest-expo@npm:~52.0.3":
+ version: 52.0.3
+ resolution: "jest-expo@npm:52.0.3"
+ dependencies:
+ "@expo/config": "npm:~10.0.8"
+ "@expo/json-file": "npm:^9.0.1"
+ "@jest/create-cache-key-function": "npm:^29.2.1"
+ "@jest/globals": "npm:^29.2.1"
+ babel-jest: "npm:^29.2.1"
+ fbemitter: "npm:^3.0.0"
+ find-up: "npm:^5.0.0"
+ jest-environment-jsdom: "npm:^29.2.1"
+ jest-snapshot: "npm:^29.2.1"
+ jest-watch-select-projects: "npm:^2.0.0"
+ jest-watch-typeahead: "npm:2.2.1"
+ json5: "npm:^2.2.3"
+ lodash: "npm:^4.17.19"
+ react-server-dom-webpack: "npm:19.0.0-rc-6230622a1a-20240610"
+ react-test-renderer: "npm:18.3.1"
+ server-only: "npm:^0.0.1"
+ stacktrace-js: "npm:^2.0.2"
+ peerDependencies:
+ expo: "*"
+ react-native: "*"
+ bin:
+ jest: bin/jest.js
+ checksum: 10c0/afabde55787067cd0c142d7d2a9a810e45eb2941aeb51140a4deee34ebaac3479425cb6493d06efa70180063921e23093221babffc12f858dae42f0540b40e9b
+ languageName: node
+ linkType: hard
+
"jest-get-type@npm:^29.6.3":
version: 29.6.3
resolution: "jest-get-type@npm:29.6.3"
@@ -20821,6 +22474,15 @@ __metadata:
languageName: node
linkType: hard
+"jest-snapshot-prettier@npm:prettier@^2, prettier@npm:^2.7.1":
+ version: 2.8.8
+ resolution: "prettier@npm:2.8.8"
+ bin:
+ prettier: bin-prettier.js
+ checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a
+ languageName: node
+ linkType: hard
+
"jest-snapshot@npm:^29.2.1, jest-snapshot@npm:^29.7.0":
version: 29.7.0
resolution: "jest-snapshot@npm:29.7.0"
@@ -20849,7 +22511,7 @@ __metadata:
languageName: node
linkType: hard
-"jest-util@npm:^29.7.0":
+"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0":
version: 29.7.0
resolution: "jest-util@npm:29.7.0"
dependencies:
@@ -21961,7 +23623,7 @@ __metadata:
languageName: node
linkType: hard
-"lodash.memoize@npm:^4.1.2":
+"lodash.memoize@npm:4.x, lodash.memoize@npm:^4.1.2":
version: 4.1.2
resolution: "lodash.memoize@npm:4.1.2"
checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8
@@ -22155,7 +23817,7 @@ __metadata:
languageName: node
linkType: hard
-"make-error@npm:^1.1.1":
+"make-error@npm:1.x, make-error@npm:^1.1.1":
version: 1.3.6
resolution: "make-error@npm:1.3.6"
checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f
@@ -22222,6 +23884,13 @@ __metadata:
languageName: node
linkType: hard
+"math-intrinsics@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "math-intrinsics@npm:1.1.0"
+ checksum: 10c0/7579ff94e899e2f76ab64491d76cf606274c874d8f2af4a442c016bd85688927fcfca157ba6bf74b08e9439dc010b248ce05b96cc7c126a354c3bae7fcb48b7f
+ languageName: node
+ linkType: hard
+
"mathjs@npm:^13.1.1":
version: 13.2.0
resolution: "mathjs@npm:13.2.0"
@@ -23893,6 +25562,13 @@ __metadata:
languageName: node
linkType: hard
+"object-inspect@npm:^1.13.3":
+ version: 1.13.3
+ resolution: "object-inspect@npm:1.13.3"
+ checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4
+ languageName: node
+ linkType: hard
+
"object-is@npm:^1.0.1":
version: 1.1.5
resolution: "object-is@npm:1.1.5"
@@ -23924,6 +25600,20 @@ __metadata:
languageName: node
linkType: hard
+"object.assign@npm:^4.1.0, object.assign@npm:^4.1.7":
+ version: 4.1.7
+ resolution: "object.assign@npm:4.1.7"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ define-properties: "npm:^1.2.1"
+ es-object-atoms: "npm:^1.0.0"
+ has-symbols: "npm:^1.1.0"
+ object-keys: "npm:^1.1.1"
+ checksum: 10c0/3b2732bd860567ea2579d1567525168de925a8d852638612846bd8082b3a1602b7b89b67b09913cbb5b9bd6e95923b2ae73580baa9d99cb4e990564e8cbf5ddc
+ languageName: node
+ linkType: hard
+
"object.assign@npm:^4.1.3, object.assign@npm:^4.1.4":
version: 4.1.4
resolution: "object.assign@npm:4.1.4"
@@ -23993,6 +25683,18 @@ __metadata:
languageName: node
linkType: hard
+"object.values@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "object.values@npm:1.2.1"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ define-properties: "npm:^1.2.1"
+ es-object-atoms: "npm:^1.0.0"
+ checksum: 10c0/3c47814fdc64842ae3d5a74bc9d06bdd8d21563c04d9939bf6716a9c00596a4ebc342552f8934013d1ec991c74e3671b26710a0c51815f0b603795605ab6b2c9
+ languageName: node
+ linkType: hard
+
"oboe@npm:2.1.5":
version: 2.1.5
resolution: "oboe@npm:2.1.5"
@@ -24182,6 +25884,17 @@ __metadata:
languageName: node
linkType: hard
+"own-keys@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "own-keys@npm:1.0.1"
+ dependencies:
+ get-intrinsic: "npm:^1.2.6"
+ object-keys: "npm:^1.1.1"
+ safe-push-apply: "npm:^1.0.0"
+ checksum: 10c0/6dfeb3455bff92ec3f16a982d4e3e65676345f6902d9f5ded1d8265a6318d0200ce461956d6d1c70053c7fe9f9fe65e552faac03f8140d37ef0fdd108e67013a
+ languageName: node
+ linkType: hard
+
"p-cancelable@npm:^2.0.0":
version: 2.1.1
resolution: "p-cancelable@npm:2.1.1"
@@ -24938,12 +26651,12 @@ __metadata:
languageName: node
linkType: hard
-"prettier@npm:^2.7.1":
- version: 2.8.8
- resolution: "prettier@npm:2.8.8"
- bin:
- prettier: bin-prettier.js
- checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a
+"prettier-linter-helpers@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "prettier-linter-helpers@npm:1.0.0"
+ dependencies:
+ fast-diff: "npm:^1.1.2"
+ checksum: 10c0/81e0027d731b7b3697ccd2129470ed9913ecb111e4ec175a12f0fcfab0096516373bf0af2fef132af50cafb0a905b74ff57996d615f59512bb9ac7378fcc64ab
languageName: node
linkType: hard
@@ -26507,6 +28220,22 @@ __metadata:
languageName: node
linkType: hard
+"reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9":
+ version: 1.0.10
+ resolution: "reflect.getprototypeof@npm:1.0.10"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ define-properties: "npm:^1.2.1"
+ es-abstract: "npm:^1.23.9"
+ es-errors: "npm:^1.3.0"
+ es-object-atoms: "npm:^1.0.0"
+ get-intrinsic: "npm:^1.2.7"
+ get-proto: "npm:^1.0.1"
+ which-builtin-type: "npm:^1.2.1"
+ checksum: 10c0/7facec28c8008876f8ab98e80b7b9cb4b1e9224353fd4756dda5f2a4ab0d30fa0a5074777c6df24e1e0af463a2697513b0a11e548d99cf52f21f7bc6ba48d3ac
+ languageName: node
+ linkType: hard
+
"regenerate-unicode-properties@npm:^10.1.0":
version: 10.1.0
resolution: "regenerate-unicode-properties@npm:10.1.0"
@@ -26578,6 +28307,27 @@ __metadata:
languageName: node
linkType: hard
+"regexp.prototype.flags@npm:^1.5.3":
+ version: 1.5.4
+ resolution: "regexp.prototype.flags@npm:1.5.4"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ define-properties: "npm:^1.2.1"
+ es-errors: "npm:^1.3.0"
+ get-proto: "npm:^1.0.1"
+ gopd: "npm:^1.2.0"
+ set-function-name: "npm:^2.0.2"
+ checksum: 10c0/83b88e6115b4af1c537f8dabf5c3744032cb875d63bc05c288b1b8c0ef37cbe55353f95d8ca817e8843806e3e150b118bc624e4279b24b4776b4198232735a77
+ languageName: node
+ linkType: hard
+
+"regexpp@npm:^3.0.0":
+ version: 3.2.0
+ resolution: "regexpp@npm:3.2.0"
+ checksum: 10c0/d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710
+ languageName: node
+ linkType: hard
+
"regexpu-core@npm:^5.3.1":
version: 5.3.2
resolution: "regexpu-core@npm:5.3.2"
@@ -26781,6 +28531,19 @@ __metadata:
languageName: node
linkType: hard
+"resolve@npm:^1.10.1":
+ version: 1.22.10
+ resolution: "resolve@npm:1.22.10"
+ dependencies:
+ is-core-module: "npm:^2.16.0"
+ path-parse: "npm:^1.0.7"
+ supports-preserve-symlinks-flag: "npm:^1.0.0"
+ bin:
+ resolve: bin/resolve
+ checksum: 10c0/8967e1f4e2cc40f79b7e080b4582b9a8c5ee36ffb46041dccb20e6461161adf69f843b43067b4a375de926a2cd669157e29a29578191def399dd5ef89a1b5203
+ languageName: node
+ linkType: hard
+
"resolve@npm:^1.13.1, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.2, resolve@npm:^1.22.4":
version: 1.22.8
resolution: "resolve@npm:1.22.8"
@@ -26816,6 +28579,19 @@ __metadata:
languageName: node
linkType: hard
+"resolve@patch:resolve@npm%3A^1.10.1#optional!builtin":
+ version: 1.22.10
+ resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d"
+ dependencies:
+ is-core-module: "npm:^2.16.0"
+ path-parse: "npm:^1.0.7"
+ supports-preserve-symlinks-flag: "npm:^1.0.0"
+ bin:
+ resolve: bin/resolve
+ checksum: 10c0/52a4e505bbfc7925ac8f4cd91fd8c4e096b6a89728b9f46861d3b405ac9a1ccf4dcbf8befb4e89a2e11370dacd0160918163885cbc669369590f2f31f4c58939
+ languageName: node
+ linkType: hard
+
"resolve@patch:resolve@npm%3A^1.13.1#optional!builtin, resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin":
version: 1.22.8
resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"
@@ -27109,6 +28885,19 @@ __metadata:
languageName: node
linkType: hard
+"safe-array-concat@npm:^1.1.3":
+ version: 1.1.3
+ resolution: "safe-array-concat@npm:1.1.3"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.2"
+ get-intrinsic: "npm:^1.2.6"
+ has-symbols: "npm:^1.1.0"
+ isarray: "npm:^2.0.5"
+ checksum: 10c0/43c86ffdddc461fb17ff8a17c5324f392f4868f3c7dd2c6a5d9f5971713bc5fd755667212c80eab9567595f9a7509cc2f83e590ddaebd1bd19b780f9c79f9a8d
+ languageName: node
+ linkType: hard
+
"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0":
version: 5.2.1
resolution: "safe-buffer@npm:5.2.1"
@@ -27130,6 +28919,16 @@ __metadata:
languageName: node
linkType: hard
+"safe-push-apply@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "safe-push-apply@npm:1.0.0"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ isarray: "npm:^2.0.5"
+ checksum: 10c0/831f1c9aae7436429e7862c7e46f847dfe490afac20d0ee61bae06108dbf5c745a0de3568ada30ccdd3eeb0864ca8331b2eef703abd69bfea0745b21fd320750
+ languageName: node
+ linkType: hard
+
"safe-regex-test@npm:^1.0.0":
version: 1.0.0
resolution: "safe-regex-test@npm:1.0.0"
@@ -27152,6 +28951,17 @@ __metadata:
languageName: node
linkType: hard
+"safe-regex-test@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "safe-regex-test@npm:1.1.0"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ es-errors: "npm:^1.3.0"
+ is-regex: "npm:^1.2.1"
+ checksum: 10c0/f2c25281bbe5d39cddbbce7f86fca5ea9b3ce3354ea6cd7c81c31b006a5a9fff4286acc5450a3b9122c56c33eba69c56b9131ad751457b2b4a585825e6a10665
+ languageName: node
+ linkType: hard
+
"safe-stable-stringify@npm:^2.1.0":
version: 2.4.3
resolution: "safe-stable-stringify@npm:2.4.3"
@@ -27290,7 +29100,16 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^5.5.0, semver@npm:^5.6.0":
+"semver@npm:7.x, semver@npm:^7.1.3, semver@npm:^7.6.3, semver@npm:~7.6.3":
+ version: 7.6.3
+ resolution: "semver@npm:7.6.3"
+ bin:
+ semver: bin/semver.js
+ checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf
+ languageName: node
+ linkType: hard
+
+"semver@npm:^5.3.0, semver@npm:^5.5.0, semver@npm:^5.6.0":
version: 5.7.2
resolution: "semver@npm:5.7.2"
bin:
@@ -27299,7 +29118,7 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^6.3.0, semver@npm:^6.3.1":
+"semver@npm:^6.1.0, semver@npm:^6.3.0, semver@npm:^6.3.1":
version: 6.3.1
resolution: "semver@npm:6.3.1"
bin:
@@ -27308,15 +29127,6 @@ __metadata:
languageName: node
linkType: hard
-"semver@npm:^7.1.3, semver@npm:^7.6.3, semver@npm:~7.6.3":
- version: 7.6.3
- resolution: "semver@npm:7.6.3"
- bin:
- semver: bin/semver.js
- checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf
- languageName: node
- linkType: hard
-
"semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0":
version: 7.6.2
resolution: "semver@npm:7.6.2"
@@ -27421,7 +29231,7 @@ __metadata:
languageName: node
linkType: hard
-"set-function-length@npm:^1.2.1":
+"set-function-length@npm:^1.2.1, set-function-length@npm:^1.2.2":
version: 1.2.2
resolution: "set-function-length@npm:1.2.2"
dependencies:
@@ -27447,6 +29257,17 @@ __metadata:
languageName: node
linkType: hard
+"set-proto@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "set-proto@npm:1.0.0"
+ dependencies:
+ dunder-proto: "npm:^1.0.1"
+ es-errors: "npm:^1.3.0"
+ es-object-atoms: "npm:^1.0.0"
+ checksum: 10c0/ca5c3ccbba479d07c30460e367e66337cec825560b11e8ba9c5ebe13a2a0d6021ae34eddf94ff3dfe17a3104dc1f191519cb6c48378b503e5c3f36393938776a
+ languageName: node
+ linkType: hard
+
"setimmediate@npm:^1.0.5":
version: 1.0.5
resolution: "setimmediate@npm:1.0.5"
@@ -27563,6 +29384,41 @@ __metadata:
languageName: node
linkType: hard
+"side-channel-list@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "side-channel-list@npm:1.0.0"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ object-inspect: "npm:^1.13.3"
+ checksum: 10c0/644f4ac893456c9490ff388bf78aea9d333d5e5bfc64cfb84be8f04bf31ddc111a8d4b83b85d7e7e8a7b845bc185a9ad02c052d20e086983cf59f0be517d9b3d
+ languageName: node
+ linkType: hard
+
+"side-channel-map@npm:^1.0.1":
+ version: 1.0.1
+ resolution: "side-channel-map@npm:1.0.1"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.5"
+ object-inspect: "npm:^1.13.3"
+ checksum: 10c0/010584e6444dd8a20b85bc926d934424bd809e1a3af941cace229f7fdcb751aada0fb7164f60c2e22292b7fa3c0ff0bce237081fd4cdbc80de1dc68e95430672
+ languageName: node
+ linkType: hard
+
+"side-channel-weakmap@npm:^1.0.2":
+ version: 1.0.2
+ resolution: "side-channel-weakmap@npm:1.0.2"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ es-errors: "npm:^1.3.0"
+ get-intrinsic: "npm:^1.2.5"
+ object-inspect: "npm:^1.13.3"
+ side-channel-map: "npm:^1.0.1"
+ checksum: 10c0/71362709ac233e08807ccd980101c3e2d7efe849edc51455030327b059f6c4d292c237f94dc0685031dd11c07dd17a68afde235d6cf2102d949567f98ab58185
+ languageName: node
+ linkType: hard
+
"side-channel@npm:^1.0.4":
version: 1.0.4
resolution: "side-channel@npm:1.0.4"
@@ -27586,6 +29442,19 @@ __metadata:
languageName: node
linkType: hard
+"side-channel@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "side-channel@npm:1.1.0"
+ dependencies:
+ es-errors: "npm:^1.3.0"
+ object-inspect: "npm:^1.13.3"
+ side-channel-list: "npm:^1.0.0"
+ side-channel-map: "npm:^1.0.1"
+ side-channel-weakmap: "npm:^1.0.2"
+ checksum: 10c0/cb20dad41eb032e6c24c0982e1e5a24963a28aa6122b4f05b3f3d6bf8ae7fd5474ef382c8f54a6a3ab86e0cac4d41a23bd64ede3970e5bfb50326ba02a7996e6
+ languageName: node
+ linkType: hard
+
"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7":
version: 3.0.7
resolution: "signal-exit@npm:3.0.7"
@@ -28227,6 +30096,27 @@ __metadata:
languageName: node
linkType: hard
+"string.prototype.matchall@npm:^4.0.12":
+ version: 4.0.12
+ resolution: "string.prototype.matchall@npm:4.0.12"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ define-properties: "npm:^1.2.1"
+ es-abstract: "npm:^1.23.6"
+ es-errors: "npm:^1.3.0"
+ es-object-atoms: "npm:^1.0.0"
+ get-intrinsic: "npm:^1.2.6"
+ gopd: "npm:^1.2.0"
+ has-symbols: "npm:^1.1.0"
+ internal-slot: "npm:^1.1.0"
+ regexp.prototype.flags: "npm:^1.5.3"
+ set-function-name: "npm:^2.0.2"
+ side-channel: "npm:^1.1.0"
+ checksum: 10c0/1a53328ada73f4a77f1fdf1c79414700cf718d0a8ef6672af5603e709d26a24f2181208144aed7e858b1bcc1a0d08567a570abfb45567db4ae47637ed2c2f85c
+ languageName: node
+ linkType: hard
+
"string.prototype.repeat@npm:^1.0.0":
version: 1.0.0
resolution: "string.prototype.repeat@npm:1.0.0"
@@ -28237,6 +30127,21 @@ __metadata:
languageName: node
linkType: hard
+"string.prototype.trim@npm:^1.2.10":
+ version: 1.2.10
+ resolution: "string.prototype.trim@npm:1.2.10"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.2"
+ define-data-property: "npm:^1.1.4"
+ define-properties: "npm:^1.2.1"
+ es-abstract: "npm:^1.23.5"
+ es-object-atoms: "npm:^1.0.0"
+ has-property-descriptors: "npm:^1.0.2"
+ checksum: 10c0/8a8854241c4b54a948e992eb7dd6b8b3a97185112deb0037a134f5ba57541d8248dd610c966311887b6c2fd1181a3877bffb14d873ce937a344535dabcc648f8
+ languageName: node
+ linkType: hard
+
"string.prototype.trim@npm:^1.2.7":
version: 1.2.7
resolution: "string.prototype.trim@npm:1.2.7"
@@ -28282,6 +30187,18 @@ __metadata:
languageName: node
linkType: hard
+"string.prototype.trimend@npm:^1.0.9":
+ version: 1.0.9
+ resolution: "string.prototype.trimend@npm:1.0.9"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.2"
+ define-properties: "npm:^1.2.1"
+ es-object-atoms: "npm:^1.0.0"
+ checksum: 10c0/59e1a70bf9414cb4c536a6e31bef5553c8ceb0cf44d8b4d0ed65c9653358d1c64dd0ec203b100df83d0413bbcde38b8c5d49e14bc4b86737d74adc593a0d35b6
+ languageName: node
+ linkType: hard
+
"string.prototype.trimstart@npm:^1.0.6":
version: 1.0.6
resolution: "string.prototype.trimstart@npm:1.0.6"
@@ -28658,6 +30575,16 @@ __metadata:
languageName: node
linkType: hard
+"synckit@npm:^0.9.1":
+ version: 0.9.2
+ resolution: "synckit@npm:0.9.2"
+ dependencies:
+ "@pkgr/core": "npm:^0.1.0"
+ tslib: "npm:^2.6.2"
+ checksum: 10c0/e0c262817444e5b872708adb6f5ad37951ba33f6b2d1d4477d45db1f57573a784618ceed5e6614e0225db330632b1f6b95bb74d21e4d013e45ad4bde03d0cb59
+ languageName: node
+ linkType: hard
+
"system-architecture@npm:^0.1.0":
version: 0.1.0
resolution: "system-architecture@npm:0.1.0"
@@ -29137,6 +31064,15 @@ __metadata:
languageName: node
linkType: hard
+"ts-api-utils@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "ts-api-utils@npm:2.0.0"
+ peerDependencies:
+ typescript: ">=4.8.4"
+ checksum: 10c0/6165e29a5b75bd0218e3cb0f9ee31aa893dbd819c2e46dbb086c841121eb0436ed47c2c18a20cb3463d74fd1fb5af62e2604ba5971cc48e5b38ebbdc56746dfc
+ languageName: node
+ linkType: hard
+
"ts-interface-checker@npm:^0.1.9":
version: 0.1.13
resolution: "ts-interface-checker@npm:0.1.13"
@@ -29144,6 +31080,39 @@ __metadata:
languageName: node
linkType: hard
+"ts-jest@npm:~29.0.4":
+ version: 29.0.5
+ resolution: "ts-jest@npm:29.0.5"
+ dependencies:
+ bs-logger: "npm:0.x"
+ fast-json-stable-stringify: "npm:2.x"
+ jest-util: "npm:^29.0.0"
+ json5: "npm:^2.2.3"
+ lodash.memoize: "npm:4.x"
+ make-error: "npm:1.x"
+ semver: "npm:7.x"
+ yargs-parser: "npm:^21.0.1"
+ peerDependencies:
+ "@babel/core": ">=7.0.0-beta.0 <8"
+ "@jest/types": ^29.0.0
+ babel-jest: ^29.0.0
+ jest: ^29.0.0
+ typescript: ">=4.3"
+ peerDependenciesMeta:
+ "@babel/core":
+ optional: true
+ "@jest/types":
+ optional: true
+ babel-jest:
+ optional: true
+ esbuild:
+ optional: true
+ bin:
+ ts-jest: cli.js
+ checksum: 10c0/8f8b3654964b1afe6b7d4384b371ddec445c2584ba939df64ddf8d900ae791ed41bb340f3cc0b05366e716dd4c38d8a90fa0e28ba02575d0f2b7fcb221964350
+ languageName: node
+ linkType: hard
+
"ts-node@npm:^10.9.2":
version: 10.9.2
resolution: "ts-node@npm:10.9.2"
@@ -29349,6 +31318,17 @@ __metadata:
languageName: node
linkType: hard
+"typed-array-buffer@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "typed-array-buffer@npm:1.0.3"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ es-errors: "npm:^1.3.0"
+ is-typed-array: "npm:^1.1.14"
+ checksum: 10c0/1105071756eb248774bc71646bfe45b682efcad93b55532c6ffa4518969fb6241354e4aa62af679ae83899ec296d69ef88f1f3763657cdb3a4d29321f7b83079
+ languageName: node
+ linkType: hard
+
"typed-array-byte-length@npm:^1.0.0":
version: 1.0.0
resolution: "typed-array-byte-length@npm:1.0.0"
@@ -29374,6 +31354,19 @@ __metadata:
languageName: node
linkType: hard
+"typed-array-byte-length@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "typed-array-byte-length@npm:1.0.3"
+ dependencies:
+ call-bind: "npm:^1.0.8"
+ for-each: "npm:^0.3.3"
+ gopd: "npm:^1.2.0"
+ has-proto: "npm:^1.2.0"
+ is-typed-array: "npm:^1.1.14"
+ checksum: 10c0/6ae083c6f0354f1fce18b90b243343b9982affd8d839c57bbd2c174a5d5dc71be9eb7019ffd12628a96a4815e7afa85d718d6f1e758615151d5f35df841ffb3e
+ languageName: node
+ linkType: hard
+
"typed-array-byte-offset@npm:^1.0.0":
version: 1.0.0
resolution: "typed-array-byte-offset@npm:1.0.0"
@@ -29401,6 +31394,21 @@ __metadata:
languageName: node
linkType: hard
+"typed-array-byte-offset@npm:^1.0.4":
+ version: 1.0.4
+ resolution: "typed-array-byte-offset@npm:1.0.4"
+ dependencies:
+ available-typed-arrays: "npm:^1.0.7"
+ call-bind: "npm:^1.0.8"
+ for-each: "npm:^0.3.3"
+ gopd: "npm:^1.2.0"
+ has-proto: "npm:^1.2.0"
+ is-typed-array: "npm:^1.1.15"
+ reflect.getprototypeof: "npm:^1.0.9"
+ checksum: 10c0/3d805b050c0c33b51719ee52de17c1cd8e6a571abdf0fffb110e45e8dd87a657e8b56eee94b776b13006d3d347a0c18a730b903cf05293ab6d92e99ff8f77e53
+ languageName: node
+ linkType: hard
+
"typed-array-length@npm:^1.0.4":
version: 1.0.4
resolution: "typed-array-length@npm:1.0.4"
@@ -29426,6 +31434,20 @@ __metadata:
languageName: node
linkType: hard
+"typed-array-length@npm:^1.0.7":
+ version: 1.0.7
+ resolution: "typed-array-length@npm:1.0.7"
+ dependencies:
+ call-bind: "npm:^1.0.7"
+ for-each: "npm:^0.3.3"
+ gopd: "npm:^1.0.1"
+ is-typed-array: "npm:^1.1.13"
+ possible-typed-array-names: "npm:^1.0.0"
+ reflect.getprototypeof: "npm:^1.0.6"
+ checksum: 10c0/e38f2ae3779584c138a2d8adfa8ecf749f494af3cd3cdafe4e688ce51418c7d2c5c88df1bd6be2bbea099c3f7cea58c02ca02ed438119e91f162a9de23f61295
+ languageName: node
+ linkType: hard
+
"typed-function@npm:^4.2.1":
version: 4.2.1
resolution: "typed-function@npm:4.2.1"
@@ -29466,6 +31488,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@npm:^5.1.3":
+ version: 5.7.3
+ resolution: "typescript@npm:5.7.3"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa
+ languageName: node
+ linkType: hard
+
"typescript@patch:typescript@npm%3A^5.0.2#optional!builtin, typescript@patch:typescript@npm%3A^5.3.0#optional!builtin":
version: 5.3.3
resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7"
@@ -29476,6 +31508,16 @@ __metadata:
languageName: node
linkType: hard
+"typescript@patch:typescript@npm%3A^5.1.3#optional!builtin":
+ version: 5.7.3
+ resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5"
+ bin:
+ tsc: bin/tsc
+ tsserver: bin/tsserver
+ checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4
+ languageName: node
+ linkType: hard
+
"ua-parser-js@npm:^0.7.30, ua-parser-js@npm:^0.7.33":
version: 0.7.33
resolution: "ua-parser-js@npm:0.7.33"
@@ -29552,6 +31594,18 @@ __metadata:
languageName: node
linkType: hard
+"unbox-primitive@npm:^1.1.0":
+ version: 1.1.0
+ resolution: "unbox-primitive@npm:1.1.0"
+ dependencies:
+ call-bound: "npm:^1.0.3"
+ has-bigints: "npm:^1.0.2"
+ has-symbols: "npm:^1.1.0"
+ which-boxed-primitive: "npm:^1.1.1"
+ checksum: 10c0/7dbd35ab02b0e05fe07136c72cb9355091242455473ec15057c11430129bab38b7b3624019b8778d02a881c13de44d63cd02d122ee782fb519e1de7775b5b982
+ languageName: node
+ linkType: hard
+
"uncrypto@npm:^0.1.3":
version: 0.1.3
resolution: "uncrypto@npm:0.1.3"
@@ -30988,6 +33042,19 @@ __metadata:
languageName: node
linkType: hard
+"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1":
+ version: 1.1.1
+ resolution: "which-boxed-primitive@npm:1.1.1"
+ dependencies:
+ is-bigint: "npm:^1.1.0"
+ is-boolean-object: "npm:^1.2.1"
+ is-number-object: "npm:^1.1.1"
+ is-string: "npm:^1.1.1"
+ is-symbol: "npm:^1.1.1"
+ checksum: 10c0/aceea8ede3b08dede7dce168f3883323f7c62272b49801716e8332ff750e7ae59a511ae088840bc6874f16c1b7fd296c05c949b0e5b357bfe3c431b98c417abe
+ languageName: node
+ linkType: hard
+
"which-builtin-type@npm:^1.1.3":
version: 1.1.4
resolution: "which-builtin-type@npm:1.1.4"
@@ -31008,6 +33075,27 @@ __metadata:
languageName: node
linkType: hard
+"which-builtin-type@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "which-builtin-type@npm:1.2.1"
+ dependencies:
+ call-bound: "npm:^1.0.2"
+ function.prototype.name: "npm:^1.1.6"
+ has-tostringtag: "npm:^1.0.2"
+ is-async-function: "npm:^2.0.0"
+ is-date-object: "npm:^1.1.0"
+ is-finalizationregistry: "npm:^1.1.0"
+ is-generator-function: "npm:^1.0.10"
+ is-regex: "npm:^1.2.1"
+ is-weakref: "npm:^1.0.2"
+ isarray: "npm:^2.0.5"
+ which-boxed-primitive: "npm:^1.1.0"
+ which-collection: "npm:^1.0.2"
+ which-typed-array: "npm:^1.1.16"
+ checksum: 10c0/8dcf323c45e5c27887800df42fbe0431d0b66b1163849bb7d46b5a730ad6a96ee8bfe827d078303f825537844ebf20c02459de41239a0a9805e2fcb3cae0d471
+ languageName: node
+ linkType: hard
+
"which-collection@npm:^1.0.2":
version: 1.0.2
resolution: "which-collection@npm:1.0.2"
@@ -31053,6 +33141,20 @@ __metadata:
languageName: node
linkType: hard
+"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18":
+ version: 1.1.18
+ resolution: "which-typed-array@npm:1.1.18"
+ dependencies:
+ available-typed-arrays: "npm:^1.0.7"
+ call-bind: "npm:^1.0.8"
+ call-bound: "npm:^1.0.3"
+ for-each: "npm:^0.3.3"
+ gopd: "npm:^1.2.0"
+ has-tostringtag: "npm:^1.0.2"
+ checksum: 10c0/0412f4a91880ca1a2a63056187c2e3de6b129b2b5b6c17bc3729f0f7041047ae48fb7424813e51506addb2c97320003ee18b8c57469d2cde37983ef62126143c
+ languageName: node
+ linkType: hard
+
"which@npm:^1.2.9":
version: 1.3.1
resolution: "which@npm:1.3.1"
@@ -31495,7 +33597,7 @@ __metadata:
languageName: node
linkType: hard
-"yargs-parser@npm:^21.1.1":
+"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1":
version: 21.1.1
resolution: "yargs-parser@npm:21.1.1"
checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2