@vechain/vechain-kit 1.5.12 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { IVechainEnergyOracleV1__factory, IB3TR__factory, IVOT3__factory, GalaxyMember__factory, NodeManagement__factory, X2EarnApps__factory, XAllocationVoting__factory, XAllocationVotingGovernor__factory, XAllocationPool__factory, VoterRewards__factory, VeBetterPassport__factory, IERC20__factory, MockENS__factory, SubdomainClaimer__factory, IReverseRegistrar__factory, ERC20__factory, SimpleAccountFactory__factory, SimpleAccount__factory, Emissions__factory, X2EarnRewardsPool__factory } from './chunk-FOSPSOWT.js';
2
- import { getConfig, humanNumber, NodeStrengthLevelToImage, allNodeStrengthLevelToName, notFoundImage, convertUriToUrl, resolveMediaTypeFromMimeType, gmNfts, DEFAULT_PRIVY_ECOSYSTEM_APPS, humanAddress, getPicassoImage, VECHAIN_PRIVY_APP_ID, compareAddresses, isValidAddress, TOKEN_LOGO_COMPONENTS, TOKEN_LOGOS, humanDomain, uploadBlobToIPFS, randomTransactionUser } from './chunk-RSEKQ6PP.js';
3
- export { getConfig } from './chunk-RSEKQ6PP.js';
4
- import { SimpleAccountFactoryABI, VechainLogo, VechainLogoLight, VechainLogoDark, VechainEnergy, PrivyLogo, SimpleAccountABI } from './chunk-3CI2FPCB.js';
2
+ import { VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN, ENV, getConfig, humanNumber, NodeStrengthLevelToImage, allNodeStrengthLevelToName, notFoundImage, convertUriToUrl, resolveMediaTypeFromMimeType, gmNfts, DEFAULT_PRIVY_ECOSYSTEM_APPS, humanAddress, getPicassoImage, VECHAIN_PRIVY_APP_ID, compareAddresses, isValidAddress, TOKEN_LOGO_COMPONENTS, TOKEN_LOGOS, humanDomain, VECHAIN_KIT_STORAGE_KEYS, uploadBlobToIPFS, randomTransactionUser } from './chunk-WJ5LYJZQ.js';
3
+ export { getConfig } from './chunk-WJ5LYJZQ.js';
4
+ import { SimpleAccountFactoryABI, VechainLogo, VechainLogoLight, VechainLogoDark, VeWorldLogoLight, VeWorldLogoDark, VechainEnergy, PrivyLogo, SimpleAccountABI } from './chunk-Z4FE6MMP.js';
5
5
  import './chunk-PZ5AY32C.js';
6
6
  import React10, { createContext, useState, useEffect, useMemo, useCallback, useRef, useContext } from 'react';
7
7
  import { useLoginWithOAuth, usePrivy, useLoginWithEmail, useMfaEnrollment, useSetWalletRecovery, useLoginWithPasskey as useLoginWithPasskey$1, PrivyProvider } from '@privy-io/react-auth';
8
8
  export { useMfaEnrollment, usePrivy, useSetWalletRecovery } from '@privy-io/react-auth';
9
- import { useConnex, useWallet as useWallet$1, useWalletModal, useVechainDomain as useVechainDomain$1, DAppKitProvider } from '@vechain/dapp-kit-react';
9
+ import { useConnex, useWallet as useWallet$1, useWalletModal, DAppKitProvider } from '@vechain/dapp-kit-react';
10
10
  export { WalletButton as DAppKitWalletButton, useConnex, useWallet as useDAppKitWallet, useWalletModal as useDAppKitWalletModal } from '@vechain/dapp-kit-react';
11
11
  import { defineChain, formatEther, parseEther, zeroAddress, keccak256, toBytes, concat, encodeFunctionData } from 'viem';
12
12
  import { ABIContract, Address, Clause } from '@vechain/sdk-core';
@@ -17,14 +17,15 @@ import { initReactI18next, useTranslation } from 'react-i18next';
17
17
  import { abi, Transaction } from 'thor-devkit';
18
18
  import imageCompression from 'browser-image-compression';
19
19
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
20
- import { Interface, formatEther as formatEther$1, isAddress, namehash, toUtf8String, zeroPadValue, toBeHex, ZeroAddress, parseEther as parseEther$1, ethers } from 'ethers';
20
+ import { Interface, formatEther as formatEther$1, isAddress, ethers, namehash, toUtf8String, zeroPadValue, toBeHex, parseEther as parseEther$1 } from 'ethers';
21
+ import VeChainKitMixpanel from 'mixpanel-browser';
21
22
  import { z } from 'zod';
22
23
  import { useAccount, createConfig, http, WagmiProvider, useConnect, useSignTypedData, useSignMessage, useDisconnect } from 'wagmi';
23
24
  import { toPrivyWalletConnector } from '@privy-io/cross-app-connect/rainbow-kit';
24
25
  import { isMobile } from 'react-device-detect';
25
- import { createMultiStyleConfigHelpers, defineStyle, defineStyleConfig, extendTheme, createStandaloneToast, IconButton, VStack, Text, InputGroup, InputLeftElement, Icon, Input, InputRightElement, HStack, Link, Box, useMediaQuery, Modal, ModalOverlay, ModalContent, Button, Image, Skeleton, Spinner, useDisclosure, GridItem, ModalHeader, ModalCloseButton, ModalBody, ModalFooter, Tag, Heading, useColorModeValue, Tabs, TabList, Tab, TabPanels, TabPanel, Grid, Card, CardBody, Alert, AlertIcon, CardHeader, Center, CardFooter, Divider, Container, FormControl, Select, FormLabel, Textarea, Circle, AlertTitle, AlertDescription, Popover, PopoverTrigger, PopoverContent, PopoverBody, PinInput, PinInputField, Stack, Accordion, AccordionItem, AccordionButton, AccordionPanel, List, ChakraProvider, ColorModeScript, ListItem, Flex } from '@chakra-ui/react';
26
+ import { createMultiStyleConfigHelpers, defineStyle, defineStyleConfig, extendTheme, createStandaloneToast, IconButton, VStack, Text, InputGroup, InputLeftElement, Icon, Input, InputRightElement, HStack, Link, Box, useMediaQuery, Modal, ModalOverlay, ModalContent, Button, Image, Skeleton, useDisclosure, GridItem, ModalHeader, ModalCloseButton, ModalBody, ModalFooter, Tag, Heading, useColorModeValue, Tabs, TabList, Tab, TabPanels, TabPanel, Grid, Card, CardBody, Alert, AlertIcon, CardHeader, Center, CardFooter, Divider, Container, FormControl, Select, FormLabel, Textarea, Circle, AlertTitle, AlertDescription, Popover, PopoverTrigger, PopoverContent, PopoverBody, PopoverFooter, Spinner, PinInput, PinInputField, Stack, Accordion, AccordionItem, AccordionButton, AccordionPanel, List, ChakraProvider, ColorModeScript, ListItem, Flex } from '@chakra-ui/react';
26
27
  import { motion } from 'framer-motion';
27
- import { IoChevronBack, IoCheckmarkOutline, IoCopyOutline, IoWalletOutline, IoCloseCircle, IoCogSharp, IoShieldOutline, IoOpenOutline, IoTrashBin, IoChevronUp, IoChevronDown, IoCloseOutline } from 'react-icons/io5';
28
+ import { IoChevronBack, IoCheckmarkOutline, IoCopyOutline, IoWalletOutline, IoCloseCircle, IoCogSharp, IoShieldOutline, IoOpenOutline, IoTrashBin, IoChevronUp, IoChevronDown, IoCloseOutline, IoTrashOutline } from 'react-icons/io5';
28
29
  import { FaRegAddressCard, FaExternalLinkAlt, FaGlobe, FaEnvelope, FaArrowRight, FaTelegramPlane, FaChevronDown, FaEdit, FaGoogle, FaTwitter, FaPhone, FaSpotify, FaApple, FaInstagram, FaTiktok, FaGithub, FaLinkedin, FaTelegram, FaDiscord as FaDiscord$1, FaWallet, FaPlus } from 'react-icons/fa';
29
30
  import { HiOutlineWallet, HiOutlineShieldCheck } from 'react-icons/hi2';
30
31
  import { BsQuestionCircle, BsBookmarkFill, BsBookmark } from 'react-icons/bs';
@@ -32,7 +33,6 @@ import { LuMail, LuArrowDownToLine } from 'react-icons/lu';
32
33
  import { MdOutlineNavigateNext, MdOutlineSettingsBackupRestore, MdPhotoCamera, MdOutlineRefresh, MdOutlineErrorOutline, MdEmail, MdSwapHoriz } from 'react-icons/md';
33
34
  import { FcGoogle, FcCheckmark } from 'react-icons/fc';
34
35
  import { IoIosFingerPrint, IoIosArrowForward, IoMdApps, IoMdSettings, IoIosCheckmarkCircleOutline } from 'react-icons/io';
35
- import { AiOutlineUser } from 'react-icons/ai';
36
36
  import { CiCircleMore, CiSearch } from 'react-icons/ci';
37
37
  import { VscRefresh, VscDebugDisconnect } from 'react-icons/vsc';
38
38
  import { RiLogoutBoxLine, RiEdit2Line, RiTwitterXFill, RiSwap3Line } from 'react-icons/ri';
@@ -40,6 +40,7 @@ import { FiSlash, FiArrowDown, FiSend } from 'react-icons/fi';
40
40
  import { GrUserAdmin } from 'react-icons/gr';
41
41
  import { GiHouseKeys } from 'react-icons/gi';
42
42
  import { BiBell, BiArchive } from 'react-icons/bi';
43
+ import { CgProfile } from 'react-icons/cg';
43
44
  import { PiLineVertical } from 'react-icons/pi';
44
45
  import { useForm } from 'react-hook-form';
45
46
  import { QRCode } from 'react-qrcode-logo';
@@ -2808,25 +2809,27 @@ var fetchVechainDomain = async (thor, networkType, addressOrDomain) => {
2808
2809
  return {
2809
2810
  address: void 0,
2810
2811
  domain: void 0,
2811
- isValidAddressOrDomain: false
2812
+ isValidAddressOrDomain: false,
2813
+ isPrimaryDomain: false
2812
2814
  };
2813
2815
  }
2814
- const isValidAddress2 = isAddress(addressOrDomain);
2815
- if (isValidAddress2) {
2816
+ if (isAddress(addressOrDomain)) {
2816
2817
  try {
2817
2818
  const res = await thor.account(getConfig(networkType).vnsResolverAddress).method(getNamesABI).call([addressOrDomain]);
2818
2819
  const domainName = res.decoded.names?.[0];
2819
2820
  return {
2820
2821
  address: addressOrDomain,
2821
2822
  domain: domainName || void 0,
2822
- isValidAddressOrDomain: true
2823
+ isValidAddressOrDomain: true,
2824
+ isPrimaryDomain: true
2823
2825
  };
2824
2826
  } catch (err) {
2825
2827
  console.error("Error getting domain: ", err);
2826
2828
  return {
2827
2829
  address: addressOrDomain,
2828
2830
  domain: void 0,
2829
- isValidAddressOrDomain: true
2831
+ isValidAddressOrDomain: true,
2832
+ isPrimaryDomain: false
2830
2833
  };
2831
2834
  }
2832
2835
  }
@@ -2837,20 +2840,25 @@ var fetchVechainDomain = async (thor, networkType, addressOrDomain) => {
2837
2840
  return {
2838
2841
  address: void 0,
2839
2842
  domain: void 0,
2840
- isValidAddressOrDomain: false
2843
+ isValidAddressOrDomain: false,
2844
+ isPrimaryDomain: false
2841
2845
  };
2842
2846
  }
2847
+ const primaryDomainRes = await thor.account(getConfig(networkType).vnsResolverAddress).method(getNamesABI).call([domainAddress]);
2848
+ const primaryDomain = primaryDomainRes.decoded.names?.[0];
2843
2849
  return {
2844
2850
  address: domainAddress,
2845
2851
  domain: addressOrDomain,
2846
- isValidAddressOrDomain: true
2852
+ isValidAddressOrDomain: true,
2853
+ isPrimaryDomain: primaryDomain === addressOrDomain
2847
2854
  };
2848
2855
  } catch (err) {
2849
2856
  console.error("Error getting address: ", err);
2850
2857
  return {
2851
2858
  address: void 0,
2852
2859
  domain: void 0,
2853
- isValidAddressOrDomain: false
2860
+ isValidAddressOrDomain: false,
2861
+ isPrimaryDomain: false
2854
2862
  };
2855
2863
  }
2856
2864
  };
@@ -2864,11 +2872,7 @@ var useVechainDomain = (addressOrDomain) => {
2864
2872
  return useQuery({
2865
2873
  queryKey: getVechainDomainQueryKey(addressOrDomain),
2866
2874
  queryFn: () => fetchVechainDomain(thor, network.type, addressOrDomain),
2867
- enabled: !!thor && !!addressOrDomain,
2868
- staleTime: 24 * 60 * 60 * 1e3,
2869
- // 24 hours
2870
- gcTime: 24 * 60 * 60 * 1e3
2871
- // 24 hours
2875
+ enabled: !!thor && !!addressOrDomain
2872
2876
  });
2873
2877
  };
2874
2878
  var MockENSInterface = MockENS__factory.createInterface();
@@ -2894,6 +2898,522 @@ var useEnsRecordExists = (name) => {
2894
2898
  enabled: !!name
2895
2899
  });
2896
2900
  };
2901
+ var APP_SOURCE = document.title || "";
2902
+ var PAGE_SOURCE = window?.location?.origin || "";
2903
+ if (typeof window !== "undefined" && VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN) {
2904
+ VeChainKitMixpanel.init(VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN, {
2905
+ debug: !ENV.isProduction
2906
+ });
2907
+ if (ENV.isDevelopment) {
2908
+ console.info("Analytics initialized in DEVELOPMENT mode");
2909
+ }
2910
+ }
2911
+ var isFirstLogin = (userId) => {
2912
+ try {
2913
+ const userDataKey = `user_data_${userId}`;
2914
+ const userData = localStorage.getItem(userDataKey);
2915
+ if (userData) {
2916
+ const parsedData = JSON.parse(userData);
2917
+ return !parsedData.first_login_date;
2918
+ }
2919
+ return true;
2920
+ } catch (e) {
2921
+ console.warn("Error checking first login status", e);
2922
+ return true;
2923
+ }
2924
+ };
2925
+ var storeUserData = (userId, properties) => {
2926
+ try {
2927
+ const userDataKey = `user_data_${userId}`;
2928
+ const existingData = localStorage.getItem(userDataKey);
2929
+ let userData = properties;
2930
+ if (existingData) {
2931
+ userData = { ...JSON.parse(existingData), ...properties };
2932
+ }
2933
+ localStorage.setItem(userDataKey, JSON.stringify(userData));
2934
+ } catch (e) {
2935
+ console.warn("Error storing user data", e);
2936
+ }
2937
+ };
2938
+ var trackEvent = (event, properties = {}) => {
2939
+ try {
2940
+ if (!VECHAIN_KIT_MIXPANEL_PROJECT_TOKEN) {
2941
+ console.warn("No project token found");
2942
+ return;
2943
+ }
2944
+ if (typeof navigator !== "undefined" && !navigator.onLine) {
2945
+ return;
2946
+ }
2947
+ VeChainKitMixpanel.track(event, {
2948
+ ...properties,
2949
+ source: APP_SOURCE,
2950
+ page: PAGE_SOURCE
2951
+ });
2952
+ } catch (error) {
2953
+ console.error(`Analytics error when tracking "${event}":`, error);
2954
+ }
2955
+ };
2956
+ var setUserProperties = (properties, userId) => {
2957
+ try {
2958
+ VeChainKitMixpanel.people.set({
2959
+ ...properties,
2960
+ source: APP_SOURCE,
2961
+ page: PAGE_SOURCE
2962
+ });
2963
+ if (userId) {
2964
+ storeUserData(userId, properties);
2965
+ }
2966
+ } catch (error) {
2967
+ console.error("Error setting user properties:", error);
2968
+ }
2969
+ };
2970
+ var identifyUser = (userId) => {
2971
+ try {
2972
+ if (!userId) {
2973
+ return;
2974
+ }
2975
+ VeChainKitMixpanel.identify(userId);
2976
+ } catch (error) {
2977
+ console.error("Error identifying user:", error);
2978
+ }
2979
+ };
2980
+ var incrementUserProperty = (property, value = 1) => {
2981
+ try {
2982
+ VeChainKitMixpanel.people.increment(property, value);
2983
+ } catch (error) {
2984
+ console.error(`Error incrementing property ${property}:`, error);
2985
+ }
2986
+ };
2987
+ var Analytics = {
2988
+ auth: {
2989
+ trackAuth: (action, properties) => {
2990
+ trackEvent("Auth Flow", {
2991
+ action,
2992
+ ...properties,
2993
+ isError: !!properties?.error
2994
+ });
2995
+ },
2996
+ flowStarted: (loginMethod) => {
2997
+ Analytics.auth.trackAuth("start", {
2998
+ loginMethod
2999
+ });
3000
+ },
3001
+ tryAgain: (method35, platform) => {
3002
+ Analytics.auth.trackAuth("try_again", {
3003
+ loginMethod: method35,
3004
+ platform
3005
+ });
3006
+ },
3007
+ methodSelected: (method35) => {
3008
+ Analytics.auth.trackAuth("method_selected", {
3009
+ loginMethod: method35
3010
+ });
3011
+ },
3012
+ completed: ({
3013
+ userId,
3014
+ loginMethod,
3015
+ platform
3016
+ }) => {
3017
+ if (userId) {
3018
+ identifyUser(userId);
3019
+ setUserProperties(
3020
+ {
3021
+ last_login_date: (/* @__PURE__ */ new Date()).toISOString(),
3022
+ preferred_login_method: loginMethod
3023
+ },
3024
+ userId
3025
+ );
3026
+ if (isFirstLogin(userId)) {
3027
+ Analytics.user.profile.markFirstLogin(userId);
3028
+ }
3029
+ }
3030
+ incrementUserProperty("total_logins");
3031
+ Analytics.auth.trackAuth("connect_success", {
3032
+ loginMethod,
3033
+ platform
3034
+ });
3035
+ },
3036
+ failed: (loginMethod, reason) => {
3037
+ Analytics.auth.trackAuth("connect_failed", {
3038
+ loginMethod,
3039
+ error: reason
3040
+ });
3041
+ },
3042
+ dropOff: (stage, properties) => {
3043
+ Analytics.auth.trackAuth("drop_off", {
3044
+ dropOffStage: stage,
3045
+ ...properties
3046
+ });
3047
+ },
3048
+ connectionListViewed: (totalConnections) => {
3049
+ Analytics.auth.trackAuth("start", { totalConnections });
3050
+ },
3051
+ walletConnectInitiated: (walletType) => {
3052
+ Analytics.auth.trackAuth("connect_initiated", {
3053
+ loginMethod: walletType
3054
+ });
3055
+ },
3056
+ walletDisconnectInitiated: () => {
3057
+ Analytics.auth.trackAuth("disconnect_initiated");
3058
+ },
3059
+ logoutCompleted: () => {
3060
+ Analytics.auth.trackAuth("logout");
3061
+ }
3062
+ },
3063
+ user: {
3064
+ profile: {
3065
+ trackAccount: (action, properties) => {
3066
+ trackEvent("Account Flow", {
3067
+ action,
3068
+ ...properties,
3069
+ isError: !!properties?.error
3070
+ });
3071
+ },
3072
+ markFirstLogin: (userId) => {
3073
+ const firstLoginDate = (/* @__PURE__ */ new Date()).toISOString();
3074
+ setUserProperties({ first_login_date: firstLoginDate }, userId);
3075
+ trackEvent("First Login", { date: firstLoginDate });
3076
+ },
3077
+ markActive: (userId) => {
3078
+ const activeDate = (/* @__PURE__ */ new Date()).toISOString();
3079
+ setUserProperties({ last_active: activeDate }, userId);
3080
+ },
3081
+ viewed: () => Analytics.user.profile.trackAccount("view"),
3082
+ addressCopied: (fromScreen) => Analytics.user.profile.trackAccount("address_copied", {
3083
+ fromScreen
3084
+ }),
3085
+ customiseOpened: () => Analytics.user.profile.trackAccount("customise_opened")
3086
+ }
3087
+ },
3088
+ customization: {
3089
+ trackCustomization: (action, properties) => {
3090
+ trackEvent("Customization Flow", {
3091
+ action,
3092
+ ...properties,
3093
+ isError: !!properties?.error
3094
+ });
3095
+ },
3096
+ started: () => {
3097
+ Analytics.customization.trackCustomization("started");
3098
+ },
3099
+ completed: (changes) => {
3100
+ Analytics.customization.trackCustomization("completed", changes);
3101
+ },
3102
+ dropOff: ({
3103
+ stage,
3104
+ reason,
3105
+ error
3106
+ }) => {
3107
+ Analytics.customization.trackCustomization("drop_off", {
3108
+ stage,
3109
+ reason,
3110
+ error
3111
+ });
3112
+ },
3113
+ imageUploaded: (success, error) => {
3114
+ Analytics.customization.trackCustomization("image_upload", {
3115
+ success,
3116
+ error
3117
+ });
3118
+ },
3119
+ failed: (stage, error) => {
3120
+ Analytics.customization.trackCustomization("customization_failed", {
3121
+ stage,
3122
+ error
3123
+ });
3124
+ }
3125
+ },
3126
+ swap: {
3127
+ trackSwap: (action, properties) => {
3128
+ trackEvent("Swap Flow", {
3129
+ action,
3130
+ ...properties,
3131
+ isError: !!properties?.error
3132
+ });
3133
+ },
3134
+ opened: () => Analytics.swap.trackSwap("view"),
3135
+ buttonClicked: () => Analytics.swap.trackSwap("button_click"),
3136
+ launchBetterSwap: () => Analytics.swap.trackSwap("launch_better_swap")
3137
+ },
3138
+ wallet: {
3139
+ trackWallet: (action, properties) => {
3140
+ trackEvent("Wallet Flow", {
3141
+ action,
3142
+ ...properties,
3143
+ isError: !!properties?.error
3144
+ });
3145
+ },
3146
+ opened: (connected) => Analytics.wallet.trackWallet("view", { connected }),
3147
+ closed: (connected) => Analytics.wallet.trackWallet("close", { connected }),
3148
+ balanceRefreshed: () => Analytics.wallet.trackWallet("balance_refresh"),
3149
+ assetsViewed: () => Analytics.wallet.trackWallet("assets_view"),
3150
+ maxTokenSelected: (tokenSymbol) => Analytics.wallet.trackWallet("max_token_selected", { tokenSymbol }),
3151
+ receiveQRGenerated: () => Analytics.wallet.trackWallet("receive_qr_generated"),
3152
+ addressCopied: (context) => Analytics.wallet.trackWallet("address_copied", { context })
3153
+ },
3154
+ send: {
3155
+ trackSend: (action, properties) => {
3156
+ trackEvent("Send Flow", {
3157
+ action,
3158
+ ...properties,
3159
+ isError: !!properties?.error
3160
+ });
3161
+ },
3162
+ initiated: (tokenSymbol, recipientType) => Analytics.send.trackSend("initiated", {
3163
+ tokenSymbol,
3164
+ recipientType
3165
+ }),
3166
+ completed: (tokenSymbol, amount, txHash, transactionType) => Analytics.send.trackSend("completed", {
3167
+ tokenSymbol,
3168
+ amount,
3169
+ txHash,
3170
+ transactionType
3171
+ }),
3172
+ flow: (action, properties) => {
3173
+ Analytics.send.trackSend(action, properties);
3174
+ },
3175
+ tokenSearchPerformed: (query) => Analytics.send.trackSend("token_search", {
3176
+ query
3177
+ }),
3178
+ tokenPageViewed: (tokenSymbol) => Analytics.send.trackSend("token_page_view", {
3179
+ tokenSymbol
3180
+ }),
3181
+ tokenSelected: (tokenSymbol) => Analytics.send.trackSend("token_selected", {
3182
+ tokenSymbol
3183
+ })
3184
+ },
3185
+ bridge: {
3186
+ trackBridge: (action, properties) => {
3187
+ trackEvent("Bridge Flow", {
3188
+ action,
3189
+ ...properties,
3190
+ isError: !!properties?.error
3191
+ });
3192
+ },
3193
+ opened: () => Analytics.bridge.trackBridge("view"),
3194
+ buttonClicked: () => Analytics.bridge.trackBridge("button_click"),
3195
+ launchVeChainEnergy: () => Analytics.bridge.trackBridge("launch_vechain_energy")
3196
+ },
3197
+ ecosystem: {
3198
+ trackEcosystem: (action, properties) => {
3199
+ trackEvent("Ecosystem Flow", {
3200
+ action,
3201
+ ...properties,
3202
+ isError: !!properties?.error
3203
+ });
3204
+ },
3205
+ opened: () => Analytics.ecosystem.trackEcosystem("view"),
3206
+ buttonClicked: () => Analytics.ecosystem.trackEcosystem("button_click"),
3207
+ searchPerformed: (query, resultsCount) => Analytics.ecosystem.trackEcosystem("search", {
3208
+ query,
3209
+ resultsCount
3210
+ }),
3211
+ appSelected: (appName) => Analytics.ecosystem.trackEcosystem("app_select", { appName }),
3212
+ launchApp: (appName) => Analytics.ecosystem.trackEcosystem("app_launch", { appName }),
3213
+ addAppToShortcuts: (appName) => Analytics.ecosystem.trackEcosystem("add_shortcut", { appName })
3214
+ },
3215
+ settings: {
3216
+ trackSettings: (action, properties) => {
3217
+ trackEvent("Settings Flow", {
3218
+ action,
3219
+ ...properties,
3220
+ isError: !!properties?.error
3221
+ });
3222
+ },
3223
+ opened: (section) => Analytics.settings.trackSettings("view", { section }),
3224
+ accessAndSecurityViewed: () => Analytics.settings.trackSettings("security_view"),
3225
+ embeddedWalletViewed: () => Analytics.settings.trackSettings("embedded_wallet_view"),
3226
+ connectionDetailsViewed: () => Analytics.settings.trackSettings("connection_view"),
3227
+ manageSecuritySettings: () => Analytics.settings.trackSettings("manage_security_settings"),
3228
+ language: {
3229
+ changed: (language, previousLanguage) => Analytics.settings.trackSettings("language_changed", {
3230
+ language,
3231
+ previousLanguage
3232
+ })
3233
+ }
3234
+ },
3235
+ nameSelection: {
3236
+ trackNameSelection: (action, properties) => {
3237
+ trackEvent("Name Selection Flow", {
3238
+ action,
3239
+ ...properties,
3240
+ isError: !!properties?.error
3241
+ });
3242
+ },
3243
+ started: (source) => {
3244
+ Analytics.nameSelection.trackNameSelection(
3245
+ "name_selection_started",
3246
+ {
3247
+ source
3248
+ }
3249
+ );
3250
+ },
3251
+ completed: (name, isOwnDomain) => {
3252
+ Analytics.nameSelection.trackNameSelection(
3253
+ "name_selection_completed",
3254
+ {
3255
+ newName: name,
3256
+ isOwnDomain
3257
+ }
3258
+ );
3259
+ },
3260
+ dropOff: (stage, properties) => {
3261
+ Analytics.nameSelection.trackNameSelection(
3262
+ "name_selection_drop_off",
3263
+ {
3264
+ stage,
3265
+ ...properties
3266
+ }
3267
+ );
3268
+ },
3269
+ failed: (stage, properties) => {
3270
+ Analytics.nameSelection.trackNameSelection(
3271
+ "name_selection_failed",
3272
+ {
3273
+ stage,
3274
+ ...properties
3275
+ }
3276
+ );
3277
+ },
3278
+ retry: (stage) => {
3279
+ Analytics.nameSelection.trackNameSelection("name_selection_retry", {
3280
+ stage
3281
+ });
3282
+ },
3283
+ searched: (name, isAvailable) => {
3284
+ Analytics.nameSelection.trackNameSelection(
3285
+ "name_selection_searched",
3286
+ {
3287
+ newName: name,
3288
+ isAvailable
3289
+ }
3290
+ );
3291
+ }
3292
+ },
3293
+ notifications: {
3294
+ trackNotification: (action, properties) => {
3295
+ trackEvent("Notification Flow", {
3296
+ action,
3297
+ ...properties
3298
+ });
3299
+ },
3300
+ viewed: () => {
3301
+ Analytics.notifications.trackNotification("view");
3302
+ },
3303
+ cleared: (notificationType, count) => {
3304
+ Analytics.notifications.trackNotification("clear", {
3305
+ notificationType,
3306
+ totalCount: count
3307
+ });
3308
+ },
3309
+ archived: (notificationType) => {
3310
+ Analytics.notifications.trackNotification("archive", {
3311
+ notificationType
3312
+ });
3313
+ },
3314
+ toggleView: (viewType) => {
3315
+ Analytics.notifications.trackNotification("toggle_view", {
3316
+ viewType
3317
+ });
3318
+ },
3319
+ dismissed: (notificationType) => {
3320
+ Analytics.notifications.trackNotification("dismiss", {
3321
+ notificationType
3322
+ });
3323
+ }
3324
+ },
3325
+ help: {
3326
+ trackFAQ: (action, properties) => {
3327
+ trackEvent("FAQ Flow", {
3328
+ action,
3329
+ ...properties,
3330
+ isError: !!properties?.error
3331
+ });
3332
+ },
3333
+ pageViewed: () => Analytics.help.trackFAQ("view"),
3334
+ faqViewed: (faqId, faqTitle) => Analytics.help.trackFAQ("faq_opened", { faqId, faqTitle }),
3335
+ categorySelected: (category) => Analytics.help.trackFAQ("category_selected", { category }),
3336
+ questionExpanded: (faqId, faqTitle) => Analytics.help.trackFAQ("question_expanded", { faqId, faqTitle }),
3337
+ searchPerformed: (searchQuery, resultsCount) => Analytics.help.trackFAQ("search", { searchQuery, resultsCount })
3338
+ }
3339
+ };
3340
+ var useRefreshMetadata = (domain, address) => {
3341
+ const queryClient = useQueryClient();
3342
+ const { network } = useVeChainKitConfig();
3343
+ const refresh = async () => {
3344
+ await queryClient.invalidateQueries({
3345
+ queryKey: getAvatarQueryKey(domain ?? "", network.type)
3346
+ });
3347
+ await queryClient.refetchQueries({
3348
+ queryKey: getAvatarQueryKey(domain ?? "", network.type)
3349
+ });
3350
+ await queryClient.invalidateQueries({
3351
+ queryKey: getTextRecordsQueryKey(domain, network.type)
3352
+ });
3353
+ await queryClient.refetchQueries({
3354
+ queryKey: getTextRecordsQueryKey(domain, network.type)
3355
+ });
3356
+ await queryClient.invalidateQueries({
3357
+ queryKey: getAvatarOfAddressQueryKey(address)
3358
+ });
3359
+ await queryClient.refetchQueries({
3360
+ queryKey: getAvatarOfAddressQueryKey(address)
3361
+ });
3362
+ };
3363
+ return { refresh };
3364
+ };
3365
+
3366
+ // src/hooks/api/vetDomains/utils/domainQueryUtils.ts
3367
+ var invalidateAndRefetchDomainQueries = async (queryClient, address, fullDomain, subdomain, domain, networkType) => {
3368
+ await Promise.all([
3369
+ queryClient.invalidateQueries({
3370
+ queryKey: getVechainDomainQueryKey(address)
3371
+ }),
3372
+ queryClient.invalidateQueries({
3373
+ queryKey: getVechainDomainQueryKey(fullDomain)
3374
+ }),
3375
+ queryClient.invalidateQueries({
3376
+ queryKey: getEnsRecordExistsQueryKey(subdomain)
3377
+ }),
3378
+ queryClient.invalidateQueries({
3379
+ queryKey: getDomainsOfAddressQueryKey(address, ".vet")
3380
+ }),
3381
+ queryClient.invalidateQueries({
3382
+ queryKey: getDomainsOfAddressQueryKey(address, ".veworld.vet")
3383
+ }),
3384
+ queryClient.invalidateQueries({
3385
+ queryKey: getTextRecordsQueryKey(fullDomain)
3386
+ })
3387
+ ]);
3388
+ await Promise.all([
3389
+ queryClient.refetchQueries({
3390
+ queryKey: getVechainDomainQueryKey(address)
3391
+ }),
3392
+ queryClient.refetchQueries({
3393
+ queryKey: getVechainDomainQueryKey(fullDomain)
3394
+ }),
3395
+ queryClient.refetchQueries({
3396
+ queryKey: getDomainsOfAddressQueryKey(address, ".vet")
3397
+ }),
3398
+ queryClient.refetchQueries({
3399
+ queryKey: getDomainsOfAddressQueryKey(address, ".veworld.vet")
3400
+ }),
3401
+ queryClient.refetchQueries({
3402
+ queryKey: getAvatarQueryKey(subdomain + "." + domain, networkType)
3403
+ }),
3404
+ queryClient.refetchQueries({
3405
+ queryKey: getTextRecordsQueryKey(fullDomain)
3406
+ }),
3407
+ queryClient.refetchQueries({
3408
+ queryKey: getEnsRecordExistsQueryKey(subdomain)
3409
+ }),
3410
+ queryClient.refetchQueries({
3411
+ queryKey: getAvatarOfAddressQueryKey(address)
3412
+ })
3413
+ ]);
3414
+ };
3415
+
3416
+ // src/hooks/api/vetDomains/useClaimVeWorldSubdomain.ts
2897
3417
  var SubdomainClaimerInterface = SubdomainClaimer__factory.createInterface();
2898
3418
  var ReverseRegistrarInterface = IReverseRegistrar__factory.createInterface();
2899
3419
  var useClaimVeWorldSubdomain = ({
@@ -2906,9 +3426,14 @@ var useClaimVeWorldSubdomain = ({
2906
3426
  const queryClient = useQueryClient();
2907
3427
  const { account } = useWallet();
2908
3428
  const { network } = useVeChainKitConfig();
3429
+ const { refresh: refreshMetadata } = useRefreshMetadata(
3430
+ subdomain + "." + domain,
3431
+ account?.address ?? ""
3432
+ );
2909
3433
  const buildClauses = useCallback(async () => {
2910
- if (!subdomain) throw new Error("Invalid subdomain");
2911
3434
  const clausesArray = [];
3435
+ if (!subdomain) throw new Error("Invalid subdomain");
3436
+ const fullDomain = `${subdomain}.${domain}`;
2912
3437
  clausesArray.push({
2913
3438
  to: getConfig(network.type).vetDomainsReverseRegistrarAddress,
2914
3439
  value: "0x0",
@@ -2920,88 +3445,193 @@ var useClaimVeWorldSubdomain = ({
2920
3445
  )}`,
2921
3446
  abi: ReverseRegistrarInterface.getFunction("setName")
2922
3447
  });
2923
- if (!alreadyOwned) {
3448
+ if (alreadyOwned) {
2924
3449
  clausesArray.push({
2925
- to: getConfig(network.type).veWorldSubdomainClaimerContractAddress,
3450
+ to: getConfig(network.type).vetDomainsReverseRegistrarAddress,
2926
3451
  value: "0x0",
2927
- data: SubdomainClaimerInterface.encodeFunctionData("claim", [
2928
- subdomain,
2929
- getConfig(network.type).vetDomainsPublicResolverAddress
3452
+ data: ReverseRegistrarInterface.encodeFunctionData("setName", [
3453
+ fullDomain
2930
3454
  ]),
2931
- comment: `Claim VeChain subdomain: ${subdomain}.${domain}`,
2932
- abi: SubdomainClaimerInterface.getFunction("claim")
3455
+ comment: `Setting your VeChain nickname to ${fullDomain}`,
3456
+ abi: ReverseRegistrarInterface.getFunction("setName")
2933
3457
  });
3458
+ const PublicResolverInterface = new ethers.Interface([
3459
+ "function setAddr(bytes32 node, address addr)"
3460
+ ]);
3461
+ const domainNode = ethers.namehash(fullDomain);
3462
+ clausesArray.push({
3463
+ to: getConfig(network.type).vetDomainsPublicResolverAddress,
3464
+ value: "0x0",
3465
+ data: PublicResolverInterface.encodeFunctionData("setAddr", [
3466
+ domainNode,
3467
+ account?.address || ""
3468
+ ]),
3469
+ comment: `Setting the address for ${fullDomain} to ${humanAddress(
3470
+ account?.address ?? "",
3471
+ 4,
3472
+ 4
3473
+ )}`,
3474
+ abi: PublicResolverInterface.getFunction("setAddr")
3475
+ });
3476
+ } else {
3477
+ if (isVeWorldDomain(domain)) {
3478
+ clausesArray.push({
3479
+ to: getConfig(network.type).veWorldSubdomainClaimerContractAddress,
3480
+ value: "0x0",
3481
+ data: SubdomainClaimerInterface.encodeFunctionData(
3482
+ "claim",
3483
+ [
3484
+ subdomain,
3485
+ getConfig(network.type).vetDomainsPublicResolverAddress
3486
+ ]
3487
+ ),
3488
+ comment: `Claim VeChain subdomain: ${subdomain}.${domain}`,
3489
+ abi: SubdomainClaimerInterface.getFunction("claim")
3490
+ });
3491
+ clausesArray.push({
3492
+ to: getConfig(network.type).vetDomainsReverseRegistrarAddress,
3493
+ value: "0x0",
3494
+ data: ReverseRegistrarInterface.encodeFunctionData(
3495
+ "setName",
3496
+ [subdomain + "." + domain]
3497
+ ),
3498
+ comment: `Set ${subdomain}.${domain} as the VeChain nickname of the account ${humanAddress(
3499
+ account?.address ?? "",
3500
+ 4,
3501
+ 4
3502
+ )}`,
3503
+ abi: ReverseRegistrarInterface.getFunction("setName")
3504
+ });
3505
+ } else {
3506
+ throw new Error(
3507
+ "This hook only supports .veworld.vet subdomains"
3508
+ );
3509
+ }
2934
3510
  }
2935
- clausesArray.push({
2936
- to: getConfig(network.type).vetDomainsReverseRegistrarAddress,
2937
- value: "0x0",
2938
- data: ReverseRegistrarInterface.encodeFunctionData("setName", [
2939
- subdomain + "." + domain
2940
- ]),
2941
- comment: `Set ${subdomain}.${domain} as the VeChain nickname of the account ${humanAddress(
2942
- account?.address ?? "",
2943
- 4,
2944
- 4
2945
- )}`,
2946
- abi: ReverseRegistrarInterface.getFunction("setName")
2947
- });
2948
3511
  return clausesArray;
2949
- }, [subdomain, domain, account?.address, alreadyOwned]);
3512
+ }, [subdomain, domain, alreadyOwned, account?.address, network.type]);
2950
3513
  const handleOnSuccess = useCallback(async () => {
2951
- queryClient.cancelQueries({
2952
- queryKey: getVechainDomainQueryKey(account?.address ?? ""),
2953
- refetchType: "none"
2954
- });
2955
- queryClient.cancelQueries({
2956
- queryKey: getVechainDomainQueryKey(subdomain + "." + domain),
2957
- refetchType: "none"
2958
- });
2959
- queryClient.cancelQueries({
2960
- queryKey: getEnsRecordExistsQueryKey(subdomain),
2961
- refetchType: "none"
2962
- });
2963
- queryClient.cancelQueries({
2964
- queryKey: getDomainsOfAddressQueryKey(
2965
- account?.address ?? "",
2966
- domain
2967
- ),
2968
- refetchType: "none"
2969
- });
2970
- setTimeout(() => {
2971
- queryClient.invalidateQueries({
2972
- queryKey: getVechainDomainQueryKey(account?.address ?? ""),
2973
- refetchType: "none"
2974
- });
2975
- queryClient.invalidateQueries({
2976
- queryKey: getVechainDomainQueryKey(subdomain + "." + domain),
2977
- refetchType: "none"
2978
- });
2979
- queryClient.refetchQueries({
2980
- queryKey: getVechainDomainQueryKey(account?.address ?? "")
2981
- });
2982
- queryClient.refetchQueries({
2983
- queryKey: getVechainDomainQueryKey(subdomain + "." + domain)
2984
- });
2985
- queryClient.invalidateQueries({
2986
- queryKey: getEnsRecordExistsQueryKey(subdomain)
2987
- });
2988
- queryClient.refetchQueries({
2989
- queryKey: getEnsRecordExistsQueryKey(subdomain)
3514
+ const fullDomain = `${subdomain}.${domain}`;
3515
+ const address = account?.address ?? "";
3516
+ await invalidateAndRefetchDomainQueries(
3517
+ queryClient,
3518
+ address,
3519
+ fullDomain,
3520
+ subdomain,
3521
+ domain,
3522
+ network.type
3523
+ );
3524
+ refreshMetadata();
3525
+ Analytics.nameSelection.completed(subdomain, alreadyOwned);
3526
+ onSuccess?.();
3527
+ }, [
3528
+ onSuccess,
3529
+ subdomain,
3530
+ domain,
3531
+ queryClient,
3532
+ account,
3533
+ network.type,
3534
+ refreshMetadata
3535
+ ]);
3536
+ const result = useSendTransaction({
3537
+ signerAccountAddress: account?.address ?? "",
3538
+ privyUIOptions: {
3539
+ title: "Sign to claim your VeChain nickname",
3540
+ description: `Claim ${subdomain}.${domain} as your VeChain nickname`,
3541
+ buttonText: "Sign to continue"
3542
+ },
3543
+ onTxConfirmed: handleOnSuccess,
3544
+ onTxFailedOrCancelled: () => {
3545
+ onError?.();
3546
+ }
3547
+ });
3548
+ return {
3549
+ ...result,
3550
+ sendTransaction: async () => {
3551
+ return result.sendTransaction(await buildClauses());
3552
+ }
3553
+ };
3554
+ };
3555
+ var isVeWorldDomain = (domain) => {
3556
+ return domain.endsWith("veworld.vet");
3557
+ };
3558
+ var ReverseRegistrarInterface2 = IReverseRegistrar__factory.createInterface();
3559
+ var useClaimVetDomain = ({
3560
+ domain,
3561
+ onSuccess,
3562
+ onError,
3563
+ alreadyOwned = false
3564
+ }) => {
3565
+ const queryClient = useQueryClient();
3566
+ const { account } = useWallet();
3567
+ const { network } = useVeChainKitConfig();
3568
+ const { refresh: refreshMetadata } = useRefreshMetadata(
3569
+ domain,
3570
+ account?.address ?? ""
3571
+ );
3572
+ const buildClauses = useCallback(async () => {
3573
+ const clausesArray = [];
3574
+ if (!domain) throw new Error("Invalid domain");
3575
+ const fullDomain = `${domain}.vet`;
3576
+ if (alreadyOwned) {
3577
+ clausesArray.push({
3578
+ to: getConfig(network.type).vetDomainsReverseRegistrarAddress,
3579
+ value: "0x0",
3580
+ data: ReverseRegistrarInterface2.encodeFunctionData("setName", [
3581
+ fullDomain
3582
+ ]),
3583
+ comment: `Setting your VeChain nickname to ${fullDomain}`,
3584
+ abi: ReverseRegistrarInterface2.getFunction("setName")
2990
3585
  });
2991
- queryClient.refetchQueries({
2992
- queryKey: getDomainsOfAddressQueryKey(
3586
+ const PublicResolverInterface = new ethers.Interface([
3587
+ "function setAddr(bytes32 node, address addr)"
3588
+ ]);
3589
+ const domainNode = ethers.namehash(fullDomain);
3590
+ clausesArray.push({
3591
+ to: getConfig(network.type).vetDomainsPublicResolverAddress,
3592
+ value: "0x0",
3593
+ data: PublicResolverInterface.encodeFunctionData("setAddr", [
3594
+ domainNode,
3595
+ account?.address || ""
3596
+ ]),
3597
+ comment: `Setting the address for ${fullDomain} to ${humanAddress(
2993
3598
  account?.address ?? "",
2994
- domain
2995
- )
3599
+ 4,
3600
+ 4
3601
+ )}`,
3602
+ abi: PublicResolverInterface.getFunction("setAddr")
2996
3603
  });
2997
- }, 2e3);
3604
+ } else {
3605
+ throw new Error("Primary .vet domains are not supported yet");
3606
+ }
3607
+ return clausesArray;
3608
+ }, [domain, alreadyOwned, account?.address, network.type]);
3609
+ const handleOnSuccess = useCallback(async () => {
3610
+ const address = account?.address ?? "";
3611
+ await invalidateAndRefetchDomainQueries(
3612
+ queryClient,
3613
+ address,
3614
+ domain,
3615
+ "",
3616
+ // No subdomain for primary domains
3617
+ domain.endsWith(".vet") ? domain : `${domain}.vet`,
3618
+ network.type
3619
+ );
3620
+ refreshMetadata();
2998
3621
  onSuccess?.();
2999
- }, [onSuccess, subdomain, domain, queryClient, account?.address]);
3622
+ }, [
3623
+ onSuccess,
3624
+ domain,
3625
+ queryClient,
3626
+ account,
3627
+ network.type,
3628
+ refreshMetadata
3629
+ ]);
3000
3630
  const result = useSendTransaction({
3001
3631
  signerAccountAddress: account?.address ?? "",
3002
3632
  privyUIOptions: {
3003
3633
  title: "Sign to claim your VeChain nickname",
3004
- description: `Claim ${subdomain} as your VeChain nickname`,
3634
+ description: `Claim ${domain} as your VeChain nickname`,
3005
3635
  buttonText: "Sign to continue"
3006
3636
  },
3007
3637
  onTxConfirmed: handleOnSuccess,
@@ -3084,7 +3714,7 @@ var erc721Interface = new Interface([
3084
3714
  "function tokenURI(uint256 tokenId) view returns (string)",
3085
3715
  "function uri(uint256 id) view returns (string)"
3086
3716
  ]);
3087
- var getAvatar = async (networkType, nodeUrl, name) => {
3717
+ var getAvatarLegacy = async (networkType, nodeUrl, name) => {
3088
3718
  if (!name) throw new Error("Name is required");
3089
3719
  const node = namehash(name);
3090
3720
  try {
@@ -3138,22 +3768,19 @@ var getAvatar = async (networkType, nodeUrl, name) => {
3138
3768
  "text",
3139
3769
  lookupData
3140
3770
  );
3141
- return avatar === "" ? null : avatar;
3771
+ const avatarRecord = avatar === "" ? null : avatar;
3772
+ if (!avatarRecord) return null;
3773
+ return parseAvatarRecord(avatarRecord, networkType, nodeUrl);
3142
3774
  } catch (decodeError) {
3143
3775
  console.error("Failed to decode avatar data:", decodeError);
3144
3776
  return null;
3145
3777
  }
3146
3778
  } catch (error) {
3147
- console.error("Error fetching avatar:", error);
3779
+ console.error("Error fetching avatar using legacy API:", error);
3148
3780
  throw error;
3149
3781
  }
3150
3782
  };
3151
- var getAvatarQueryKey = (name) => [
3152
- "VECHAIN_KIT",
3153
- "VET_DOMAINS",
3154
- "AVATAR",
3155
- name
3156
- ];
3783
+ var getAvatarLegacyQueryKey = (name, networkType) => ["VECHAIN_KIT", "VET_DOMAINS", "AVATAR", "LEGACY", name, networkType];
3157
3784
  async function parseAvatarRecord(record, networkType, nodeUrl) {
3158
3785
  try {
3159
3786
  if (record.startsWith("http") || record.startsWith("ipfs://") || record.startsWith("ar://")) {
@@ -3224,21 +3851,72 @@ async function parseAvatarRecord(record, networkType, nodeUrl) {
3224
3851
  return null;
3225
3852
  }
3226
3853
  }
3227
- var useGetAvatar = (name) => {
3854
+ var useGetAvatarLegacy = (name) => {
3228
3855
  const { network } = useVeChainKitConfig();
3229
3856
  const nodeUrl = network.nodeUrl ?? getConfig(network.type).nodeUrl;
3230
3857
  const avatarQuery = useQuery({
3231
- queryKey: getAvatarQueryKey(name ?? ""),
3858
+ queryKey: getAvatarLegacyQueryKey(name ?? "", network.type),
3232
3859
  queryFn: async () => {
3233
3860
  if (!name) return null;
3234
- const avatarRecord = await getAvatar(network.type, nodeUrl, name);
3235
- if (!avatarRecord) return null;
3236
- return parseAvatarRecord(avatarRecord, network.type, nodeUrl);
3861
+ return getAvatarLegacy(network.type, nodeUrl, name);
3862
+ },
3863
+ enabled: !!name && !!nodeUrl && !!network.type
3864
+ });
3865
+ return avatarQuery;
3866
+ };
3867
+
3868
+ // src/hooks/api/vetDomains/useGetAvatar.ts
3869
+ var getAvatar = async (name, network) => {
3870
+ if (!name) throw new Error("Name is required");
3871
+ const result = await fetchAvatar(name, network) || await fetchAvatarDirectly(name, network);
3872
+ if (!result) return null;
3873
+ if (result instanceof Blob) {
3874
+ return new Promise((resolve) => {
3875
+ const reader = new FileReader();
3876
+ reader.readAsDataURL(result);
3877
+ reader.onloadend = () => {
3878
+ resolve(reader.result);
3879
+ };
3880
+ });
3881
+ }
3882
+ return result;
3883
+ };
3884
+ var fetchAvatar = async (name, network) => {
3885
+ try {
3886
+ const response = await fetch(
3887
+ `${getConfig(network.type).vetDomainAvatarUrl}/${name}`
3888
+ );
3889
+ if (response.ok) {
3890
+ return response.blob();
3891
+ }
3892
+ } catch (error) {
3893
+ console.error("Error fetching avatar:", error);
3894
+ }
3895
+ return null;
3896
+ };
3897
+ var fetchAvatarDirectly = async (name, network) => {
3898
+ const nodeUrl = network.nodeUrl ?? getConfig(network.type).nodeUrl;
3899
+ if (!nodeUrl) return null;
3900
+ const avatar = await getAvatarLegacy(network.type, nodeUrl, name);
3901
+ if (!avatar) return null;
3902
+ return avatar;
3903
+ };
3904
+ var getAvatarQueryKey = (name, networkType) => [
3905
+ "VECHAIN_KIT",
3906
+ "VET_DOMAINS",
3907
+ "AVATAR",
3908
+ name,
3909
+ networkType
3910
+ ];
3911
+ var useGetAvatar = (name) => {
3912
+ const { network } = useVeChainKitConfig();
3913
+ const avatarQuery = useQuery({
3914
+ queryKey: getAvatarQueryKey(name ?? "", network.type),
3915
+ queryFn: async () => {
3916
+ if (!name) return null;
3917
+ return getAvatar(name, network);
3237
3918
  },
3238
- enabled: !!name && !!nodeUrl && !!network.type,
3239
- // Use the same caching strategy as the avatar query
3240
- staleTime: 5 * 60 * 1e3
3241
- // 5 minutes
3919
+ enabled: !!name && !!network.type
3242
3920
  });
3243
3921
  return avatarQuery;
3244
3922
  };
@@ -3441,7 +4119,9 @@ var useSendTransaction = ({
3441
4119
  setSendTransactionError(
3442
4120
  error2 instanceof Error ? error2.message : String(error2)
3443
4121
  );
3444
- onTxFailedOrCancelled?.();
4122
+ onTxFailedOrCancelled?.(
4123
+ error2 instanceof Error ? error2 : new Error(String(error2))
4124
+ );
3445
4125
  } finally {
3446
4126
  setSendTransactionPending(false);
3447
4127
  }
@@ -3583,9 +4263,11 @@ var useUpdateTextRecord = ({
3583
4263
  );
3584
4264
  const result = useSendTransaction({
3585
4265
  signerAccountAddress,
3586
- onTxConfirmed: onSuccess,
4266
+ onTxConfirmed: async () => {
4267
+ await onSuccess?.();
4268
+ },
3587
4269
  onTxFailedOrCancelled: async () => {
3588
- onError?.();
4270
+ await onError?.();
3589
4271
  },
3590
4272
  privyUIOptions: {
3591
4273
  title: "Update Profile Information",
@@ -3660,11 +4342,63 @@ var useGetAvatarOfAddress = (address) => {
3660
4342
  return avatarQuery.data;
3661
4343
  return getPicassoImage(address);
3662
4344
  },
3663
- enabled: !!address && domainsQuery.isSuccess && (primaryDomain ? avatarQuery.isSuccess : true),
3664
- // Use the same caching strategy as the avatar query
3665
- staleTime: 5 * 60 * 1e3
3666
- // 5 minutes
4345
+ enabled: !!address && domainsQuery.isSuccess && (primaryDomain ? avatarQuery.isSuccess : true)
4346
+ });
4347
+ };
4348
+ var ReverseRegistrarInterface3 = IReverseRegistrar__factory.createInterface();
4349
+ var useUnsetDomain = ({
4350
+ onSuccess,
4351
+ onError
4352
+ }) => {
4353
+ const queryClient = useQueryClient();
4354
+ const { account } = useWallet();
4355
+ const { network } = useVeChainKitConfig();
4356
+ const buildClauses = useCallback(async () => {
4357
+ const clausesArray = [];
4358
+ clausesArray.push({
4359
+ to: getConfig(network.type).vetDomainsReverseRegistrarAddress,
4360
+ value: "0x0",
4361
+ data: ReverseRegistrarInterface3.encodeFunctionData("setName", [""]),
4362
+ comment: `Unsetting your current VeChain nickname of the account ${humanAddress(
4363
+ account?.address ?? "",
4364
+ 4,
4365
+ 4
4366
+ )}`,
4367
+ abi: ReverseRegistrarInterface3.getFunction("setName")
4368
+ });
4369
+ return clausesArray;
4370
+ }, [account?.address, network.type]);
4371
+ const handleOnSuccess = useCallback(async () => {
4372
+ const address = account?.address ?? "";
4373
+ await invalidateAndRefetchDomainQueries(
4374
+ queryClient,
4375
+ address,
4376
+ "",
4377
+ // No domain being set
4378
+ "",
4379
+ // No subdomain
4380
+ "",
4381
+ // No full domain
4382
+ network.type
4383
+ );
4384
+ onSuccess?.();
4385
+ }, [onSuccess, queryClient, account, network.type]);
4386
+ const result = useSendTransaction({
4387
+ signerAccountAddress: account?.address ?? "",
4388
+ privyUIOptions: {
4389
+ title: "Sign to unset your VeChain nickname",
4390
+ description: "Unset your current VeChain nickname",
4391
+ buttonText: "Sign to continue"
4392
+ },
4393
+ onTxConfirmed: handleOnSuccess,
4394
+ onTxFailedOrCancelled: onError
3667
4395
  });
4396
+ return {
4397
+ ...result,
4398
+ sendTransaction: async () => {
4399
+ return result.sendTransaction(await buildClauses());
4400
+ }
4401
+ };
3668
4402
  };
3669
4403
  var useBalances = ({ address = "" }) => {
3670
4404
  const { network } = useVeChainKitConfig();
@@ -3792,6 +4526,17 @@ var useBalances = ({ address = "" }) => {
3792
4526
  customTokensLoading
3793
4527
  ]);
3794
4528
  };
4529
+
4530
+ // src/utils/StringUtils.ts
4531
+ var isRejectionError = (errorMessage) => {
4532
+ if (!errorMessage) return false;
4533
+ const rejectionTerms = ["rejected", "cancelled", "user denied", "closed"];
4534
+ return rejectionTerms.some(
4535
+ (term) => errorMessage.toLowerCase().includes(term.toLowerCase())
4536
+ );
4537
+ };
4538
+
4539
+ // src/utils/handlePopupError.ts
3795
4540
  var handlePopupError = ({
3796
4541
  error,
3797
4542
  mobileBrowserPopupMessage = "Mobile browser blocked the window. Please try again.",
@@ -3799,10 +4544,10 @@ var handlePopupError = ({
3799
4544
  defaultMessage = "Operation failed"
3800
4545
  }) => {
3801
4546
  const errorMsg = error?.message;
3802
- if (isMobile && !errorMsg?.includes("rejected")) {
4547
+ if (isMobile && errorMsg && !isRejectionError(errorMsg)) {
3803
4548
  return new Error(mobileBrowserPopupMessage);
3804
4549
  }
3805
- if (errorMsg?.includes("rejected") || errorMsg?.includes("closed")) {
4550
+ if (errorMsg && isRejectionError(errorMsg)) {
3806
4551
  return new Error(rejectedMessage);
3807
4552
  }
3808
4553
  return error instanceof Error ? error : new Error(defaultMessage);
@@ -4014,10 +4759,9 @@ var useWallet = () => {
4014
4759
  const connectedWalletAddress = isConnectedWithDappKit ? dappKitAccount : isConnectedWithCrossApp ? crossAppAddress : privyEmbeddedWalletAddress;
4015
4760
  const { data: smartAccount } = useSmartAccount(connectedWalletAddress);
4016
4761
  const activeAddress = isConnectedWithDappKit ? dappKitAccount : smartAccount?.address;
4017
- const activeAccountDomain = useVechainDomain(activeAddress ?? "");
4018
- const activeAccountAvatar = useGetAvatarOfAddress(activeAddress ?? "");
4019
- const activeAccountTextRecords = useGetTextRecords(
4020
- activeAccountDomain?.data?.domain
4762
+ const activeAccountMetadata = useWalletMetadata(
4763
+ activeAddress ?? "",
4764
+ network.type
4021
4765
  );
4022
4766
  const connectedMetadata = useWalletMetadata(
4023
4767
  connectedWalletAddress ?? "",
@@ -4029,10 +4773,10 @@ var useWallet = () => {
4029
4773
  );
4030
4774
  const account = activeAddress ? {
4031
4775
  address: activeAddress,
4032
- domain: activeAccountDomain?.data?.domain,
4033
- image: activeAccountAvatar.data,
4034
- isLoadingMetadata: activeAccountAvatar?.isLoading || activeAccountDomain?.isLoading || activeAccountTextRecords?.isLoading,
4035
- metadata: activeAccountTextRecords?.data
4776
+ domain: activeAccountMetadata.domain,
4777
+ image: activeAccountMetadata.image,
4778
+ isLoadingMetadata: activeAccountMetadata.isLoading,
4779
+ metadata: activeAccountMetadata.records
4036
4780
  } : null;
4037
4781
  const connectedWallet = connectedWalletAddress ? {
4038
4782
  address: connectedWalletAddress,
@@ -4277,31 +5021,6 @@ var useAccountBalance = (address) => {
4277
5021
  refetchInterval: 1e4
4278
5022
  });
4279
5023
  };
4280
- var useRefreshMetadata = (domain, address) => {
4281
- const queryClient = useQueryClient();
4282
- const { network } = useVeChainKitConfig();
4283
- const refresh = async () => {
4284
- await queryClient.invalidateQueries({
4285
- queryKey: getAvatarQueryKey(domain ?? "")
4286
- });
4287
- await queryClient.refetchQueries({
4288
- queryKey: getAvatarQueryKey(domain ?? "")
4289
- });
4290
- await queryClient.invalidateQueries({
4291
- queryKey: getTextRecordsQueryKey(domain, network.type)
4292
- });
4293
- await queryClient.refetchQueries({
4294
- queryKey: getTextRecordsQueryKey(domain, network.type)
4295
- });
4296
- await queryClient.invalidateQueries({
4297
- queryKey: getAvatarOfAddressQueryKey(address)
4298
- });
4299
- await queryClient.refetchQueries({
4300
- queryKey: getAvatarOfAddressQueryKey(address)
4301
- });
4302
- };
4303
- return { refresh };
4304
- };
4305
5024
 
4306
5025
  // src/hooks/api/utility/useGetNodeUrl.ts
4307
5026
  var useGetNodeUrl = () => {
@@ -5151,7 +5870,8 @@ var AddressDisplay = ({
5151
5870
  wallet,
5152
5871
  label,
5153
5872
  style,
5154
- showHumanAddress = true
5873
+ showHumanAddress = true,
5874
+ fromScreen
5155
5875
  }) => {
5156
5876
  const [copied, setCopied] = useState(false);
5157
5877
  const [copiedDomain, setCopiedDomain] = useState(false);
@@ -5161,6 +5881,7 @@ var AddressDisplay = ({
5161
5881
  setTimeout(() => {
5162
5882
  setCopied2(false);
5163
5883
  }, 2e3);
5884
+ Analytics.user.profile.addressCopied(fromScreen);
5164
5885
  };
5165
5886
  return /* @__PURE__ */ jsx(VStack, { w: "full", justifyContent: "center", ...style, children: /* @__PURE__ */ jsxs(VStack, { w: "full", spacing: 4, children: [
5166
5887
  label && /* @__PURE__ */ jsx(Text, { fontSize: "sm", opacity: 0.7, children: label }),
@@ -5262,7 +5983,7 @@ var AddressDisplay = ({
5262
5983
  // package.json
5263
5984
  var package_default = {
5264
5985
  name: "@vechain/vechain-kit",
5265
- version: "1.5.12",
5986
+ version: "1.6.0",
5266
5987
  private: false,
5267
5988
  homepage: "https://github.com/vechain/vechain-kit",
5268
5989
  repository: "github:vechain/vechain-kit",
@@ -5288,9 +6009,10 @@ var package_default = {
5288
6009
  dependencies: {
5289
6010
  "@chakra-ui/react": "^2.8.2",
5290
6011
  "@choc-ui/chakra-autocomplete": "^5.3.0",
5291
- "@privy-io/cross-app-connect": "0.1.8-beta-20250228192559",
5292
- "@privy-io/react-auth": "2.4.5",
6012
+ "@privy-io/cross-app-connect": "0.1.8",
6013
+ "@privy-io/react-auth": "2.8.0",
5293
6014
  "@rainbow-me/rainbowkit": "^2.1.5",
6015
+ "@solana/web3.js": "^1.98.0",
5294
6016
  "@tanstack/react-query": "^5.64.2",
5295
6017
  "@tanstack/react-query-devtools": "^5.64.1",
5296
6018
  "@vechain/dapp-kit-react": "1.5.0",
@@ -5309,6 +6031,7 @@ var package_default = {
5309
6031
  "https-browserify": "^1.0.0",
5310
6032
  i18next: "^24.2.1",
5311
6033
  "i18next-browser-languagedetector": "^8.0.2",
6034
+ "mixpanel-browser": "^2.61.1",
5312
6035
  net: "^1.0.2",
5313
6036
  process: "^0.11.10",
5314
6037
  react: "^18.2.0",
@@ -5324,6 +6047,7 @@ var package_default = {
5324
6047
  wagmi: "^2.13.4"
5325
6048
  },
5326
6049
  devDependencies: {
6050
+ "@types/mixpanel-browser": "^2.51.0",
5327
6051
  "@types/react": "^18.2.28",
5328
6052
  "@types/react-dom": "^18.2.13",
5329
6053
  "cross-env": "^7.0.3",
@@ -5716,13 +6440,26 @@ var ScrollToTopWrapper = ({ children, ...props }) => {
5716
6440
  return /* @__PURE__ */ jsx(VStack, { ...props, children });
5717
6441
  };
5718
6442
  var AccountAvatar = ({ wallet, props }) => {
5719
- if (wallet?.isLoadingMetadata) {
5720
- return /* @__PURE__ */ jsx(Spinner, { size: "sm" });
6443
+ const previousImageRef = useRef(wallet?.image);
6444
+ useEffect(() => {
6445
+ if (wallet?.image && !wallet.isLoadingMetadata) {
6446
+ previousImageRef.current = wallet.image;
6447
+ }
6448
+ }, [wallet?.image, wallet?.isLoadingMetadata]);
6449
+ if (!props?.src && !wallet?.image && !previousImageRef.current || wallet?.isLoadingMetadata) {
6450
+ return /* @__PURE__ */ jsx(
6451
+ Skeleton,
6452
+ {
6453
+ rounded: "full",
6454
+ width: props?.width,
6455
+ height: props?.height
6456
+ }
6457
+ );
5721
6458
  }
5722
6459
  return /* @__PURE__ */ jsx(
5723
6460
  Image,
5724
6461
  {
5725
- src: props?.src || wallet?.image,
6462
+ src: props?.src || wallet?.image || previousImageRef.current,
5726
6463
  alt: props?.alt || wallet?.domain,
5727
6464
  objectFit: "cover",
5728
6465
  rounded: "full",
@@ -5735,12 +6472,14 @@ var TransactionButtonAndStatus = ({
5735
6472
  isSubmitting,
5736
6473
  isTxWaitingConfirmation,
5737
6474
  onConfirm,
6475
+ onRetry,
5738
6476
  transactionPendingText,
5739
6477
  txReceipt,
5740
6478
  isSubmitForm = false,
5741
6479
  buttonText,
5742
6480
  isDisabled = false,
5743
- style
6481
+ style,
6482
+ onError
5744
6483
  }) => {
5745
6484
  const { t } = useTranslation();
5746
6485
  const { darkMode: isDark } = useVeChainKitConfig();
@@ -5749,6 +6488,11 @@ var TransactionButtonAndStatus = ({
5749
6488
  if (!transactionError) return null;
5750
6489
  return transactionError.reason || t("Something went wrong. Please try again.");
5751
6490
  }, [transactionError, t]);
6491
+ useEffect(() => {
6492
+ if (errorMessage) {
6493
+ onError?.(errorMessage);
6494
+ }
6495
+ }, [errorMessage, onError]);
5752
6496
  const buttonBg = useMemo(() => {
5753
6497
  if (style?.accentColor) return `${style.accentColor} !important`;
5754
6498
  return void 0;
@@ -5761,7 +6505,7 @@ var TransactionButtonAndStatus = ({
5761
6505
  px: 4,
5762
6506
  variant: "vechainKitPrimary",
5763
6507
  bg: buttonBg,
5764
- onClick: onConfirm,
6508
+ onClick: () => errorMessage && onRetry ? onRetry() : onConfirm(),
5765
6509
  type: isSubmitForm ? "submit" : "button",
5766
6510
  isLoading: isSubmitting,
5767
6511
  isDisabled,
@@ -5975,6 +6719,8 @@ var EmailLoginButton = () => {
5975
6719
  const { sendCode, state: emailState } = useLoginWithEmail({});
5976
6720
  const emailCodeVerificationModal = useDisclosure();
5977
6721
  const handleSendCode = async () => {
6722
+ Analytics.auth.flowStarted("email" /* EMAIL */);
6723
+ Analytics.auth.methodSelected("email" /* EMAIL */);
5978
6724
  await sendCode({ email });
5979
6725
  emailCodeVerificationModal.onOpen();
5980
6726
  };
@@ -6052,9 +6798,13 @@ var LoginWithGoogleButton = ({ isDark, gridColumn }) => {
6052
6798
  ConnectionButton,
6053
6799
  {
6054
6800
  isDark,
6055
- onClick: () => initOAuth({
6056
- provider: "google"
6057
- }),
6801
+ onClick: () => {
6802
+ Analytics.auth.flowStarted("google" /* GOOGLE */);
6803
+ Analytics.auth.methodSelected("google" /* GOOGLE */);
6804
+ initOAuth({
6805
+ provider: "google"
6806
+ });
6807
+ },
6058
6808
  icon: FcGoogle,
6059
6809
  text: t("Continue with Google")
6060
6810
  }
@@ -6081,6 +6831,7 @@ var VeChainLoginButton = ({ isDark, gridColumn }) => {
6081
6831
  const [loginError, setLoginError] = useState();
6082
6832
  const loginLoadingModal = useDisclosure();
6083
6833
  const handleLoginWithVeChain = async () => {
6834
+ Analytics.auth.flowStarted("vechain" /* VECHAIN */);
6084
6835
  loginLoadingModal.onOpen();
6085
6836
  try {
6086
6837
  setLoginError(void 0);
@@ -6093,6 +6844,10 @@ var VeChainLoginButton = ({ isDark, gridColumn }) => {
6093
6844
  );
6094
6845
  }
6095
6846
  };
6847
+ const tryAgain = () => {
6848
+ Analytics.auth.tryAgain("vechain" /* VECHAIN */);
6849
+ handleLoginWithVeChain();
6850
+ };
6096
6851
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6097
6852
  /* @__PURE__ */ jsx(GridItem, { colSpan: gridColumn ? gridColumn : 4, w: "full", children: /* @__PURE__ */ jsx(
6098
6853
  ConnectionButton,
@@ -6112,7 +6867,7 @@ var VeChainLoginButton = ({ isDark, gridColumn }) => {
6112
6867
  onClose: () => {
6113
6868
  loginLoadingModal.onClose();
6114
6869
  },
6115
- onTryAgain: handleLoginWithVeChain,
6870
+ onTryAgain: tryAgain,
6116
6871
  error: loginError,
6117
6872
  title: t("Connecting to VeChain"),
6118
6873
  loadingText: t(
@@ -6128,18 +6883,32 @@ var PasskeyLoginButton = ({ isDark, gridColumn }) => {
6128
6883
  const [loginError, setLoginError] = useState();
6129
6884
  const loginLoadingModal = useDisclosure();
6130
6885
  const handleLoginWithPasskey = async () => {
6886
+ Analytics.auth.flowStarted("passkey" /* PASSKEY */);
6887
+ Analytics.auth.methodSelected("passkey" /* PASSKEY */);
6131
6888
  loginLoadingModal.onOpen();
6132
6889
  try {
6133
6890
  setLoginError(void 0);
6134
6891
  await loginWithPasskey();
6135
6892
  loginLoadingModal.onClose();
6136
6893
  } catch (error) {
6894
+ const errorMsg = error instanceof Error ? error.message.toLowerCase() : "";
6895
+ if (errorMsg.includes("not found")) {
6896
+ Analytics.auth.dropOff("passkey-prompt");
6897
+ } else if (errorMsg.includes("abort")) {
6898
+ Analytics.auth.dropOff("passkey-authentication");
6899
+ } else {
6900
+ Analytics.auth.failed("passkey" /* PASSKEY */, errorMsg);
6901
+ }
6137
6902
  console.error(error);
6138
6903
  setLoginError(
6139
6904
  error instanceof Error ? error.message : t("Failed to connect with Passkey")
6140
6905
  );
6141
6906
  }
6142
6907
  };
6908
+ const handleTryAgain = () => {
6909
+ Analytics.auth.tryAgain("passkey" /* PASSKEY */);
6910
+ handleLoginWithPasskey();
6911
+ };
6143
6912
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6144
6913
  /* @__PURE__ */ jsx(GridItem, { colSpan: gridColumn, w: "full", children: /* @__PURE__ */ jsx(
6145
6914
  ConnectionButton,
@@ -6160,55 +6929,82 @@ var PasskeyLoginButton = ({ isDark, gridColumn }) => {
6160
6929
  error: loginError,
6161
6930
  title: t("Connecting with Passkey"),
6162
6931
  loadingText: t("Please complete the passkey authentication..."),
6163
- onTryAgain: handleLoginWithPasskey
6932
+ onTryAgain: handleTryAgain
6164
6933
  }
6165
6934
  )
6166
6935
  ] });
6167
6936
  };
6168
6937
  var DappKitButton = ({ isDark, gridColumn = 2 }) => {
6169
6938
  const { t } = useTranslation();
6170
- const { open: openDappKitModal } = useWalletModal();
6939
+ const { open: openDappKitModal, onConnectionStatusChange } = useWalletModal();
6940
+ const { dappKit } = useVeChainKitConfig();
6941
+ const { user } = usePrivy();
6942
+ const { source } = useWallet$1();
6943
+ const buttonText = !dappKit?.allowedWallets?.includes("sync2") ? "Connect with VeWorld wallet" : t("Connect wallet");
6944
+ useEffect(() => {
6945
+ const handleConnectionChange = (address, error) => {
6946
+ if (!address) {
6947
+ if (error?.message) {
6948
+ const errorMsg = error.message.toLowerCase();
6949
+ if (errorMsg.includes("veworld")) {
6950
+ return Analytics.auth.dropOff("dappkit-veworld", {
6951
+ ...source && { source }
6952
+ });
6953
+ }
6954
+ if (errorMsg.includes("sync2")) {
6955
+ return Analytics.auth.dropOff("dappkit-sync2", {
6956
+ ...source && { source }
6957
+ });
6958
+ }
6959
+ if (errorMsg.includes("wallet-connect")) {
6960
+ return Analytics.auth.dropOff(
6961
+ "dappkit-wallet-connect",
6962
+ {
6963
+ ...source && { source }
6964
+ }
6965
+ );
6966
+ }
6967
+ if (errorMsg && isRejectionError(errorMsg)) {
6968
+ return Analytics.auth.dropOff("dappkit-view", {
6969
+ ...source && { source }
6970
+ });
6971
+ }
6972
+ }
6973
+ return Analytics.auth.dropOff("dappkit-view", {
6974
+ ...source && { source }
6975
+ });
6976
+ } else {
6977
+ Analytics.auth.completed({
6978
+ loginMethod: "dappkit" /* DAPPKIT */
6979
+ });
6980
+ }
6981
+ };
6982
+ onConnectionStatusChange(handleConnectionChange);
6983
+ }, [onConnectionStatusChange]);
6984
+ const handleDappKitClick = () => {
6985
+ Analytics.auth.flowStarted("dappkit" /* DAPPKIT */);
6986
+ Analytics.auth.methodSelected("dappkit" /* DAPPKIT */);
6987
+ openDappKitModal();
6988
+ if (source) {
6989
+ Analytics.auth.completed({
6990
+ userId: user?.id,
6991
+ loginMethod: "dappkit" /* DAPPKIT */,
6992
+ platform: source
6993
+ });
6994
+ }
6995
+ };
6171
6996
  return /* @__PURE__ */ jsx(GridItem, { colSpan: gridColumn ? gridColumn : 2, w: "full", children: /* @__PURE__ */ jsx(
6172
6997
  ConnectionButton,
6173
6998
  {
6174
6999
  isDark,
6175
- onClick: openDappKitModal,
6176
- icon: IoWalletOutline,
6177
- text: gridColumn >= 2 ? t("Connect wallet") : void 0,
6178
- rightIcon: /* @__PURE__ */ jsx(Icon, { as: IoIosArrowForward })
7000
+ onClick: handleDappKitClick,
7001
+ icon: !dappKit?.allowedWallets?.includes("sync2") ? isDark ? VeWorldLogoLight : VeWorldLogoDark : IoWalletOutline,
7002
+ iconWidth: "27px",
7003
+ text: gridColumn >= 2 ? buttonText : void 0,
7004
+ rightIcon: dappKit?.allowedWallets?.includes("sync2") && /* @__PURE__ */ jsx(Icon, { as: IoIosArrowForward }) || void 0
6179
7005
  }
6180
7006
  ) });
6181
7007
  };
6182
- var EcosystemButton = ({
6183
- isDark,
6184
- appsInfo,
6185
- isLoading,
6186
- gridColumn
6187
- }) => {
6188
- const { t } = useTranslation();
6189
- const ecosystemModal = useDisclosure();
6190
- return /* @__PURE__ */ jsxs(Fragment, { children: [
6191
- /* @__PURE__ */ jsx(GridItem, { colSpan: gridColumn, w: "full", children: /* @__PURE__ */ jsx(
6192
- ConnectionButton,
6193
- {
6194
- isDark,
6195
- onClick: ecosystemModal.onOpen,
6196
- icon: AiOutlineUser,
6197
- text: gridColumn && gridColumn >= 2 ? t("Other options") : void 0,
6198
- rightIcon: /* @__PURE__ */ jsx(Icon, { as: IoIosArrowForward })
6199
- }
6200
- ) }),
6201
- /* @__PURE__ */ jsx(
6202
- EcosystemModal,
6203
- {
6204
- isOpen: ecosystemModal.isOpen,
6205
- onClose: ecosystemModal.onClose,
6206
- appsInfo,
6207
- isLoading
6208
- }
6209
- )
6210
- ] });
6211
- };
6212
7008
  var PrivyButton = ({ isDark, onViewMoreLogin, gridColumn }) => {
6213
7009
  const { t } = useTranslation();
6214
7010
  return /* @__PURE__ */ jsx(GridItem, { colSpan: gridColumn, w: "full", children: /* @__PURE__ */ jsx(
@@ -6223,11 +7019,7 @@ var PrivyButton = ({ isDark, onViewMoreLogin, gridColumn }) => {
6223
7019
  ) });
6224
7020
  };
6225
7021
  var ConnectionOptionsStack = () => {
6226
- const {
6227
- privyEcosystemAppIDS,
6228
- loginMethods,
6229
- darkMode: isDark
6230
- } = useVeChainKitConfig();
7022
+ const { loginMethods, darkMode: isDark } = useVeChainKitConfig();
6231
7023
  const { login: viewMoreLogin } = usePrivy();
6232
7024
  const {
6233
7025
  showGoogleLogin,
@@ -6235,11 +7027,9 @@ var ConnectionOptionsStack = () => {
6235
7027
  showPasskey,
6236
7028
  showVeChainLogin,
6237
7029
  showDappKit,
6238
- showEcosystem,
6239
7030
  showMoreLogin,
6240
7031
  isOfficialVeChainApp
6241
7032
  } = useLoginModalContent();
6242
- const { data: appsInfo, isLoading: isEcosystemAppsLoading } = useFetchAppInfo(privyEcosystemAppIDS);
6243
7033
  return /* @__PURE__ */ jsx(Stack, { spacing: 4, w: "full", align: "center", children: /* @__PURE__ */ jsx(Grid, { templateColumns: "repeat(4, 1fr)", gap: 2, w: "full", children: loginMethods?.map(({ method: method35, gridColumn }) => {
6244
7034
  switch (method35) {
6245
7035
  case "email":
@@ -6287,17 +7077,6 @@ var ConnectionOptionsStack = () => {
6287
7077
  },
6288
7078
  "dappkit"
6289
7079
  );
6290
- case "ecosystem":
6291
- return showEcosystem && /* @__PURE__ */ jsx(
6292
- EcosystemButton,
6293
- {
6294
- isDark,
6295
- appsInfo: Object.values(appsInfo || {}),
6296
- isLoading: isEcosystemAppsLoading,
6297
- gridColumn
6298
- },
6299
- "ecosystem"
6300
- );
6301
7080
  case "more":
6302
7081
  return showMoreLogin && /* @__PURE__ */ jsx(
6303
7082
  PrivyButton,
@@ -6313,19 +7092,57 @@ var ConnectionOptionsStack = () => {
6313
7092
  }
6314
7093
  }) }) });
6315
7094
  };
7095
+ var EcosystemButton = ({ appsInfo, isLoading }) => {
7096
+ const { t } = useTranslation();
7097
+ const ecosystemModal = useDisclosure();
7098
+ const handleEcosystemClick = () => {
7099
+ Analytics.auth.flowStarted("ecosystem" /* ECOSYSTEM */);
7100
+ Analytics.auth.methodSelected("ecosystem" /* ECOSYSTEM */);
7101
+ ecosystemModal.onOpen();
7102
+ };
7103
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
7104
+ /* @__PURE__ */ jsx(
7105
+ Button,
7106
+ {
7107
+ fontSize: "sm",
7108
+ variant: "link",
7109
+ onClick: handleEcosystemClick,
7110
+ children: t("Already have an x2earn app wallet?")
7111
+ }
7112
+ ),
7113
+ /* @__PURE__ */ jsx(
7114
+ EcosystemModal,
7115
+ {
7116
+ isOpen: ecosystemModal.isOpen,
7117
+ onClose: ecosystemModal.onClose,
7118
+ appsInfo,
7119
+ isLoading
7120
+ }
7121
+ )
7122
+ ] });
7123
+ };
6316
7124
  var MainContent = ({ setCurrentContent, onClose }) => {
6317
7125
  const { t } = useTranslation();
6318
7126
  const { darkMode: isDark } = useVeChainKitConfig();
6319
7127
  const { connection } = useWallet();
6320
7128
  const { loginModalUI } = useVeChainKitConfig();
7129
+ const { loginMethods, privyEcosystemAppIDS } = useVeChainKitConfig();
7130
+ const { data: appsInfo, isLoading: isEcosystemAppsLoading } = useFetchAppInfo(privyEcosystemAppIDS);
7131
+ const handleFAQClick = () => {
7132
+ Analytics.help.faqViewed();
7133
+ setCurrentContent("faq");
7134
+ };
6321
7135
  useEffect(() => {
6322
7136
  if (connection.isConnected) {
6323
7137
  onClose();
6324
7138
  }
6325
7139
  }, [connection.isConnected, onClose]);
7140
+ const showEcosystemButton = loginMethods?.some(
7141
+ ({ method: method35 }) => method35 === "ecosystem"
7142
+ );
6326
7143
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6327
7144
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
6328
- /* @__PURE__ */ jsx(ModalFAQButton, { onClick: () => setCurrentContent("faq") }),
7145
+ /* @__PURE__ */ jsx(ModalFAQButton, { onClick: handleFAQClick }),
6329
7146
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Log in or sign up") }),
6330
7147
  /* @__PURE__ */ jsx(ModalCloseButton, {})
6331
7148
  ] }),
@@ -6361,7 +7178,14 @@ var MainContent = ({ setCurrentContent, onClose }) => {
6361
7178
  ),
6362
7179
  /* @__PURE__ */ jsx(ConnectionOptionsStack, {})
6363
7180
  ] }),
6364
- /* @__PURE__ */ jsx(ModalFooter, { pt: 0, pb: "5px", children: /* @__PURE__ */ jsx(VersionFooter, {}) })
7181
+ showEcosystemButton ? /* @__PURE__ */ jsx(ModalFooter, { children: /* @__PURE__ */ jsx(HStack, { justify: "center", w: "full", children: /* @__PURE__ */ jsx(
7182
+ EcosystemButton,
7183
+ {
7184
+ isDark,
7185
+ appsInfo: Object.values(appsInfo || {}),
7186
+ isLoading: isEcosystemAppsLoading
7187
+ }
7188
+ ) }) }) : /* @__PURE__ */ jsx(ModalFooter, { pt: 0, pb: "5px" })
6365
7189
  ] });
6366
7190
  };
6367
7191
  var AccountMainContent = ({ setCurrentContent, wallet }) => {
@@ -6773,6 +7597,7 @@ var BalanceSection = ({
6773
7597
  const { refresh } = useRefreshBalances();
6774
7598
  const [isRefreshing, setIsRefreshing] = useState(false);
6775
7599
  const handleRefresh = async () => {
7600
+ Analytics.wallet.balanceRefreshed();
6776
7601
  setIsRefreshing(true);
6777
7602
  await refresh();
6778
7603
  setTimeout(() => {
@@ -6966,12 +7791,18 @@ var QUICK_ACTIONS = [
6966
7791
  {
6967
7792
  icon: MdSwapHoriz,
6968
7793
  label: "Swap",
6969
- onClick: (setCurrentContent) => setCurrentContent("swap-token")
7794
+ onClick: (setCurrentContent) => {
7795
+ Analytics.swap.opened();
7796
+ setCurrentContent("swap-token");
7797
+ }
6970
7798
  },
6971
7799
  {
6972
7800
  icon: LuArrowDownToLine,
6973
7801
  label: "Receive",
6974
- onClick: (setCurrentContent) => setCurrentContent("receive-token")
7802
+ onClick: (setCurrentContent) => {
7803
+ Analytics.wallet.trackWallet("receive_qr_generated");
7804
+ setCurrentContent("receive-token");
7805
+ }
6975
7806
  },
6976
7807
  {
6977
7808
  icon: FiSend,
@@ -6988,17 +7819,26 @@ var QUICK_ACTIONS = [
6988
7819
  {
6989
7820
  icon: RiSwap3Line,
6990
7821
  label: "Bridge",
6991
- onClick: (setCurrentContent) => setCurrentContent("bridge")
7822
+ onClick: (setCurrentContent) => {
7823
+ Analytics.bridge.opened();
7824
+ setCurrentContent("bridge");
7825
+ }
6992
7826
  },
6993
7827
  {
6994
7828
  icon: IoMdApps,
6995
7829
  label: "Ecosystem",
6996
- onClick: (setCurrentContent) => setCurrentContent("ecosystem")
7830
+ onClick: (setCurrentContent) => {
7831
+ Analytics.ecosystem.opened();
7832
+ setCurrentContent("ecosystem");
7833
+ }
6997
7834
  },
6998
7835
  {
6999
7836
  icon: IoMdSettings,
7000
7837
  label: "Settings",
7001
- onClick: (setCurrentContent) => setCurrentContent("settings")
7838
+ onClick: (setCurrentContent) => {
7839
+ Analytics.settings.opened("general");
7840
+ setCurrentContent("settings");
7841
+ }
7002
7842
  }
7003
7843
  ];
7004
7844
  var QuickActionButton = ({
@@ -7055,7 +7895,7 @@ var QuickActionsSection = ({ mt, setCurrentContent }) => {
7055
7895
  const hasUnreadNotifications = notifications.some((n) => !n.isRead);
7056
7896
  const showRedDot = connection.isConnectedWithPrivy && upgradeRequired || hasUnreadNotifications;
7057
7897
  return /* @__PURE__ */ jsxs(VStack, { w: "full", mt, spacing: 4, children: [
7058
- /* @__PURE__ */ jsx(Heading, { size: "xs", fontWeight: "500", w: "full", opacity: 0.5, children: t("Activities") }),
7898
+ /* @__PURE__ */ jsx(Heading, { size: "xs", fontWeight: "500", w: "full", opacity: 0.5, children: t("Tools") }),
7059
7899
  /* @__PURE__ */ jsx(Grid, { templateColumns: "repeat(3, 1fr)", gap: 2, w: "full", children: QUICK_ACTIONS.map((action) => /* @__PURE__ */ jsx(
7060
7900
  QuickActionButton,
7061
7901
  {
@@ -7266,6 +8106,7 @@ var CrossAppConnectionSecurityCard = () => {
7266
8106
  variant: "vechainKitSecondary",
7267
8107
  w: "full",
7268
8108
  onClick: () => {
8109
+ Analytics.settings.manageSecuritySettings();
7269
8110
  window.open(
7270
8111
  connectionCache?.ecosystemApp.website ?? "https://governance.vebetterdao.org/",
7271
8112
  "_blank"
@@ -7292,6 +8133,15 @@ var AccessAndSecurityContent = ({ setCurrentContent }) => {
7292
8133
  connectedWallet?.address ?? "",
7293
8134
  3
7294
8135
  );
8136
+ const handleUpgradeSmartAccountClick = () => {
8137
+ setCurrentContent({
8138
+ type: "upgrade-smart-account",
8139
+ props: {
8140
+ setCurrentContent,
8141
+ initialContent: "access-and-security"
8142
+ }
8143
+ });
8144
+ };
7295
8145
  return /* @__PURE__ */ jsxs(ScrollToTopWrapper, { children: [
7296
8146
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
7297
8147
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Access and security") }),
@@ -7329,15 +8179,7 @@ var AccessAndSecurityContent = ({ setCurrentContent }) => {
7329
8179
  description: t(
7330
8180
  "A new version is available for your account"
7331
8181
  ),
7332
- onClick: () => {
7333
- setCurrentContent({
7334
- type: "upgrade-smart-account",
7335
- props: {
7336
- setCurrentContent,
7337
- initialContent: "access-and-security"
7338
- }
7339
- });
7340
- },
8182
+ onClick: handleUpgradeSmartAccountClick,
7341
8183
  leftIcon: IoCogSharp,
7342
8184
  extraContent: /* @__PURE__ */ jsx(
7343
8185
  Box,
@@ -7359,6 +8201,7 @@ var AccessAndSecurityContent = ({ setCurrentContent }) => {
7359
8201
  {
7360
8202
  title: t("Your embedded wallet"),
7361
8203
  onClick: () => {
8204
+ Analytics.settings.embeddedWalletViewed();
7362
8205
  setCurrentContent("embedded-wallet");
7363
8206
  },
7364
8207
  leftIcon: HiOutlineWallet,
@@ -7636,7 +8479,7 @@ var SettingsContent = ({
7636
8479
  const contentRef = useRef(null);
7637
8480
  const { t } = useTranslation();
7638
8481
  const { privy } = useVeChainKitConfig();
7639
- const { connection, disconnect, account, smartAccount, connectedWallet } = useWallet();
8482
+ const { connection, disconnect, smartAccount, connectedWallet, account } = useWallet();
7640
8483
  const { getConnectionCache } = useCrossAppConnectionCache();
7641
8484
  const connectionCache = getConnectionCache();
7642
8485
  const { data: appInfo } = useFetchAppInfo(privy?.appId ?? "");
@@ -7652,7 +8495,52 @@ var SettingsContent = ({
7652
8495
  if (contentRef.current) {
7653
8496
  contentRef.current.scrollTop = 0;
7654
8497
  }
7655
- }, []);
8498
+ }, []);
8499
+ const handleCustomizeProfile = () => {
8500
+ Analytics.customization.started();
8501
+ setCurrentContent({
8502
+ type: "account-customization",
8503
+ props: {
8504
+ setCurrentContent,
8505
+ initialContentSource: "settings"
8506
+ }
8507
+ });
8508
+ };
8509
+ const handleNameChange = () => {
8510
+ Analytics.nameSelection.started("settings");
8511
+ if (account?.domain) {
8512
+ setCurrentContent({
8513
+ type: "choose-name-search",
8514
+ props: {
8515
+ name: "",
8516
+ setCurrentContent,
8517
+ initialContentSource: "settings"
8518
+ }
8519
+ });
8520
+ } else {
8521
+ setCurrentContent({
8522
+ type: "choose-name",
8523
+ props: {
8524
+ setCurrentContent,
8525
+ initialContentSource: "settings",
8526
+ onBack: () => setCurrentContent("settings")
8527
+ }
8528
+ });
8529
+ }
8530
+ };
8531
+ const handleAccessAndSecurity = () => {
8532
+ setCurrentContent("access-and-security");
8533
+ Analytics.settings.accessAndSecurityViewed();
8534
+ };
8535
+ const handleConnectionDetails = () => {
8536
+ setCurrentContent("connection-details");
8537
+ Analytics.settings.connectionDetailsViewed();
8538
+ };
8539
+ const handleLogout = () => {
8540
+ Analytics.auth.trackAuth("disconnect_initiated");
8541
+ disconnect();
8542
+ onLogoutSuccess();
8543
+ };
7656
8544
  return /* @__PURE__ */ jsxs(Box, { children: [
7657
8545
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
7658
8546
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Settings") }),
@@ -7660,36 +8548,39 @@ var SettingsContent = ({
7660
8548
  /* @__PURE__ */ jsx(ModalCloseButton, {})
7661
8549
  ] }),
7662
8550
  /* @__PURE__ */ jsx(ModalBody, { w: "full", children: /* @__PURE__ */ jsxs(VStack, { w: "full", spacing: 0, children: [
8551
+ /* @__PURE__ */ jsx(
8552
+ Heading,
8553
+ {
8554
+ size: "xs",
8555
+ fontWeight: "500",
8556
+ w: "full",
8557
+ opacity: 0.5,
8558
+ children: t("Wallet")
8559
+ }
8560
+ ),
7663
8561
  /* @__PURE__ */ jsx(
7664
8562
  ActionButton,
7665
8563
  {
7666
8564
  style: {
7667
8565
  marginTop: "10px",
8566
+ borderBottomRadius: "0px"
8567
+ },
8568
+ title: t("Customize profile"),
8569
+ onClick: handleCustomizeProfile,
8570
+ leftIcon: CgProfile,
8571
+ rightIcon: MdOutlineNavigateNext
8572
+ }
8573
+ ),
8574
+ /* @__PURE__ */ jsx(
8575
+ ActionButton,
8576
+ {
8577
+ style: {
8578
+ borderTopRadius: "0px",
7668
8579
  borderBottomRadius: connection.isConnectedWithPrivy ? "0px" : "12px"
7669
8580
  },
7670
8581
  title: t("Choose account name"),
7671
8582
  description: t("Choose a name for your account."),
7672
- onClick: () => {
7673
- if (account?.domain) {
7674
- setCurrentContent({
7675
- type: "choose-name-search",
7676
- props: {
7677
- name: "",
7678
- setCurrentContent,
7679
- initialContentSource: "settings"
7680
- }
7681
- });
7682
- } else {
7683
- setCurrentContent({
7684
- type: "choose-name",
7685
- props: {
7686
- setCurrentContent,
7687
- initialContentSource: "settings",
7688
- onBack: () => setCurrentContent("settings")
7689
- }
7690
- });
7691
- }
7692
- },
8583
+ onClick: handleNameChange,
7693
8584
  leftIcon: FaRegAddressCard,
7694
8585
  rightIcon: MdOutlineNavigateNext
7695
8586
  }
@@ -7704,9 +8595,7 @@ var SettingsContent = ({
7704
8595
  description: t(
7705
8596
  "Manage your embedded wallet security settings or back it up to a new device."
7706
8597
  ),
7707
- onClick: () => {
7708
- setCurrentContent("access-and-security");
7709
- },
8598
+ onClick: handleAccessAndSecurity,
7710
8599
  leftIcon: IoShieldOutline,
7711
8600
  rightIcon: MdOutlineNavigateNext,
7712
8601
  extraContent: upgradeRequired && /* @__PURE__ */ jsx(
@@ -7723,6 +8612,17 @@ var SettingsContent = ({
7723
8612
  )
7724
8613
  }
7725
8614
  ),
8615
+ /* @__PURE__ */ jsx(
8616
+ Heading,
8617
+ {
8618
+ size: "xs",
8619
+ fontWeight: "500",
8620
+ w: "full",
8621
+ opacity: 0.5,
8622
+ mt: 10,
8623
+ children: t("General")
8624
+ }
8625
+ ),
7726
8626
  /* @__PURE__ */ jsx(
7727
8627
  ActionButton,
7728
8628
  {
@@ -7734,9 +8634,7 @@ var SettingsContent = ({
7734
8634
  description: t(
7735
8635
  "View the details of your connection to this app."
7736
8636
  ),
7737
- onClick: () => {
7738
- setCurrentContent("connection-details");
7739
- },
8637
+ onClick: handleConnectionDetails,
7740
8638
  leftIcon: VscDebugDisconnect,
7741
8639
  rightIcon: MdOutlineNavigateNext
7742
8640
  }
@@ -7751,6 +8649,7 @@ var SettingsContent = ({
7751
8649
  title: t("Notifications"),
7752
8650
  description: t("View your notifications and updates."),
7753
8651
  onClick: () => {
8652
+ Analytics.notifications.viewed();
7754
8653
  setCurrentContent("notifications");
7755
8654
  },
7756
8655
  leftIcon: BiBell,
@@ -7799,10 +8698,7 @@ var SettingsContent = ({
7799
8698
  onClick: () => setCurrentContent({
7800
8699
  type: "disconnect-confirm",
7801
8700
  props: {
7802
- onDisconnect: () => {
7803
- disconnect();
7804
- onLogoutSuccess();
7805
- },
8701
+ onDisconnect: handleLogout,
7806
8702
  onBack: () => setCurrentContent("settings")
7807
8703
  }
7808
8704
  }),
@@ -8141,7 +9037,8 @@ var EmbeddedWalletContent = ({ setCurrentContent }) => {
8141
9037
  {
8142
9038
  wallet: connectedWallet,
8143
9039
  style: { mt: 2 },
8144
- showHumanAddress: false
9040
+ showHumanAddress: false,
9041
+ fromScreen: "account"
8145
9042
  }
8146
9043
  )
8147
9044
  ] }),
@@ -8237,6 +9134,11 @@ var SelectTokenContent = ({ onSelectToken, onBack }) => {
8237
9134
  }
8238
9135
  return Number(b.numericBalance) * b.price - Number(a.numericBalance) * a.price;
8239
9136
  });
9137
+ useEffect(() => {
9138
+ if (searchQuery) {
9139
+ Analytics.send.tokenSearchPerformed(searchQuery);
9140
+ }
9141
+ }, [searchQuery, filteredTokens.length]);
8240
9142
  return /* @__PURE__ */ jsxs(Fragment, { children: [
8241
9143
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
8242
9144
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Select Token") }),
@@ -8316,7 +9218,7 @@ var SendTokenContent = ({
8316
9218
  setCurrentContent,
8317
9219
  isNavigatingFromMain = false,
8318
9220
  preselectedToken,
8319
- onBack = () => setCurrentContent("main")
9221
+ onBack: parentOnBack = () => setCurrentContent("main")
8320
9222
  }) => {
8321
9223
  const { t } = useTranslation();
8322
9224
  const { darkMode: isDark } = useVeChainKitConfig();
@@ -8341,21 +9243,69 @@ var SendTokenContent = ({
8341
9243
  },
8342
9244
  mode: "onChange"
8343
9245
  });
8344
- const { toAddressOrDomain } = watch();
8345
- const { domain: resolvedDomain, address: resolvedAddress } = useVechainDomain$1({ addressOrDomain: toAddressOrDomain });
9246
+ const { toAddressOrDomain, amount } = watch();
9247
+ useEffect(() => {
9248
+ if (selectedToken && amount) {
9249
+ Analytics.send.flow("amount", {
9250
+ tokenSymbol: selectedToken.symbol,
9251
+ amount
9252
+ });
9253
+ }
9254
+ }, [amount, selectedToken]);
9255
+ useEffect(() => {
9256
+ if (selectedToken && toAddressOrDomain) {
9257
+ Analytics.send.flow("recipient", {
9258
+ tokenSymbol: selectedToken.symbol,
9259
+ recipientAddress: toAddressOrDomain,
9260
+ recipientType: toAddressOrDomain.includes(".") ? "domain" : "address"
9261
+ });
9262
+ }
9263
+ }, [toAddressOrDomain, selectedToken]);
9264
+ const { data: resolvedDomainData } = useVechainDomain(toAddressOrDomain);
8346
9265
  const handleSetMaxAmount = () => {
8347
9266
  if (selectedToken) {
8348
9267
  setValue("amount", selectedToken.numericBalance);
9268
+ Analytics.send.flow("amount", {
9269
+ tokenSymbol: selectedToken.symbol,
9270
+ amount: selectedToken.numericBalance
9271
+ });
9272
+ }
9273
+ };
9274
+ const handleBack = () => {
9275
+ if (selectedToken) {
9276
+ Analytics.send.flow("review", {
9277
+ tokenSymbol: selectedToken.symbol,
9278
+ amount: amount || void 0,
9279
+ recipientAddress: toAddressOrDomain || void 0,
9280
+ error: "back_button",
9281
+ isError: false
9282
+ });
9283
+ }
9284
+ parentOnBack();
9285
+ };
9286
+ const handleClose = () => {
9287
+ if (selectedToken) {
9288
+ Analytics.send.flow("review", {
9289
+ tokenSymbol: selectedToken.symbol,
9290
+ amount: amount || void 0,
9291
+ recipientAddress: toAddressOrDomain || void 0,
9292
+ error: "modal_closed",
9293
+ isError: false
9294
+ });
8349
9295
  }
8350
9296
  };
8351
9297
  const onSubmit = async (data) => {
8352
9298
  if (!selectedToken) return;
8353
- const isValidReceiver = !compareAddresses(resolvedAddress ?? ZeroAddress, ZeroAddress) || isValidAddress(data.toAddressOrDomain);
9299
+ const isValidReceiver = resolvedDomainData?.isValidAddressOrDomain && (!resolvedDomainData?.domain || resolvedDomainData?.domain && resolvedDomainData?.isPrimaryDomain);
8354
9300
  if (!isValidReceiver) {
8355
9301
  setError("toAddressOrDomain", {
8356
9302
  type: "manual",
8357
9303
  message: t("Invalid address or domain")
8358
9304
  });
9305
+ Analytics.send.flow("review", {
9306
+ tokenSymbol: selectedToken.symbol,
9307
+ error: "Invalid address or domain"
9308
+ });
8359
9309
  return;
8360
9310
  }
8361
9311
  if (selectedToken) {
@@ -8367,15 +9317,25 @@ var SendTokenContent = ({
8367
9317
  symbol: selectedToken.symbol
8368
9318
  })
8369
9319
  });
9320
+ Analytics.send.flow("review", {
9321
+ tokenSymbol: selectedToken.symbol,
9322
+ error: "Insufficient balance"
9323
+ });
8370
9324
  return;
8371
9325
  }
8372
9326
  }
9327
+ Analytics.send.flow("review", {
9328
+ tokenSymbol: selectedToken.symbol,
9329
+ amount: data.amount,
9330
+ recipientAddress: resolvedDomainData?.address || data.toAddressOrDomain,
9331
+ recipientType: resolvedDomainData?.domain ? "domain" : "address"
9332
+ });
8373
9333
  setCurrentContent({
8374
9334
  type: "send-token-summary",
8375
9335
  props: {
8376
9336
  toAddressOrDomain: data.toAddressOrDomain,
8377
- resolvedDomain,
8378
- resolvedAddress,
9337
+ resolvedDomain: resolvedDomainData?.domain,
9338
+ resolvedAddress: resolvedDomainData?.address,
8379
9339
  amount: data.amount,
8380
9340
  selectedToken,
8381
9341
  setCurrentContent
@@ -8388,14 +9348,27 @@ var SendTokenContent = ({
8388
9348
  {
8389
9349
  setCurrentContent,
8390
9350
  onSelectToken: (token) => {
9351
+ Analytics.send.tokenPageViewed(token.symbol);
8391
9352
  setSelectedToken(token);
8392
9353
  setIsSelectingToken(false);
8393
9354
  setIsInitialTokenSelection(false);
8394
9355
  },
8395
9356
  onBack: () => {
8396
9357
  if (isInitialTokenSelection) {
9358
+ if (selectedToken) {
9359
+ Analytics.send.flow("token_select", {
9360
+ tokenSymbol: selectedToken.symbol,
9361
+ error: "User cancelled - back to main"
9362
+ });
9363
+ }
8397
9364
  setCurrentContent("main");
8398
9365
  } else {
9366
+ if (selectedToken) {
9367
+ Analytics.send.flow("token_select", {
9368
+ tokenSymbol: selectedToken.symbol,
9369
+ error: "User cancelled - back to form"
9370
+ });
9371
+ }
8399
9372
  setIsSelectingToken(false);
8400
9373
  }
8401
9374
  }
@@ -8405,8 +9378,8 @@ var SendTokenContent = ({
8405
9378
  return /* @__PURE__ */ jsxs(Fragment, { children: [
8406
9379
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
8407
9380
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Send") }),
8408
- /* @__PURE__ */ jsx(ModalBackButton, { onClick: onBack }),
8409
- /* @__PURE__ */ jsx(ModalCloseButton, {})
9381
+ /* @__PURE__ */ jsx(ModalBackButton, { onClick: handleBack }),
9382
+ /* @__PURE__ */ jsx(ModalCloseButton, { onClick: handleClose })
8410
9383
  ] }),
8411
9384
  /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(VStack, { spacing: 1, align: "stretch", position: "relative", children: [
8412
9385
  /* @__PURE__ */ jsx(
@@ -8648,7 +9621,7 @@ var SendTokenSummaryContent = ({
8648
9621
  }) => {
8649
9622
  const { t } = useTranslation();
8650
9623
  const { account, connection, connectedWallet } = useWallet();
8651
- const { data: avatar } = useGetAvatar(resolvedDomain ?? "");
9624
+ const { data: avatar } = useGetAvatarOfAddress(resolvedAddress ?? "");
8652
9625
  const { network } = useVeChainKitConfig();
8653
9626
  const { data: upgradeRequired } = useUpgradeRequired(
8654
9627
  account?.address ?? "",
@@ -8662,6 +9635,57 @@ var SendTokenSummaryContent = ({
8662
9635
  }
8663
9636
  return getPicassoImage(resolvedAddress || toAddressOrDomain);
8664
9637
  }, [avatar, network.type, resolvedAddress, toAddressOrDomain]);
9638
+ const handleSend = async () => {
9639
+ if (upgradeRequired) {
9640
+ openUpgradeSmartAccountModal();
9641
+ return;
9642
+ }
9643
+ try {
9644
+ Analytics.send.flow("review", {
9645
+ tokenSymbol: selectedToken.symbol,
9646
+ amount,
9647
+ recipientAddress: resolvedAddress || toAddressOrDomain,
9648
+ recipientType: resolvedDomain ? "domain" : "address"
9649
+ });
9650
+ if (selectedToken.symbol === "VET") {
9651
+ await transferVET();
9652
+ } else {
9653
+ await transferERC20();
9654
+ }
9655
+ } catch (error) {
9656
+ Analytics.send.flow("review", {
9657
+ tokenSymbol: selectedToken.symbol,
9658
+ error: error instanceof Error ? error.message : "Unknown error"
9659
+ });
9660
+ console.error(t("Transaction failed:"), error);
9661
+ }
9662
+ };
9663
+ const handleSuccess = (txId) => {
9664
+ Analytics.send.flow("confirmation", {
9665
+ tokenSymbol: selectedToken.symbol,
9666
+ amount,
9667
+ recipientAddress: resolvedAddress || toAddressOrDomain,
9668
+ recipientType: resolvedDomain ? "domain" : "address"
9669
+ });
9670
+ Analytics.send.completed(
9671
+ selectedToken.symbol,
9672
+ amount,
9673
+ txId,
9674
+ selectedToken.symbol === "VET" ? "vet" : "erc20"
9675
+ );
9676
+ setCurrentContent({
9677
+ type: "successful-operation",
9678
+ props: {
9679
+ setCurrentContent,
9680
+ txId,
9681
+ title: t("Transaction successful"),
9682
+ onDone: () => {
9683
+ setCurrentContent("main");
9684
+ },
9685
+ showSocialButtons: true
9686
+ }
9687
+ });
9688
+ };
8665
9689
  const {
8666
9690
  sendTransaction: transferERC20,
8667
9691
  txReceipt: transferERC20Receipt,
@@ -8675,18 +9699,10 @@ var SendTokenSummaryContent = ({
8675
9699
  tokenAddress: selectedToken.address,
8676
9700
  tokenName: selectedToken.symbol,
8677
9701
  onSuccess: () => {
8678
- setCurrentContent({
8679
- type: "successful-operation",
8680
- props: {
8681
- setCurrentContent,
8682
- txId: transferERC20Receipt?.meta.txID,
8683
- title: t("Transaction successful"),
8684
- onDone: () => {
8685
- setCurrentContent("main");
8686
- },
8687
- showSocialButtons: true
8688
- }
8689
- });
9702
+ handleSuccess(transferERC20Receipt?.meta.txID ?? "");
9703
+ },
9704
+ onError: (error) => {
9705
+ handleError(error ?? "");
8690
9706
  }
8691
9707
  });
8692
9708
  const {
@@ -8700,42 +9716,65 @@ var SendTokenSummaryContent = ({
8700
9716
  receiverAddress: resolvedAddress || toAddressOrDomain,
8701
9717
  amount,
8702
9718
  onSuccess: () => {
8703
- setCurrentContent({
8704
- type: "successful-operation",
8705
- props: {
8706
- setCurrentContent,
8707
- txId: transferVETReceipt?.meta.txID,
8708
- title: t("Transaction successful"),
8709
- onDone: () => {
8710
- setCurrentContent("main");
8711
- },
8712
- showSocialButtons: true
8713
- }
8714
- });
9719
+ handleSuccess(transferVETReceipt?.meta.txID ?? "");
8715
9720
  },
8716
- onError: () => {
9721
+ onError: (error) => {
9722
+ handleError(error ?? "");
8717
9723
  }
8718
9724
  });
8719
9725
  const getTxReceipt = () => {
8720
9726
  return selectedToken.symbol === "VET" ? transferVETReceipt : transferERC20Receipt;
8721
9727
  };
8722
- const handleSend = async () => {
8723
- if (upgradeRequired) {
8724
- openUpgradeSmartAccountModal();
8725
- return;
8726
- }
8727
- try {
8728
- if (selectedToken.symbol === "VET") {
8729
- await transferVET();
8730
- } else {
8731
- await transferERC20();
9728
+ const isTxWaitingConfirmation = transferERC20WaitingForWalletConfirmation || transferVETWaitingForWalletConfirmation;
9729
+ const isSubmitting = isTxWaitingConfirmation || transferERC20Pending || transferVETPending;
9730
+ const handleBack = () => {
9731
+ Analytics.send.flow("review", {
9732
+ tokenSymbol: selectedToken.symbol,
9733
+ amount,
9734
+ recipientAddress: resolvedAddress || toAddressOrDomain,
9735
+ recipientType: resolvedDomain ? "domain" : "address",
9736
+ error: "back_button",
9737
+ isError: false
9738
+ });
9739
+ setCurrentContent({
9740
+ type: "send-token",
9741
+ props: {
9742
+ setCurrentContent,
9743
+ preselectedToken: selectedToken
8732
9744
  }
8733
- } catch (error) {
8734
- console.error(t("Transaction failed:"), error);
9745
+ });
9746
+ };
9747
+ const handleClose = () => {
9748
+ Analytics.send.flow("review", {
9749
+ tokenSymbol: selectedToken.symbol,
9750
+ amount,
9751
+ recipientAddress: resolvedAddress || toAddressOrDomain,
9752
+ recipientType: resolvedDomain ? "domain" : "address",
9753
+ error: "modal_closed",
9754
+ isError: false
9755
+ });
9756
+ };
9757
+ const handleError = (error) => {
9758
+ if (error && isRejectionError(error)) {
9759
+ Analytics.send.flow("review", {
9760
+ tokenSymbol: selectedToken.symbol,
9761
+ amount,
9762
+ recipientAddress: resolvedAddress || toAddressOrDomain,
9763
+ recipientType: resolvedDomain ? "domain" : "address",
9764
+ error: "wallet_rejected",
9765
+ isError: true
9766
+ });
9767
+ } else {
9768
+ Analytics.send.flow("review", {
9769
+ tokenSymbol: selectedToken.symbol,
9770
+ amount,
9771
+ recipientAddress: resolvedAddress || toAddressOrDomain,
9772
+ recipientType: resolvedDomain ? "domain" : "address",
9773
+ error,
9774
+ isError: true
9775
+ });
8735
9776
  }
8736
9777
  };
8737
- const isTxWaitingConfirmation = transferERC20WaitingForWalletConfirmation || transferVETWaitingForWalletConfirmation;
8738
- const isSubmitting = isTxWaitingConfirmation || transferERC20Pending || transferVETPending;
8739
9778
  return /* @__PURE__ */ jsxs(Fragment, { children: [
8740
9779
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
8741
9780
  /* @__PURE__ */ jsx(ModalHeader, { children: "Send" }),
@@ -8743,15 +9782,16 @@ var SendTokenSummaryContent = ({
8743
9782
  ModalBackButton,
8744
9783
  {
8745
9784
  isDisabled: isSubmitting,
8746
- onClick: () => setCurrentContent({
8747
- type: "send-token",
8748
- props: {
8749
- setCurrentContent
8750
- }
8751
- })
9785
+ onClick: handleBack
8752
9786
  }
8753
9787
  ),
8754
- /* @__PURE__ */ jsx(ModalCloseButton, { isDisabled: isSubmitting })
9788
+ /* @__PURE__ */ jsx(
9789
+ ModalCloseButton,
9790
+ {
9791
+ isDisabled: isSubmitting,
9792
+ onClick: handleClose
9793
+ }
9794
+ )
8755
9795
  ] }),
8756
9796
  /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(VStack, { spacing: 6, align: "stretch", w: "full", children: [
8757
9797
  connection.isConnectedWithPrivy && /* @__PURE__ */ jsx(ExchangeWarningAlert, {}),
@@ -8863,7 +9903,14 @@ var ReceiveTokenContent = ({ setCurrentContent }) => {
8863
9903
  }
8864
9904
  }
8865
9905
  ),
8866
- /* @__PURE__ */ jsx(AddressDisplay, { wallet: account, style: { w: "85%" } }),
9906
+ /* @__PURE__ */ jsx(
9907
+ AddressDisplay,
9908
+ {
9909
+ wallet: account,
9910
+ style: { w: "85%" },
9911
+ fromScreen: "receive"
9912
+ }
9913
+ ),
8867
9914
  /* @__PURE__ */ jsx(Text, { fontSize: "sm", textAlign: "center", children: t("Copy your address or scan this QR code") }),
8868
9915
  /* @__PURE__ */ jsx(Text, { fontSize: "xs", textAlign: "center", opacity: 0.5, children: t("This address only supports VeChain assets.") })
8869
9916
  ] }) }),
@@ -8873,6 +9920,10 @@ var ReceiveTokenContent = ({ setCurrentContent }) => {
8873
9920
  };
8874
9921
  var SwapTokenContent = ({ setCurrentContent }) => {
8875
9922
  const { t } = useTranslation();
9923
+ const handleLaunchBetterSwap = () => {
9924
+ Analytics.swap.launchBetterSwap();
9925
+ window.open("https://swap.tbc.vet/", "_blank");
9926
+ };
8876
9927
  return /* @__PURE__ */ jsxs(Fragment, { children: [
8877
9928
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
8878
9929
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Swap") }),
@@ -8898,9 +9949,7 @@ var SwapTokenContent = ({ setCurrentContent }) => {
8898
9949
  Button,
8899
9950
  {
8900
9951
  variant: "vechainKitSecondary",
8901
- onClick: () => {
8902
- window.open("https://swap.tbc.vet/", "_blank");
8903
- },
9952
+ onClick: handleLaunchBetterSwap,
8904
9953
  children: [
8905
9954
  t("Launch BetterSwap"),
8906
9955
  /* @__PURE__ */ jsx(Icon, { as: FaExternalLinkAlt, ml: 2 })
@@ -8916,11 +9965,26 @@ var ChooseNameContent = ({
8916
9965
  }) => {
8917
9966
  const { t } = useTranslation();
8918
9967
  const { darkMode: isDark } = useVeChainKitConfig();
9968
+ const handleClose = () => {
9969
+ Analytics.nameSelection.dropOff("search", {
9970
+ isError: false,
9971
+ name: "",
9972
+ reason: "modal_closed"
9973
+ });
9974
+ };
9975
+ const handleBack = () => {
9976
+ Analytics.nameSelection.dropOff("search", {
9977
+ isError: false,
9978
+ name: "",
9979
+ reason: "back_button"
9980
+ });
9981
+ onBack();
9982
+ };
8919
9983
  return /* @__PURE__ */ jsxs(Fragment, { children: [
8920
9984
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
8921
9985
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Choose your account name") }),
8922
- /* @__PURE__ */ jsx(ModalBackButton, { onClick: onBack }),
8923
- /* @__PURE__ */ jsx(ModalCloseButton, {})
9986
+ /* @__PURE__ */ jsx(ModalBackButton, { onClick: handleBack }),
9987
+ /* @__PURE__ */ jsx(ModalCloseButton, { onClick: handleClose })
8924
9988
  ] }),
8925
9989
  /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(VStack, { spacing: 6, align: "center", py: 8, children: [
8926
9990
  /* @__PURE__ */ jsx(
@@ -9037,9 +10101,76 @@ var DomainListItem = ({
9037
10101
  domain.name
9038
10102
  );
9039
10103
  };
10104
+ var UnsetDomainListItem = ({ onUnset }) => {
10105
+ const { darkMode: isDark } = useVeChainKitConfig();
10106
+ const { t } = useTranslation();
10107
+ return /* @__PURE__ */ jsx(
10108
+ ListItem,
10109
+ {
10110
+ p: 4,
10111
+ bg: isDark ? "#1f1f1e" : "white",
10112
+ borderRadius: "xl",
10113
+ cursor: "pointer",
10114
+ opacity: 1,
10115
+ border: `1px solid ${isDark ? "#2d2d2d" : "#eaeaea"}`,
10116
+ _hover: {
10117
+ bg: isDark ? "#252525" : "gray.50",
10118
+ borderColor: isDark ? "#3d3d3d" : "#dedede",
10119
+ color: "red.400"
10120
+ },
10121
+ onClick: onUnset,
10122
+ transition: "all 0.2s",
10123
+ role: "button",
10124
+ "aria-label": t("Unset current domain"),
10125
+ children: /* @__PURE__ */ jsxs(HStack, { spacing: 3, align: "center", children: [
10126
+ /* @__PURE__ */ jsx(
10127
+ Box,
10128
+ {
10129
+ width: "40px",
10130
+ height: "40px",
10131
+ borderRadius: "full",
10132
+ display: "flex",
10133
+ alignItems: "center",
10134
+ justifyContent: "center",
10135
+ bg: isDark ? "whiteAlpha.100" : "gray.100",
10136
+ children: /* @__PURE__ */ jsx(
10137
+ Icon,
10138
+ {
10139
+ as: IoTrashOutline,
10140
+ fontSize: "18px",
10141
+ color: isDark ? "red.300" : "red.500"
10142
+ }
10143
+ )
10144
+ }
10145
+ ),
10146
+ /* @__PURE__ */ jsxs(VStack, { align: "start", spacing: 0, flex: 1, children: [
10147
+ /* @__PURE__ */ jsx(
10148
+ Text,
10149
+ {
10150
+ color: isDark ? "whiteAlpha.900" : "gray.700",
10151
+ fontSize: "md",
10152
+ fontWeight: "500",
10153
+ children: t("Unset current domain")
10154
+ }
10155
+ ),
10156
+ /* @__PURE__ */ jsx(
10157
+ Text,
10158
+ {
10159
+ fontSize: "sm",
10160
+ color: isDark ? "whiteAlpha.600" : "blackAlpha.600",
10161
+ children: t("Remove your current domain name")
10162
+ }
10163
+ )
10164
+ ] })
10165
+ ] })
10166
+ },
10167
+ "unset-domain-list-item"
10168
+ );
10169
+ };
9040
10170
  var ExistingDomainsList = ({
9041
10171
  domains,
9042
10172
  onDomainSelect,
10173
+ onUnsetDomain,
9043
10174
  isLoading
9044
10175
  }) => {
9045
10176
  const { t } = useTranslation();
@@ -9073,15 +10204,23 @@ var ExistingDomainsList = ({
9073
10204
  ]
9074
10205
  }
9075
10206
  ),
9076
- /* @__PURE__ */ jsx(AccordionPanel, { pb: 4, pt: 2, children: /* @__PURE__ */ jsx(List, { spacing: 2, children: domains.map((domain) => /* @__PURE__ */ jsx(
9077
- DomainListItem,
9078
- {
9079
- domain,
9080
- isCurrentDomain: domain.name === account?.domain,
9081
- onSelect: onDomainSelect
9082
- },
9083
- domain.name
9084
- )) }) })
10207
+ /* @__PURE__ */ jsx(AccordionPanel, { pb: 4, pt: 2, children: /* @__PURE__ */ jsxs(List, { spacing: 2, children: [
10208
+ domains.map((domain) => /* @__PURE__ */ jsx(
10209
+ DomainListItem,
10210
+ {
10211
+ domain,
10212
+ isCurrentDomain: domain.name === account?.domain,
10213
+ onSelect: onDomainSelect
10214
+ },
10215
+ domain.name
10216
+ )),
10217
+ account?.domain && /* @__PURE__ */ jsx(
10218
+ UnsetDomainListItem,
10219
+ {
10220
+ onUnset: onUnsetDomain
10221
+ }
10222
+ )
10223
+ ] }) })
9085
10224
  ] }) }) });
9086
10225
  };
9087
10226
  var ChooseNameSearchContent = ({
@@ -9116,10 +10255,15 @@ var ChooseNameSearchContent = ({
9116
10255
  ];
9117
10256
  useEffect(() => {
9118
10257
  if (!hasInteracted) return;
10258
+ const hasSpecialChars = /[^a-zA-Z0-9-]|\s/.test(name);
9119
10259
  if (name.length < 3) {
9120
10260
  setError(t("Name must be at least 3 characters long"));
9121
10261
  setIsAvailable(false);
9122
10262
  setIsOwnDomain(false);
10263
+ } else if (hasSpecialChars) {
10264
+ setError(t("Only letters, numbers, and hyphens are allowed"));
10265
+ setIsAvailable(false);
10266
+ setIsOwnDomain(false);
9123
10267
  } else if (isProtected) {
9124
10268
  setError(t("This domain is protected"));
9125
10269
  setIsAvailable(false);
@@ -9140,6 +10284,9 @@ var ChooseNameSearchContent = ({
9140
10284
  setIsAvailable(true);
9141
10285
  setIsOwnDomain(false);
9142
10286
  }
10287
+ if (name.length >= 3 && !isFetchingDomainInfo) {
10288
+ Analytics.nameSelection.searched(name, isAvailable);
10289
+ }
9143
10290
  }, [
9144
10291
  name,
9145
10292
  hasInteracted,
@@ -9147,7 +10294,9 @@ var ChooseNameSearchContent = ({
9147
10294
  isEnsCheckLoading,
9148
10295
  domainInfo,
9149
10296
  account?.address,
9150
- isProtected
10297
+ isProtected,
10298
+ isAvailable,
10299
+ isFetchingDomainInfo
9151
10300
  ]);
9152
10301
  const handleContinue = () => {
9153
10302
  if (isAvailable && !error) {
@@ -9163,27 +10312,53 @@ var ChooseNameSearchContent = ({
9163
10312
  }
9164
10313
  };
9165
10314
  const handleDomainSelect = (selectedDomain) => {
9166
- const baseName = selectedDomain.split(".")[0];
10315
+ const parts3 = selectedDomain.split(".");
10316
+ const baseName = parts3[0];
10317
+ const domainType = parts3.length > 2 ? `${parts3[1]}.${parts3[2]}` : "vet";
9167
10318
  setCurrentContent({
9168
10319
  type: "choose-name-summary",
9169
10320
  props: {
9170
10321
  name: baseName,
10322
+ domainType,
9171
10323
  isOwnDomain: true,
9172
10324
  setCurrentContent,
9173
10325
  initialContentSource
9174
10326
  }
9175
10327
  });
9176
10328
  };
10329
+ const handleUnsetDomain = () => {
10330
+ setCurrentContent({
10331
+ type: "choose-name-summary",
10332
+ props: {
10333
+ name: "",
10334
+ domainType: "",
10335
+ isOwnDomain: false,
10336
+ isUnsetting: true,
10337
+ setCurrentContent,
10338
+ initialContentSource
10339
+ }
10340
+ });
10341
+ };
10342
+ const handleClose = () => {
10343
+ Analytics.nameSelection.dropOff("search", {
10344
+ isError: false,
10345
+ name,
10346
+ error: "modal_closed"
10347
+ });
10348
+ };
10349
+ const handleBack = () => {
10350
+ Analytics.nameSelection.dropOff("search", {
10351
+ isError: false,
10352
+ name,
10353
+ reason: "back_button"
10354
+ });
10355
+ setCurrentContent(initialContentSource);
10356
+ };
9177
10357
  return /* @__PURE__ */ jsxs(Fragment, { children: [
9178
- /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
9179
- /* @__PURE__ */ jsx(ModalHeader, { children: t("Choose Name") }),
9180
- /* @__PURE__ */ jsx(
9181
- ModalBackButton,
9182
- {
9183
- onClick: () => setCurrentContent(initialContentSource)
9184
- }
9185
- ),
9186
- /* @__PURE__ */ jsx(ModalCloseButton, {})
10358
+ /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
10359
+ /* @__PURE__ */ jsx(ModalHeader, { children: t("Choose Name") }),
10360
+ /* @__PURE__ */ jsx(ModalBackButton, { onClick: handleBack }),
10361
+ /* @__PURE__ */ jsx(ModalCloseButton, { onClick: handleClose })
9187
10362
  ] }),
9188
10363
  /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(VStack, { spacing: 4, align: "stretch", children: [
9189
10364
  /* @__PURE__ */ jsx(
@@ -9191,6 +10366,7 @@ var ChooseNameSearchContent = ({
9191
10366
  {
9192
10367
  domains: allUserDomains,
9193
10368
  onDomainSelect: handleDomainSelect,
10369
+ onUnsetDomain: handleUnsetDomain,
9194
10370
  isLoading: isLoadingOwnedDomains
9195
10371
  }
9196
10372
  ),
@@ -9262,7 +10438,9 @@ var ChooseNameSearchContent = ({
9262
10438
  var ChooseNameSummaryContent = ({
9263
10439
  setCurrentContent,
9264
10440
  name,
10441
+ domainType = "veworld.vet",
9265
10442
  isOwnDomain,
10443
+ isUnsetting = false,
9266
10444
  initialContentSource = "settings"
9267
10445
  }) => {
9268
10446
  const { t } = useTranslation();
@@ -9273,34 +10451,60 @@ var ChooseNameSummaryContent = ({
9273
10451
  3
9274
10452
  );
9275
10453
  const { open: openUpgradeSmartAccountModal } = useUpgradeSmartAccountModal();
10454
+ const handleError = (error) => {
10455
+ if (isRejectionError(error)) {
10456
+ Analytics.nameSelection.dropOff("confirmation", {
10457
+ isError: true,
10458
+ name,
10459
+ error,
10460
+ reason: "wallet_rejected"
10461
+ });
10462
+ } else {
10463
+ Analytics.nameSelection.failed("confirmation", {
10464
+ error,
10465
+ name
10466
+ });
10467
+ }
10468
+ };
10469
+ const unsetDomainHook = useUnsetDomain({
10470
+ onSuccess: () => handleSuccess()
10471
+ });
10472
+ const isVeWorldSubdomain = domainType.endsWith("veworld.vet");
10473
+ const veWorldSubdomainHook = useClaimVeWorldSubdomain({
10474
+ subdomain: name,
10475
+ domain: domainType,
10476
+ alreadyOwned: isOwnDomain,
10477
+ onSuccess: () => handleSuccess()
10478
+ });
10479
+ const vetDomainHook = useClaimVetDomain({
10480
+ domain: name,
10481
+ alreadyOwned: isOwnDomain,
10482
+ onSuccess: () => handleSuccess()
10483
+ });
9276
10484
  const {
9277
10485
  sendTransaction,
9278
10486
  txReceipt,
9279
10487
  error: txError,
9280
10488
  isWaitingForWalletConfirmation,
9281
10489
  isTransactionPending
9282
- } = useClaimVeWorldSubdomain({
9283
- subdomain: name,
9284
- domain: "veworld.vet",
9285
- alreadyOwned: isOwnDomain,
9286
- onSuccess: () => {
9287
- setCurrentContent({
9288
- type: "successful-operation",
9289
- props: {
9290
- setCurrentContent,
9291
- txId: txReceipt?.meta.txID,
9292
- title: t("Name claimed"),
9293
- description: t(
9294
- `Your {{name}}.veworld.vet name has been claimed successfully.`,
9295
- { name }
9296
- ),
9297
- onDone: () => {
9298
- setCurrentContent(initialContentSource);
9299
- }
10490
+ } = isUnsetting ? unsetDomainHook : isVeWorldSubdomain ? veWorldSubdomainHook : vetDomainHook;
10491
+ const handleSuccess = () => {
10492
+ setCurrentContent({
10493
+ type: "successful-operation",
10494
+ props: {
10495
+ setCurrentContent,
10496
+ txId: txReceipt?.meta.txID,
10497
+ title: isUnsetting ? t("Domain unset") : t("Domain set"),
10498
+ description: isUnsetting ? t("Your domain has been unset successfully.") : t(
10499
+ `Your address has been successfully set to {{name}}.{{domainType}}.`,
10500
+ { name, domainType }
10501
+ ),
10502
+ onDone: () => {
10503
+ setCurrentContent(initialContentSource);
9300
10504
  }
9301
- });
9302
- }
9303
- });
10505
+ }
10506
+ });
10507
+ };
9304
10508
  const handleConfirm = async () => {
9305
10509
  if (upgradeRequired) {
9306
10510
  openUpgradeSmartAccountModal();
@@ -9312,28 +10516,57 @@ var ChooseNameSummaryContent = ({
9312
10516
  console.error("Transaction failed:", error);
9313
10517
  }
9314
10518
  };
10519
+ const handleRetry = () => {
10520
+ Analytics.nameSelection.retry("confirmation");
10521
+ handleConfirm();
10522
+ };
10523
+ const handleClose = () => {
10524
+ Analytics.nameSelection.dropOff("confirmation", {
10525
+ isError: false,
10526
+ name: isUnsetting ? "" : name,
10527
+ error: "modal_closed"
10528
+ });
10529
+ };
10530
+ const handleBack = () => {
10531
+ Analytics.nameSelection.dropOff("confirmation", {
10532
+ isError: false,
10533
+ name: isUnsetting ? "" : name,
10534
+ error: "back_button"
10535
+ });
10536
+ setCurrentContent({
10537
+ type: "choose-name-search",
10538
+ props: {
10539
+ setCurrentContent,
10540
+ name,
10541
+ initialContentSource
10542
+ }
10543
+ });
10544
+ };
9315
10545
  return /* @__PURE__ */ jsxs(Fragment, { children: [
9316
10546
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
9317
- /* @__PURE__ */ jsx(ModalHeader, { children: t("Confirm Name") }),
10547
+ /* @__PURE__ */ jsx(ModalHeader, { children: isUnsetting ? t("Confirm Unset Domain") : t("Confirm Name") }),
9318
10548
  /* @__PURE__ */ jsx(
9319
10549
  ModalBackButton,
9320
10550
  {
9321
- onClick: () => setCurrentContent({
9322
- type: "choose-name-search",
9323
- props: {
9324
- setCurrentContent,
9325
- name,
9326
- initialContentSource
9327
- }
9328
- }),
10551
+ onClick: handleBack,
9329
10552
  isDisabled: isTransactionPending
9330
10553
  }
9331
10554
  ),
9332
- /* @__PURE__ */ jsx(ModalCloseButton, { isDisabled: isTransactionPending })
10555
+ /* @__PURE__ */ jsx(
10556
+ ModalCloseButton,
10557
+ {
10558
+ isDisabled: isTransactionPending,
10559
+ onClick: handleClose
10560
+ }
10561
+ )
9333
10562
  ] }),
9334
10563
  /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(VStack, { spacing: 4, w: "full", textAlign: "center", children: [
9335
- /* @__PURE__ */ jsx(Text, { fontSize: "lg", children: t("Are you sure you want to set your domain name to") }),
9336
- /* @__PURE__ */ jsx(Text, { fontSize: "xl", fontWeight: "bold", color: "blue.500", children: `${name}.veworld.vet` })
10564
+ /* @__PURE__ */ jsx(Text, { fontSize: "lg", children: isUnsetting ? t(
10565
+ "Are you sure you want to unset your current domain?"
10566
+ ) : t(
10567
+ "Are you sure you want to set your domain name to"
10568
+ ) }),
10569
+ !isUnsetting && /* @__PURE__ */ jsx(Text, { fontSize: "xl", fontWeight: "bold", color: "blue.500", children: `${name}.${domainType}` })
9337
10570
  ] }) }),
9338
10571
  /* @__PURE__ */ jsx(ModalFooter, { gap: 4, w: "full", children: /* @__PURE__ */ jsx(
9339
10572
  TransactionButtonAndStatus,
@@ -9342,10 +10575,12 @@ var ChooseNameSummaryContent = ({
9342
10575
  isSubmitting: isTransactionPending,
9343
10576
  isTxWaitingConfirmation: isWaitingForWalletConfirmation,
9344
10577
  onConfirm: handleConfirm,
9345
- transactionPendingText: t("Claiming name..."),
10578
+ onRetry: handleRetry,
10579
+ transactionPendingText: isUnsetting ? t("Unsetting current domain...") : t("Claiming name..."),
9346
10580
  txReceipt,
9347
10581
  buttonText: t("Confirm"),
9348
- isDisabled: isTransactionPending
10582
+ isDisabled: isTransactionPending,
10583
+ onError: handleError
9349
10584
  }
9350
10585
  ) })
9351
10586
  ] });
@@ -9542,6 +10777,7 @@ var en_default = {
9542
10777
  "Address is required": "Address is required",
9543
10778
  "All apps": "All apps",
9544
10779
  "Already have an app account?": "Already have an app account?",
10780
+ "Already have an x2earn app wallet?": "Already have an x2earn app wallet?",
9545
10781
  Amount: "Amount",
9546
10782
  "Amount is required": "Amount is required",
9547
10783
  "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.": "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.",
@@ -9555,6 +10791,7 @@ var en_default = {
9555
10791
  "Are you sure you want to disconnect your wallet?": "Are you sure you want to disconnect your wallet?",
9556
10792
  "Are you sure you want to set your domain name to": "Are you sure you want to set your domain name to",
9557
10793
  "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?": "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?",
10794
+ "Are you sure you want to unset your current domain?": "Are you sure you want to unset your current domain?",
9558
10795
  Assets: "Assets",
9559
10796
  At: "At",
9560
10797
  "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.": "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.",
@@ -9594,6 +10831,7 @@ var en_default = {
9594
10831
  Confirm: "Confirm",
9595
10832
  "Confirm Changes": "Confirm Changes",
9596
10833
  "Confirm Name": "Confirm Name",
10834
+ "Confirm Unset Domain": "Confirm Unset Domain",
9597
10835
  "Confirm the transaction in your wallet to complete it.": "Confirm the transaction in your wallet to complete it.",
9598
10836
  "Confirm transaction": "Confirm transaction",
9599
10837
  "Connect Wallet": "Connect Wallet",
@@ -9647,6 +10885,8 @@ var en_default = {
9647
10885
  Discord: "Discord",
9648
10886
  "Display Name": "Display Name",
9649
10887
  "Display name must be less than 25 characters": "Display name must be less than 25 characters",
10888
+ "Domain set": "Domain set",
10889
+ "Domain unset": "Domain unset",
9650
10890
  Done: "Done",
9651
10891
  Ecosystem: "Ecosystem",
9652
10892
  "Ecosystem Login": "Ecosystem Login",
@@ -9679,6 +10919,7 @@ var en_default = {
9679
10919
  "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.": "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.",
9680
10920
  "Frequently asked questions": "Frequently asked questions",
9681
10921
  From: "From",
10922
+ General: "General",
9682
10923
  Github: "Github",
9683
10924
  "Give a nickname to your wallet to easily identify it.": "Give a nickname to your wallet to easily identify it.",
9684
10925
  "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.": "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.",
@@ -9764,6 +11005,7 @@ var en_default = {
9764
11005
  "Node URL": "Node URL",
9765
11006
  "Not available": "Not available",
9766
11007
  Notifications: "Notifications",
11008
+ "Only letters, numbers, and hyphens are allowed": "Only letters, numbers, and hyphens are allowed",
9767
11009
  Other: "Other",
9768
11010
  "Other options": "Other options",
9769
11011
  Passkey: "Passkey",
@@ -9804,6 +11046,7 @@ var en_default = {
9804
11046
  Remove: "Remove",
9805
11047
  "Remove Login Method": "Remove Login Method",
9806
11048
  "Remove from shortcuts": "Remove from shortcuts",
11049
+ "Remove your current domain name": "Remove your current domain name",
9807
11050
  "Resend code": "Resend code",
9808
11051
  Retry: "Retry",
9809
11052
  "Safari blocked the login window. Please try again, it should work now.": "Safari blocked the login window. Please try again, it should work now.",
@@ -9883,6 +11126,7 @@ var en_default = {
9883
11126
  "Token Contract Address": "Token Contract Address",
9884
11127
  "Token already added": "Token already added",
9885
11128
  "Tokens transferred successfully.": "Tokens transferred successfully.",
11129
+ Tools: "Tools",
9886
11130
  "Total balance": "Total balance",
9887
11131
  "Transaction completed!": "Transaction completed!",
9888
11132
  "Transaction failed": "Transaction failed",
@@ -9902,6 +11146,11 @@ var en_default = {
9902
11146
  "Unknown error": "Unknown error",
9903
11147
  "Unknown status": "Unknown status",
9904
11148
  "Unlink Login Method": "Unlink Login Method",
11149
+ "Unset current domain": "Unset current domain",
11150
+ "Unsetting current domain": "Unsetting current domain",
11151
+ "Unsetting current domain...": "Unsetting current domain...",
11152
+ "Unsetting your current VeChain nickname": "Unsetting your current VeChain nickname",
11153
+ "Unsetting your current domain": "Unsetting your current domain",
9905
11154
  "Update profile image": "Update profile image",
9906
11155
  "Upgrade Now": "Upgrade Now",
9907
11156
  "Upgrade Smart Account to V3": "Upgrade Smart Account to V3",
@@ -9969,8 +11218,10 @@ var en_default = {
9969
11218
  "You own a Smart Account and it has priority over your wallet.": "You own a Smart Account and it has priority over your wallet.",
9970
11219
  "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.": "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.",
9971
11220
  "Your accounts": "Your accounts",
11221
+ "Your address has been successfully set to {{name}}.{{domainType}}.": "Your address has been successfully set to {{name}}.{{domainType}}.",
9972
11222
  "Your changes have been saved successfully.": "Your changes have been saved successfully.",
9973
11223
  "Your customizations are linked to your .vet domain name, making them portable across different applications.": "Your customizations are linked to your .vet domain name, making them portable across different applications.",
11224
+ "Your domain has been unset successfully.": "Your domain has been unset successfully.",
9974
11225
  "Your embedded wallet": "Your embedded wallet",
9975
11226
  "Your existing domains": "Your existing domains",
9976
11227
  "Your mobile browser blocked the login window.": "Your mobile browser blocked the login window.",
@@ -9987,6 +11238,7 @@ var en_default = {
9987
11238
  "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.": "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.",
9988
11239
  "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.": "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.",
9989
11240
  "Your {{name}}.veworld.vet name has been claimed successfully.": "Your {{name}}.veworld.vet name has been claimed successfully.",
11241
+ "Your {{name}}.{{domainType}} name has been claimed successfully.": "Your {{name}}.{{domainType}} name has been claimed successfully.",
9990
11242
  here: "here",
9991
11243
  of: "of",
9992
11244
  on: "on",
@@ -10030,6 +11282,7 @@ var de_default = {
10030
11282
  "Address is required": "Adresse ist erforderlich",
10031
11283
  "All apps": "Alle Apps",
10032
11284
  "Already have an app account?": "Haben Sie bereits ein App-Konto?",
11285
+ "Already have an x2earn app wallet?": "Haben Sie bereits eine x2earn-App-Wallet?",
10033
11286
  Amount: "Betrag",
10034
11287
  "Amount is required": "Betrag ist erforderlich",
10035
11288
  "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.": "Eine X2Earn-Anwendung in VeBetterDAO ist eine nachhaltige App, die Benutzer f\xFCr umweltfreundliche Aktionen mit B3TR-Token belohnt. Diese Apps m\xFCssen B3TR verteilen, Benutzer-Wallets verkn\xFCpfen und den Nachweis nachhaltiger Aktionen erbringen. Sie treten VeBetterDAO durch Unterst\xFCtzung bei und nehmen an w\xF6chentlichen Token-Zuweisungsrunden teil.",
@@ -10043,6 +11296,7 @@ var de_default = {
10043
11296
  "Are you sure you want to disconnect your wallet?": "Sind Sie sicher, dass Sie Ihr Wallet trennen m\xF6chten?",
10044
11297
  "Are you sure you want to set your domain name to": "Sind Sie sicher, dass Sie Ihren Domainnamen auf",
10045
11298
  "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?": "Sind Sie sicher, dass Sie {{accountType}} als Anmeldemethode, die mit {{accountDescription}} verkn\xFCpft ist, trennen m\xF6chten?",
11299
+ "Are you sure you want to unset your current domain?": "Sind Sie sicher, dass Sie Ihre aktuelle Domain aufheben m\xF6chten?",
10046
11300
  Assets: "Verm\xF6genswerte",
10047
11301
  At: "Am",
10048
11302
  "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.": "B3TR ist der Anreiz-Token von VeBetterDAO, aufgebaut auf der VechainThor-Blockchain. Es gibt eine Obergrenze von 1 Milliarde Tokens, die w\xF6chentlich \xFCber 12 Jahre hinweg ausgegeben werden. B3TR wird f\xFCr Belohnungen, Governance und die Unterst\xFCtzung von VOT3-Token im Verh\xE4ltnis 1:1 verwendet. Es unterst\xFCtzt Nachhaltigkeitsanwendungen und das Verwaltung der DAO-Kasse.",
@@ -10082,6 +11336,7 @@ var de_default = {
10082
11336
  Confirm: "Best\xE4tigen",
10083
11337
  "Confirm Changes": "\xC4nderungen best\xE4tigen",
10084
11338
  "Confirm Name": "Name best\xE4tigen",
11339
+ "Confirm Unset Domain": "L\xF6schung der Domain best\xE4tigen",
10085
11340
  "Confirm the transaction in your wallet to complete it.": "Best\xE4tigen Sie die Transaktion in Ihrer Wallet, um sie abzuschlie\xDFen.",
10086
11341
  "Confirm transaction": "Transaktion best\xE4tigen",
10087
11342
  "Connect Wallet": "Wallet verbinden",
@@ -10135,6 +11390,8 @@ var de_default = {
10135
11390
  Discord: "Discord",
10136
11391
  "Display Name": "Anzeigename",
10137
11392
  "Display name must be less than 25 characters": "Der Anzeigename muss weniger als 25 Zeichen umfassen",
11393
+ "Domain set": "Domain eingerichtet",
11394
+ "Domain unset": "Domain aufgehoben",
10138
11395
  Done: "Fertig",
10139
11396
  Ecosystem: "\xD6kosystem",
10140
11397
  "Ecosystem Login": "\xD6kosystem-Anmeldung",
@@ -10167,6 +11424,7 @@ var de_default = {
10167
11424
  "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.": "Aus Sicherheitsgr\xFCnden k\xF6nnen Sie die Einstellungen Ihrer eingebetteten Wallet nur auf der {{appName}} Plattform verwalten.",
10168
11425
  "Frequently asked questions": "H\xE4ufig gestellte Fragen",
10169
11426
  From: "Von",
11427
+ General: "Allgemein",
10170
11428
  Github: "Github",
10171
11429
  "Give a nickname to your wallet to easily identify it.": "Geben Sie Ihrer Brieftasche einen Spitznamen, um sie leicht identifizieren zu k\xF6nnen.",
10172
11430
  "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.": "Gute Neuigkeiten! Multiclause-Transaktionen werden jetzt vollst\xE4ndig f\xFCr Smart-Accounts unterst\xFCtzt. Sie k\xF6nnen jetzt von einer besseren Benutzererfahrung, niedrigeren Gaskosten und erh\xF6hter Sicherheit profitieren.",
@@ -10252,6 +11510,7 @@ var de_default = {
10252
11510
  "Node URL": "Knoten-URL",
10253
11511
  "Not available": "Nicht verf\xFCgbar",
10254
11512
  Notifications: "Benachrichtigungen",
11513
+ "Only letters, numbers, and hyphens are allowed": "Es sind nur Buchstaben, Zahlen und Bindestriche erlaubt",
10255
11514
  Other: "Andere",
10256
11515
  "Other options": "Weitere Optionen",
10257
11516
  Passkey: "Passwort",
@@ -10292,6 +11551,7 @@ var de_default = {
10292
11551
  Remove: "Entfernen",
10293
11552
  "Remove Login Method": "Anmeldemethode entfernen",
10294
11553
  "Remove from shortcuts": "Aus den Verkn\xFCpfungen entfernen",
11554
+ "Remove your current domain name": "Entfernen Sie Ihren aktuellen Domainnamen",
10295
11555
  "Resend code": "Code erneut senden",
10296
11556
  Retry: "Erneut versuchen",
10297
11557
  "Safari blocked the login window. Please try again, it should work now.": "Safari hat das Anmeldefenster blockiert. Bitte versuchen Sie es erneut, jetzt sollte es funktionieren.",
@@ -10371,6 +11631,7 @@ var de_default = {
10371
11631
  "Token Contract Address": "Token-Vertragsadresse",
10372
11632
  "Token already added": "Token bereits hinzugef\xFCgt",
10373
11633
  "Tokens transferred successfully.": "Tokens erfolgreich \xFCbertragen.",
11634
+ Tools: "Werkzeuge",
10374
11635
  "Total balance": "Gesamtguthaben",
10375
11636
  "Transaction completed!": "Transaktion abgeschlossen!",
10376
11637
  "Transaction failed": "Transaktion fehlgeschlagen",
@@ -10390,6 +11651,11 @@ var de_default = {
10390
11651
  "Unknown error": "Unbekannter Fehler",
10391
11652
  "Unknown status": "Unbekannter Status",
10392
11653
  "Unlink Login Method": "Anmeldemethode entfernen",
11654
+ "Unset current domain": "Aktuelle Domain aufheben",
11655
+ "Unsetting current domain": "Aufheben der aktuellen Domain",
11656
+ "Unsetting current domain...": "Aktuelle Domain wird aufgehoben...",
11657
+ "Unsetting your current VeChain nickname": "Aufheben Ihres aktuellen VeChain-Spitznamens",
11658
+ "Unsetting your current domain": "Aufheben Ihrer aktuellen Domain",
10393
11659
  "Update profile image": "Profilbild aktualisieren",
10394
11660
  "Upgrade Now": "Jetzt upgraden",
10395
11661
  "Upgrade Smart Account to V3": "Smart Account auf V3 upgraden",
@@ -10457,8 +11723,10 @@ var de_default = {
10457
11723
  "You own a Smart Account and it has priority over your wallet.": "Sie besitzen einen Smart Account und dieser hat Vorrang vor Ihrer Wallet.",
10458
11724
  "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.": "Ihr Konto wurde erfolgreich auf die neueste Version aktualisiert. Sie k\xF6nnen nun eine bessere Benutzererfahrung, niedrigere Gaskosten und erh\xF6hte Sicherheit genie\xDFen.",
10459
11725
  "Your accounts": "Ihre Konten",
11726
+ "Your address has been successfully set to {{name}}.{{domainType}}.": "Ihre Adresse wurde erfolgreich auf {{name}}.{{domainType}} gesetzt.",
10460
11727
  "Your changes have been saved successfully.": "Ihre \xC4nderungen wurden erfolgreich gespeichert.",
10461
11728
  "Your customizations are linked to your .vet domain name, making them portable across different applications.": "Ihre Anpassungen sind mit Ihrem .vet-Domainnamen verkn\xFCpft, wodurch sie in verschiedenen Anwendungen tragbar sind.",
11729
+ "Your domain has been unset successfully.": "Ihre Domain wurde erfolgreich aufgehoben.",
10462
11730
  "Your embedded wallet": "Ihr eingebettetes Portemonnaie",
10463
11731
  "Your existing domains": "Ihre vorhandenen Domains",
10464
11732
  "Your mobile browser blocked the login window.": "Ihr mobiler Browser hat das Anmeldefenster blockiert.",
@@ -10475,6 +11743,7 @@ var de_default = {
10475
11743
  "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.": "Ihr Wallet ist durch einen privaten Schl\xFCssel gesichert. Der private Schl\xFCssel ist ein einzigartiger Code, der es Ihnen erm\xF6glicht, auf Ihr Wallet zuzugreifen. Er wird in Ihrem Browser gespeichert und wird verwendet, um Transaktionen zu signieren. Der private Schl\xFCssel wird niemals mit jemandem geteilt, einschlie\xDFlich der VeChain Foundation.",
10476
11744
  "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.": "Die Sicherheit Ihres Wallets h\xE4ngt davon ab, wie Sie darauf zugreifen. Mit Selbstverwaltungsoptionen wie der VeWorld-Erweiterung, der mobilen App oder einer Hardware-Wallet haben Sie die vollst\xE4ndige Kontrolle \xFCber Ihre privaten Schl\xFCssel. Diese Erweiterung selbst hat keinen Zugriff auf Ihre privaten Schl\xFCssel. Beim Einloggen mit sozialen Konten oder VeChain wird Ihr Wallet von Privy erstellt und gesichert und von VeChain verwaltet, was ein einfacheres Onboarding-Erlebnis bietet und gleichzeitig die Sicherheit gew\xE4hrleistet.",
10477
11745
  "Your {{name}}.veworld.vet name has been claimed successfully.": "Ihr {{name}}.veworld.vet-Name wurde erfolgreich beansprucht.",
11746
+ "Your {{name}}.{{domainType}} name has been claimed successfully.": "Ihr {{name}}.{{domainType}}-Name wurde erfolgreich beansprucht.",
10478
11747
  here: "hier",
10479
11748
  of: "von",
10480
11749
  on: "am",
@@ -10518,6 +11787,7 @@ var it_default = {
10518
11787
  "Address is required": "L'indirizzo \xE8 richiesto",
10519
11788
  "All apps": "Tutte le app",
10520
11789
  "Already have an app account?": "Hai gi\xE0 un account nell'app?",
11790
+ "Already have an x2earn app wallet?": "Hai gi\xE0 un portafoglio x2earn app?",
10521
11791
  Amount: "Importo",
10522
11792
  "Amount is required": "\xC8 richiesto l'importo",
10523
11793
  "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.": "Un'applicazione X2Earn in VeBetterDAO \xE8 un'app sostenibile che premia gli utenti con token B3TR per azioni ecologiche. Queste app devono distribuire B3TR, collegare i portafogli degli utenti e fornire la prova delle azioni sostenibili. Si uniscono a VeBetterDAO tramite sponsorizzazione e partecipano a turni settimanali di allocazione dei token.",
@@ -10531,6 +11801,7 @@ var it_default = {
10531
11801
  "Are you sure you want to disconnect your wallet?": "Sei sicuro di voler disconnettere il tuo portafoglio?",
10532
11802
  "Are you sure you want to set your domain name to": "Sei sicuro di voler impostare il tuo nome di dominio su",
10533
11803
  "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?": "Sei sicuro di voler scollegare {{accountType}} come metodo di accesso collegato a {{accountDescription}}?",
11804
+ "Are you sure you want to unset your current domain?": "Sei sicuro di voler rimuovere il tuo attuale dominio?",
10534
11805
  Assets: "Risorse",
10535
11806
  At: "Alle",
10536
11807
  "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.": "B3TR \xE8 il token incentivo di VeBetterDAO, creato sulla blockchain VechainThor. Ha una fornitura massima di 1 miliardo di token, emessi settimanalmente per 12 anni. B3TR viene utilizzato per ricompense, governance e supporto dei token VOT3 1:1. Supporta applicazioni di sostenibilit\xE0 e gestione del tesoro del DAO.",
@@ -10570,6 +11841,7 @@ var it_default = {
10570
11841
  Confirm: "Conferma",
10571
11842
  "Confirm Changes": "Conferma Modifiche",
10572
11843
  "Confirm Name": "Conferma Nome",
11844
+ "Confirm Unset Domain": "Conferma Rimozione Dominio",
10573
11845
  "Confirm the transaction in your wallet to complete it.": "Conferma la transazione nel tuo portafoglio per completarla.",
10574
11846
  "Confirm transaction": "Conferma transazione",
10575
11847
  "Connect Wallet": "Collega Portafoglio",
@@ -10623,6 +11895,8 @@ var it_default = {
10623
11895
  Discord: "Discord",
10624
11896
  "Display Name": "Nome da visualizzare",
10625
11897
  "Display name must be less than 25 characters": "Il nome da visualizzare deve contenere meno di 25 caratteri",
11898
+ "Domain set": "Dominio impostato",
11899
+ "Domain unset": "Dominio rimosso",
10626
11900
  Done: "Fatto",
10627
11901
  Ecosystem: "Ecosistema",
10628
11902
  "Ecosystem Login": "Accesso Ecosistema",
@@ -10655,6 +11929,7 @@ var it_default = {
10655
11929
  "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.": "Per motivi di sicurezza, puoi gestire le impostazioni del tuo portafoglio integrato solo sulla piattaforma {{appName}}.",
10656
11930
  "Frequently asked questions": "Domande frequenti",
10657
11931
  From: "Da",
11932
+ General: "Generale",
10658
11933
  Github: "Github",
10659
11934
  "Give a nickname to your wallet to easily identify it.": "Dai un soprannome al tuo portafoglio per identificarlo facilmente.",
10660
11935
  "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.": "Buone notizie! Le transazioni multi-clausola sono ora completamente supportate per gli account intelligenti. Ora puoi godere di una migliore esperienza utente, costi di gas ridotti e maggiore sicurezza.",
@@ -10740,6 +12015,7 @@ var it_default = {
10740
12015
  "Node URL": "URL del nodo",
10741
12016
  "Not available": "Non disponibile",
10742
12017
  Notifications: "Notifiche",
12018
+ "Only letters, numbers, and hyphens are allowed": "Sono ammessi solo lettere, numeri e trattini",
10743
12019
  Other: "Altro",
10744
12020
  "Other options": "Altre opzioni",
10745
12021
  Passkey: "Chiave di accesso",
@@ -10780,6 +12056,7 @@ var it_default = {
10780
12056
  Remove: "Rimuovi",
10781
12057
  "Remove Login Method": "Rimuovi metodo di accesso",
10782
12058
  "Remove from shortcuts": "Rimuovi dai collegamenti",
12059
+ "Remove your current domain name": "Rimuovi il tuo attuale nome di dominio",
10783
12060
  "Resend code": "Reinvia codice",
10784
12061
  Retry: "Riprova",
10785
12062
  "Safari blocked the login window. Please try again, it should work now.": "Safari ha bloccato la finestra di accesso. Si prega di riprovare, dovrebbe funzionare ora.",
@@ -10859,6 +12136,7 @@ var it_default = {
10859
12136
  "Token Contract Address": "Indirizzo del Contratto del Token",
10860
12137
  "Token already added": "Token gi\xE0 aggiunto",
10861
12138
  "Tokens transferred successfully.": "Token trasferiti con successo.",
12139
+ Tools: "Strumenti",
10862
12140
  "Total balance": "Saldo totale",
10863
12141
  "Transaction completed!": "Transazione completata!",
10864
12142
  "Transaction failed": "Transazione fallita",
@@ -10878,6 +12156,11 @@ var it_default = {
10878
12156
  "Unknown error": "Errore sconosciuto",
10879
12157
  "Unknown status": "Stato sconosciuto",
10880
12158
  "Unlink Login Method": "Scollega metodo di accesso",
12159
+ "Unset current domain": "Rimuovi dominio attuale",
12160
+ "Unsetting current domain": "Rimozione del dominio attuale",
12161
+ "Unsetting current domain...": "Rimozione del dominio attuale in corso...",
12162
+ "Unsetting your current VeChain nickname": "Rimozione del tuo attuale soprannome VeChain",
12163
+ "Unsetting your current domain": "Rimozione del tuo attuale dominio",
10881
12164
  "Update profile image": "Aggiorna immagine del profilo",
10882
12165
  "Upgrade Now": "Aggiorna Ora",
10883
12166
  "Upgrade Smart Account to V3": "Aggiorna Conto Smart a V3",
@@ -10945,8 +12228,10 @@ var it_default = {
10945
12228
  "You own a Smart Account and it has priority over your wallet.": "Possiedi un Account Smart e ha priorit\xE0 sul tuo portafoglio.",
10946
12229
  "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.": "Il tuo account \xE8 stato aggiornato con successo all'ultima versione. Ora puoi godere di un'esperienza utente migliorata, costi del gas ridotti e maggiore sicurezza.",
10947
12230
  "Your accounts": "I tuoi account",
12231
+ "Your address has been successfully set to {{name}}.{{domainType}}.": "Il tuo indirizzo \xE8 stato impostato correttamente su {{name}}.{{domainType}}.",
10948
12232
  "Your changes have been saved successfully.": "Le tue modifiche sono state salvate con successo.",
10949
12233
  "Your customizations are linked to your .vet domain name, making them portable across different applications.": "Le tue personalizzazioni sono collegate al tuo nome di dominio .vet, rendendole portabili tra diverse applicazioni.",
12234
+ "Your domain has been unset successfully.": "Il tuo dominio \xE8 stato rimosso con successo.",
10950
12235
  "Your embedded wallet": "Il tuo portafoglio integrato",
10951
12236
  "Your existing domains": "I tuoi domini esistenti",
10952
12237
  "Your mobile browser blocked the login window.": "Il tuo browser mobile ha bloccato la finestra di accesso.",
@@ -10963,6 +12248,7 @@ var it_default = {
10963
12248
  "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.": "Il tuo portafoglio \xE8 protetto da una chiave privata. La chiave privata \xE8 un codice unico che ti consente di accedere al tuo portafoglio. \xC8 memorizzata nel tuo browser e viene utilizzata per firmare le transazioni. La chiave privata non viene mai condivisa con nessuno, inclusa la Fondazione VeChain.",
10964
12249
  "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.": "La sicurezza del tuo portafoglio dipende da come vi accedi. Con opzioni di autocustodia come l'estensione VeWorld, l'app mobile o il portafoglio hardware, hai il controllo completo sulle tue chiavi private. Questa estensione stessa non ha accesso alle tue chiavi private. Quando accedi con i social account o VeChain, il tuo portafoglio viene creato e protetto da Privy e gestito da VeChain, offrendo un'esperienza di onboarding pi\xF9 semplice mantenendo la sicurezza.",
10965
12250
  "Your {{name}}.veworld.vet name has been claimed successfully.": "Il tuo nome {{name}}.veworld.vet \xE8 stato rivendicato con successo.",
12251
+ "Your {{name}}.{{domainType}} name has been claimed successfully.": "Il tuo nome {{name}}.{{domainType}} \xE8 stato rivendicato con successo.",
10966
12252
  here: "qui",
10967
12253
  of: "di",
10968
12254
  on: "su",
@@ -11006,6 +12292,7 @@ var fr_default = {
11006
12292
  "Address is required": "L'adresse est requise",
11007
12293
  "All apps": "Toutes les applications",
11008
12294
  "Already have an app account?": "Vous avez d\xE9j\xE0 un compte sur l'application\xA0?",
12295
+ "Already have an x2earn app wallet?": "Vous avez d\xE9j\xE0 un portefeuille d'application x2earn ?",
11009
12296
  Amount: "Montant",
11010
12297
  "Amount is required": "Le montant est requis",
11011
12298
  "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.": "Une application X2Earn dans VeBetterDAO est une application durable qui r\xE9compense les utilisateurs avec des tokens B3TR pour des actions \xE9cologiques. Ces applications doivent distribuer B3TR, lier les portefeuilles utilisateurs et fournir une preuve des actions durables. Elles rejoignent VeBetterDAO par recommandation et participent \xE0 des rondes d\u2019allocation de tokens hebdomadaires.",
@@ -11019,6 +12306,7 @@ var fr_default = {
11019
12306
  "Are you sure you want to disconnect your wallet?": "\xCAtes-vous s\xFBr de vouloir d\xE9connecter votre portefeuille ?",
11020
12307
  "Are you sure you want to set your domain name to": "\xCAtes-vous s\xFBr de vouloir d\xE9finir votre nom de domaine sur",
11021
12308
  "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?": "\xCAtes-vous s\xFBr de vouloir dissocier {{accountType}} en tant que m\xE9thode de connexion li\xE9e \xE0 {{accountDescription}} ?",
12309
+ "Are you sure you want to unset your current domain?": "\xCAtes-vous s\xFBr de vouloir d\xE9s\xE9lectionner votre domaine actuel ?",
11022
12310
  Assets: "Actifs",
11023
12311
  At: "\xC0",
11024
12312
  "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.": "B3TR est le token incitatif de VeBetterDAO, construit sur la blockchain VechainThor. Il a un approvisionnement limit\xE9 \xE0 1 milliard de tokens, \xE9mis de fa\xE7on hebdomadaire sur 12 ans. B3TR est utilis\xE9 pour les r\xE9compenses, la gouvernance et pour soutenir les tokens VOT3 \xE0 un taux de 1:1. Il soutient les applications de durabilit\xE9 et la gestion de la tr\xE9sorerie DAO.",
@@ -11058,6 +12346,7 @@ var fr_default = {
11058
12346
  Confirm: "Confirmer",
11059
12347
  "Confirm Changes": "Confirmer les modifications",
11060
12348
  "Confirm Name": "Confirmer le nom",
12349
+ "Confirm Unset Domain": "Confirmer la d\xE9s\xE9lection du domaine",
11061
12350
  "Confirm the transaction in your wallet to complete it.": "Confirmez la transaction dans votre portefeuille pour la terminer.",
11062
12351
  "Confirm transaction": "Confirmer la transaction",
11063
12352
  "Connect Wallet": "Connecter le portefeuille",
@@ -11111,6 +12400,8 @@ var fr_default = {
11111
12400
  Discord: "Discord",
11112
12401
  "Display Name": "Nom affich\xE9",
11113
12402
  "Display name must be less than 25 characters": "Le nom affich\xE9 doit comporter moins de 25 caract\xE8res",
12403
+ "Domain set": "Domaine d\xE9fini",
12404
+ "Domain unset": "Domaine d\xE9s\xE9lectionn\xE9",
11114
12405
  Done: "Fait",
11115
12406
  Ecosystem: "\xC9cosyst\xE8me",
11116
12407
  "Ecosystem Login": "Connexion \xE0 l'\xE9cosyst\xE8me",
@@ -11143,6 +12434,7 @@ var fr_default = {
11143
12434
  "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.": "Pour des raisons de s\xE9curit\xE9, vous pouvez g\xE9rer les param\xE8tres de votre portefeuille int\xE9gr\xE9 uniquement sur la plateforme {{appName}}.",
11144
12435
  "Frequently asked questions": "Questions fr\xE9quemment pos\xE9es",
11145
12436
  From: "De",
12437
+ General: "G\xE9n\xE9ral",
11146
12438
  Github: "Github",
11147
12439
  "Give a nickname to your wallet to easily identify it.": "Donnez un surnom \xE0 votre portefeuille pour l'identifier facilement.",
11148
12440
  "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.": "Bonne nouvelle ! Les transactions multiclause sont d\xE9sormais enti\xE8rement prises en charge pour les comptes intelligents. Vous pouvez d\xE9sormais profiter d'une meilleure exp\xE9rience utilisateur, de frais de gaz r\xE9duits et d'une s\xE9curit\xE9 renforc\xE9e.",
@@ -11228,6 +12520,7 @@ var fr_default = {
11228
12520
  "Node URL": "URL du n\u0153ud",
11229
12521
  "Not available": "Non disponible",
11230
12522
  Notifications: "Notifications",
12523
+ "Only letters, numbers, and hyphens are allowed": "Seules les lettres, les chiffres et les tirets sont autoris\xE9s",
11231
12524
  Other: "Autre",
11232
12525
  "Other options": "Autres options",
11233
12526
  Passkey: "Cl\xE9 de passe",
@@ -11268,6 +12561,7 @@ var fr_default = {
11268
12561
  Remove: "Supprimer",
11269
12562
  "Remove Login Method": "Supprimer la m\xE9thode de connexion",
11270
12563
  "Remove from shortcuts": "Retirer des raccourcis",
12564
+ "Remove your current domain name": "Supprimer votre nom de domaine actuel",
11271
12565
  "Resend code": "Renvoyer le code",
11272
12566
  Retry: "R\xE9essayer",
11273
12567
  "Safari blocked the login window. Please try again, it should work now.": "Safari a bloqu\xE9 la fen\xEAtre de connexion. Veuillez r\xE9essayer, cela devrait fonctionner maintenant.",
@@ -11347,6 +12641,7 @@ var fr_default = {
11347
12641
  "Token Contract Address": "Adresse du contrat du jeton",
11348
12642
  "Token already added": "Jeton d\xE9j\xE0 ajout\xE9",
11349
12643
  "Tokens transferred successfully.": "Jetons transf\xE9r\xE9s avec succ\xE8s.",
12644
+ Tools: "Outils",
11350
12645
  "Total balance": "Solde total",
11351
12646
  "Transaction completed!": "Transaction termin\xE9e !",
11352
12647
  "Transaction failed": "La transaction a \xE9chou\xE9",
@@ -11366,6 +12661,11 @@ var fr_default = {
11366
12661
  "Unknown error": "Erreur inconnue",
11367
12662
  "Unknown status": "Statut inconnu",
11368
12663
  "Unlink Login Method": "Dissocier la m\xE9thode de connexion",
12664
+ "Unset current domain": "D\xE9s\xE9lectionner le domaine actuel",
12665
+ "Unsetting current domain": "D\xE9s\xE9lection du domaine actuel",
12666
+ "Unsetting current domain...": "D\xE9s\xE9lection du domaine actuel...",
12667
+ "Unsetting your current VeChain nickname": "D\xE9s\xE9lection de votre surnom VeChain actuel",
12668
+ "Unsetting your current domain": "D\xE9s\xE9lection de votre domaine actuel",
11369
12669
  "Update profile image": "Mettre \xE0 jour l'image de profil",
11370
12670
  "Upgrade Now": "Mettre \xE0 niveau maintenant",
11371
12671
  "Upgrade Smart Account to V3": "Mettre \xE0 niveau le compte intelligent vers V3",
@@ -11433,8 +12733,10 @@ var fr_default = {
11433
12733
  "You own a Smart Account and it has priority over your wallet.": "Vous poss\xE9dez un Smart Account et il a la priorit\xE9 sur votre portefeuille.",
11434
12734
  "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.": "Votre compte a \xE9t\xE9 mis \xE0 niveau avec succ\xE8s vers la derni\xE8re version. Vous pouvez d\xE9sormais profiter d'une meilleure exp\xE9rience utilisateur, de co\xFBts de gaz r\xE9duits et d'une s\xE9curit\xE9 renforc\xE9e.",
11435
12735
  "Your accounts": "Vos comptes",
12736
+ "Your address has been successfully set to {{name}}.{{domainType}}.": "Votre adresse a \xE9t\xE9 d\xE9finie avec succ\xE8s sur {{name}}.{{domainType}}.",
11436
12737
  "Your changes have been saved successfully.": "Vos modifications ont \xE9t\xE9 enregistr\xE9es avec succ\xE8s.",
11437
12738
  "Your customizations are linked to your .vet domain name, making them portable across different applications.": "Vos personnalisations sont li\xE9es \xE0 votre nom de domaine .vet, ce qui les rend portables \xE0 travers diff\xE9rentes applications.",
12739
+ "Your domain has been unset successfully.": "Votre domaine a \xE9t\xE9 d\xE9s\xE9lectionn\xE9 avec succ\xE8s.",
11438
12740
  "Your embedded wallet": "Votre portefeuille int\xE9gr\xE9",
11439
12741
  "Your existing domains": "Vos domaines existants",
11440
12742
  "Your mobile browser blocked the login window.": "Votre navigateur mobile a bloqu\xE9 la fen\xEAtre de connexion.",
@@ -11451,6 +12753,7 @@ var fr_default = {
11451
12753
  "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.": "Votre portefeuille est s\xE9curis\xE9 par une cl\xE9 priv\xE9e. La cl\xE9 priv\xE9e est un code unique qui vous permet d'acc\xE9der \xE0 votre portefeuille. Elle est stock\xE9e dans votre navigateur et est utilis\xE9e pour signer des transactions. La cl\xE9 priv\xE9e n'est jamais partag\xE9e avec qui que ce soit, y compris la Fondation VeChain.",
11452
12754
  "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.": "La s\xE9curit\xE9 de votre portefeuille d\xE9pend de la fa\xE7on dont vous y acc\xE9dez. Avec des options d'auto-gardiennage comme l'extension VeWorld, l'application mobile ou le portefeuille mat\xE9riel, vous avez un contr\xF4le complet sur vos cl\xE9s priv\xE9es. Cette extension en elle-m\xEAme n'a pas acc\xE8s \xE0 vos cl\xE9s priv\xE9es. Lors de la connexion avec des comptes sociaux ou VeChain, votre portefeuille est cr\xE9\xE9 et s\xE9curis\xE9 par Privy et g\xE9r\xE9 par VeChain, offrant une exp\xE9rience d'int\xE9gration plus facile tout en maintenant la s\xE9curit\xE9.",
11453
12755
  "Your {{name}}.veworld.vet name has been claimed successfully.": "Votre nom {{name}}.veworld.vet a \xE9t\xE9 revendiqu\xE9 avec succ\xE8s.",
12756
+ "Your {{name}}.{{domainType}} name has been claimed successfully.": "Votre nom {{name}}.{{domainType}} a \xE9t\xE9 revendiqu\xE9 avec succ\xE8s.",
11454
12757
  here: "ici",
11455
12758
  of: "de",
11456
12759
  on: "le",
@@ -11494,6 +12797,7 @@ var es_default = {
11494
12797
  "Address is required": "Se requiere direcci\xF3n",
11495
12798
  "All apps": "Todas las aplicaciones",
11496
12799
  "Already have an app account?": "\xBFYa tienes una cuenta de la aplicaci\xF3n?",
12800
+ "Already have an x2earn app wallet?": "\xBFYa tienes una billetera de aplicaci\xF3n x2earn?",
11497
12801
  Amount: "Cantidad",
11498
12802
  "Amount is required": "Se requiere un monto",
11499
12803
  "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.": "Una aplicaci\xF3n X2Earn en VeBetterDAO es una app sostenible que recompensa a los usuarios con tokens B3TR por acciones ecol\xF3gicas. Estas aplicaciones deben distribuir B3TR, vincular las billeteras de los usuarios y proporcionar pruebas de acciones sostenibles. Se unen a VeBetterDAO a trav\xE9s de la recomendaci\xF3n y participan en rondas semanales de asignaci\xF3n de tokens.",
@@ -11507,6 +12811,7 @@ var es_default = {
11507
12811
  "Are you sure you want to disconnect your wallet?": "\xBFEst\xE1s seguro de que quieres desconectar tu billetera?",
11508
12812
  "Are you sure you want to set your domain name to": "\xBFEst\xE1s seguro de que quieres establecer tu nombre de dominio en",
11509
12813
  "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?": "\xBFEst\xE1 seguro de que desea desvincular {{accountType}} como m\xE9todo de inicio de sesi\xF3n vinculado a {{accountDescription}}?",
12814
+ "Are you sure you want to unset your current domain?": "\xBFEst\xE1 seguro de que desea desactivar su dominio actual?",
11510
12815
  Assets: "Activos",
11511
12816
  At: "En",
11512
12817
  "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.": "B3TR es el token de incentivo de VeBetterDAO, construido sobre la blockchain VechainThor. Tiene un suministro limitado de 1 mil millones de tokens, emitidos semanalmente durante 12 a\xF1os. B3TR se utiliza para recompensas, gobernanza y respaldar tokens VOT3 en una proporci\xF3n de 1:1. Apoya aplicaciones sostenibles y la gesti\xF3n del tesoro del DAO.",
@@ -11546,6 +12851,7 @@ var es_default = {
11546
12851
  Confirm: "Confirmar",
11547
12852
  "Confirm Changes": "Confirmar cambios",
11548
12853
  "Confirm Name": "Confirmar Nombre",
12854
+ "Confirm Unset Domain": "Confirmar desactivaci\xF3n de dominio",
11549
12855
  "Confirm the transaction in your wallet to complete it.": "Confirme la transacci\xF3n en su monedero para completarla.",
11550
12856
  "Confirm transaction": "Confirmar transacci\xF3n",
11551
12857
  "Connect Wallet": "Conectar Monedero",
@@ -11599,6 +12905,8 @@ var es_default = {
11599
12905
  Discord: "Discord",
11600
12906
  "Display Name": "Nombre para mostrar",
11601
12907
  "Display name must be less than 25 characters": "El nombre para mostrar debe tener menos de 25 caracteres",
12908
+ "Domain set": "Dominio configurado",
12909
+ "Domain unset": "Dominio desactivado",
11602
12910
  Done: "Hecho",
11603
12911
  Ecosystem: "Ecosistema",
11604
12912
  "Ecosystem Login": "Inicio de sesi\xF3n en el ecosistema",
@@ -11631,6 +12939,7 @@ var es_default = {
11631
12939
  "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.": "Por razones de seguridad, puedes gestionar la configuraci\xF3n de tu billetera integrada solo en la plataforma {{appName}}.",
11632
12940
  "Frequently asked questions": "Preguntas frecuentes",
11633
12941
  From: "De",
12942
+ General: "General",
11634
12943
  Github: "Github",
11635
12944
  "Give a nickname to your wallet to easily identify it.": "Dale un apodo a tu billetera para identificarla f\xE1cilmente.",
11636
12945
  "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.": "\xA1Buenas noticias! Las transacciones multicl\xE1usula ahora son totalmente compatibles con las cuentas inteligentes. Ahora puedes disfrutar de una mejor experiencia de usuario, menores costos de gas y mayor seguridad.",
@@ -11716,6 +13025,7 @@ var es_default = {
11716
13025
  "Node URL": "URL del nodo",
11717
13026
  "Not available": "No disponible",
11718
13027
  Notifications: "Notificaciones",
13028
+ "Only letters, numbers, and hyphens are allowed": "Solo se permiten letras, n\xFAmeros y guiones",
11719
13029
  Other: "Otro",
11720
13030
  "Other options": "Otras opciones",
11721
13031
  Passkey: "Clave de acceso",
@@ -11756,6 +13066,7 @@ var es_default = {
11756
13066
  Remove: "Eliminar",
11757
13067
  "Remove Login Method": "Eliminar m\xE9todo de inicio de sesi\xF3n",
11758
13068
  "Remove from shortcuts": "Eliminar de los accesos directos",
13069
+ "Remove your current domain name": "Eliminar su nombre de dominio actual",
11759
13070
  "Resend code": "Reenviar c\xF3digo",
11760
13071
  Retry: "Reintentar",
11761
13072
  "Safari blocked the login window. Please try again, it should work now.": "Safari bloque\xF3 la ventana de inicio de sesi\xF3n. Por favor, int\xE9ntelo de nuevo, deber\xEDa funcionar ahora.",
@@ -11835,6 +13146,7 @@ var es_default = {
11835
13146
  "Token Contract Address": "Direcci\xF3n del contrato del token",
11836
13147
  "Token already added": "Token ya agregado",
11837
13148
  "Tokens transferred successfully.": "Tokens transferidos exitosamente.",
13149
+ Tools: "Herramientas",
11838
13150
  "Total balance": "Saldo total",
11839
13151
  "Transaction completed!": "\xA1Transacci\xF3n completada!",
11840
13152
  "Transaction failed": "Transacci\xF3n fallida",
@@ -11854,6 +13166,11 @@ var es_default = {
11854
13166
  "Unknown error": "Error desconocido",
11855
13167
  "Unknown status": "Estado desconocido",
11856
13168
  "Unlink Login Method": "Desvincular m\xE9todo de inicio de sesi\xF3n",
13169
+ "Unset current domain": "Desactivar dominio actual",
13170
+ "Unsetting current domain": "Desactivando dominio actual",
13171
+ "Unsetting current domain...": "Desactivando dominio actual...",
13172
+ "Unsetting your current VeChain nickname": "Desactivando su apodo de VeChain actual",
13173
+ "Unsetting your current domain": "Desactivando su dominio actual",
11857
13174
  "Update profile image": "Actualizar imagen de perfil",
11858
13175
  "Upgrade Now": "Actualizar ahora",
11859
13176
  "Upgrade Smart Account to V3": "Actualizar cuenta inteligente a V3",
@@ -11921,8 +13238,10 @@ var es_default = {
11921
13238
  "You own a Smart Account and it has priority over your wallet.": "Posees una Smart Account y tiene prioridad sobre tu billetera.",
11922
13239
  "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.": "Su cuenta ha sido actualizada exitosamente a la \xFAltima versi\xF3n. Ahora puede disfrutar de una mejor experiencia de usuario, menores costos de gas y mayor seguridad.",
11923
13240
  "Your accounts": "Tus cuentas",
13241
+ "Your address has been successfully set to {{name}}.{{domainType}}.": "Su direcci\xF3n ha sido configurada exitosamente a {{name}}.{{domainType}}.",
11924
13242
  "Your changes have been saved successfully.": "Tus cambios han sido guardados exitosamente.",
11925
13243
  "Your customizations are linked to your .vet domain name, making them portable across different applications.": "Tus personalizaciones est\xE1n vinculadas a tu nombre de dominio .vet, lo que las hace port\xE1tiles a trav\xE9s de diferentes aplicaciones.",
13244
+ "Your domain has been unset successfully.": "Su dominio ha sido desactivado exitosamente.",
11926
13245
  "Your embedded wallet": "Su billetera integrada",
11927
13246
  "Your existing domains": "Tus dominios existentes",
11928
13247
  "Your mobile browser blocked the login window.": "Tu navegador m\xF3vil bloque\xF3 la ventana de inicio de sesi\xF3n.",
@@ -11939,6 +13258,7 @@ var es_default = {
11939
13258
  "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.": "Tu billetera est\xE1 protegida por una clave privada. La clave privada es un c\xF3digo \xFAnico que te permite acceder a tu billetera. Se almacena en tu navegador y se utiliza para firmar transacciones. La clave privada nunca se comparte con nadie, incluida la Fundaci\xF3n VeChain.",
11940
13259
  "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.": "La seguridad de tu billetera depende de c\xF3mo accedas a ella. Con opciones de autocustodia como la extensi\xF3n VeWorld, la aplicaci\xF3n m\xF3vil o la billetera de hardware, tienes control total sobre tus claves privadas. Esta extensi\xF3n no tiene acceso a tus claves privadas. Al iniciar sesi\xF3n con cuentas sociales o VeChain, tu billetera es creada y asegurada por Privy y gestionada por VeChain, ofreciendo una experiencia de integraci\xF3n m\xE1s sencilla mientras se mantiene la seguridad.",
11941
13260
  "Your {{name}}.veworld.vet name has been claimed successfully.": "Tu nombre {{name}}.veworld.vet ha sido reclamado exitosamente.",
13261
+ "Your {{name}}.{{domainType}} name has been claimed successfully.": "Su nombre {{name}}.{{domainType}} ha sido reclamado exitosamente.",
11942
13262
  here: "aqu\xED",
11943
13263
  of: "de",
11944
13264
  on: "en",
@@ -11982,6 +13302,7 @@ var zh_default = {
11982
13302
  "Address is required": "\u5730\u5740\u662F\u5FC5\u9700\u7684",
11983
13303
  "All apps": "\u6240\u6709\u5E94\u7528",
11984
13304
  "Already have an app account?": "\u5DF2\u7ECF\u6709\u4E00\u4E2A\u5E94\u7528\u8D26\u6237\uFF1F",
13305
+ "Already have an x2earn app wallet?": "\u5DF2\u7ECF\u6709\u4E00\u4E2Ax2earn\u5E94\u7528\u94B1\u5305\u4E86\u5417\uFF1F",
11985
13306
  Amount: "\u91D1\u989D",
11986
13307
  "Amount is required": "\u91D1\u989D\u662F\u5FC5\u9700\u7684",
11987
13308
  "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.": "VeBetterDAO \u7684 X2Earn \u5E94\u7528\u7A0B\u5E8F\u662F\u4E00\u6B3E\u53EF\u6301\u7EED\u53D1\u5C55\u7684\u5E94\u7528\u7A0B\u5E8F\uFF0C\u7528\u6237\u56E0\u751F\u6001\u53CB\u597D\u884C\u4E3A\u800C\u83B7\u5F97 B3TR \u4EE3\u5E01\u5956\u52B1\u3002\u8FD9\u4E9B\u5E94\u7528\u7A0B\u5E8F\u5FC5\u987B\u5206\u53D1 B3TR\uFF0C\u94FE\u63A5\u7528\u6237\u94B1\u5305\u5E76\u63D0\u4F9B\u53EF\u6301\u7EED\u884C\u52A8\u7684\u8BC1\u660E\u3002\u5B83\u4EEC\u901A\u8FC7\u80CC\u4E66\u52A0\u5165 VeBetterDAO\uFF0C\u5E76\u53C2\u4E0E\u6BCF\u5468\u7684\u4EE3\u5E01\u5206\u914D\u8F6E\u6B21\u3002",
@@ -11995,6 +13316,7 @@ var zh_default = {
11995
13316
  "Are you sure you want to disconnect your wallet?": "\u60A8\u786E\u5B9A\u8981\u65AD\u5F00\u94B1\u5305\u8FDE\u63A5\u5417\uFF1F",
11996
13317
  "Are you sure you want to set your domain name to": "\u60A8\u786E\u5B9A\u8981\u5C06\u60A8\u7684\u57DF\u540D\u8BBE\u7F6E\u4E3A",
11997
13318
  "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?": "\u60A8\u786E\u5B9A\u8981\u53D6\u6D88\u94FE\u63A5 {{accountDescription}} \u4E2D\u4F5C\u4E3A\u767B\u5F55\u65B9\u5F0F\u4E4B\u4E00\u7684 {{accountType}} \u5417\uFF1F",
13319
+ "Are you sure you want to unset your current domain?": "\u60A8\u786E\u5B9A\u8981\u53D6\u6D88\u8BBE\u7F6E\u5F53\u524D\u57DF\u540D\u5417\uFF1F",
11998
13320
  Assets: "\u8D44\u4EA7",
11999
13321
  At: "\u5728",
12000
13322
  "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.": "B3TR \u662F VeBetterDAO \u7684\u6FC0\u52B1\u6027\u4EE3\u5E01\uFF0C\u57FA\u4E8E VechainThor \u533A\u5757\u94FE\u6784\u5EFA\u3002\u5176\u4F9B\u5E94\u91CF\u4E0A\u9650\u4E3A 10 \u4EBF\u4E2A\u4EE3\u5E01\uFF0C\u5206 12 \u5E74\u6BCF\u5468\u53D1\u653E\u3002B3TR \u7528\u4E8E\u5956\u52B1\u3001\u6CBB\u7406\u4EE5\u53CA 1:1 \u652F\u6301 VOT3 \u4EE3\u5E01\u3002\u5B83\u652F\u6301\u53EF\u6301\u7EED\u6027\u5E94\u7528\u548C DAO \u8D22\u52A1\u7BA1\u7406\u3002",
@@ -12034,6 +13356,7 @@ var zh_default = {
12034
13356
  Confirm: "\u786E\u8BA4",
12035
13357
  "Confirm Changes": "\u786E\u8BA4\u66F4\u6539",
12036
13358
  "Confirm Name": "\u786E\u8BA4\u59D3\u540D",
13359
+ "Confirm Unset Domain": "\u786E\u8BA4\u53D6\u6D88\u8BBE\u7F6E\u57DF\u540D",
12037
13360
  "Confirm the transaction in your wallet to complete it.": "\u5728\u60A8\u7684\u94B1\u5305\u4E2D\u786E\u8BA4\u4EA4\u6613\u4EE5\u5B8C\u6210\u5B83\u3002",
12038
13361
  "Confirm transaction": "\u786E\u8BA4\u4EA4\u6613",
12039
13362
  "Connect Wallet": "\u8FDE\u63A5\u94B1\u5305",
@@ -12087,6 +13410,8 @@ var zh_default = {
12087
13410
  Discord: "Discord",
12088
13411
  "Display Name": "\u663E\u793A\u540D\u79F0",
12089
13412
  "Display name must be less than 25 characters": "\u663E\u793A\u540D\u79F0\u5FC5\u987B\u5C11\u4E8E25\u4E2A\u5B57\u7B26",
13413
+ "Domain set": "\u57DF\u540D\u5DF2\u8BBE\u7F6E",
13414
+ "Domain unset": "\u57DF\u540D\u5DF2\u53D6\u6D88\u8BBE\u7F6E",
12090
13415
  Done: "\u5B8C\u6210",
12091
13416
  Ecosystem: "\u751F\u6001\u7CFB\u7EDF",
12092
13417
  "Ecosystem Login": "\u751F\u6001\u7CFB\u7EDF\u767B\u5F55",
@@ -12119,6 +13444,7 @@ var zh_default = {
12119
13444
  "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.": "\u51FA\u4E8E\u5B89\u5168\u539F\u56E0\uFF0C\u60A8\u53EA\u80FD\u5728 {{appName}} \u5E73\u53F0\u4E0A\u7BA1\u7406\u5D4C\u5165\u5F0F\u94B1\u5305\u8BBE\u7F6E\u3002",
12120
13445
  "Frequently asked questions": "\u5E38\u89C1\u95EE\u9898\u89E3\u7B54",
12121
13446
  From: "\u81EA",
13447
+ General: "\u5E38\u89C4",
12122
13448
  Github: "Github",
12123
13449
  "Give a nickname to your wallet to easily identify it.": "\u7ED9\u60A8\u7684\u94B1\u5305\u8D77\u4E00\u4E2A\u6635\u79F0\uFF0C\u4EE5\u4FBF\u4E8E\u8BC6\u522B\u3002",
12124
13450
  "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.": "\u597D\u6D88\u606F\uFF01\u591A\u6761\u6B3E\u4EA4\u6613\u73B0\u5728\u5DF2\u5B8C\u5168\u652F\u6301\u667A\u80FD\u8D26\u6237\u3002\u60A8\u73B0\u5728\u53EF\u4EE5\u4EAB\u53D7\u66F4\u597D\u7684\u7528\u6237\u4F53\u9A8C\u3001\u66F4\u4F4E\u7684\u71C3\u6C14\u6210\u672C\u548C\u66F4\u9AD8\u7684\u5B89\u5168\u6027\u3002",
@@ -12204,6 +13530,7 @@ var zh_default = {
12204
13530
  "Node URL": "\u8282\u70B9 URL",
12205
13531
  "Not available": "\u4E0D\u53EF\u7528",
12206
13532
  Notifications: "\u901A\u77E5",
13533
+ "Only letters, numbers, and hyphens are allowed": "\u53EA\u5141\u8BB8\u4F7F\u7528\u5B57\u6BCD\u3001\u6570\u5B57\u548C\u8FDE\u5B57\u7B26",
12207
13534
  Other: "\u5176\u4ED6",
12208
13535
  "Other options": "\u5176\u4ED6\u9009\u9879",
12209
13536
  Passkey: "\u901A\u884C\u5BC6\u94A5",
@@ -12244,6 +13571,7 @@ var zh_default = {
12244
13571
  Remove: "\u79FB\u9664",
12245
13572
  "Remove Login Method": "\u79FB\u9664\u767B\u5F55\u65B9\u5F0F",
12246
13573
  "Remove from shortcuts": "\u4ECE\u5FEB\u6377\u65B9\u5F0F\u4E2D\u79FB\u9664",
13574
+ "Remove your current domain name": "\u79FB\u9664\u5F53\u524D\u57DF\u540D",
12247
13575
  "Resend code": "\u91CD\u65B0\u53D1\u9001\u4EE3\u7801",
12248
13576
  Retry: "\u91CD\u8BD5",
12249
13577
  "Safari blocked the login window. Please try again, it should work now.": "Safari \u963B\u6B62\u4E86\u767B\u5F55\u7A97\u53E3\u3002\u8BF7\u518D\u6B21\u5C1D\u8BD5\uFF0C\u73B0\u5728\u5E94\u8BE5\u53EF\u4EE5\u6B63\u5E38\u5DE5\u4F5C\u3002",
@@ -12323,6 +13651,7 @@ var zh_default = {
12323
13651
  "Token Contract Address": "\u4EE3\u5E01\u5408\u7EA6\u5730\u5740",
12324
13652
  "Token already added": "\u4EE3\u5E01\u5DF2\u6DFB\u52A0",
12325
13653
  "Tokens transferred successfully.": "\u4EE3\u5E01\u8F6C\u79FB\u6210\u529F\u3002",
13654
+ Tools: "\u5DE5\u5177",
12326
13655
  "Total balance": "\u603B\u4F59\u989D",
12327
13656
  "Transaction completed!": "\u4EA4\u6613\u5B8C\u6210\uFF01",
12328
13657
  "Transaction failed": "\u4EA4\u6613\u5931\u8D25",
@@ -12342,6 +13671,11 @@ var zh_default = {
12342
13671
  "Unknown error": "\u672A\u77E5\u9519\u8BEF",
12343
13672
  "Unknown status": "\u672A\u77E5\u72B6\u6001",
12344
13673
  "Unlink Login Method": "\u53D6\u6D88\u94FE\u63A5\u767B\u5F55\u65B9\u5F0F",
13674
+ "Unset current domain": "\u53D6\u6D88\u8BBE\u7F6E\u5F53\u524D\u57DF\u540D",
13675
+ "Unsetting current domain": "\u6B63\u5728\u53D6\u6D88\u8BBE\u7F6E\u5F53\u524D\u57DF\u540D",
13676
+ "Unsetting current domain...": "\u6B63\u5728\u53D6\u6D88\u8BBE\u7F6E\u5F53\u524D\u57DF\u540D...",
13677
+ "Unsetting your current VeChain nickname": "\u53D6\u6D88\u8BBE\u7F6E\u60A8\u5F53\u524D\u7684VeChain\u6635\u79F0",
13678
+ "Unsetting your current domain": "\u53D6\u6D88\u8BBE\u7F6E\u60A8\u5F53\u524D\u7684\u57DF\u540D",
12345
13679
  "Update profile image": "\u66F4\u65B0\u8D44\u6599\u56FE\u7247",
12346
13680
  "Upgrade Now": "\u7ACB\u5373\u5347\u7EA7",
12347
13681
  "Upgrade Smart Account to V3": "\u5C06\u667A\u80FD\u8D26\u6237\u5347\u7EA7\u5230V3",
@@ -12409,8 +13743,10 @@ var zh_default = {
12409
13743
  "You own a Smart Account and it has priority over your wallet.": "\u60A8\u62E5\u6709\u4E00\u4E2A\u667A\u80FD\u8D26\u6237\uFF0C\u5B83\u4F18\u5148\u4E8E\u60A8\u7684\u94B1\u5305\u3002",
12410
13744
  "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.": "\u60A8\u7684\u8D26\u6237\u5DF2\u6210\u529F\u5347\u7EA7\u5230\u6700\u65B0\u7248\u672C\u3002\u60A8\u73B0\u5728\u53EF\u4EE5\u4EAB\u53D7\u66F4\u597D\u7684\u7528\u6237\u4F53\u9A8C\u3001\u66F4\u4F4E\u7684\u71C3\u6C14\u8D39\u7528\u548C\u589E\u5F3A\u7684\u5B89\u5168\u6027\u3002",
12411
13745
  "Your accounts": "\u60A8\u7684\u8D26\u6237",
13746
+ "Your address has been successfully set to {{name}}.{{domainType}}.": "\u60A8\u7684\u5730\u5740\u5DF2\u6210\u529F\u8BBE\u7F6E\u4E3A{{name}}.{{domainType}}\u3002",
12412
13747
  "Your changes have been saved successfully.": "\u60A8\u7684\u66F4\u6539\u5DF2\u6210\u529F\u4FDD\u5B58\u3002",
12413
13748
  "Your customizations are linked to your .vet domain name, making them portable across different applications.": "\u60A8\u7684\u81EA\u5B9A\u4E49\u8BBE\u7F6E\u4E0E\u60A8\u7684.vet\u57DF\u540D\u76F8\u5173\u8054\uFF0C\u4F7F\u5176\u80FD\u591F\u5728\u4E0D\u540C\u7684\u5E94\u7528\u7A0B\u5E8F\u4E2D\u6D41\u7545\u4F7F\u7528\u3002",
13749
+ "Your domain has been unset successfully.": "\u60A8\u7684\u57DF\u540D\u5DF2\u6210\u529F\u53D6\u6D88\u8BBE\u7F6E\u3002",
12414
13750
  "Your embedded wallet": "\u60A8\u7684\u5D4C\u5165\u94B1\u5305",
12415
13751
  "Your existing domains": "\u60A8\u73B0\u6709\u7684\u57DF\u540D",
12416
13752
  "Your mobile browser blocked the login window.": "\u60A8\u7684\u79FB\u52A8\u6D4F\u89C8\u5668\u963B\u6B62\u4E86\u767B\u5F55\u7A97\u53E3\u3002",
@@ -12427,6 +13763,7 @@ var zh_default = {
12427
13763
  "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.": "\u60A8\u7684\u94B1\u5305\u7531\u79C1\u94A5\u4FDD\u62A4\u3002\u79C1\u94A5\u662F\u4E00\u4E2A\u72EC\u7279\u7684\u4EE3\u7801\uFF0C\u5141\u8BB8\u60A8\u8BBF\u95EE\u60A8\u7684\u94B1\u5305\u3002\u5B83\u5B58\u50A8\u5728\u60A8\u7684\u6D4F\u89C8\u5668\u4E2D\uFF0C\u7528\u4E8E\u7B7E\u7F72\u4EA4\u6613\u3002\u79C1\u94A5\u4E0D\u4F1A\u4E0E\u4EFB\u4F55\u4EBA\u5171\u4EAB\uFF0C\u5305\u62EC\u552F\u94FE\u57FA\u91D1\u4F1A\u3002",
12428
13764
  "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.": "\u60A8\u7684\u94B1\u5305\u5B89\u5168\u6027\u53D6\u51B3\u4E8E\u60A8\u5982\u4F55\u8BBF\u95EE\u5B83\u3002\u901A\u8FC7 VeWorld \u63D2\u4EF6\u3001\u79FB\u52A8\u5E94\u7528\u6216\u786C\u4EF6\u94B1\u5305\u7B49\u81EA\u6211\u6258\u7BA1\u9009\u9879\uFF0C\u60A8\u53EF\u4EE5\u5B8C\u5168\u63A7\u5236\u60A8\u7684\u79C1\u94A5\u3002\u6B64\u63D2\u4EF6\u672C\u8EAB\u65E0\u6CD5\u8BBF\u95EE\u60A8\u7684\u79C1\u94A5\u3002\u4F7F\u7528\u793E\u4EA4\u8D26\u6237\u6216\u552F\u94FE\u767B\u5F55\u65F6\uFF0C\u60A8\u7684\u94B1\u5305\u7531 Privy \u521B\u5EFA\u548C\u4FDD\u62A4\uFF0C\u5E76\u7531\u552F\u94FE\u7BA1\u7406\uFF0C\u63D0\u4F9B\u66F4\u7B80\u5355\u7684\u5165\u95E8\u4F53\u9A8C\uFF0C\u540C\u65F6\u4FDD\u6301\u5B89\u5168\u6027\u3002",
12429
13765
  "Your {{name}}.veworld.vet name has been claimed successfully.": "\u60A8\u7684 {{name}}.veworld.vet \u540D\u5B57\u5DF2\u6210\u529F\u6CE8\u518C\u3002",
13766
+ "Your {{name}}.{{domainType}} name has been claimed successfully.": "\u60A8\u7684{{name}}.{{domainType}}\u540D\u79F0\u5DF2\u6210\u529F\u7533\u8BF7\u3002",
12430
13767
  here: "\u8FD9\u91CC",
12431
13768
  of: "\u7684",
12432
13769
  on: "\u5F00\u542F",
@@ -12470,6 +13807,7 @@ var ja_default = {
12470
13807
  "Address is required": "\u30A2\u30C9\u30EC\u30B9\u304C\u5FC5\u8981\u3067\u3059",
12471
13808
  "All apps": "\u3059\u3079\u3066\u306E\u30A2\u30D7\u30EA",
12472
13809
  "Already have an app account?": "\u65E2\u306B\u30A2\u30D7\u30EA\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u304A\u6301\u3061\u3067\u3059\u304B\uFF1F",
13810
+ "Already have an x2earn app wallet?": "\u65E2\u306Bx2earn\u30A2\u30D7\u30EA\u306E\u30A6\u30A9\u30EC\u30C3\u30C8\u3092\u304A\u6301\u3061\u3067\u3059\u304B\uFF1F",
12473
13811
  Amount: "\u91D1\u984D",
12474
13812
  "Amount is required": "\u91D1\u984D\u304C\u5FC5\u8981\u3067\u3059",
12475
13813
  "An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.": "VeBetterDAO\u306EX2Earn\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u306F\u3001\u74B0\u5883\u306B\u512A\u3057\u3044\u884C\u52D5\u3092\u3068\u308B\u30E6\u30FC\u30B6\u30FC\u306BB3TR\u30C8\u30FC\u30AF\u30F3\u3092\u5831\u916C\u3068\u3057\u3066\u63D0\u4F9B\u3059\u308B\u6301\u7D9A\u53EF\u80FD\u306A\u30A2\u30D7\u30EA\u3067\u3059\u3002\u3053\u308C\u3089\u306E\u30A2\u30D7\u30EA\u306FB3TR\u3092\u914D\u5E03\u3057\u3001\u30E6\u30FC\u30B6\u306E\u30A6\u30A9\u30EC\u30C3\u30C8\u3092\u30EA\u30F3\u30AF\u3057\u3001\u6301\u7D9A\u53EF\u80FD\u306A\u884C\u52D5\u306E\u8A3C\u660E\u3092\u63D0\u4F9B\u3057\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002\u3053\u308C\u3089\u306F\u63A8\u85A6\u3092\u901A\u3058\u3066VeBetterDAO\u306B\u53C2\u52A0\u3057\u3001\u9031\u3054\u3068\u306E\u30C8\u30FC\u30AF\u30F3\u5272\u308A\u5F53\u3066\u30E9\u30A6\u30F3\u30C9\u306B\u53C2\u52A0\u3057\u307E\u3059\u3002",
@@ -12483,6 +13821,7 @@ var ja_default = {
12483
13821
  "Are you sure you want to disconnect your wallet?": "\u30A6\u30A9\u30EC\u30C3\u30C8\u3092\u5207\u65AD\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",
12484
13822
  "Are you sure you want to set your domain name to": "\u30C9\u30E1\u30A4\u30F3\u540D\u3092\u8A2D\u5B9A\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B",
12485
13823
  "Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?": "{{accountDescription}}\u306B\u30EA\u30F3\u30AF\u3055\u308C\u305F\u30ED\u30B0\u30A4\u30F3\u65B9\u6CD5\u3068\u3057\u3066{{accountType}}\u306E\u30EA\u30F3\u30AF\u3092\u89E3\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",
13824
+ "Are you sure you want to unset your current domain?": "\u73FE\u5728\u306E\u30C9\u30E1\u30A4\u30F3\u3092\u89E3\u9664\u3057\u3066\u3082\u3088\u308D\u3057\u3044\u3067\u3059\u304B\uFF1F",
12486
13825
  Assets: "\u8CC7\u7523",
12487
13826
  At: "\u3067",
12488
13827
  "B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.": "B3TR\u306FVeBetterDAO\u306E\u30A4\u30F3\u30BB\u30F3\u30C6\u30A3\u30D6\u30C8\u30FC\u30AF\u30F3\u3067\u3042\u308A\u3001VechainThor\u30D6\u30ED\u30C3\u30AF\u30C1\u30A7\u30FC\u30F3\u4E0A\u306B\u69CB\u7BC9\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u7DCF\u4F9B\u7D66\u91CF\u306F10\u5104\u30C8\u30FC\u30AF\u30F3\u306B\u9650\u5B9A\u3055\u308C\u300112\u5E74\u9593\u306B\u308F\u305F\u3063\u3066\u6BCE\u9031\u767A\u884C\u3055\u308C\u307E\u3059\u3002B3TR\u306F\u5831\u916C\u3001\u30AC\u30D0\u30CA\u30F3\u30B9\u3001\u304A\u3088\u3073VOT3\u30C8\u30FC\u30AF\u30F3\u306E1:1\u306E\u4FDD\u8B77\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\u305D\u308C\u306F\u30B5\u30B9\u30C6\u30CA\u30D3\u30EA\u30C6\u30A3\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u3068DAO\u30C8\u30EC\u30B8\u30E3\u30EA\u7BA1\u7406\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002",
@@ -12522,6 +13861,7 @@ var ja_default = {
12522
13861
  Confirm: "\u78BA\u8A8D",
12523
13862
  "Confirm Changes": "\u5909\u66F4\u3092\u78BA\u8A8D",
12524
13863
  "Confirm Name": "\u540D\u524D\u3092\u78BA\u8A8D",
13864
+ "Confirm Unset Domain": "\u30C9\u30E1\u30A4\u30F3\u89E3\u9664\u3092\u78BA\u8A8D",
12525
13865
  "Confirm the transaction in your wallet to complete it.": "\u30A6\u30A9\u30EC\u30C3\u30C8\u3067\u30C8\u30E9\u30F3\u30B6\u30AF\u30B7\u30E7\u30F3\u3092\u78BA\u8A8D\u3057\u3066\u5B8C\u4E86\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
12526
13866
  "Confirm transaction": "\u53D6\u5F15\u3092\u78BA\u8A8D",
12527
13867
  "Connect Wallet": "\u30A6\u30A9\u30EC\u30C3\u30C8\u3092\u63A5\u7D9A",
@@ -12575,6 +13915,8 @@ var ja_default = {
12575
13915
  Discord: "\u30C7\u30A3\u30B9\u30B3\u30FC\u30C9",
12576
13916
  "Display Name": "\u8868\u793A\u540D",
12577
13917
  "Display name must be less than 25 characters": "\u8868\u793A\u540D\u306F25\u6587\u5B57\u672A\u6E80\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093",
13918
+ "Domain set": "\u30C9\u30E1\u30A4\u30F3\u304C\u8A2D\u5B9A\u3055\u308C\u307E\u3057\u305F",
13919
+ "Domain unset": "\u30C9\u30E1\u30A4\u30F3\u304C\u89E3\u9664\u3055\u308C\u307E\u3057\u305F",
12578
13920
  Done: "\u5B8C\u4E86",
12579
13921
  Ecosystem: "\u30A8\u30B3\u30B7\u30B9\u30C6\u30E0",
12580
13922
  "Ecosystem Login": "\u30A8\u30B3\u30B7\u30B9\u30C6\u30E0\u306B\u30ED\u30B0\u30A4\u30F3",
@@ -12607,6 +13949,7 @@ var ja_default = {
12607
13949
  "For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.": "\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u4E0A\u306E\u7406\u7531\u304B\u3089\u3001\u57CB\u3081\u8FBC\u307F\u30A6\u30A9\u30EC\u30C3\u30C8\u306E\u8A2D\u5B9A\u306F{{appName}}\u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u3067\u306E\u307F\u7BA1\u7406\u3067\u304D\u307E\u3059\u3002",
12608
13950
  "Frequently asked questions": "\u3088\u304F\u3042\u308B\u8CEA\u554F",
12609
13951
  From: "\u9001\u4FE1\u5143",
13952
+ General: "\u4E00\u822C",
12610
13953
  Github: "\u30AE\u30C3\u30C8\u30CF\u30D6",
12611
13954
  "Give a nickname to your wallet to easily identify it.": "\u30A6\u30A9\u30EC\u30C3\u30C8\u306B\u30CB\u30C3\u30AF\u30CD\u30FC\u30E0\u3092\u4ED8\u3051\u3066\u7C21\u5358\u306B\u8B58\u5225\u3057\u307E\u3057\u3087\u3046\u3002",
12612
13955
  "Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.": "\u6717\u5831\u3067\u3059\uFF01\u30B9\u30DE\u30FC\u30C8\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u305F\u3081\u306B\u3001\u30DE\u30EB\u30C1\u30AF\u30ED\u30FC\u30BA\u53D6\u5F15\u304C\u5B8C\u5168\u306B\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u308B\u3088\u3046\u306B\u306A\u308A\u307E\u3057\u305F\u3002\u3053\u308C\u3067\u3001\u3088\u308A\u826F\u3044\u30E6\u30FC\u30B6\u30FC\u4F53\u9A13\u3001\u4F4E\u30B3\u30B9\u30C8\u306E\u30AC\u30B9\u3001\u305D\u3057\u3066\u5F37\u5316\u3055\u308C\u305F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u3092\u697D\u3057\u3080\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002",
@@ -12692,6 +14035,7 @@ var ja_default = {
12692
14035
  "Node URL": "\u30CE\u30FC\u30C9URL",
12693
14036
  "Not available": "\u5229\u7528\u4E0D\u53EF",
12694
14037
  Notifications: "\u901A\u77E5",
14038
+ "Only letters, numbers, and hyphens are allowed": "\u4F7F\u7528\u3067\u304D\u308B\u306E\u306F\u6587\u5B57\u3001\u6570\u5B57\u3001\u30CF\u30A4\u30D5\u30F3\u306E\u307F\u3067\u3059",
12695
14039
  Other: "\u305D\u306E\u4ED6",
12696
14040
  "Other options": "\u305D\u306E\u4ED6\u306E\u30AA\u30D7\u30B7\u30E7\u30F3",
12697
14041
  Passkey: "\u30D1\u30B9\u30AD\u30FC",
@@ -12732,6 +14076,7 @@ var ja_default = {
12732
14076
  Remove: "\u524A\u9664",
12733
14077
  "Remove Login Method": "\u30ED\u30B0\u30A4\u30F3\u65B9\u6CD5\u306E\u524A\u9664",
12734
14078
  "Remove from shortcuts": "\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u304B\u3089\u524A\u9664",
14079
+ "Remove your current domain name": "\u73FE\u5728\u306E\u30C9\u30E1\u30A4\u30F3\u540D\u3092\u524A\u9664\u3059\u308B",
12735
14080
  "Resend code": "\u30B3\u30FC\u30C9\u3092\u518D\u9001\u4FE1",
12736
14081
  Retry: "\u518D\u8A66\u884C",
12737
14082
  "Safari blocked the login window. Please try again, it should work now.": "Safari\u304C\u30ED\u30B0\u30A4\u30F3\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u30D6\u30ED\u30C3\u30AF\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002\u4ECA\u5EA6\u306F\u3046\u307E\u304F\u3044\u304F\u306F\u305A\u3067\u3059\u3002",
@@ -12811,6 +14156,7 @@ var ja_default = {
12811
14156
  "Token Contract Address": "\u30C8\u30FC\u30AF\u30F3\u5951\u7D04\u30A2\u30C9\u30EC\u30B9",
12812
14157
  "Token already added": "\u30C8\u30FC\u30AF\u30F3\u306F\u65E2\u306B\u8FFD\u52A0\u3055\u308C\u3066\u3044\u307E\u3059",
12813
14158
  "Tokens transferred successfully.": "\u30C8\u30FC\u30AF\u30F3\u306E\u8EE2\u9001\u304C\u6210\u529F\u3057\u307E\u3057\u305F\u3002",
14159
+ Tools: "\u30C4\u30FC\u30EB",
12814
14160
  "Total balance": "\u7DCF\u6B8B\u9AD8",
12815
14161
  "Transaction completed!": "\u53D6\u5F15\u304C\u5B8C\u4E86\u3057\u307E\u3057\u305F\uFF01",
12816
14162
  "Transaction failed": "\u53D6\u5F15\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
@@ -12830,6 +14176,11 @@ var ja_default = {
12830
14176
  "Unknown error": "\u4E0D\u660E\u306A\u30A8\u30E9\u30FC",
12831
14177
  "Unknown status": "\u4E0D\u660E\u306A\u72B6\u614B",
12832
14178
  "Unlink Login Method": "\u30ED\u30B0\u30A4\u30F3\u65B9\u6CD5\u306E\u30EA\u30F3\u30AF\u89E3\u9664",
14179
+ "Unset current domain": "\u73FE\u5728\u306E\u30C9\u30E1\u30A4\u30F3\u3092\u89E3\u9664\u3059\u308B",
14180
+ "Unsetting current domain": "\u73FE\u5728\u306E\u30C9\u30E1\u30A4\u30F3\u3092\u89E3\u9664\u4E2D",
14181
+ "Unsetting current domain...": "\u73FE\u5728\u306E\u30C9\u30E1\u30A4\u30F3\u3092\u89E3\u9664\u4E2D...",
14182
+ "Unsetting your current VeChain nickname": "\u73FE\u5728\u306EVeChain\u30CB\u30C3\u30AF\u30CD\u30FC\u30E0\u3092\u89E3\u9664\u4E2D",
14183
+ "Unsetting your current domain": "\u73FE\u5728\u306E\u30C9\u30E1\u30A4\u30F3\u3092\u89E3\u9664\u4E2D",
12833
14184
  "Update profile image": "\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u753B\u50CF\u3092\u66F4\u65B0",
12834
14185
  "Upgrade Now": "\u4ECA\u3059\u3050\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9",
12835
14186
  "Upgrade Smart Account to V3": "\u30B9\u30DE\u30FC\u30C8\u30A2\u30AB\u30A6\u30F3\u30C8\u3092V3\u306B\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9",
@@ -12897,8 +14248,10 @@ var ja_default = {
12897
14248
  "You own a Smart Account and it has priority over your wallet.": "\u3042\u306A\u305F\u306F\u30B9\u30DE\u30FC\u30C8\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u6240\u6709\u3057\u3066\u304A\u308A\u3001\u305D\u308C\u306F\u3042\u306A\u305F\u306E\u30A6\u30A9\u30EC\u30C3\u30C8\u3088\u308A\u512A\u5148\u3055\u308C\u307E\u3059\u3002",
12898
14249
  "Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.": "\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u306F\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u6B63\u5E38\u306B\u30A2\u30C3\u30D7\u30B0\u30EC\u30FC\u30C9\u3055\u308C\u307E\u3057\u305F\u3002\u3088\u308A\u826F\u3044\u30E6\u30FC\u30B6\u30FC\u4F53\u9A13\u3001\u4F4E\u3044\u30AC\u30B9\u30B3\u30B9\u30C8\u3001\u5F37\u5316\u3055\u308C\u305F\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u3092\u304A\u697D\u3057\u307F\u304F\u3060\u3055\u3044\u3002",
12899
14250
  "Your accounts": "\u3042\u306A\u305F\u306E\u30A2\u30AB\u30A6\u30F3\u30C8",
14251
+ "Your address has been successfully set to {{name}}.{{domainType}}.": "\u3042\u306A\u305F\u306E\u30A2\u30C9\u30EC\u30B9\u306F{{name}}.{{domainType}}\u306B\u6B63\u5E38\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002",
12900
14252
  "Your changes have been saved successfully.": "\u5909\u66F4\u306F\u6B63\u5E38\u306B\u4FDD\u5B58\u3055\u308C\u307E\u3057\u305F\u3002",
12901
14253
  "Your customizations are linked to your .vet domain name, making them portable across different applications.": "\u30AB\u30B9\u30BF\u30DE\u30A4\u30BA\u306F.vet\u30C9\u30E1\u30A4\u30F3\u540D\u306B\u30EA\u30F3\u30AF\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u7570\u306A\u308B\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3\u9593\u3067\u6301\u3061\u904B\u3079\u307E\u3059\u3002",
14254
+ "Your domain has been unset successfully.": "\u3042\u306A\u305F\u306E\u30C9\u30E1\u30A4\u30F3\u306F\u6B63\u5E38\u306B\u89E3\u9664\u3055\u308C\u307E\u3057\u305F\u3002",
12902
14255
  "Your embedded wallet": "\u3042\u306A\u305F\u306E\u57CB\u3081\u8FBC\u307F\u30A6\u30A9\u30EC\u30C3\u30C8",
12903
14256
  "Your existing domains": "\u65E2\u5B58\u306E\u30C9\u30E1\u30A4\u30F3",
12904
14257
  "Your mobile browser blocked the login window.": "\u30E2\u30D0\u30A4\u30EB\u30D6\u30E9\u30A6\u30B6\u304C\u30ED\u30B0\u30A4\u30F3\u30A6\u30A3\u30F3\u30C9\u30A6\u3092\u30D6\u30ED\u30C3\u30AF\u3057\u307E\u3057\u305F\u3002",
@@ -12915,6 +14268,7 @@ var ja_default = {
12915
14268
  "Your wallet is secured by a private key. The private key is a unique code that allows you to access your wallet. It is stored in your browser and is used to sign transactions. The private key is never shared with anyone, including the VeChain Foundation.": "\u30A6\u30A9\u30EC\u30C3\u30C8\u306F\u79D8\u5BC6\u9375\u306B\u3088\u3063\u3066\u4FDD\u8B77\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u79D8\u5BC6\u9375\u306F\u30A6\u30A9\u30EC\u30C3\u30C8\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u3092\u53EF\u80FD\u306B\u3059\u308B\u4E00\u610F\u306E\u30B3\u30FC\u30C9\u3067\u3059\u3002\u3053\u308C\u306F\u30D6\u30E9\u30A6\u30B6\u306B\u4FDD\u5B58\u3055\u308C\u3001\u30C8\u30E9\u30F3\u30B6\u30AF\u30B7\u30E7\u30F3\u306E\u7F72\u540D\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\u79D8\u5BC6\u9375\u306F\u3001VeChain\u306E\u8CA1\u56E3\u3092\u542B\u3080\u8AB0\u3068\u3082\u5171\u6709\u3055\u308C\u307E\u305B\u3093\u3002",
12916
14269
  "Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.": "\u30A6\u30A9\u30EC\u30C3\u30C8\u306E\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u306F\u3001\u30A2\u30AF\u30BB\u30B9\u65B9\u6CD5\u306B\u4F9D\u5B58\u3057\u307E\u3059\u3002VeWorld\u62E1\u5F35\u6A5F\u80FD\u3084\u30E2\u30D0\u30A4\u30EB\u30A2\u30D7\u30EA\u3001\u30CF\u30FC\u30C9\u30A6\u30A7\u30A2\u30A6\u30A9\u30EC\u30C3\u30C8\u306A\u3069\u306E\u81EA\u5DF1\u7BA1\u7406\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3059\u308B\u3053\u3068\u3067\u3001\u79D8\u5BC6\u9375\u3092\u5B8C\u5168\u306B\u7BA1\u7406\u3067\u304D\u307E\u3059\u3002\u3053\u306E\u62E1\u5F35\u6A5F\u80FD\u81EA\u4F53\u306F\u3042\u306A\u305F\u306E\u79D8\u5BC6\u9375\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u3053\u3068\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u30BD\u30FC\u30B7\u30E3\u30EB\u30A2\u30AB\u30A6\u30F3\u30C8\u3084VeChain\u3092\u4F7F\u7528\u3057\u3066\u30ED\u30B0\u30A4\u30F3\u3059\u308B\u5834\u5408\u3001\u30A6\u30A9\u30EC\u30C3\u30C8\u306FPrivy\u306B\u3088\u3063\u3066\u4F5C\u6210\u3055\u308C\u3001\u4FDD\u8B77\u3055\u308C\u3001VeChain\u306B\u3088\u3063\u3066\u7BA1\u7406\u3055\u308C\u3001\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u3092\u7DAD\u6301\u3057\u3064\u3064\u5BB9\u6613\u306A\u30AA\u30F3\u30DC\u30FC\u30C7\u30A3\u30F3\u30B0\u4F53\u9A13\u3092\u63D0\u4F9B\u3057\u307E\u3059\u3002",
12917
14270
  "Your {{name}}.veworld.vet name has been claimed successfully.": "\u3042\u306A\u305F\u306E{{name}}.veworld.vet\u540D\u304C\u6B63\u5E38\u306B\u8ACB\u6C42\u3055\u308C\u307E\u3057\u305F\u3002",
14271
+ "Your {{name}}.{{domainType}} name has been claimed successfully.": "\u3042\u306A\u305F\u306E{{name}}.{{domainType}}\u540D\u306F\u6B63\u5E38\u306B\u53D6\u5F97\u3055\u308C\u307E\u3057\u305F\u3002",
12918
14272
  here: "\u3053\u3061\u3089",
12919
14273
  of: "\u306E",
12920
14274
  on: "\u4E0A",
@@ -12984,6 +14338,10 @@ var i18n_default = i18n;
12984
14338
  var FAQContent = ({ onGoBack }) => {
12985
14339
  const { network, darkMode: isDark } = useVeChainKitConfig();
12986
14340
  const { i18n: i18n2, t } = useTranslation();
14341
+ const handleLanguageChange = (e) => {
14342
+ Analytics.settings.language.changed(e.target.value, i18n2.language);
14343
+ i18n2.changeLanguage(e.target.value);
14344
+ };
12987
14345
  return /* @__PURE__ */ jsxs(ScrollToTopWrapper, { children: [
12988
14346
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
12989
14347
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Help") }),
@@ -13028,7 +14386,7 @@ var FAQContent = ({ onGoBack }) => {
13028
14386
  size: "sm",
13029
14387
  width: "auto",
13030
14388
  value: i18n2.language,
13031
- onChange: (e) => i18n2.changeLanguage(e.target.value),
14389
+ onChange: handleLanguageChange,
13032
14390
  bg: isDark ? "whiteAlpha.200" : "gray.100",
13033
14391
  borderColor: isDark ? "whiteAlpha.300" : "gray.200",
13034
14392
  _hover: {
@@ -13066,7 +14424,8 @@ var FAQContent = ({ onGoBack }) => {
13066
14424
  ] });
13067
14425
  };
13068
14426
  var CustomizationContent = ({
13069
- setCurrentContent
14427
+ setCurrentContent,
14428
+ initialContentSource = "profile"
13070
14429
  }) => {
13071
14430
  const { t } = useTranslation();
13072
14431
  const { network } = useVeChainKitConfig();
@@ -13135,9 +14494,14 @@ var CustomizationContent = ({
13135
14494
  network.type
13136
14495
  );
13137
14496
  setAvatarIpfsHash(ipfsHash);
14497
+ Analytics.customization.imageUploaded(true);
13138
14498
  } catch (error) {
13139
14499
  console.error("Error uploading image:", error);
13140
14500
  setPreviewImageUrl(null);
14501
+ Analytics.customization.imageUploaded(
14502
+ false,
14503
+ error instanceof Error ? error.message : "Unknown error"
14504
+ );
13141
14505
  } finally {
13142
14506
  setIsUploading(false);
13143
14507
  }
@@ -13173,15 +14537,43 @@ var CustomizationContent = ({
13173
14537
  type: "account-customization-summary",
13174
14538
  props: {
13175
14539
  setCurrentContent,
13176
- changes: getChangedValues()
14540
+ changes: getChangedValues(),
14541
+ onDoneRedirectContent: initialContentSource
13177
14542
  }
13178
14543
  });
13179
14544
  };
14545
+ const handleClose = () => {
14546
+ if (isUploading) {
14547
+ Analytics.customization.dropOff({
14548
+ stage: "avatar",
14549
+ reason: "modal_closed_during_upload"
14550
+ });
14551
+ } else {
14552
+ Analytics.customization.dropOff({
14553
+ stage: "form",
14554
+ reason: "modal_closed"
14555
+ });
14556
+ }
14557
+ };
14558
+ const handleBack = () => {
14559
+ if (isUploading) {
14560
+ Analytics.customization.dropOff({
14561
+ stage: "avatar",
14562
+ reason: "back_button_during_upload"
14563
+ });
14564
+ } else {
14565
+ Analytics.customization.dropOff({
14566
+ stage: "form",
14567
+ reason: "back_button"
14568
+ });
14569
+ }
14570
+ setCurrentContent("profile");
14571
+ };
13180
14572
  return /* @__PURE__ */ jsxs(Box, { children: [
13181
14573
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
13182
14574
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Customization") }),
13183
- /* @__PURE__ */ jsx(ModalBackButton, { onClick: () => setCurrentContent("profile") }),
13184
- /* @__PURE__ */ jsx(ModalCloseButton, {})
14575
+ /* @__PURE__ */ jsx(ModalBackButton, { onClick: handleBack }),
14576
+ /* @__PURE__ */ jsx(ModalCloseButton, { onClick: handleClose })
13185
14577
  ] }),
13186
14578
  /* @__PURE__ */ jsxs(ModalBody, { children: [
13187
14579
  /* @__PURE__ */ jsxs(
@@ -13279,13 +14671,21 @@ var CustomizationContent = ({
13279
14671
  "Choose a unique .vet domain name for your account."
13280
14672
  ),
13281
14673
  onClick: () => {
14674
+ Analytics.nameSelection.started(
14675
+ "account-customization"
14676
+ );
13282
14677
  if (account?.domain) {
13283
14678
  setCurrentContent({
13284
14679
  type: "choose-name-search",
13285
14680
  props: {
13286
14681
  name: "",
13287
14682
  setCurrentContent,
13288
- initialContentSource: "account-customization"
14683
+ initialContentSource: {
14684
+ type: "account-customization",
14685
+ props: {
14686
+ setCurrentContent
14687
+ }
14688
+ }
13289
14689
  }
13290
14690
  });
13291
14691
  } else {
@@ -13293,10 +14693,18 @@ var CustomizationContent = ({
13293
14693
  type: "choose-name",
13294
14694
  props: {
13295
14695
  setCurrentContent,
13296
- initialContentSource: "account-customization",
13297
- onBack: () => setCurrentContent(
13298
- "account-customization"
13299
- )
14696
+ initialContentSource: {
14697
+ type: "account-customization",
14698
+ props: {
14699
+ setCurrentContent
14700
+ }
14701
+ },
14702
+ onBack: () => setCurrentContent({
14703
+ type: "account-customization",
14704
+ props: {
14705
+ setCurrentContent
14706
+ }
14707
+ })
13300
14708
  }
13301
14709
  });
13302
14710
  }
@@ -13513,7 +14921,8 @@ var CustomizationContent = ({
13513
14921
  };
13514
14922
  var CustomizationSummaryContent = ({
13515
14923
  setCurrentContent,
13516
- changes
14924
+ changes,
14925
+ onDoneRedirectContent
13517
14926
  }) => {
13518
14927
  const { t } = useTranslation();
13519
14928
  const { darkMode: isDark } = useVeChainKitConfig();
@@ -13547,7 +14956,12 @@ var CustomizationSummaryContent = ({
13547
14956
  // Pass the pre-fetched resolver address
13548
14957
  signerAccountAddress: account?.address ?? "",
13549
14958
  onSuccess: async () => {
13550
- refreshMetadata();
14959
+ Analytics.customization.completed({
14960
+ hasAvatar: !!changes.avatarIpfsHash,
14961
+ hasDisplayName: !!changes.displayName,
14962
+ hasDescription: !!changes.description,
14963
+ hasSocials: !!(changes.twitter || changes.website || changes.email)
14964
+ });
13551
14965
  setCurrentContent({
13552
14966
  type: "successful-operation",
13553
14967
  props: {
@@ -13558,10 +14972,29 @@ var CustomizationSummaryContent = ({
13558
14972
  "Your changes have been saved successfully."
13559
14973
  ),
13560
14974
  onDone: () => {
13561
- setCurrentContent("profile");
14975
+ setCurrentContent(onDoneRedirectContent);
13562
14976
  }
13563
14977
  }
13564
14978
  });
14979
+ try {
14980
+ await refreshMetadata();
14981
+ } catch (error) {
14982
+ console.error("Error refreshing data:", error);
14983
+ }
14984
+ },
14985
+ onError: (error) => {
14986
+ if (error && isRejectionError(error?.message ?? "")) {
14987
+ Analytics.customization.dropOff({
14988
+ stage: "confirmation",
14989
+ reason: "wallet_rejected",
14990
+ error: error?.message
14991
+ });
14992
+ } else {
14993
+ Analytics.customization.failed(
14994
+ "confirmation",
14995
+ error instanceof Error ? error.message : "Unknown error"
14996
+ );
14997
+ }
13565
14998
  }
13566
14999
  });
13567
15000
  const onSubmit = async (data) => {
@@ -13591,6 +15024,11 @@ var CustomizationSummaryContent = ({
13591
15024
  }
13592
15025
  } catch (error) {
13593
15026
  console.error("Error saving changes:", error);
15027
+ Analytics.customization.dropOff({
15028
+ stage: "confirmation",
15029
+ reason: "transaction_error",
15030
+ error: error instanceof Error ? error.message : "Unknown error"
15031
+ });
13594
15032
  }
13595
15033
  };
13596
15034
  const renderField = (label, value) => {
@@ -13607,6 +15045,31 @@ var CustomizationSummaryContent = ({
13607
15045
  /* @__PURE__ */ jsx(Text, { fontSize: "md", children: value })
13608
15046
  ] });
13609
15047
  };
15048
+ const handleRetry = () => {
15049
+ Analytics.customization.failed(
15050
+ "confirmation",
15051
+ txError instanceof Error ? txError.message : "Unknown error"
15052
+ );
15053
+ handleSubmit(onSubmit)();
15054
+ };
15055
+ const handleClose = () => {
15056
+ Analytics.customization.dropOff({
15057
+ stage: "confirmation",
15058
+ reason: "modal_closed"
15059
+ });
15060
+ };
15061
+ const handleBack = () => {
15062
+ Analytics.customization.dropOff({
15063
+ stage: "confirmation",
15064
+ reason: "back_button"
15065
+ });
15066
+ setCurrentContent({
15067
+ type: "account-customization",
15068
+ props: {
15069
+ setCurrentContent
15070
+ }
15071
+ });
15072
+ };
13610
15073
  return /* @__PURE__ */ jsxs(Box, { as: "form", onSubmit: handleSubmit(onSubmit), children: [
13611
15074
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
13612
15075
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Confirm Changes") }),
@@ -13614,10 +15077,16 @@ var CustomizationSummaryContent = ({
13614
15077
  ModalBackButton,
13615
15078
  {
13616
15079
  isDisabled: isTransactionPending,
13617
- onClick: () => setCurrentContent("account-customization")
15080
+ onClick: handleBack
13618
15081
  }
13619
15082
  ),
13620
- /* @__PURE__ */ jsx(ModalCloseButton, { isDisabled: isTransactionPending })
15083
+ /* @__PURE__ */ jsx(
15084
+ ModalCloseButton,
15085
+ {
15086
+ isDisabled: isTransactionPending,
15087
+ onClick: handleClose
15088
+ }
15089
+ )
13621
15090
  ] }),
13622
15091
  /* @__PURE__ */ jsx(ModalBody, { children: /* @__PURE__ */ jsxs(VStack, { spacing: 4, align: "stretch", children: [
13623
15092
  changes.avatarIpfsHash && /* @__PURE__ */ jsxs(VStack, { align: "flex-start", w: "full", spacing: 1, children: [
@@ -13644,6 +15113,7 @@ var CustomizationSummaryContent = ({
13644
15113
  isSubmitting: isTransactionPending,
13645
15114
  isTxWaitingConfirmation: isWaitingForWalletConfirmation,
13646
15115
  onConfirm: handleSubmit(onSubmit),
15116
+ onRetry: handleRetry,
13647
15117
  transactionPendingText: t("Saving changes..."),
13648
15118
  txReceipt,
13649
15119
  buttonText: t("Confirm"),
@@ -13674,7 +15144,15 @@ var ProfileContent = ({
13674
15144
  /* @__PURE__ */ jsx(
13675
15145
  ProfileCard,
13676
15146
  {
13677
- onEditClick: () => setCurrentContent("account-customization"),
15147
+ onEditClick: () => {
15148
+ Analytics.customization.started();
15149
+ setCurrentContent({
15150
+ type: "account-customization",
15151
+ props: {
15152
+ setCurrentContent
15153
+ }
15154
+ });
15155
+ },
13678
15156
  address: account?.address ?? "",
13679
15157
  showHeader: false,
13680
15158
  style: {
@@ -14156,6 +15634,10 @@ var ManageCustomTokenContent = ({
14156
15634
  var BridgeContent = ({ setCurrentContent }) => {
14157
15635
  const { t } = useTranslation();
14158
15636
  const { darkMode: isDark } = useVeChainKitConfig();
15637
+ const handleLaunchVeChainEnergy = () => {
15638
+ Analytics.bridge.launchVeChainEnergy();
15639
+ window.open("https://swap.vechain.energy/", "_blank");
15640
+ };
14159
15641
  return /* @__PURE__ */ jsxs(Fragment, { children: [
14160
15642
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
14161
15643
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Bridge") }),
@@ -14172,9 +15654,7 @@ var BridgeContent = ({ setCurrentContent }) => {
14172
15654
  Button,
14173
15655
  {
14174
15656
  variant: "vechainKitSecondary",
14175
- onClick: () => {
14176
- window.open("https://swap.vechain.energy/", "_blank");
14177
- },
15657
+ onClick: handleLaunchVeChainEnergy,
14178
15658
  children: [
14179
15659
  t("Launch vechain.energy"),
14180
15660
  /* @__PURE__ */ jsx(Icon, { as: FaExternalLinkAlt, ml: 2 })
@@ -14776,6 +16256,10 @@ var NotificationItem = ({
14776
16256
  onMarkAsRead
14777
16257
  }) => {
14778
16258
  const { t } = useTranslation();
16259
+ const handleDismiss = () => {
16260
+ Analytics.notifications.dismissed(notification.status);
16261
+ onMarkAsRead(notification.id);
16262
+ };
14779
16263
  if (notification.isRead && !isArchiveView) {
14780
16264
  return null;
14781
16265
  }
@@ -14788,6 +16272,8 @@ var NotificationItem = ({
14788
16272
  pr: 8,
14789
16273
  position: "relative",
14790
16274
  opacity: notification.isRead ? 0.7 : 1,
16275
+ cursor: "pointer",
16276
+ _hover: { opacity: 0.8 },
14791
16277
  children: [
14792
16278
  /* @__PURE__ */ jsx(AlertIcon, { boxSize: "16px" }),
14793
16279
  /* @__PURE__ */ jsxs(Box, { children: [
@@ -14803,7 +16289,10 @@ var NotificationItem = ({
14803
16289
  size: "sm",
14804
16290
  variant: "ghost",
14805
16291
  icon: /* @__PURE__ */ jsx(IoCloseCircle, {}),
14806
- onClick: () => onMarkAsRead(notification.id),
16292
+ onClick: (e) => {
16293
+ e.stopPropagation();
16294
+ handleDismiss();
16295
+ },
14807
16296
  "aria-label": "Mark as read and archive"
14808
16297
  }
14809
16298
  )
@@ -14826,11 +16315,16 @@ var NotificationsContent = ({ setCurrentContent }) => {
14826
16315
  getArchivedNotifications()
14827
16316
  );
14828
16317
  const handleClearAll = () => {
16318
+ Analytics.notifications.cleared(void 0, notifications.length);
14829
16319
  clearAllNotifications();
14830
16320
  setArchivedNotifications([...archivedNotifications, ...notifications]);
14831
16321
  setNotifications([]);
14832
16322
  };
14833
16323
  const handleMarkAsRead = (id) => {
16324
+ const notification = notifications.find((n) => n.id === id);
16325
+ if (notification) {
16326
+ Analytics.notifications.archived(notification.status);
16327
+ }
14834
16328
  markAsRead(id);
14835
16329
  const notificationToArchive = notifications.find((n) => n.id === id);
14836
16330
  setNotifications(notifications.filter((n) => n.id !== id));
@@ -14841,6 +16335,12 @@ var NotificationsContent = ({ setCurrentContent }) => {
14841
16335
  ]);
14842
16336
  }
14843
16337
  };
16338
+ const handleToggleView = () => {
16339
+ Analytics.notifications.toggleView(
16340
+ isArchiveView ? "current" : "archived"
16341
+ );
16342
+ setIsArchiveView(!isArchiveView);
16343
+ };
14844
16344
  const currentNotifications = isArchiveView ? archivedNotifications : notifications;
14845
16345
  const sortedNotifications = [...currentNotifications].sort((a, b) => {
14846
16346
  if (a.id === "welcome") return -1;
@@ -14876,7 +16376,7 @@ var NotificationsContent = ({ setCurrentContent }) => {
14876
16376
  }
14877
16377
  ),
14878
16378
  size: "sm",
14879
- onClick: () => setIsArchiveView(!isArchiveView),
16379
+ onClick: handleToggleView,
14880
16380
  children: isArchiveView ? t("Current") : t("Archived")
14881
16381
  }
14882
16382
  ),
@@ -14950,6 +16450,21 @@ var AppComponent = ({ xApp, setCurrentContent }) => {
14950
16450
  const { data: logo, isLoading: isLogoLoading } = useIpfsImage(
14951
16451
  appMetadata?.logo
14952
16452
  );
16453
+ const handleAppClick = () => {
16454
+ if (appMetadata?.name) {
16455
+ Analytics.ecosystem.appSelected(appMetadata.name);
16456
+ setCurrentContent({
16457
+ type: "app-overview",
16458
+ props: {
16459
+ name: appMetadata.name,
16460
+ image: logo?.image ?? "",
16461
+ url: appMetadata?.external_url ?? "",
16462
+ description: appMetadata?.description ?? "",
16463
+ setCurrentContent
16464
+ }
16465
+ });
16466
+ }
16467
+ };
14953
16468
  return /* @__PURE__ */ jsx(
14954
16469
  Skeleton,
14955
16470
  {
@@ -14962,18 +16477,7 @@ var AppComponent = ({ xApp, setCurrentContent }) => {
14962
16477
  name: appMetadata?.name ?? "",
14963
16478
  imageUrl: logo?.image ?? "",
14964
16479
  linkUrl: appMetadata?.external_url ?? "",
14965
- onClick: () => {
14966
- setCurrentContent({
14967
- type: "app-overview",
14968
- props: {
14969
- name: appMetadata?.name ?? "",
14970
- image: logo?.image ?? "",
14971
- url: appMetadata?.external_url ?? "",
14972
- description: appMetadata?.description ?? "",
14973
- setCurrentContent
14974
- }
14975
- });
14976
- }
16480
+ onClick: handleAppClick
14977
16481
  }
14978
16482
  )
14979
16483
  }
@@ -14987,22 +16491,27 @@ var CustomAppComponent = ({
14987
16491
  logoComponent,
14988
16492
  setCurrentContent
14989
16493
  }) => {
16494
+ const handleAppClick = () => {
16495
+ Analytics.ecosystem.appSelected(name);
16496
+ setCurrentContent({
16497
+ type: "app-overview",
16498
+ props: {
16499
+ name,
16500
+ image,
16501
+ url,
16502
+ description,
16503
+ logoComponent,
16504
+ setCurrentContent
16505
+ }
16506
+ });
16507
+ };
14990
16508
  return /* @__PURE__ */ jsx(
14991
16509
  SharedAppCard,
14992
16510
  {
14993
16511
  name,
14994
16512
  imageUrl: image,
14995
16513
  linkUrl: url,
14996
- onClick: () => setCurrentContent({
14997
- type: "app-overview",
14998
- props: {
14999
- name,
15000
- image,
15001
- url,
15002
- description,
15003
- logoComponent
15004
- }
15005
- }),
16514
+ onClick: handleAppClick,
15006
16515
  ...logoComponent && { logoComponent }
15007
16516
  }
15008
16517
  );
@@ -15103,6 +16612,16 @@ var ExploreEcosystemContent = ({ setCurrentContent }) => {
15103
16612
  return dapp;
15104
16613
  });
15105
16614
  const { shortcuts } = useEcosystemShortcuts();
16615
+ const handleSearchChange = (e) => {
16616
+ const query = e.target.value;
16617
+ setSearchQuery(query);
16618
+ if (query) {
16619
+ Analytics.ecosystem.searchPerformed(
16620
+ query,
16621
+ filteredDefaultApps.length + filteredDapps.length
16622
+ );
16623
+ }
16624
+ };
15106
16625
  return /* @__PURE__ */ jsxs(Box, { children: [
15107
16626
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
15108
16627
  /* @__PURE__ */ jsx(ModalHeader, { children: t("Ecosystem") }),
@@ -15127,7 +16646,7 @@ var ExploreEcosystemContent = ({ setCurrentContent }) => {
15127
16646
  {
15128
16647
  placeholder: t("Search Apps"),
15129
16648
  value: searchQuery,
15130
- onChange: (e) => setSearchQuery(e.target.value),
16649
+ onChange: handleSearchChange,
15131
16650
  bg: isDark ? "#00000038" : "gray.50",
15132
16651
  borderRadius: "xl",
15133
16652
  height: "56px",
@@ -15171,6 +16690,14 @@ var ShortcutButton = ({ name, image, url, description }) => {
15171
16690
  const { t } = useTranslation();
15172
16691
  const { isShortcut, addShortcut, removeShortcut } = useEcosystemShortcuts();
15173
16692
  const hasShortcut = isShortcut(url);
16693
+ const handleShortcutClick = () => {
16694
+ if (hasShortcut) {
16695
+ removeShortcut(url);
16696
+ } else {
16697
+ Analytics.ecosystem.addAppToShortcuts(name);
16698
+ addShortcut({ name, image, url, description });
16699
+ }
16700
+ };
15174
16701
  return /* @__PURE__ */ jsx(
15175
16702
  Button,
15176
16703
  {
@@ -15179,13 +16706,7 @@ var ShortcutButton = ({ name, image, url, description }) => {
15179
16706
  height: "45px",
15180
16707
  variant: "vechainKitSecondary",
15181
16708
  borderRadius: "xl",
15182
- onClick: () => {
15183
- if (hasShortcut) {
15184
- removeShortcut(url);
15185
- } else {
15186
- addShortcut({ name, image, url, description });
15187
- }
15188
- },
16709
+ onClick: handleShortcutClick,
15189
16710
  leftIcon: /* @__PURE__ */ jsx(Icon, { as: hasShortcut ? BsBookmarkFill : BsBookmark }),
15190
16711
  children: hasShortcut ? t("Remove from shortcuts") : t("Add to shortcuts")
15191
16712
  }
@@ -15200,6 +16721,10 @@ var AppOverviewContent = ({
15200
16721
  logoComponent
15201
16722
  }) => {
15202
16723
  const { t } = useTranslation();
16724
+ const handleLaunchApp = () => {
16725
+ Analytics.ecosystem.launchApp(name);
16726
+ window.open(url, "_blank");
16727
+ };
15203
16728
  return /* @__PURE__ */ jsxs(Box, { children: [
15204
16729
  /* @__PURE__ */ jsxs(StickyHeaderContainer, { children: [
15205
16730
  /* @__PURE__ */ jsx(ModalHeader, { children: name }),
@@ -15234,9 +16759,7 @@ var AppOverviewContent = ({
15234
16759
  Button,
15235
16760
  {
15236
16761
  variant: "vechainKitSecondary",
15237
- onClick: () => {
15238
- window.open(url, "_blank");
15239
- },
16762
+ onClick: handleLaunchApp,
15240
16763
  children: [
15241
16764
  t("Launch {{name}}", { name }),
15242
16765
  /* @__PURE__ */ jsx(Icon, { as: FaExternalLinkAlt, ml: 2 })
@@ -15613,7 +17136,7 @@ var SuccessfulOperationContent = ({
15613
17136
  justifyContent: "center",
15614
17137
  children: [
15615
17138
  /* @__PURE__ */ jsx(Text, { children: t("View transaction on the explorer") }),
15616
- /* @__PURE__ */ jsx(Icon, { size: "sm", as: GoLinkExternal })
17139
+ /* @__PURE__ */ jsx(Icon, { size: 16, as: GoLinkExternal })
15617
17140
  ]
15618
17141
  }
15619
17142
  )
@@ -15636,6 +17159,7 @@ var AccountModal = ({
15636
17159
  useEffect(() => {
15637
17160
  if (isOpen && initialContent) {
15638
17161
  setCurrentContent(initialContent);
17162
+ Analytics.wallet.opened(!!account);
15639
17163
  }
15640
17164
  }, [isOpen, initialContent, setCurrentContent]);
15641
17165
  const renderContent = () => {
@@ -15681,6 +17205,14 @@ var AccountModal = ({
15681
17205
  return /* @__PURE__ */ jsx(UpgradeSmartAccountContent, { ...currentContent.props });
15682
17206
  case "faq":
15683
17207
  return /* @__PURE__ */ jsx(FAQContent, { ...currentContent.props });
17208
+ case "account-customization":
17209
+ return /* @__PURE__ */ jsx(
17210
+ CustomizationContent,
17211
+ {
17212
+ ...currentContent.props,
17213
+ setCurrentContent
17214
+ }
17215
+ );
15684
17216
  }
15685
17217
  }
15686
17218
  switch (currentContent) {
@@ -15698,7 +17230,10 @@ var AccountModal = ({
15698
17230
  SettingsContent,
15699
17231
  {
15700
17232
  setCurrentContent,
15701
- onLogoutSuccess: onClose
17233
+ onLogoutSuccess: () => {
17234
+ Analytics.auth.logoutCompleted();
17235
+ onClose();
17236
+ }
15702
17237
  }
15703
17238
  );
15704
17239
  case "profile":
@@ -15706,7 +17241,10 @@ var AccountModal = ({
15706
17241
  ProfileContent,
15707
17242
  {
15708
17243
  setCurrentContent,
15709
- onLogoutSuccess: onClose
17244
+ onLogoutSuccess: () => {
17245
+ Analytics.auth.logoutCompleted();
17246
+ onClose();
17247
+ }
15710
17248
  }
15711
17249
  );
15712
17250
  case "assets":
@@ -15757,13 +17295,6 @@ var AccountModal = ({
15757
17295
  setCurrentContent
15758
17296
  }
15759
17297
  );
15760
- case "account-customization":
15761
- return /* @__PURE__ */ jsx(
15762
- CustomizationContent,
15763
- {
15764
- setCurrentContent
15765
- }
15766
- );
15767
17298
  case "embedded-wallet":
15768
17299
  return /* @__PURE__ */ jsx(
15769
17300
  EmbeddedWalletContent,
@@ -15830,7 +17361,8 @@ var ConnectionButton = ({
15830
17361
  customIcon,
15831
17362
  rightIcon,
15832
17363
  style,
15833
- variant = "loginIn"
17364
+ variant = "loginIn",
17365
+ iconWidth = "25px"
15834
17366
  }) => {
15835
17367
  if (!text) {
15836
17368
  return /* @__PURE__ */ jsx(Button, { ...style, variant, w: "full", onClick, children: customIcon ? customIcon : /* @__PURE__ */ jsx(Icon, { as: icon, w: "20px", h: "20px" }) });
@@ -15838,7 +17370,7 @@ var ConnectionButton = ({
15838
17370
  if (text) {
15839
17371
  return /* @__PURE__ */ jsxs(Button, { ...style, variant, w: "full", onClick, children: [
15840
17372
  /* @__PURE__ */ jsxs(HStack, { w: "full", justify: "flex-start", gap: 2, children: [
15841
- customIcon ? customIcon : /* @__PURE__ */ jsx(Icon, { as: icon, w: "25px", h: "25px" }),
17373
+ customIcon ? customIcon : /* @__PURE__ */ jsx(Icon, { as: icon, w: iconWidth, h: iconWidth }),
15842
17374
  /* @__PURE__ */ jsx(Text, { opacity: 0.9, children: text })
15843
17375
  ] }),
15844
17376
  rightIcon
@@ -15851,6 +17383,15 @@ var ConnectPopover = ({
15851
17383
  buttonStyle
15852
17384
  }) => {
15853
17385
  const { t } = useTranslation();
17386
+ const {
17387
+ loginMethods,
17388
+ darkMode: isDark,
17389
+ privyEcosystemAppIDS
17390
+ } = useVeChainKitConfig();
17391
+ const showEcosystemButton = loginMethods?.some(
17392
+ ({ method: method35 }) => method35 === "ecosystem"
17393
+ );
17394
+ const { data: appsInfo, isLoading: isEcosystemAppsLoading } = useFetchAppInfo(privyEcosystemAppIDS);
15854
17395
  return /* @__PURE__ */ jsx(
15855
17396
  Popover,
15856
17397
  {
@@ -15879,7 +17420,17 @@ var ConnectPopover = ({
15879
17420
  ]
15880
17421
  }
15881
17422
  ) }),
15882
- /* @__PURE__ */ jsx(PopoverContent, { children: /* @__PURE__ */ jsx(PopoverBody, { children: /* @__PURE__ */ jsx(ConnectionOptionsStack, {}) }) })
17423
+ /* @__PURE__ */ jsxs(PopoverContent, { children: [
17424
+ /* @__PURE__ */ jsx(PopoverBody, { children: /* @__PURE__ */ jsx(ConnectionOptionsStack, {}) }),
17425
+ /* @__PURE__ */ jsx(PopoverFooter, { borderTop: "none", pb: "15px", children: showEcosystemButton && /* @__PURE__ */ jsx(HStack, { justify: "center", w: "full", children: /* @__PURE__ */ jsx(
17426
+ EcosystemButton,
17427
+ {
17428
+ isDark,
17429
+ appsInfo: Object.values(appsInfo || {}),
17430
+ isLoading: isEcosystemAppsLoading
17431
+ }
17432
+ ) }) })
17433
+ ] })
15883
17434
  ] })
15884
17435
  }
15885
17436
  );
@@ -15967,16 +17518,20 @@ var WalletButton = ({
15967
17518
  connectionVariant = "modal"
15968
17519
  }) => {
15969
17520
  const { t } = useTranslation();
15970
- const { darkMode } = useVeChainKitConfig();
17521
+ const { darkMode, loginMethods } = useVeChainKitConfig();
17522
+ const hasOnlyDappKit = loginMethods?.length === 1 && loginMethods[0].method === "dappkit";
15971
17523
  const { connection, account } = useWallet();
15972
17524
  const { setSource, connect } = useWallet$1();
15973
17525
  const [isMobile3] = useMediaQuery("(max-width: 768px)");
15974
17526
  const connectModal = useDisclosure();
15975
17527
  const accountModal = useDisclosure();
17528
+ const { open: openDappKit } = useWalletModal();
15976
17529
  const handleConnect = () => {
15977
17530
  if (connection.isInAppBrowser) {
15978
17531
  setSource("veworld");
15979
17532
  connect();
17533
+ } else if (hasOnlyDappKit) {
17534
+ openDappKit();
15980
17535
  } else {
15981
17536
  connectModal.onOpen();
15982
17537
  }
@@ -16378,6 +17933,7 @@ var EcosystemContent = ({ onClose, appsInfo, isLoading }) => {
16378
17933
  const [loginError, setLoginError] = useState();
16379
17934
  const [selectedApp, setSelectedApp] = useState();
16380
17935
  const loginLoadingModal = useDisclosure();
17936
+ const { user } = usePrivy();
16381
17937
  const { setConnectionCache } = useCrossAppConnectionCache();
16382
17938
  const { login: loginWithCrossApp } = usePrivyCrossAppSdk();
16383
17939
  const connectWithVebetterDaoApps = async (appId, appName) => {
@@ -16387,6 +17943,9 @@ var EcosystemContent = ({ onClose, appsInfo, isLoading }) => {
16387
17943
  setSelectedApp(appName);
16388
17944
  try {
16389
17945
  await loginWithCrossApp(appId);
17946
+ Analytics.auth.trackAuth("connect_initiated", {
17947
+ totalConnections: appsInfo.length
17948
+ });
16390
17949
  loginLoadingModal.onClose();
16391
17950
  setConnectionCache({
16392
17951
  name: appName,
@@ -16394,10 +17953,17 @@ var EcosystemContent = ({ onClose, appsInfo, isLoading }) => {
16394
17953
  appId,
16395
17954
  website: appsInfo.find((app) => app.id === appId)?.website
16396
17955
  });
17956
+ Analytics.auth.completed({
17957
+ userId: user?.id,
17958
+ loginMethod: "ecosystem" /* ECOSYSTEM */
17959
+ });
16397
17960
  onClose();
16398
17961
  } catch (error) {
16399
17962
  const errorMsg = error?.message;
16400
- if (errorMsg?.includes("rejected") || errorMsg?.includes("closed")) {
17963
+ if (errorMsg && isRejectionError(errorMsg)) {
17964
+ Analytics.auth.dropOff("ecosystem-app-connect", {
17965
+ ...appName && { appName }
17966
+ });
16401
17967
  return new Error("Login request was cancelled.");
16402
17968
  }
16403
17969
  const errorToShow = error instanceof Error ? error : new Error(
@@ -16414,30 +17980,26 @@ var EcosystemContent = ({ onClose, appsInfo, isLoading }) => {
16414
17980
  };
16415
17981
  const handleTryAgain = () => {
16416
17982
  if (selectedApp) {
17983
+ Analytics.auth.tryAgain("ecosystem" /* ECOSYSTEM */, selectedApp);
16417
17984
  const app = appsInfo.find((app2) => app2.name === selectedApp);
16418
17985
  if (app) {
16419
17986
  connectWithVebetterDaoApps(app.id, app.name);
16420
17987
  }
16421
17988
  }
16422
17989
  };
17990
+ const handleClose = () => {
17991
+ Analytics.auth.dropOff("ecosystem-view", {
17992
+ ...selectedApp && { appName: selectedApp }
17993
+ });
17994
+ onClose();
17995
+ };
16423
17996
  return /* @__PURE__ */ jsxs(Box, { children: [
16424
17997
  /* @__PURE__ */ jsxs(Fragment, { children: [
16425
17998
  /* @__PURE__ */ jsx(StickyHeaderContainer, { children: /* @__PURE__ */ jsxs(ModalHeader, { children: [
16426
- t("Already have an app account?"),
16427
- /* @__PURE__ */ jsx(ModalCloseButton, {})
17999
+ t("Already have an x2earn app wallet?"),
18000
+ /* @__PURE__ */ jsx(ModalCloseButton, { onClick: handleClose })
16428
18001
  ] }) }),
16429
18002
  /* @__PURE__ */ jsxs(ModalBody, { children: [
16430
- /* @__PURE__ */ jsx(
16431
- Text,
16432
- {
16433
- fontSize: "12px",
16434
- fontWeight: "400",
16435
- opacity: 0.5,
16436
- mb: 4,
16437
- textAlign: "center",
16438
- children: t("Sign in with a wallet from other x2earn apps.")
16439
- }
16440
- ),
16441
18003
  isLoading && /* @__PURE__ */ jsx(
16442
18004
  VStack,
16443
18005
  {
@@ -16537,14 +18099,11 @@ var ProfileCard = ({
16537
18099
  }) => {
16538
18100
  const { t } = useTranslation();
16539
18101
  const { account } = useWallet();
16540
- const activeAccountDomain = useVechainDomain(address);
16541
- const activeAccountAvatar = useGetAvatarOfAddress(address);
16542
- const activeAccountTextRecords = useGetTextRecords(
16543
- activeAccountDomain?.data?.domain
16544
- );
18102
+ const { network } = useVeChainKitConfig();
18103
+ const metadata = useWalletMetadata(address, network.type);
16545
18104
  const headerImageSvg = getPicassoImage(address);
16546
18105
  const isConnectedAccount = address === account?.address;
16547
- const hasLinks = activeAccountTextRecords?.data?.url || activeAccountTextRecords?.data?.["com.x"] || activeAccountTextRecords?.data?.email;
18106
+ const hasLinks = metadata?.records?.url || metadata?.records?.["com.x"] || metadata?.records?.email;
16548
18107
  return /* @__PURE__ */ jsxs(Card, { variant: "vechainKitBase", ...style?.card, children: [
16549
18108
  /* @__PURE__ */ jsx(
16550
18109
  Box,
@@ -16571,14 +18130,14 @@ var ProfileCard = ({
16571
18130
  {
16572
18131
  wallet: {
16573
18132
  address,
16574
- domain: activeAccountDomain?.data?.domain,
16575
- image: activeAccountAvatar.data,
16576
- isLoadingMetadata: activeAccountAvatar?.isLoading || activeAccountDomain?.isLoading || activeAccountTextRecords?.isLoading,
16577
- metadata: activeAccountTextRecords?.data
18133
+ domain: metadata?.domain,
18134
+ image: metadata?.image,
18135
+ isLoadingMetadata: metadata?.isLoading,
18136
+ metadata: metadata?.records
16578
18137
  },
16579
18138
  props: {
16580
- width: "100px",
16581
- height: "100px"
18139
+ width: "120px",
18140
+ height: "120px"
16582
18141
  // boxShadow: '0px 0px 3px 2px #00000024',
16583
18142
  }
16584
18143
  }
@@ -16588,12 +18147,12 @@ var ProfileCard = ({
16588
18147
  /* @__PURE__ */ jsx(
16589
18148
  CardBody,
16590
18149
  {
16591
- mt: 10,
18150
+ mt: "60px",
16592
18151
  backgroundColor: "none",
16593
18152
  border: "none",
16594
18153
  ...style?.body,
16595
18154
  children: /* @__PURE__ */ jsxs(VStack, { w: "full", spacing: 2, children: [
16596
- showDisplayName && activeAccountTextRecords?.data?.display && /* @__PURE__ */ jsx(
18155
+ showDisplayName && metadata?.records?.display && /* @__PURE__ */ jsx(
16597
18156
  Text,
16598
18157
  {
16599
18158
  fontSize: "xl",
@@ -16601,10 +18160,19 @@ var ProfileCard = ({
16601
18160
  w: "full",
16602
18161
  textAlign: "center",
16603
18162
  mt: 2,
16604
- children: activeAccountTextRecords?.data?.display
18163
+ children: metadata?.records?.display
18164
+ }
18165
+ ),
18166
+ showDescription && metadata?.records?.description && /* @__PURE__ */ jsx(
18167
+ Text,
18168
+ {
18169
+ fontSize: "sm",
18170
+ opacity: 0.7,
18171
+ w: "full",
18172
+ textAlign: "center",
18173
+ children: metadata?.records?.description
16605
18174
  }
16606
18175
  ),
16607
- showDescription && activeAccountTextRecords?.data?.description && /* @__PURE__ */ jsx(Text, { fontSize: "sm", opacity: 0.7, children: activeAccountTextRecords?.data?.description }),
16608
18176
  showLinks && hasLinks && /* @__PURE__ */ jsxs(
16609
18177
  HStack,
16610
18178
  {
@@ -16613,26 +18181,26 @@ var ProfileCard = ({
16613
18181
  spacing: 5,
16614
18182
  mt: 4,
16615
18183
  children: [
16616
- activeAccountTextRecords?.data?.email && /* @__PURE__ */ jsx(
18184
+ metadata?.records?.email && /* @__PURE__ */ jsx(
16617
18185
  Link,
16618
18186
  {
16619
- href: `mailto:${activeAccountTextRecords?.data?.email}`,
18187
+ href: `mailto:${metadata?.records?.email}`,
16620
18188
  target: "_blank",
16621
18189
  children: /* @__PURE__ */ jsx(Icon, { as: FaEnvelope })
16622
18190
  }
16623
18191
  ),
16624
- activeAccountTextRecords?.data?.url && /* @__PURE__ */ jsx(
18192
+ metadata?.records?.url && /* @__PURE__ */ jsx(
16625
18193
  Link,
16626
18194
  {
16627
- href: activeAccountTextRecords?.data?.url,
18195
+ href: metadata?.records?.url,
16628
18196
  target: "_blank",
16629
18197
  children: /* @__PURE__ */ jsx(Icon, { as: FaGlobe })
16630
18198
  }
16631
18199
  ),
16632
- activeAccountTextRecords?.data?.["com.x"] && /* @__PURE__ */ jsx(
18200
+ metadata?.records?.["com.x"] && /* @__PURE__ */ jsx(
16633
18201
  Link,
16634
18202
  {
16635
- href: `https://x.com/${activeAccountTextRecords?.data?.["com.x"]}`,
18203
+ href: `https://x.com/${metadata?.records?.["com.x"]}`,
16636
18204
  target: "_blank",
16637
18205
  children: /* @__PURE__ */ jsx(Icon, { as: FaXTwitter })
16638
18206
  }
@@ -16645,12 +18213,13 @@ var ProfileCard = ({
16645
18213
  {
16646
18214
  wallet: {
16647
18215
  address,
16648
- domain: activeAccountDomain?.data?.domain,
16649
- image: activeAccountAvatar.data,
16650
- isLoadingMetadata: activeAccountAvatar?.isLoading || activeAccountDomain?.isLoading || activeAccountTextRecords?.isLoading,
16651
- metadata: activeAccountTextRecords?.data
18216
+ domain: metadata?.domain,
18217
+ image: metadata?.image,
18218
+ isLoadingMetadata: metadata?.isLoading,
18219
+ metadata: metadata?.records
16652
18220
  },
16653
- style: { mt: 4 }
18221
+ style: { mt: 4 },
18222
+ fromScreen: "profile"
16654
18223
  }
16655
18224
  )
16656
18225
  ] })
@@ -16765,7 +18334,7 @@ var SuccessfulOperationContent2 = ({
16765
18334
  justifyContent: "center",
16766
18335
  children: [
16767
18336
  /* @__PURE__ */ jsx(Text, { children: t("View transaction on the explorer") }),
16768
- /* @__PURE__ */ jsx(Icon, { size: "sm", as: GoLinkExternal })
18337
+ /* @__PURE__ */ jsx(Icon, { size: 16, as: GoLinkExternal })
16769
18338
  ]
16770
18339
  }
16771
18340
  )
@@ -17091,12 +18660,15 @@ var ModalProvider = ({ children }) => {
17091
18660
  );
17092
18661
  };
17093
18662
  var useConnectModal = () => {
17094
- const {
17095
- openConnectModal: open,
17096
- closeConnectModal: close,
17097
- isConnectModalOpen: isOpen
17098
- } = useModal();
17099
- return { open, close, isOpen };
18663
+ const { loginMethods } = useVeChainKitConfig();
18664
+ const hasOnlyDappKit = loginMethods?.length === 1 && loginMethods[0].method === "dappkit";
18665
+ const { openConnectModal, closeConnectModal, isConnectModalOpen } = useModal();
18666
+ const { open: openDappKit, close: closeDappKit } = useWalletModal();
18667
+ return {
18668
+ open: hasOnlyDappKit ? openDappKit : openConnectModal,
18669
+ close: hasOnlyDappKit ? closeDappKit : closeConnectModal,
18670
+ isOpen: hasOnlyDappKit ? false : isConnectModalOpen
18671
+ };
17100
18672
  };
17101
18673
  var ConnectModalProvider = ({ children }) => /* @__PURE__ */ jsx(Fragment, { children });
17102
18674
  var useAccountModal = () => {
@@ -17290,9 +18862,19 @@ var useFAQModal = () => {
17290
18862
  };
17291
18863
  var FAQModalProvider = ({ children }) => /* @__PURE__ */ jsx(Fragment, { children });
17292
18864
  var useAccountCustomizationModal = () => {
17293
- const { openAccountModal, closeAccountModal, isAccountModalOpen } = useModal();
18865
+ const {
18866
+ openAccountModal,
18867
+ closeAccountModal,
18868
+ isAccountModalOpen,
18869
+ setAccountModalContent
18870
+ } = useModal();
17294
18871
  const open = () => {
17295
- openAccountModal("account-customization");
18872
+ openAccountModal({
18873
+ type: "account-customization",
18874
+ props: {
18875
+ setCurrentContent: setAccountModalContent
18876
+ }
18877
+ });
17296
18878
  };
17297
18879
  const close = () => {
17298
18880
  closeAccountModal();
@@ -17458,8 +19040,8 @@ var useTransferERC20 = ({
17458
19040
  buttonText: "Sign to continue"
17459
19041
  },
17460
19042
  onTxConfirmed: handleOnSuccess,
17461
- onTxFailedOrCancelled: async () => {
17462
- onError?.();
19043
+ onTxFailedOrCancelled: async (error) => {
19044
+ onError?.(error instanceof Error ? error.message : String(error));
17463
19045
  }
17464
19046
  });
17465
19047
  return {
@@ -17511,8 +19093,8 @@ var useTransferVET = ({
17511
19093
  refresh();
17512
19094
  onSuccess?.();
17513
19095
  },
17514
- onTxFailedOrCancelled: async () => {
17515
- onError?.();
19096
+ onTxFailedOrCancelled: async (error) => {
19097
+ onError?.(error instanceof Error ? error.message : String(error));
17516
19098
  }
17517
19099
  });
17518
19100
  return {
@@ -17580,7 +19162,7 @@ var useSignTypedData2 = () => {
17580
19162
  const privyWalletProvider = usePrivyWalletProvider();
17581
19163
  const { signTypedData: signTypedDataDappKit } = useWallet$1();
17582
19164
  const signTypedData = useCallback(
17583
- async (data) => {
19165
+ async (data, options) => {
17584
19166
  setIsSigningPending(true);
17585
19167
  setError(null);
17586
19168
  setSignature(null);
@@ -17594,7 +19176,8 @@ var useSignTypedData2 = () => {
17594
19176
  sig = await signTypedDataDappKit(
17595
19177
  domain,
17596
19178
  data.types,
17597
- data.message
19179
+ data.message,
19180
+ options
17598
19181
  );
17599
19182
  } else {
17600
19183
  sig = await privyWalletProvider.signTypedData(data);
@@ -17602,7 +19185,16 @@ var useSignTypedData2 = () => {
17602
19185
  setSignature(sig);
17603
19186
  return sig;
17604
19187
  } catch (err) {
17605
- const error2 = err instanceof Error ? err : new Error(String(err));
19188
+ if (err && typeof err === "object" && "statusCode" in err && err.statusCode === 4001) {
19189
+ const userRejectionError = new Error(
19190
+ "User denied signature request"
19191
+ );
19192
+ setError(userRejectionError);
19193
+ throw userRejectionError;
19194
+ }
19195
+ const error2 = err instanceof Error ? err : new Error(
19196
+ typeof err === "object" ? JSON.stringify(err) : String(err)
19197
+ );
17606
19198
  setError(error2);
17607
19199
  throw error2;
17608
19200
  } finally {
@@ -17626,23 +19218,62 @@ var useSignTypedData2 = () => {
17626
19218
  };
17627
19219
  var useLoginWithPasskey = () => {
17628
19220
  const { loginWithPasskey: privyLoginWithPasskey } = useLoginWithPasskey$1();
19221
+ const { user } = usePrivy();
17629
19222
  const loginWithPasskey = async () => {
17630
19223
  try {
19224
+ Analytics.auth.flowStarted("passkey" /* PASSKEY */);
19225
+ Analytics.auth.methodSelected("passkey" /* PASSKEY */);
17631
19226
  await privyLoginWithPasskey();
19227
+ Analytics.auth.completed({
19228
+ userId: user?.id,
19229
+ loginMethod: "passkey" /* PASSKEY */
19230
+ });
17632
19231
  } catch (error) {
17633
- console.error("Passkey login failed:", error);
19232
+ Analytics.auth.failed(
19233
+ "passkey" /* PASSKEY */,
19234
+ error instanceof Error ? error.message : "Unknown error"
19235
+ );
17634
19236
  throw error;
17635
19237
  }
17636
19238
  };
17637
19239
  return { loginWithPasskey };
17638
19240
  };
19241
+ var providerToLoginMethod = {
19242
+ google: "google" /* GOOGLE */,
19243
+ twitter: "email" /* EMAIL */,
19244
+ apple: "email" /* EMAIL */,
19245
+ discord: "email" /* EMAIL */
19246
+ };
19247
+ var providerToSocialMethod = {
19248
+ google: "email" /* EMAIL */,
19249
+ twitter: "X" /* X */,
19250
+ apple: "email" /* EMAIL */,
19251
+ discord: "Discord" /* DISCORD */
19252
+ };
17639
19253
  var useLoginWithOAuth2 = () => {
17640
19254
  const { initOAuth: privyInitOAuth } = useLoginWithOAuth();
19255
+ const { user } = usePrivy();
17641
19256
  const initOAuth = async ({ provider }) => {
19257
+ const loginMethod = providerToLoginMethod[provider];
19258
+ const socialMethod = providerToSocialMethod[provider];
17642
19259
  try {
19260
+ Analytics.auth.flowStarted(loginMethod);
19261
+ Analytics.auth.methodSelected(loginMethod);
17643
19262
  await privyInitOAuth({ provider });
19263
+ Analytics.auth.completed({
19264
+ userId: user?.id,
19265
+ loginMethod,
19266
+ platform: socialMethod
19267
+ });
17644
19268
  } catch (error) {
17645
- console.error("OAuth login failed:", error);
19269
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
19270
+ if (isRejectionError(errorMsg)) {
19271
+ Analytics.auth.dropOff("oauth", {
19272
+ ...provider && { provider }
19273
+ });
19274
+ } else {
19275
+ Analytics.auth.failed(loginMethod, errorMsg);
19276
+ }
17646
19277
  throw error;
17647
19278
  }
17648
19279
  };
@@ -17680,8 +19311,10 @@ var useLoginWithVeChain = () => {
17680
19311
  const { login: loginWithVeChain } = usePrivyCrossAppSdk();
17681
19312
  const { setConnectionCache } = useCrossAppConnectionCache();
17682
19313
  const { data: appsInfo } = useFetchAppInfo([VECHAIN_PRIVY_APP_ID]);
19314
+ const { user } = usePrivy();
17683
19315
  const login = async () => {
17684
19316
  try {
19317
+ Analytics.auth.methodSelected("vechain" /* VECHAIN */);
17685
19318
  await loginWithVeChain(VECHAIN_PRIVY_APP_ID);
17686
19319
  setConnectionCache({
17687
19320
  name: "VeChain",
@@ -17689,7 +19322,17 @@ var useLoginWithVeChain = () => {
17689
19322
  appId: VECHAIN_PRIVY_APP_ID,
17690
19323
  website: "https://governance.vebetterdao.org"
17691
19324
  });
19325
+ Analytics.auth.completed({
19326
+ userId: user?.id,
19327
+ loginMethod: "vechain" /* VECHAIN */
19328
+ });
17692
19329
  } catch (error) {
19330
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
19331
+ if (isRejectionError(errorMsg)) {
19332
+ Analytics.auth.dropOff("vechain-approval");
19333
+ } else {
19334
+ Analytics.auth.failed("vechain" /* VECHAIN */, errorMsg);
19335
+ }
17693
19336
  throw handlePopupError({
17694
19337
  error,
17695
19338
  mobileBrowserPopupMessage: "Your mobile browser blocked the login window. Please click 'Try again' to open the login window or change your browser settings.",
@@ -18281,6 +19924,9 @@ var VeChainKitProvider = (props) => {
18281
19924
  });
18282
19925
  }
18283
19926
  }, [language, i18nConfig]);
19927
+ useEffect(() => {
19928
+ localStorage.setItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK, network.type);
19929
+ }, [network]);
18284
19930
  return /* @__PURE__ */ jsxs(EnsureQueryClient, { children: [
18285
19931
  /* @__PURE__ */ jsx(ReactQueryDevtools, { initialIsOpen: false }),
18286
19932
  /* @__PURE__ */ jsx(PrivyCrossAppProvider, { privyEcosystemAppIDS: allowedEcosystemApps, children: /* @__PURE__ */ jsx(
@@ -18703,6 +20349,6 @@ var VechainKitThemeProvider = ({
18703
20349
  ] });
18704
20350
  };
18705
20351
 
18706
- export { APP_SECURITY_LEVELS, AccessAndSecurityContent, AccessAndSecurityModalProvider, AccountAvatar, AccountCustomizationModalProvider, AccountDetailsButton, AccountMainContent, AccountModal, AccountModalProvider, AccountSelector, ActionButton, AddressDisplay, AddressDisplayCard, AssetButton, AssetsContent, AssetsSection, BalanceSection, BaseModal, BridgeContent, ChooseNameContent, ChooseNameModalProvider, ChooseNameSearchContent, ChooseNameSummaryContent, ConnectModal, ConnectModalProvider, ConnectPopover, ConnectionButton, CrossAppConnectionSecurityCard, CustomizationContent, CustomizationSummaryContent, DappKitButton, DomainRequiredAlert, ENS_TEXT_RECORDS, EcosystemButton, EcosystemModal, EmailLoginButton, EmbeddedWalletContent, ExchangeWarningAlert, ExploreEcosystemModalProvider, FAQContent, FAQModalProvider, FadeInView, FadeInViewFromBottom, FadeInViewFromLeft, FadeInViewFromRight, FeatureAnnouncementCard, LoginLoadingModal, LoginWithGoogleButton, MAX_IMAGE_SIZE, MainContent, ManageCustomTokenContent, ModalBackButton, ModalFAQButton, NFTMediaType, NotificationsModalProvider, PRICE_FEED_IDS, PasskeyLoginButton, PrivyButton, PrivyWalletProvider, ProfileCard, ProfileContent, ProfileModalProvider, QuickActionsSection, ReceiveModalProvider, ReceiveTokenContent, RoundState, ScrollToTopWrapper, SecurityLevel, SelectTokenContent, SendTokenContent, SendTokenModalProvider, SendTokenSummaryContent, SettingsContent, ShareButtons, SocialIcons, StickyFooterContainer, StickyHeaderContainer, SwapTokenContent, TransactionButtonAndStatus, TransactionModal, TransactionModalContent, TransactionModalProvider, TransactionToast, TransactionToastProvider, UpgradeSmartAccountContent, UpgradeSmartAccountModal, UpgradeSmartAccountModalProvider, VeChainKitContext, VeChainKitProvider, VeChainLoginButton, VeChainWithPrivyLoginButton, VePassportUserStatus, VechainKitThemeProvider, VersionFooter, WalletButton, WalletModalProvider, buildClaimRewardsTx, buildClaimRoundReward, compressImages, currentBlockQueryKey, decodeFunctionSignature, fetchPrivyAppInfo, fetchPrivyStatus, fetchVechainDomain, getAccountAddress, getAccountAddressQueryKey, getAccountBalance, getAccountBalanceQueryKey, getAccountImplementationAddress, getAccountImplementationAddressQueryKey, getAccountVersion, getAccountVersionQueryKey, getAllEvents, getAllocationAmount, getAllocationAmountQueryKey, getAllocationsRoundState, getAllocationsRoundStateQueryKey, getAllocationsRoundsEvents, getAllocationsRoundsEventsQueryKey, getAppAdmin, getAppAdminQueryKey, getAppBalance, getAppBalanceQueryKey, getAppExistsQueryKey, getAppSecurityLevelQueryKey, getAppsEligibleInNextRound, getAppsEligibleInNextRoundQueryKey, getAppsShareClauses, getAvatar, getAvatarOfAddressQueryKey, getAvatarQueryKey, getB3trBalance, getB3trBalanceQueryKey, getB3trDonatedQueryKey, getB3trToUpgradeQueryKey, getBalanceOf, getCallKey, getChainId, getChainIdQueryKey, getCurrentAccountImplementationVersion, getCurrentAccountImplementationVersionQueryKey, getCurrentAllocationsRoundId, getCurrentAllocationsRoundIdQueryKey, getCustomTokenBalance, getCustomTokenBalanceQueryKey, getCustomTokenInfo, getDelegateeQueryKey, getDelegatorQueryKey, getDomainsOfAddress, getDomainsOfAddressQueryKey, getEnsRecordExistsQueryKey, getEntitiesLinkedToPassportQueryKey, getErc20Balance, getErc20BalanceQueryKey, getEvents, getGMBaseUriQueryKey, getGMLevel, getGMbalanceQueryKey, getGetCumulativeScoreWithDecayQueryKey, getHasV1SmartAccount, getHasV1SmartAccountQueryKey, getHasVotedInRound, getHasVotedInRoundQueryKey, getIpfsImage, getIpfsImageQueryKey, getIpfsMetadata, getIpfsMetadataQueryKey, getIsBlacklistedQueryKey, getIsDeployed, getIsDeployedQueryKey, getIsDomainProtectedQueryKey, getIsEntityQueryKey, getIsNodeHolder, getIsNodeHolderQueryKey, getIsPassportQueryKey, getIsPersonAtTimepointQueryKey, getIsPersonQueryKey, getIsWhitelistedQueryKey, getLevelGradient, getLevelMultiplierQueryKey, getLevelOfTokenQueryKey, getNFTMetadataUri, getNFTMetadataUriQueryKey, getNodeCheckCooldownQueryKey, getNodeManagerQueryKey, getParticipatedInGovernance, getParticipatedInGovernanceQueryKey, getParticipationScoreThresholdQueryKey, getPassportForEntityQueryKey, getPassportToggleQueryKey, getPendingDelegationsQueryKeyDelegateePOV, getPendingDelegationsQueryKeyDelegatorPOV, getPendingLinkingsQueryKey, getPrivyAppInfoQueryKey, getResolverAddress, getResolverAddressQueryKey, getRoundReward, getRoundRewardQueryKey, getRoundXApps, getRoundXAppsQueryKey, getSecurityMultiplierQueryKey, getSmartAccount, getSmartAccountQueryKey, getTextRecords, getTextRecordsQueryKey, getThresholdParticipationScoreAtTimepointQueryKey, getThresholdParticipationScoreQueryKey, getTokenIdByAccount, getTokenIdByAccountQueryKey, getTokenInfo, getTokenUsdPrice, getTokenUsdPriceQueryKey, getTokensInfoByOwnerQueryKey, getUpgradeRequired, getUpgradeRequiredForAccount, getUpgradeRequiredForAccountQueryKey, getUpgradeRequiredQueryKey, getUserBotSignalsQueryKey, getUserNodesQueryKey, getUserRoundScoreQueryKey, getUserVotesInRound, getUserVotesInRoundQueryKey, getUserXNodes, getUserXNodesQueryKey, getVeDelegateBalance, getVeDelegateBalanceQueryKey, getVechainDomainQueryKey, getVersion, getVersionQueryKey, getVot3Balance, getVot3BalanceQueryKey, getVotesInRoundQueryKey, getXAppMetadata, getXAppMetadataQueryKey, getXAppRoundEarnings, getXAppRoundEarningsQueryKey, getXAppTotalEarningsClauses, getXAppTotalEarningsQueryKey, getXAppVotes, getXAppVotesQf, getXAppVotesQfQueryKey, getXAppVotesQueryKey, getXApps, getXAppsMetadataBaseUri, getXAppsMetadataBaseUriQueryKey, getXAppsQueryKey, getXAppsSharesQueryKey, imageCompressionOptions, pollForReceipt, useAccessAndSecurityModal, useAccountBalance, useAccountCustomizationModal, useAccountImplementationAddress, useAccountLinking, useAccountModal, useAllocationAmount, useAllocationsRound, useAllocationsRoundState, useAllocationsRoundsEvents, useAppAdmin, useAppBalance, useAppExists, useAppSecurityLevel, useAppsEligibleInNextRound, useB3trDonated, useB3trToUpgrade, useBalances, useCall, useChooseNameModal, useClaimVeWorldSubdomain, useConnectModal, useCrossAppConnectionCache, useCurrentAccountImplementationVersion, useCurrentAllocationsRound, useCurrentAllocationsRoundId, useCurrentBlock, useDecodeFunctionSignature, useEcosystemShortcuts, useEnsRecordExists, useExploreEcosystemModal, useFAQModal, useFeatureAnnouncement, useFetchAppInfo, useFetchPrivyStatus, useGMBaseUri, useGMbalance, useGetAccountAddress, useGetAccountVersion, useGetAvatar, useGetAvatarOfAddress, useGetB3trBalance, useGetChainId, useGetCumulativeScoreWithDecay, useGetCustomTokenBalances, useGetCustomTokenInfo, useGetDelegatee, useGetDelegator, useGetDomainsOfAddress, useGetEntitiesLinkedToPassport, useGetErc20Balance, useGetNodeManager, useGetNodeUrl, useGetPassportForEntity, useGetPendingDelegationsDelegateePOV, useGetPendingDelegationsDelegatorPOV, useGetPendingLinkings, useGetResolverAddress, useGetTextRecords, useGetTokenUsdPrice, useGetTokensInfoByOwner, useGetUserEntitiesLinkedToPassport, useGetUserNode, useGetUserNodes, useGetUserPassportForEntity, useGetUserPendingLinkings, useGetVeDelegateBalance, useGetVot3Balance, useHasV1SmartAccount, useHasVotedInRound, useIpfsImage, useIpfsImageList, useIpfsMetadata, useIpfsMetadatas, useIsBlacklisted, useIsDomainProtected, useIsEntity, useIsGMclaimable, useIsNodeHolder, useIsPWA, useIsPassport, useIsPassportCheckEnabled, useIsPerson, useIsPersonAtTimepoint, useIsSmartAccountDeployed, useIsUserEntity, useIsUserPassport, useIsUserPerson, useIsWhitelisted, useLevelMultiplier, useLevelOfToken, useLocalStorage, useLoginModalContent, useLoginWithOAuth2 as useLoginWithOAuth, useLoginWithPasskey, useLoginWithVeChain, useMostVotedAppsInRound, useMultipleXAppRoundEarnings, useNFTImage, useNFTMetadataUri, useNotificationAlerts, useNotifications, useNotificationsModal, useParticipatedInGovernance, useParticipationScoreThreshold, usePassportChecks, usePrivyWalletProvider, useProfileModal, useReceiveModal, useRefreshBalances, useRefreshMetadata, useRoundEarnings, useRoundReward, useRoundXApps, useScrollToTop, useSecurityMultiplier, useSelectedGmNft, useSendTokenModal, useSendTransaction, useSignMessage2 as useSignMessage, useSignTypedData2 as useSignTypedData, useSingleImageUpload, useSmartAccount, useSmartAccountVersion, useThresholdParticipationScore, useThresholdParticipationScoreAtTimepoint, useTokenIdByAccount, useTransactionModal, useTransactionToast, useTransferERC20, useTransferVET, useTxReceipt, useUpdateTextRecord, useUpgradeRequired, useUpgradeRequiredForAccount, useUpgradeSmartAccount, useUpgradeSmartAccountModal, useUploadImages, useUserBotSignals, useUserDelegation, useUserRoundScore, useUserStatus, useUserTopVotedApps, useUserVotesInAllRounds, useUserVotesInRound, useVeChainKitConfig, useVechainDomain, useVotesInRound, useVotingRewards, useWallet, useWalletMetadata, useWalletModal2 as useWalletModal, useXApp, useXAppMetadata, useXAppRoundEarnings, useXAppTotalEarnings, useXAppVotes, useXAppVotesQf, useXApps, useXAppsMetadataBaseUri, useXAppsShares, useXNode, useXNodeCheckCooldown, useXNodes };
20352
+ export { APP_SECURITY_LEVELS, AccessAndSecurityContent, AccessAndSecurityModalProvider, AccountAvatar, AccountCustomizationModalProvider, AccountDetailsButton, AccountMainContent, AccountModal, AccountModalProvider, AccountSelector, ActionButton, AddressDisplay, AddressDisplayCard, AssetButton, AssetsContent, AssetsSection, BalanceSection, BaseModal, BridgeContent, ChooseNameContent, ChooseNameModalProvider, ChooseNameSearchContent, ChooseNameSummaryContent, ConnectModal, ConnectModalProvider, ConnectPopover, ConnectionButton, CrossAppConnectionSecurityCard, CustomizationContent, CustomizationSummaryContent, DappKitButton, DomainRequiredAlert, ENS_TEXT_RECORDS, EcosystemButton, EcosystemModal, EmailLoginButton, EmbeddedWalletContent, ExchangeWarningAlert, ExploreEcosystemModalProvider, FAQContent, FAQModalProvider, FadeInView, FadeInViewFromBottom, FadeInViewFromLeft, FadeInViewFromRight, FeatureAnnouncementCard, LoginLoadingModal, LoginWithGoogleButton, MAX_IMAGE_SIZE, MainContent, ManageCustomTokenContent, ModalBackButton, ModalFAQButton, NFTMediaType, NotificationsModalProvider, PRICE_FEED_IDS, PasskeyLoginButton, PrivyButton, PrivyWalletProvider, ProfileCard, ProfileContent, ProfileModalProvider, QuickActionsSection, ReceiveModalProvider, ReceiveTokenContent, RoundState, ScrollToTopWrapper, SecurityLevel, SelectTokenContent, SendTokenContent, SendTokenModalProvider, SendTokenSummaryContent, SettingsContent, ShareButtons, SocialIcons, StickyFooterContainer, StickyHeaderContainer, SwapTokenContent, TransactionButtonAndStatus, TransactionModal, TransactionModalContent, TransactionModalProvider, TransactionToast, TransactionToastProvider, UpgradeSmartAccountContent, UpgradeSmartAccountModal, UpgradeSmartAccountModalProvider, VeChainKitContext, VeChainKitProvider, VeChainLoginButton, VeChainWithPrivyLoginButton, VePassportUserStatus, VechainKitThemeProvider, VersionFooter, WalletButton, WalletModalProvider, buildClaimRewardsTx, buildClaimRoundReward, compressImages, currentBlockQueryKey, decodeFunctionSignature, fetchPrivyAppInfo, fetchPrivyStatus, fetchVechainDomain, getAccountAddress, getAccountAddressQueryKey, getAccountBalance, getAccountBalanceQueryKey, getAccountImplementationAddress, getAccountImplementationAddressQueryKey, getAccountVersion, getAccountVersionQueryKey, getAllEvents, getAllocationAmount, getAllocationAmountQueryKey, getAllocationsRoundState, getAllocationsRoundStateQueryKey, getAllocationsRoundsEvents, getAllocationsRoundsEventsQueryKey, getAppAdmin, getAppAdminQueryKey, getAppBalance, getAppBalanceQueryKey, getAppExistsQueryKey, getAppSecurityLevelQueryKey, getAppsEligibleInNextRound, getAppsEligibleInNextRoundQueryKey, getAppsShareClauses, getAvatar, getAvatarLegacy, getAvatarLegacyQueryKey, getAvatarOfAddressQueryKey, getAvatarQueryKey, getB3trBalance, getB3trBalanceQueryKey, getB3trDonatedQueryKey, getB3trToUpgradeQueryKey, getBalanceOf, getCallKey, getChainId, getChainIdQueryKey, getCurrentAccountImplementationVersion, getCurrentAccountImplementationVersionQueryKey, getCurrentAllocationsRoundId, getCurrentAllocationsRoundIdQueryKey, getCustomTokenBalance, getCustomTokenBalanceQueryKey, getCustomTokenInfo, getDelegateeQueryKey, getDelegatorQueryKey, getDomainsOfAddress, getDomainsOfAddressQueryKey, getEnsRecordExistsQueryKey, getEntitiesLinkedToPassportQueryKey, getErc20Balance, getErc20BalanceQueryKey, getEvents, getGMBaseUriQueryKey, getGMLevel, getGMbalanceQueryKey, getGetCumulativeScoreWithDecayQueryKey, getHasV1SmartAccount, getHasV1SmartAccountQueryKey, getHasVotedInRound, getHasVotedInRoundQueryKey, getIpfsImage, getIpfsImageQueryKey, getIpfsMetadata, getIpfsMetadataQueryKey, getIsBlacklistedQueryKey, getIsDeployed, getIsDeployedQueryKey, getIsDomainProtectedQueryKey, getIsEntityQueryKey, getIsNodeHolder, getIsNodeHolderQueryKey, getIsPassportQueryKey, getIsPersonAtTimepointQueryKey, getIsPersonQueryKey, getIsWhitelistedQueryKey, getLevelGradient, getLevelMultiplierQueryKey, getLevelOfTokenQueryKey, getNFTMetadataUri, getNFTMetadataUriQueryKey, getNodeCheckCooldownQueryKey, getNodeManagerQueryKey, getParticipatedInGovernance, getParticipatedInGovernanceQueryKey, getParticipationScoreThresholdQueryKey, getPassportForEntityQueryKey, getPassportToggleQueryKey, getPendingDelegationsQueryKeyDelegateePOV, getPendingDelegationsQueryKeyDelegatorPOV, getPendingLinkingsQueryKey, getPrivyAppInfoQueryKey, getResolverAddress, getResolverAddressQueryKey, getRoundReward, getRoundRewardQueryKey, getRoundXApps, getRoundXAppsQueryKey, getSecurityMultiplierQueryKey, getSmartAccount, getSmartAccountQueryKey, getTextRecords, getTextRecordsQueryKey, getThresholdParticipationScoreAtTimepointQueryKey, getThresholdParticipationScoreQueryKey, getTokenIdByAccount, getTokenIdByAccountQueryKey, getTokenInfo, getTokenUsdPrice, getTokenUsdPriceQueryKey, getTokensInfoByOwnerQueryKey, getUpgradeRequired, getUpgradeRequiredForAccount, getUpgradeRequiredForAccountQueryKey, getUpgradeRequiredQueryKey, getUserBotSignalsQueryKey, getUserNodesQueryKey, getUserRoundScoreQueryKey, getUserVotesInRound, getUserVotesInRoundQueryKey, getUserXNodes, getUserXNodesQueryKey, getVeDelegateBalance, getVeDelegateBalanceQueryKey, getVechainDomainQueryKey, getVersion, getVersionQueryKey, getVot3Balance, getVot3BalanceQueryKey, getVotesInRoundQueryKey, getXAppMetadata, getXAppMetadataQueryKey, getXAppRoundEarnings, getXAppRoundEarningsQueryKey, getXAppTotalEarningsClauses, getXAppTotalEarningsQueryKey, getXAppVotes, getXAppVotesQf, getXAppVotesQfQueryKey, getXAppVotesQueryKey, getXApps, getXAppsMetadataBaseUri, getXAppsMetadataBaseUriQueryKey, getXAppsQueryKey, getXAppsSharesQueryKey, imageCompressionOptions, pollForReceipt, useAccessAndSecurityModal, useAccountBalance, useAccountCustomizationModal, useAccountImplementationAddress, useAccountLinking, useAccountModal, useAllocationAmount, useAllocationsRound, useAllocationsRoundState, useAllocationsRoundsEvents, useAppAdmin, useAppBalance, useAppExists, useAppSecurityLevel, useAppsEligibleInNextRound, useB3trDonated, useB3trToUpgrade, useBalances, useCall, useChooseNameModal, useClaimVeWorldSubdomain, useClaimVetDomain, useConnectModal, useCrossAppConnectionCache, useCurrentAccountImplementationVersion, useCurrentAllocationsRound, useCurrentAllocationsRoundId, useCurrentBlock, useDecodeFunctionSignature, useEcosystemShortcuts, useEnsRecordExists, useExploreEcosystemModal, useFAQModal, useFeatureAnnouncement, useFetchAppInfo, useFetchPrivyStatus, useGMBaseUri, useGMbalance, useGetAccountAddress, useGetAccountVersion, useGetAvatar, useGetAvatarLegacy, useGetAvatarOfAddress, useGetB3trBalance, useGetChainId, useGetCumulativeScoreWithDecay, useGetCustomTokenBalances, useGetCustomTokenInfo, useGetDelegatee, useGetDelegator, useGetDomainsOfAddress, useGetEntitiesLinkedToPassport, useGetErc20Balance, useGetNodeManager, useGetNodeUrl, useGetPassportForEntity, useGetPendingDelegationsDelegateePOV, useGetPendingDelegationsDelegatorPOV, useGetPendingLinkings, useGetResolverAddress, useGetTextRecords, useGetTokenUsdPrice, useGetTokensInfoByOwner, useGetUserEntitiesLinkedToPassport, useGetUserNode, useGetUserNodes, useGetUserPassportForEntity, useGetUserPendingLinkings, useGetVeDelegateBalance, useGetVot3Balance, useHasV1SmartAccount, useHasVotedInRound, useIpfsImage, useIpfsImageList, useIpfsMetadata, useIpfsMetadatas, useIsBlacklisted, useIsDomainProtected, useIsEntity, useIsGMclaimable, useIsNodeHolder, useIsPWA, useIsPassport, useIsPassportCheckEnabled, useIsPerson, useIsPersonAtTimepoint, useIsSmartAccountDeployed, useIsUserEntity, useIsUserPassport, useIsUserPerson, useIsWhitelisted, useLevelMultiplier, useLevelOfToken, useLocalStorage, useLoginModalContent, useLoginWithOAuth2 as useLoginWithOAuth, useLoginWithPasskey, useLoginWithVeChain, useMostVotedAppsInRound, useMultipleXAppRoundEarnings, useNFTImage, useNFTMetadataUri, useNotificationAlerts, useNotifications, useNotificationsModal, useParticipatedInGovernance, useParticipationScoreThreshold, usePassportChecks, usePrivyWalletProvider, useProfileModal, useReceiveModal, useRefreshBalances, useRefreshMetadata, useRoundEarnings, useRoundReward, useRoundXApps, useScrollToTop, useSecurityMultiplier, useSelectedGmNft, useSendTokenModal, useSendTransaction, useSignMessage2 as useSignMessage, useSignTypedData2 as useSignTypedData, useSingleImageUpload, useSmartAccount, useSmartAccountVersion, useThresholdParticipationScore, useThresholdParticipationScoreAtTimepoint, useTokenIdByAccount, useTransactionModal, useTransactionToast, useTransferERC20, useTransferVET, useTxReceipt, useUnsetDomain, useUpdateTextRecord, useUpgradeRequired, useUpgradeRequiredForAccount, useUpgradeSmartAccount, useUpgradeSmartAccountModal, useUploadImages, useUserBotSignals, useUserDelegation, useUserRoundScore, useUserStatus, useUserTopVotedApps, useUserVotesInAllRounds, useUserVotesInRound, useVeChainKitConfig, useVechainDomain, useVotesInRound, useVotingRewards, useWallet, useWalletMetadata, useWalletModal2 as useWalletModal, useXApp, useXAppMetadata, useXAppRoundEarnings, useXAppTotalEarnings, useXAppVotes, useXAppVotesQf, useXApps, useXAppsMetadataBaseUri, useXAppsShares, useXNode, useXNodeCheckCooldown, useXNodes };
18707
20353
  //# sourceMappingURL=index.js.map
18708
20354
  //# sourceMappingURL=index.js.map