diff --git a/apps/mobile/ios/Podfile.lock b/apps/mobile/ios/Podfile.lock index 67af2e3b1..67f7fa645 100644 --- a/apps/mobile/ios/Podfile.lock +++ b/apps/mobile/ios/Podfile.lock @@ -1619,33 +1619,33 @@ PODS: DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - "EXApplication (from `../../../node_modules/.pnpm/expo-application@5.9.1_expo@51.0.26/node_modules/expo-application/ios`)" - - "EXConstants (from `../../../node_modules/.pnpm/expo-constants@16.0.2_expo@51.0.26/node_modules/expo-constants/ios`)" + - "EXApplication (from `../../../node_modules/.pnpm/expo-application@5.9.1_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7_7lz7kx4ithmpf53d4iw5wfty3a/node_modules/expo-application/ios`)" + - "EXConstants (from `../../../node_modules/.pnpm/expo-constants@16.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7._6hyhkvmxebmfkuqk4n7n33wbeu/node_modules/expo-constants/ios`)" - "EXJSONUtils (from `../../../node_modules/.pnpm/expo-json-utils@0.13.1/node_modules/expo-json-utils/ios`)" - - "EXManifests (from `../../../node_modules/.pnpm/expo-manifests@0.14.3_expo@51.0.26/node_modules/expo-manifests/ios`)" - - "EXNotifications (from `../../../node_modules/.pnpm/expo-notifications@0.28.14_expo@51.0.26/node_modules/expo-notifications/ios`)" - - "Expo (from `../../../node_modules/.pnpm/expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__@react-native+as_rs6zimjzbnb5wo5qz3wb7samvq/node_modules/expo`)" - - "expo-dev-client (from `../../../node_modules/.pnpm/expo-dev-client@4.0.20_expo@51.0.26/node_modules/expo-dev-client/ios`)" - - "expo-dev-launcher (from `../../../node_modules/.pnpm/expo-dev-launcher@4.0.22_expo@51.0.26/node_modules/expo-dev-launcher`)" - - "expo-dev-menu (from `../../../node_modules/.pnpm/expo-dev-menu@5.0.16_expo@51.0.26/node_modules/expo-dev-menu`)" - - "expo-dev-menu-interface (from `../../../node_modules/.pnpm/expo-dev-menu-interface@1.8.3_expo@51.0.26/node_modules/expo-dev-menu-interface/ios`)" - - "ExpoAsset (from `../../../node_modules/.pnpm/expo-asset@10.0.6_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__@react-nati_6amwmu4vugucqsw56blrmvig4e/node_modules/expo-asset/ios`)" - - "ExpoBlur (from `../../../node_modules/.pnpm/expo-blur@13.0.2_expo@51.0.26/node_modules/expo-blur/ios`)" - - "ExpoClipboard (from `../../../node_modules/.pnpm/expo-clipboard@6.0.3_expo@51.0.26/node_modules/expo-clipboard/ios`)" - - "ExpoCrypto (from `../../../node_modules/.pnpm/expo-crypto@13.0.2_expo@51.0.26/node_modules/expo-crypto/ios`)" - - "ExpoDevice (from `../../../node_modules/.pnpm/expo-device@6.0.2_expo@51.0.26/node_modules/expo-device/ios`)" - - "ExpoFileSystem (from `../../../node_modules/.pnpm/expo-file-system@17.0.1_expo@51.0.26/node_modules/expo-file-system/ios`)" - - "ExpoFont (from `../../../node_modules/.pnpm/expo-font@12.0.5_expo@51.0.26/node_modules/expo-font/ios`)" - - "ExpoHead (from `../../../node_modules/.pnpm/expo-router@3.5.14_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__@react-nat_ulqj4esf6v7azt2eimpkxhoiuu/node_modules/expo-router/ios`)" - - "ExpoImage (from `../../../node_modules/.pnpm/expo-image@1.12.9_expo@51.0.26/node_modules/expo-image/ios`)" - - "ExpoKeepAwake (from `../../../node_modules/.pnpm/expo-keep-awake@13.0.2_expo@51.0.26/node_modules/expo-keep-awake/ios`)" - - "ExpoLocalAuthentication (from `../../../node_modules/.pnpm/expo-local-authentication@14.0.1_expo@51.0.26/node_modules/expo-local-authentication/ios`)" + - "EXManifests (from `../../../node_modules/.pnpm/expo-manifests@0.14.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7._kxmlgbanmij6z36l3pnsibhlha/node_modules/expo-manifests/ios`)" + - "EXNotifications (from `../../../node_modules/.pnpm/expo-notifications@0.28.14_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+co_34qdk7mejsopgk23vy7bbnsvsq/node_modules/expo-notifications/ios`)" + - "Expo (from `../../../node_modules/.pnpm/expo@51.0.26_f4nuazufu6irvgtd3prinuxkb4/node_modules/expo`)" + - "expo-dev-client (from `../../../node_modules/.pnpm/expo-dev-client@4.0.20_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7_gmps7dyuicvyrydfqbtht5hiam/node_modules/expo-dev-client/ios`)" + - "expo-dev-launcher (from `../../../node_modules/.pnpm/expo-dev-launcher@4.0.22_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core_4yn64zgy6nc4ta3qecehvlodhy/node_modules/expo-dev-launcher`)" + - "expo-dev-menu (from `../../../node_modules/.pnpm/expo-dev-menu@5.0.16_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.2_sv4q23kfwrr3e7xjv5gylxpsgq/node_modules/expo-dev-menu`)" + - "expo-dev-menu-interface (from `../../../node_modules/.pnpm/expo-dev-menu-interface@1.8.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel_3pff7gitcjyg3566uk7iek4nly/node_modules/expo-dev-menu-interface/ios`)" + - "ExpoAsset (from `../../../node_modules/.pnpm/expo-asset@10.0.6_b5dqityn7dtitewgaq3fc4hps4/node_modules/expo-asset/ios`)" + - "ExpoBlur (from `../../../node_modules/.pnpm/expo-blur@13.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__7adgaqkt3gd55jdqlkye4ibxjq/node_modules/expo-blur/ios`)" + - "ExpoClipboard (from `../../../node_modules/.pnpm/expo-clipboard@6.0.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.2_ccxjrrzlt5s5uamvnr4nwtms4e/node_modules/expo-clipboard/ios`)" + - "ExpoCrypto (from `../../../node_modules/.pnpm/expo-crypto@13.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24._h2ulmuk5g5qgvgcwhyc4imwx24/node_modules/expo-crypto/ios`)" + - "ExpoDevice (from `../../../node_modules/.pnpm/expo-device@6.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6_ypbzdx34cdu4iu7nzusi7hd7eq/node_modules/expo-device/ios`)" + - "ExpoFileSystem (from `../../../node_modules/.pnpm/expo-file-system@17.0.1_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@_oh5zrhcvqmg5s6il5rvw6x2gya/node_modules/expo-file-system/ios`)" + - "ExpoFont (from `../../../node_modules/.pnpm/expo-font@12.0.5_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__afwzzcqn4qtqhraani2se7asxi/node_modules/expo-font/ios`)" + - "ExpoHead (from `../../../node_modules/.pnpm/expo-router@3.5.14_ziqwy7qcm4nz5ldsjzzgjxs67m/node_modules/expo-router/ios`)" + - "ExpoImage (from `../../../node_modules/.pnpm/expo-image@1.12.9_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6_pqycbzooiimpwcftmzylw6b6ue/node_modules/expo-image/ios`)" + - "ExpoKeepAwake (from `../../../node_modules/.pnpm/expo-keep-awake@13.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7_w5fcokd4xqykouihhq65zfvhwu/node_modules/expo-keep-awake/ios`)" + - "ExpoLocalAuthentication (from `../../../node_modules/.pnpm/expo-local-authentication@14.0.1_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@ba_bcvjridgatxs26fiu2o33lgbby/node_modules/expo-local-authentication/ios`)" - "ExpoModulesCore (from `../../../node_modules/.pnpm/expo-modules-core@1.12.20/node_modules/expo-modules-core`)" - - "ExpoSecureStore (from `../../../node_modules/.pnpm/expo-secure-store@13.0.2_patch_hash=hl63v2r5dtztyuge4wydprmp6u_expo@51.0.26/node_modules/expo-secure-store/ios`)" - - "ExpoSystemUI (from `../../../node_modules/.pnpm/expo-system-ui@3.0.7_expo@51.0.26/node_modules/expo-system-ui/ios`)" - - "ExpoWebBrowser (from `../../../node_modules/.pnpm/expo-web-browser@13.0.3_expo@51.0.26/node_modules/expo-web-browser/ios`)" - - "EXSplashScreen (from `../../../node_modules/.pnpm/expo-splash-screen@0.27.4_expo-modules-autolinking@1.11.1_expo@51.0.26/node_modules/expo-splash-screen/ios`)" - - "EXUpdatesInterface (from `../../../node_modules/.pnpm/expo-updates-interface@0.16.2_expo@51.0.26/node_modules/expo-updates-interface/ios`)" + - "ExpoSecureStore (from `../../../node_modules/.pnpm/expo-secure-store@13.0.2_patch_hash=hl63v2r5dtztyuge4wydprmp6u_expo@51.0.26_@babel+core@7.24._qblhklgyytdrqryzqbjo45ylay/node_modules/expo-secure-store/ios`)" + - "ExpoSystemUI (from `../../../node_modules/.pnpm/expo-system-ui@3.0.7_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.2_36opljfl2csscygkp6xjaz2hv4/node_modules/expo-system-ui/ios`)" + - "ExpoWebBrowser (from `../../../node_modules/.pnpm/expo-web-browser@13.0.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@_rn7tpmwskp4kjoe2dtluysnlry/node_modules/expo-web-browser/ios`)" + - "EXSplashScreen (from `../../../node_modules/.pnpm/expo-splash-screen@0.27.4_expo-modules-autolinking@1.11.1_expo@51.0.26_@babel+core@7.24.6_@ba_rk6ye7ixhx2dscrdqo6c2gudcq/node_modules/expo-splash-screen/ios`)" + - "EXUpdatesInterface (from `../../../node_modules/.pnpm/expo-updates-interface@0.16.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel_f6sminjnqm3hizjnssizza27yu/node_modules/expo-updates-interface/ios`)" - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) @@ -1731,59 +1731,59 @@ EXTERNAL SOURCES: DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" EXApplication: - :path: "../../../node_modules/.pnpm/expo-application@5.9.1_expo@51.0.26/node_modules/expo-application/ios" + :path: "../../../node_modules/.pnpm/expo-application@5.9.1_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7_7lz7kx4ithmpf53d4iw5wfty3a/node_modules/expo-application/ios" EXConstants: - :path: "../../../node_modules/.pnpm/expo-constants@16.0.2_expo@51.0.26/node_modules/expo-constants/ios" + :path: "../../../node_modules/.pnpm/expo-constants@16.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7._6hyhkvmxebmfkuqk4n7n33wbeu/node_modules/expo-constants/ios" EXJSONUtils: :path: "../../../node_modules/.pnpm/expo-json-utils@0.13.1/node_modules/expo-json-utils/ios" EXManifests: - :path: "../../../node_modules/.pnpm/expo-manifests@0.14.3_expo@51.0.26/node_modules/expo-manifests/ios" + :path: "../../../node_modules/.pnpm/expo-manifests@0.14.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7._kxmlgbanmij6z36l3pnsibhlha/node_modules/expo-manifests/ios" EXNotifications: - :path: "../../../node_modules/.pnpm/expo-notifications@0.28.14_expo@51.0.26/node_modules/expo-notifications/ios" + :path: "../../../node_modules/.pnpm/expo-notifications@0.28.14_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+co_34qdk7mejsopgk23vy7bbnsvsq/node_modules/expo-notifications/ios" Expo: - :path: "../../../node_modules/.pnpm/expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__@react-native+as_rs6zimjzbnb5wo5qz3wb7samvq/node_modules/expo" + :path: "../../../node_modules/.pnpm/expo@51.0.26_f4nuazufu6irvgtd3prinuxkb4/node_modules/expo" expo-dev-client: - :path: "../../../node_modules/.pnpm/expo-dev-client@4.0.20_expo@51.0.26/node_modules/expo-dev-client/ios" + :path: "../../../node_modules/.pnpm/expo-dev-client@4.0.20_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7_gmps7dyuicvyrydfqbtht5hiam/node_modules/expo-dev-client/ios" expo-dev-launcher: - :path: "../../../node_modules/.pnpm/expo-dev-launcher@4.0.22_expo@51.0.26/node_modules/expo-dev-launcher" + :path: "../../../node_modules/.pnpm/expo-dev-launcher@4.0.22_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core_4yn64zgy6nc4ta3qecehvlodhy/node_modules/expo-dev-launcher" expo-dev-menu: - :path: "../../../node_modules/.pnpm/expo-dev-menu@5.0.16_expo@51.0.26/node_modules/expo-dev-menu" + :path: "../../../node_modules/.pnpm/expo-dev-menu@5.0.16_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.2_sv4q23kfwrr3e7xjv5gylxpsgq/node_modules/expo-dev-menu" expo-dev-menu-interface: - :path: "../../../node_modules/.pnpm/expo-dev-menu-interface@1.8.3_expo@51.0.26/node_modules/expo-dev-menu-interface/ios" + :path: "../../../node_modules/.pnpm/expo-dev-menu-interface@1.8.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel_3pff7gitcjyg3566uk7iek4nly/node_modules/expo-dev-menu-interface/ios" ExpoAsset: - :path: "../../../node_modules/.pnpm/expo-asset@10.0.6_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__@react-nati_6amwmu4vugucqsw56blrmvig4e/node_modules/expo-asset/ios" + :path: "../../../node_modules/.pnpm/expo-asset@10.0.6_b5dqityn7dtitewgaq3fc4hps4/node_modules/expo-asset/ios" ExpoBlur: - :path: "../../../node_modules/.pnpm/expo-blur@13.0.2_expo@51.0.26/node_modules/expo-blur/ios" + :path: "../../../node_modules/.pnpm/expo-blur@13.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__7adgaqkt3gd55jdqlkye4ibxjq/node_modules/expo-blur/ios" ExpoClipboard: - :path: "../../../node_modules/.pnpm/expo-clipboard@6.0.3_expo@51.0.26/node_modules/expo-clipboard/ios" + :path: "../../../node_modules/.pnpm/expo-clipboard@6.0.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.2_ccxjrrzlt5s5uamvnr4nwtms4e/node_modules/expo-clipboard/ios" ExpoCrypto: - :path: "../../../node_modules/.pnpm/expo-crypto@13.0.2_expo@51.0.26/node_modules/expo-crypto/ios" + :path: "../../../node_modules/.pnpm/expo-crypto@13.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24._h2ulmuk5g5qgvgcwhyc4imwx24/node_modules/expo-crypto/ios" ExpoDevice: - :path: "../../../node_modules/.pnpm/expo-device@6.0.2_expo@51.0.26/node_modules/expo-device/ios" + :path: "../../../node_modules/.pnpm/expo-device@6.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6_ypbzdx34cdu4iu7nzusi7hd7eq/node_modules/expo-device/ios" ExpoFileSystem: - :path: "../../../node_modules/.pnpm/expo-file-system@17.0.1_expo@51.0.26/node_modules/expo-file-system/ios" + :path: "../../../node_modules/.pnpm/expo-file-system@17.0.1_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@_oh5zrhcvqmg5s6il5rvw6x2gya/node_modules/expo-file-system/ios" ExpoFont: - :path: "../../../node_modules/.pnpm/expo-font@12.0.5_expo@51.0.26/node_modules/expo-font/ios" + :path: "../../../node_modules/.pnpm/expo-font@12.0.5_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__afwzzcqn4qtqhraani2se7asxi/node_modules/expo-font/ios" ExpoHead: - :path: "../../../node_modules/.pnpm/expo-router@3.5.14_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6__@react-nat_ulqj4esf6v7azt2eimpkxhoiuu/node_modules/expo-router/ios" + :path: "../../../node_modules/.pnpm/expo-router@3.5.14_ziqwy7qcm4nz5ldsjzzgjxs67m/node_modules/expo-router/ios" ExpoImage: - :path: "../../../node_modules/.pnpm/expo-image@1.12.9_expo@51.0.26/node_modules/expo-image/ios" + :path: "../../../node_modules/.pnpm/expo-image@1.12.9_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.24.6_pqycbzooiimpwcftmzylw6b6ue/node_modules/expo-image/ios" ExpoKeepAwake: - :path: "../../../node_modules/.pnpm/expo-keep-awake@13.0.2_expo@51.0.26/node_modules/expo-keep-awake/ios" + :path: "../../../node_modules/.pnpm/expo-keep-awake@13.0.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7_w5fcokd4xqykouihhq65zfvhwu/node_modules/expo-keep-awake/ios" ExpoLocalAuthentication: - :path: "../../../node_modules/.pnpm/expo-local-authentication@14.0.1_expo@51.0.26/node_modules/expo-local-authentication/ios" + :path: "../../../node_modules/.pnpm/expo-local-authentication@14.0.1_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@ba_bcvjridgatxs26fiu2o33lgbby/node_modules/expo-local-authentication/ios" ExpoModulesCore: :path: "../../../node_modules/.pnpm/expo-modules-core@1.12.20/node_modules/expo-modules-core" ExpoSecureStore: - :path: "../../../node_modules/.pnpm/expo-secure-store@13.0.2_patch_hash=hl63v2r5dtztyuge4wydprmp6u_expo@51.0.26/node_modules/expo-secure-store/ios" + :path: "../../../node_modules/.pnpm/expo-secure-store@13.0.2_patch_hash=hl63v2r5dtztyuge4wydprmp6u_expo@51.0.26_@babel+core@7.24._qblhklgyytdrqryzqbjo45ylay/node_modules/expo-secure-store/ios" ExpoSystemUI: - :path: "../../../node_modules/.pnpm/expo-system-ui@3.0.7_expo@51.0.26/node_modules/expo-system-ui/ios" + :path: "../../../node_modules/.pnpm/expo-system-ui@3.0.7_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@7.2_36opljfl2csscygkp6xjaz2hv4/node_modules/expo-system-ui/ios" ExpoWebBrowser: - :path: "../../../node_modules/.pnpm/expo-web-browser@13.0.3_expo@51.0.26/node_modules/expo-web-browser/ios" + :path: "../../../node_modules/.pnpm/expo-web-browser@13.0.3_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel+core@_rn7tpmwskp4kjoe2dtluysnlry/node_modules/expo-web-browser/ios" EXSplashScreen: - :path: "../../../node_modules/.pnpm/expo-splash-screen@0.27.4_expo-modules-autolinking@1.11.1_expo@51.0.26/node_modules/expo-splash-screen/ios" + :path: "../../../node_modules/.pnpm/expo-splash-screen@0.27.4_expo-modules-autolinking@1.11.1_expo@51.0.26_@babel+core@7.24.6_@ba_rk6ye7ixhx2dscrdqo6c2gudcq/node_modules/expo-splash-screen/ios" EXUpdatesInterface: - :path: "../../../node_modules/.pnpm/expo-updates-interface@0.16.2_expo@51.0.26/node_modules/expo-updates-interface/ios" + :path: "../../../node_modules/.pnpm/expo-updates-interface@0.16.2_expo@51.0.26_@babel+core@7.24.6_@babel+preset-env@7.25.8_@babel_f6sminjnqm3hizjnssizza27yu/node_modules/expo-updates-interface/ios" FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" fmt: diff --git a/apps/mobile/ios/leatherwalletmobile.xcodeproj/project.pbxproj b/apps/mobile/ios/leatherwalletmobile.xcodeproj/project.pbxproj index f211e8e87..644c3d931 100644 --- a/apps/mobile/ios/leatherwalletmobile.xcodeproj/project.pbxproj +++ b/apps/mobile/ios/leatherwalletmobile.xcodeproj/project.pbxproj @@ -11,17 +11,17 @@ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; + 1B12FD95F6504898B7BE8160 /* FiraCode-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = B66C2888E3BB47F7A5A88DEB /* FiraCode-Medium.otf */; }; 297A611EBADB4ED0B158576E /* ABCDiatype-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = F520EA8A657049D4A3392B8B /* ABCDiatype-Regular.otf */; }; 322D7CDF54DE4002AED225F1 /* ABCDiatype-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 6B54D2785B5E48D281A8E3C8 /* ABCDiatype-Medium.otf */; }; 3319885B547C452A9C635C5C /* ABCDiatype-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = A6CFA460F0F340ED95800EF2 /* ABCDiatype-Light.otf */; }; 3735F5722A7145C19BC65634 /* noop-file.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17F703D94F4B4BAE9007DC30 /* noop-file.swift */; }; 3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; }; + 639E76F5C6DD4F95BB83688D /* FiraCode-Retina.otf in Resources */ = {isa = PBXBuildFile; fileRef = 76B2513BA2D94EB6BA0D6194 /* FiraCode-Retina.otf */; }; 96905EF65AED1B983A6B3ABC /* libPods-leatherwalletmobile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 58EEBF8E8E6FB1BC6CAF49B5 /* libPods-leatherwalletmobile.a */; }; B18059E884C0ABDD17F3DC3D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */; }; BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; }; EC07C78F575D4480A1321AFF /* SpaceMono-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3F6687E7CB2942B0929D7833 /* SpaceMono-Regular.ttf */; }; - 639E76F5C6DD4F95BB83688D /* FiraCode-Retina.otf in Resources */ = {isa = PBXBuildFile; fileRef = 76B2513BA2D94EB6BA0D6194 /* FiraCode-Retina.otf */; }; - 1B12FD95F6504898B7BE8160 /* FiraCode-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = B66C2888E3BB47F7A5A88DEB /* FiraCode-Medium.otf */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -37,16 +37,16 @@ 6B54D2785B5E48D281A8E3C8 /* ABCDiatype-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "ABCDiatype-Medium.otf"; path = "../node_modules/@leather.io/ui/src/assets-native/fonts/ABCDiatype-Medium.otf"; sourceTree = ""; }; 6C2E3173556A471DD304B334 /* Pods-leatherwalletmobile.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-leatherwalletmobile.debug.xcconfig"; path = "Target Support Files/Pods-leatherwalletmobile/Pods-leatherwalletmobile.debug.xcconfig"; sourceTree = ""; }; 70C1354B3AEE44B3B957C23B /* leatherwalletmobile-Bridging-Header.h */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 4; includeInIndex = 0; lastKnownFileType = sourcecode.c.h; name = "leatherwalletmobile-Bridging-Header.h"; path = "leatherwalletmobile/leatherwalletmobile-Bridging-Header.h"; sourceTree = ""; }; + 76B2513BA2D94EB6BA0D6194 /* FiraCode-Retina.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraCode-Retina.otf"; path = "../node_modules/@leather.io/ui/dist-native/src/assets-native/fonts/FiraCode-Retina.otf"; sourceTree = ""; }; 7A4D352CD337FB3A3BF06240 /* Pods-leatherwalletmobile.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-leatherwalletmobile.release.xcconfig"; path = "Target Support Files/Pods-leatherwalletmobile/Pods-leatherwalletmobile.release.xcconfig"; sourceTree = ""; }; A6CFA460F0F340ED95800EF2 /* ABCDiatype-Light.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "ABCDiatype-Light.otf"; path = "../node_modules/@leather.io/ui/src/assets-native/fonts/ABCDiatype-Light.otf"; sourceTree = ""; }; AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = leatherwalletmobile/SplashScreen.storyboard; sourceTree = ""; }; + B66C2888E3BB47F7A5A88DEB /* FiraCode-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "FiraCode-Medium.otf"; path = "../node_modules/@leather.io/ui/dist-native/src/assets-native/fonts/FiraCode-Medium.otf"; sourceTree = ""; }; BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = ""; }; CFE8092428C64AA0AFE1A346 /* MarchePro-Super.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "MarchePro-Super.otf"; path = "../node_modules/@leather.io/ui/src/assets-native/fonts/MarchePro-Super.otf"; sourceTree = ""; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; F520EA8A657049D4A3392B8B /* ABCDiatype-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = undefined; includeInIndex = 0; lastKnownFileType = unknown; name = "ABCDiatype-Regular.otf"; path = "../node_modules/@leather.io/ui/src/assets-native/fonts/ABCDiatype-Regular.otf"; sourceTree = ""; }; FAC715A2D49A985799AEE119 /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-leatherwalletmobile/ExpoModulesProvider.swift"; sourceTree = ""; }; - 76B2513BA2D94EB6BA0D6194 /* FiraCode-Retina.otf */ = {isa = PBXFileReference; name = "FiraCode-Retina.otf"; path = "../node_modules/@leather.io/ui/dist-native/src/assets-native/fonts/FiraCode-Retina.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; - B66C2888E3BB47F7A5A88DEB /* FiraCode-Medium.otf */ = {isa = PBXFileReference; name = "FiraCode-Medium.otf"; path = "../node_modules/@leather.io/ui/dist-native/src/assets-native/fonts/FiraCode-Medium.otf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ diff --git a/apps/mobile/package.json b/apps/mobile/package.json index c84dc91e3..d544a5fad 100644 --- a/apps/mobile/package.json +++ b/apps/mobile/package.json @@ -36,6 +36,7 @@ "dependencies": { "@crowdin/ota-client": "2.0.0", "@expo/vector-icons": "14.0.0", + "@gorhom/bottom-sheet": "4.6.3", "@leather.io/analytics": "workspace:*", "@leather.io/bitcoin": "workspace:*", "@leather.io/constants": "workspace:*", @@ -102,6 +103,7 @@ "metro-cache": "0.80.5", "metro-config": "0.80.5", "metro-resolver": "0.80.5", + "prism-react-renderer": "2.4.0", "react": "18.2.0", "react-dom": "18.2.0", "react-native": "0.74.1", diff --git a/apps/mobile/src/app/(home)/_layout.tsx b/apps/mobile/src/app/(home)/_layout.tsx index 9253d9767..cc4496c15 100644 --- a/apps/mobile/src/app/(home)/_layout.tsx +++ b/apps/mobile/src/app/(home)/_layout.tsx @@ -1,10 +1,10 @@ import { RefObject, createContext } from 'react'; import { ActionBarMethods } from '@/components/action-bar/action-bar'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { HomeHeader } from '@/components/headers/home-header'; import { NakedHeader } from '@/components/headers/naked-header'; import { TitleHeader } from '@/components/headers/title-header'; -import { NetworkBadge } from '@/components/network-badge'; import { AppRoutes } from '@/routes'; import { t } from '@lingui/macro'; import { useLingui } from '@lingui/react'; diff --git a/apps/mobile/src/app/(home)/settings/display/index.tsx b/apps/mobile/src/app/(home)/settings/display/index.tsx index 829f713b9..12d0a8d4c 100644 --- a/apps/mobile/src/app/(home)/settings/display/index.tsx +++ b/apps/mobile/src/app/(home)/settings/display/index.tsx @@ -1,7 +1,7 @@ import { useRef } from 'react'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { AnimatedHeaderScreenLayout } from '@/components/headers/animated-header/animated-header-screen.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { AccountIdentifierSheet } from '@/features/settings/account-identifier-sheet'; import { BitcoinUnitSheet } from '@/features/settings/bitcoin-unit-sheet'; import { ConversionUnitSheet } from '@/features/settings/conversion-unit-sheet'; diff --git a/apps/mobile/src/app/(home)/settings/help/index.tsx b/apps/mobile/src/app/(home)/settings/help/index.tsx index 2493cb253..b321186d8 100644 --- a/apps/mobile/src/app/(home)/settings/help/index.tsx +++ b/apps/mobile/src/app/(home)/settings/help/index.tsx @@ -1,5 +1,5 @@ +import { NetworkBadge } from '@/components/badges/network-badge'; import { AnimatedHeaderScreenLayout } from '@/components/headers/animated-header/animated-header-screen.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { t } from '@lingui/macro'; import { Cell, GraduateCapIcon, MagicBookIcon, SupportIcon } from '@leather.io/ui/native'; diff --git a/apps/mobile/src/app/(home)/settings/index.tsx b/apps/mobile/src/app/(home)/settings/index.tsx index c93b520a3..2d71536b9 100644 --- a/apps/mobile/src/app/(home)/settings/index.tsx +++ b/apps/mobile/src/app/(home)/settings/index.tsx @@ -1,8 +1,8 @@ import { useRef } from 'react'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { Divider } from '@/components/divider'; import { AnimatedHeaderScreenLayout } from '@/components/headers/animated-header/animated-header-screen.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { NotifyUserSheetLayout } from '@/components/sheets/notify-user-sheet.layout'; import { useAuthContext } from '@/components/splash-screen-guard/use-auth-context'; import { AppRoutes } from '@/routes'; diff --git a/apps/mobile/src/app/(home)/settings/networks/index.tsx b/apps/mobile/src/app/(home)/settings/networks/index.tsx index 8f0ea29a8..967c6b20b 100644 --- a/apps/mobile/src/app/(home)/settings/networks/index.tsx +++ b/apps/mobile/src/app/(home)/settings/networks/index.tsx @@ -1,5 +1,5 @@ +import { NetworkBadge } from '@/components/badges/network-badge'; import { AnimatedHeaderScreenLayout } from '@/components/headers/animated-header/animated-header-screen.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { useToastContext } from '@/components/toast/toast-context'; import { useSettings } from '@/store/settings/settings'; import { defaultNetworkPreferences } from '@/store/settings/utils'; diff --git a/apps/mobile/src/app/(home)/settings/security/index.tsx b/apps/mobile/src/app/(home)/settings/security/index.tsx index 113ee60e8..25a1d9c91 100644 --- a/apps/mobile/src/app/(home)/settings/security/index.tsx +++ b/apps/mobile/src/app/(home)/settings/security/index.tsx @@ -1,7 +1,7 @@ import { useRef } from 'react'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { AnimatedHeaderScreenLayout } from '@/components/headers/animated-header/animated-header-screen.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { AnalyticsSheet } from '@/features/settings/analytics-sheet'; import { AppAuthenticationSheet } from '@/features/settings/app-authentication-sheet'; import { useSettings } from '@/store/settings/settings'; diff --git a/apps/mobile/src/app/(home)/settings/wallet/configure/[wallet]/[account]/index.tsx b/apps/mobile/src/app/(home)/settings/wallet/configure/[wallet]/[account]/index.tsx index 7881af123..071747f5b 100644 --- a/apps/mobile/src/app/(home)/settings/wallet/configure/[wallet]/[account]/index.tsx +++ b/apps/mobile/src/app/(home)/settings/wallet/configure/[wallet]/[account]/index.tsx @@ -1,8 +1,8 @@ import { useRef } from 'react'; import { AvatarIcon } from '@/components/avatar-icon'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { AnimatedHeaderScreenLayout } from '@/components/headers/animated-header/animated-header-screen.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { useToastContext } from '@/components/toast/toast-context'; import { AccountCard } from '@/features/settings/wallet-and-accounts/account-card'; import { AccountNameSheet } from '@/features/settings/wallet-and-accounts/account-name-sheet'; diff --git a/apps/mobile/src/app/(home)/settings/wallet/index.tsx b/apps/mobile/src/app/(home)/settings/wallet/index.tsx index aa41c26e7..8258e0ac4 100644 --- a/apps/mobile/src/app/(home)/settings/wallet/index.tsx +++ b/apps/mobile/src/app/(home)/settings/wallet/index.tsx @@ -1,9 +1,9 @@ import { useRef } from 'react'; import { AddWalletSheet } from '@/components/add-wallet/'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { Divider } from '@/components/divider'; import { AnimatedHeaderScreenLayout } from '@/components/headers/animated-header/animated-header-screen.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { WalletsList } from '@/features/settings/wallet-and-accounts/wallets-list'; import { AppRoutes } from '@/routes'; import { useAccounts } from '@/store/accounts/accounts.read'; diff --git a/apps/mobile/src/common/sheet-navigator/sheet-navigation-container.tsx b/apps/mobile/src/common/sheet-navigator/sheet-navigation-container.tsx index e36da98c9..1bc600693 100644 --- a/apps/mobile/src/common/sheet-navigator/sheet-navigation-container.tsx +++ b/apps/mobile/src/common/sheet-navigator/sheet-navigation-container.tsx @@ -1,18 +1,11 @@ -import { useWindowDimensions } from 'react-native'; - import { ToastWrapper } from '@/components/toast/toast-context'; import { HasChildren } from '@/utils/types'; import { NavigationContainer } from '@react-navigation/native'; -import { Box } from '@leather.io/ui/native'; - export function SheetNavigationContainer({ children }: HasChildren) { - const { height } = useWindowDimensions(); return ( - - {children} - + {children} ); } diff --git a/apps/mobile/src/components/badges/badge.tsx b/apps/mobile/src/components/badges/badge.tsx new file mode 100644 index 000000000..1fa3d60a7 --- /dev/null +++ b/apps/mobile/src/components/badges/badge.tsx @@ -0,0 +1,56 @@ +import { ResponsiveValue } from '@shopify/restyle'; + +import { Box, Pressable, PressableProps, Text, Theme } from '@leather.io/ui/native'; +import { match } from '@leather.io/utils'; + +export type BadgeVariant = 'success' | 'warning' | 'error' | 'default' | 'info'; + +interface BadgeProps extends PressableProps { + title: string; + variant: BadgeVariant; +} + +export function Badge(props: BadgeProps) { + const matchBadgeVariant = match(); + + const backgroundColor = matchBadgeVariant< + ResponsiveValue + >(props.variant, { + success: 'green.background-primary', + warning: 'yellow.background-primary', + error: 'red.background-primary', + default: 'ink.background-secondary', + info: 'blue.background-primary', + }); + + const borderColor = matchBadgeVariant< + ResponsiveValue + >(props.variant, { + success: 'green.border', + warning: 'yellow.border', + error: 'red.border', + default: 'ink.border-transparent', + info: 'blue.border', + }); + + const textColor = matchBadgeVariant>( + props.variant, + { + success: 'green.action-primary-default', + warning: 'yellow.action-primary-default', + error: 'red.action-primary-default', + default: 'ink.text-subdued', + info: 'blue.action-primary-default', + } + ); + + return ( + + + + {props.title} + + + + ); +} diff --git a/apps/mobile/src/components/badges/fee-badge.tsx b/apps/mobile/src/components/badges/fee-badge.tsx new file mode 100644 index 000000000..4436475d3 --- /dev/null +++ b/apps/mobile/src/components/badges/fee-badge.tsx @@ -0,0 +1,44 @@ +import { useLingui } from '@lingui/react'; + +import { match } from '@leather.io/utils'; + +import { Badge, BadgeVariant } from './badge'; + +type FeeType = 'low' | 'normal' | 'high' | 'extremely-high'; + +interface FeeBadgeProps { + type: FeeType; +} + +export function FeeBadge(props: FeeBadgeProps) { + const { i18n } = useLingui(); + const matchVariant = match(); + + const variant = matchVariant(props.type, { + low: 'success', + normal: 'default', + high: 'error', + 'extremely-high': 'error', + }); + + const title = matchVariant(props.type, { + low: i18n._({ + id: 'approval-ux.fees.low', + message: 'currently low', + }), + normal: i18n._({ + id: 'approval-ux.fees.normal', + message: 'currently normal', + }), + high: i18n._({ + id: 'approval-ux.fees.high', + message: 'currently high', + }), + 'extremely-high': i18n._({ + id: 'approval-ux.fees.extremely-high', + message: 'currently extremely high', + }), + }); + + return ; +} diff --git a/apps/mobile/src/components/badges/network-badge.tsx b/apps/mobile/src/components/badges/network-badge.tsx new file mode 100644 index 000000000..5b9adc95f --- /dev/null +++ b/apps/mobile/src/components/badges/network-badge.tsx @@ -0,0 +1,25 @@ +import { AppRoutes } from '@/routes'; +import { useSettings } from '@/store/settings/settings'; +import { useLingui } from '@lingui/react'; +import { useRouter } from 'expo-router'; + +import { Badge } from './badge'; + +export function NetworkBadge() { + const router = useRouter(); + const { i18n } = useLingui(); + const { networkPreference } = useSettings(); + + return ( + router.navigate(AppRoutes.SettingsNetworks)} + title={i18n._({ + id: 'settings.header_network', + message: '{network}', + values: { network: networkPreference.name }, + })} + /> + ); +} diff --git a/apps/mobile/src/components/full-height-sheet/full-height-sheet.tsx b/apps/mobile/src/components/full-height-sheet/full-height-sheet.tsx index 8e60b3422..266628cf9 100644 --- a/apps/mobile/src/components/full-height-sheet/full-height-sheet.tsx +++ b/apps/mobile/src/components/full-height-sheet/full-height-sheet.tsx @@ -12,7 +12,12 @@ export function FullHeightSheet({ children, sheetRef }: FullHeightSheetProps) { const { themeDerivedFromThemePreference } = useSettings(); return ( - + {children} ); diff --git a/apps/mobile/src/components/network-badge.tsx b/apps/mobile/src/components/network-badge.tsx deleted file mode 100644 index dd76315ce..000000000 --- a/apps/mobile/src/components/network-badge.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { AppRoutes } from '@/routes'; -import { useSettings } from '@/store/settings/settings'; -import { useLingui } from '@lingui/react'; -import { useRouter } from 'expo-router'; - -import { Box, Text, TouchableOpacity } from '@leather.io/ui/native'; - -export function NetworkBadge() { - const router = useRouter(); - const { i18n } = useLingui(); - const { networkPreference } = useSettings(); - - return ( - router.navigate(AppRoutes.SettingsNetworks)}> - - - {i18n._({ - id: 'settings.header_network', - message: '{network}', - values: { network: networkPreference.name }, - })} - - - - ); -} diff --git a/apps/mobile/src/features/approver/components/advanced-details-button.tsx b/apps/mobile/src/features/approver/components/advanced-details-button.tsx new file mode 100644 index 000000000..dd90c99af --- /dev/null +++ b/apps/mobile/src/features/approver/components/advanced-details-button.tsx @@ -0,0 +1,28 @@ +import { t } from '@lingui/macro'; + +import { ChevronDownIcon, ChevronUpIcon, Pressable, Text } from '@leather.io/ui/native'; + +export function AdvancedDetailsButton({ + isAdvancedOpen, + setIsAdvancedOpen, +}: { + isAdvancedOpen: boolean; + setIsAdvancedOpen(value: boolean): void; +}) { + const buttonTitle = isAdvancedOpen ? t`Hide advanced details` : t`Show advanced details`; + const chevron = isAdvancedOpen ? : ; + return ( + setIsAdvancedOpen(!isAdvancedOpen)} + > + {buttonTitle} + {chevron} + + ); +} diff --git a/apps/mobile/src/features/approver/components/approver-account-card.tsx b/apps/mobile/src/features/approver/components/approver-account-card.tsx new file mode 100644 index 000000000..a6ef118df --- /dev/null +++ b/apps/mobile/src/features/approver/components/approver-account-card.tsx @@ -0,0 +1,27 @@ +import { AvatarIcon } from '@/components/avatar-icon'; +import { AccountListItem } from '@/features/account-list/account-list-item'; +import { useWallets } from '@/store/wallets/wallets.read'; +import { t } from '@lingui/macro'; +import { useTheme } from '@shopify/restyle'; + +import { Text, Theme } from '@leather.io/ui/native'; + +export function ApproverAccountCard() { + const theme = useTheme(); + const { list: walletsList } = useWallets(); + const wallet = walletsList[0]; + /* eslint-disable-next-line lingui/no-unlocalized-strings */ + const testAccountName = 'testName'; + return ( + <> + {t`With account`} + } + walletName={wallet?.name} + /> + + ); +} diff --git a/apps/mobile/src/features/approver/components/code-card.tsx b/apps/mobile/src/features/approver/components/code-card.tsx new file mode 100644 index 000000000..943ea677c --- /dev/null +++ b/apps/mobile/src/features/approver/components/code-card.tsx @@ -0,0 +1,72 @@ +import { ScrollView } from 'react-native-gesture-handler'; + +import { t } from '@lingui/macro'; + +import { Highlighter, Prism, Text } from '@leather.io/ui/native'; + +/* eslint-disable-next-line lingui/no-unlocalized-strings */ +const sampleCode = ` +;; hello-world contract + +(define-constant sender 'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR) +(define-constant recipient 'SM2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQVX8X0G) + +(define-fungible-token novel-token-19) +(ft-mint? novel-token-19 u12 sender) +(ft-transfer? novel-token-19 u2 sender recipient) + +(define-non-fungible-token hello-nft uint) + +(nft-mint? hello-nft u1 sender) +(nft-mint? hello-nft u2 sender) +(nft-transfer? hello-nft u1 sender recipient) + +(define-public (test-emit-event) + (begin + (print "Event! Hello world") + (ok u1) + ) +) + +(begin (test-emit-event)) + +(define-public (test-event-types) + (begin + (unwrap-panic (ft-mint? novel-token-19 u3 recipient)) + (unwrap-panic (nft-mint? hello-nft u2 recipient)) + (unwrap-panic (stx-transfer? u60 tx-sender 'SZ2J6ZY48GV1EZ5V2V5RB9MP66SW86PYKKQ9H6DPR)) + (unwrap-panic (stx-burn? u20 tx-sender)) + (ok u1) + ) +) + +(define-map store { key: (buff 32) } { value: (buff 32) }) + +(define-public (get-value (key (buff 32))) + (begin + (match (map-get? store { key: key }) + entry (ok (get value entry)) + (err 0) + ) + ) +) + +(define-public (set-value (key (buff 32)) (value (buff 32))) + (begin + (map-set store { key: key } { value: value }) + (ok u1) + ) +) + +`; + +export function CodeCard() { + return ( + <> + {t`Code`} + + + + + ); +} diff --git a/apps/mobile/src/features/approver/components/fee-card.tsx b/apps/mobile/src/features/approver/components/fee-card.tsx new file mode 100644 index 000000000..20c4b4aa7 --- /dev/null +++ b/apps/mobile/src/features/approver/components/fee-card.tsx @@ -0,0 +1,56 @@ +import { ReactNode } from 'react'; + +import { FeeBadge } from '@/components/badges/fee-badge'; +import { t } from '@lingui/macro'; + +import { FeeTypes } from '@leather.io/models'; +import { + AnimalChameleonIcon, + AnimalEagleIcon, + AnimalRabbitIcon, + AnimalSnailIcon, + Avatar, + Box, + ChevronRightIcon, + Flag, + ItemLayout, + Pressable, + Text, +} from '@leather.io/ui/native'; +import { match } from '@leather.io/utils'; + +export function FeeCard({ feeType }: { feeType: FeeTypes }) { + const matchFeeType = match(); + const feeIcon = matchFeeType(feeType, { + [FeeTypes.Low]: , + [FeeTypes.Middle]: , + [FeeTypes.High]: , + [FeeTypes.Custom]: , + [FeeTypes.Unknown]: , + }); + return ( + <> + + {t`Fee`} + + + {}} py="3"> + + {feeIcon} + + } + > + } + /> + + + + ); +} diff --git a/apps/mobile/src/features/approver/components/inputs-outputs-card.tsx b/apps/mobile/src/features/approver/components/inputs-outputs-card.tsx new file mode 100644 index 000000000..678f5f361 --- /dev/null +++ b/apps/mobile/src/features/approver/components/inputs-outputs-card.tsx @@ -0,0 +1,41 @@ +import { t } from '@lingui/macro'; + +import { Avatar, Box, Flag, ItemLayout, LockIcon, Text, UnlockIcon } from '@leather.io/ui/native'; + +function UtxoRow({ isLocked }: { isLocked: boolean }) { + const icon = isLocked ? : ; + /* eslint-disable-next-line lingui/no-unlocalized-strings */ + const testAddress1 = 'F418...9e16'; + /* eslint-disable-next-line lingui/no-unlocalized-strings */ + const testAddress2 = 'bc1p...tsc0 6e'; + return ( + {icon}}> + + + ); +} + +// function Output() { } + +export function InputsAndOutputsCard() { + return ( + <> + {t`Inputs and Outputs`} + {t`Input`} + + + + + {t`Output`} + + + + + + ); +} diff --git a/apps/mobile/src/features/approver/components/outcomes-card.tsx b/apps/mobile/src/features/approver/components/outcomes-card.tsx new file mode 100644 index 000000000..a0b1fda08 --- /dev/null +++ b/apps/mobile/src/features/approver/components/outcomes-card.tsx @@ -0,0 +1,27 @@ +import { BitcoinTokenBalance } from '@/features/balances/bitcoin/bitcoin-balance'; +import { useWalletTotalBitcoinBalance } from '@/queries/balance/bitcoin-balance.query'; +import { t } from '@lingui/macro'; + +import { AddressDisplayer, Avatar, Box, Flag, Text, UsersTwoIcon } from '@leather.io/ui/native'; + +export function OutcomesCard() { + const { availableBalance, fiatBalance } = useWalletTotalBitcoinBalance(); + return ( + <> + {t`You'll send`} + + + + {t`To address`} + + + + } + > + + + + ); +} diff --git a/apps/mobile/src/features/receive/receive-sheets/select-account.tsx b/apps/mobile/src/features/receive/receive-sheets/select-account.tsx index 7bb6418e3..e2f176fb6 100644 --- a/apps/mobile/src/features/receive/receive-sheets/select-account.tsx +++ b/apps/mobile/src/features/receive/receive-sheets/select-account.tsx @@ -1,6 +1,6 @@ +import { NetworkBadge } from '@/components/badges/network-badge'; import { FullHeightSheetHeader } from '@/components/full-height-sheet/full-height-sheet-header'; import { FullHeightSheetLayout } from '@/components/full-height-sheet/full-height-sheet.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { AccountList } from '@/features/account-list/account-list'; import { Account } from '@/store/accounts/accounts'; import { useAccounts } from '@/store/accounts/accounts.read'; diff --git a/apps/mobile/src/features/receive/receive-sheets/select-asset.tsx b/apps/mobile/src/features/receive/receive-sheets/select-asset.tsx index ed1c91c81..b45e62b5c 100644 --- a/apps/mobile/src/features/receive/receive-sheets/select-asset.tsx +++ b/apps/mobile/src/features/receive/receive-sheets/select-asset.tsx @@ -1,9 +1,9 @@ import { useRef } from 'react'; import { ScrollView } from 'react-native-gesture-handler'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { FullHeightSheetHeader } from '@/components/full-height-sheet/full-height-sheet-header'; import { FullHeightSheetLayout } from '@/components/full-height-sheet/full-height-sheet.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { useToastContext } from '@/components/toast/toast-context'; import { useBitcoinPayerAddressFromAccountIndex } from '@/store/keychains/bitcoin/bitcoin-keychains.read'; import { useStacksSignerAddressFromAccountIndex } from '@/store/keychains/stacks/stacks-keychains.read'; diff --git a/apps/mobile/src/features/send/send-sheet-navigator.tsx b/apps/mobile/src/features/send/send-sheet-navigator.tsx index 966804335..434c74de2 100644 --- a/apps/mobile/src/features/send/send-sheet-navigator.tsx +++ b/apps/mobile/src/features/send/send-sheet-navigator.tsx @@ -1,28 +1,22 @@ -import { Account } from '@/store/accounts/accounts'; import { ParamListBase } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { useTheme } from '@shopify/restyle'; -import { CryptoCurrency } from '@leather.io/models'; import { Theme } from '@leather.io/ui/native'; import { SelectAccount } from './send-sheets/select-account'; import { SelectAsset } from './send-sheets/select-asset'; import { SendForm } from './send-sheets/send-form'; +import { SignPsbt } from './send-sheets/sign-psbt'; +import { SendSheetNavigatorParamList } from './utils'; -export interface SendSheetNavigatorParamList extends ParamListBase { - 'send-select-account': undefined; - 'send-select-asset': { account: Account }; - 'send-form': { account: Account; asset: CryptoCurrency }; -} - -const Stack = createStackNavigator(); +const Stack = createStackNavigator(); export function SendSheetNavigator() { const theme = useTheme(); return ( + ); diff --git a/apps/mobile/src/features/send/send-sheets/select-account.tsx b/apps/mobile/src/features/send/send-sheets/select-account.tsx index cd8a73933..c04a5db9e 100644 --- a/apps/mobile/src/features/send/send-sheets/select-account.tsx +++ b/apps/mobile/src/features/send/send-sheets/select-account.tsx @@ -1,16 +1,17 @@ +import { NetworkBadge } from '@/components/badges/network-badge'; import { FullHeightSheetHeader } from '@/components/full-height-sheet/full-height-sheet-header'; import { FullHeightSheetLayout } from '@/components/full-height-sheet/full-height-sheet.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { AccountList } from '@/features/account-list/account-list'; import { Account } from '@/store/accounts/accounts'; import { useAccounts } from '@/store/accounts/accounts.read'; import { t } from '@lingui/macro'; -import { NavigationProp, useNavigation } from '@react-navigation/native'; -import { SendSheetNavigatorParamList } from '../send-sheet-navigator'; +import { CreateCurrentRoute, useSendSheetNavigation } from '../utils'; + +type CurrentRoute = CreateCurrentRoute<'send-select-account'>; export function SelectAccount() { - const navigation = useNavigation>(); + const navigation = useSendSheetNavigation(); const accounts = useAccounts(); function onSelectAccount(account: Account) { diff --git a/apps/mobile/src/features/send/send-sheets/select-asset.tsx b/apps/mobile/src/features/send/send-sheets/select-asset.tsx index 07d922f11..cb15c4a08 100644 --- a/apps/mobile/src/features/send/send-sheets/select-asset.tsx +++ b/apps/mobile/src/features/send/send-sheets/select-asset.tsx @@ -1,29 +1,27 @@ import { ScrollView } from 'react-native-gesture-handler'; +import { NetworkBadge } from '@/components/badges/network-badge'; import { FullHeightSheetHeader } from '@/components/full-height-sheet/full-height-sheet-header'; import { FullHeightSheetLayout } from '@/components/full-height-sheet/full-height-sheet.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { BitcoinBalanceByAccount } from '@/features/balances/bitcoin/bitcoin-balance'; import { StacksBalanceByAccount } from '@/features/balances/stacks/stacks-balance'; import { Account } from '@/store/accounts/accounts'; import { t } from '@lingui/macro'; import { useLingui } from '@lingui/react'; -import { NavigationProp, RouteProp, useNavigation, useRoute } from '@react-navigation/native'; import { useTheme } from '@shopify/restyle'; import { CryptoCurrency } from '@leather.io/models'; import { Theme } from '@leather.io/ui/native'; -import { SendSheetNavigatorParamList } from '../send-sheet-navigator'; +import { CreateCurrentRoute, useSendSheetNavigation, useSendSheetRoute } from '../utils'; -type SelectAssetRouteProp = RouteProp; +type CurrentRoute = CreateCurrentRoute<'send-form'>; export function SelectAsset() { const { i18n } = useLingui(); - const route = useRoute(); - const navigation = useNavigation>(); + const route = useSendSheetRoute(); + const navigation = useSendSheetNavigation(); const theme = useTheme(); - const account = route.params.account; const { accountIndex, fingerprint, name } = account; diff --git a/apps/mobile/src/features/send/send-sheets/send-form.tsx b/apps/mobile/src/features/send/send-sheets/send-form.tsx index d86d7d000..a53191d71 100644 --- a/apps/mobile/src/features/send/send-sheets/send-form.tsx +++ b/apps/mobile/src/features/send/send-sheets/send-form.tsx @@ -1,19 +1,18 @@ +import { NetworkBadge } from '@/components/badges/network-badge'; import { FullHeightSheetHeader } from '@/components/full-height-sheet/full-height-sheet-header'; import { FullHeightSheetLayout } from '@/components/full-height-sheet/full-height-sheet.layout'; -import { NetworkBadge } from '@/components/network-badge'; import { t } from '@lingui/macro'; import { useLingui } from '@lingui/react'; -import { RouteProp, useRoute } from '@react-navigation/native'; import { Text } from '@leather.io/ui/native'; -import { SendSheetNavigatorParamList } from '../send-sheet-navigator'; +import { CreateCurrentRoute, useSendSheetRoute } from '../utils'; -type SendFormRouteProp = RouteProp; +type CurrentRoute = CreateCurrentRoute<'send-form'>; export function SendForm() { const { i18n } = useLingui(); - const route = useRoute(); + const route = useSendSheetRoute(); const accountName = route.params.account.name; const asset = route.params.asset; diff --git a/apps/mobile/src/features/send/send-sheets/sign-psbt.tsx b/apps/mobile/src/features/send/send-sheets/sign-psbt.tsx new file mode 100644 index 000000000..00993c24e --- /dev/null +++ b/apps/mobile/src/features/send/send-sheets/sign-psbt.tsx @@ -0,0 +1,72 @@ +import { ApproverAccountCard } from '@/features/approver/components/approver-account-card'; +import { CodeCard } from '@/features/approver/components/code-card'; +import { FeeCard } from '@/features/approver/components/fee-card'; +import { InputsAndOutputsCard } from '@/features/approver/components/inputs-outputs-card'; +import { OutcomesCard } from '@/features/approver/components/outcomes-card'; +import { t } from '@lingui/macro'; +import { useTheme } from '@shopify/restyle'; + +import { FeeTypes } from '@leather.io/models'; +import { Approver, ArrowLeftIcon, Box, Button, Text, Theme } from '@leather.io/ui/native'; + +export function SignPsbt() { + const theme = useTheme(); + + function getButtons(buttonState: 'start' | 'approving' | 'success') { + switch (buttonState) { + case 'start': + return ( + <> +