@kryptos_connect/mobile-sdk 1.0.3 → 1.0.6-dev.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
@@ -38,48 +38,11 @@ __export(index_exports, {
38
38
  module.exports = __toCommonJS(index_exports);
39
39
 
40
40
  // src/KryptosConnectButton.tsx
41
- var import_react36 = __toESM(require("react"));
42
- var import_react_native21 = require("react-native");
43
-
44
- // src/assets/LogoIcon.tsx
45
- var import_react = __toESM(require("react"));
46
- var import_react_native_svg = __toESM(require("react-native-svg"));
47
- var LogoIcon = ({ size = 36 }) => {
48
- return /* @__PURE__ */ import_react.default.createElement(import_react_native_svg.default, { width: size, height: size, viewBox: "0 0 36 36", fill: "none" }, /* @__PURE__ */ import_react.default.createElement(
49
- import_react_native_svg.Path,
50
- {
51
- d: "M0 4.11429C0 1.84203 1.84203 0 4.11429 0H31.8857C34.158 0 36 1.84203 36 4.11429V31.8857C36 34.158 34.158 36 31.8857 36H4.11429C1.84203 36 0 34.158 0 31.8857V4.11429Z",
52
- fill: "#00C693"
53
- }
54
- ), /* @__PURE__ */ import_react.default.createElement(
55
- import_react_native_svg.Path,
56
- {
57
- d: "M12.3916 28.2857H8.43388C8.03646 28.2857 7.71429 27.9886 7.71429 27.6221V22.92C7.71429 22.744 7.7901 22.5752 7.92505 22.4508L9.66229 20.8487C9.79724 20.7243 9.98027 20.6544 10.1711 20.6544H12.3916C12.789 20.6544 13.1112 20.9515 13.1112 21.318V27.6221C13.1112 27.9886 12.789 28.2857 12.3916 28.2857Z",
58
- fill: "white"
59
- }
60
- ), /* @__PURE__ */ import_react.default.createElement(
61
- import_react_native_svg.Path,
62
- {
63
- d: "M27.5647 28.2857H22.0443C21.8535 28.2857 21.6704 28.2158 21.5355 28.0914L13.9798 21.1236C13.6988 20.8645 13.6988 20.4443 13.9798 20.1851L15.7788 18.5262C15.9137 18.4017 16.0968 18.3318 16.2876 18.3318H18.21C18.4009 18.3318 18.5839 18.4017 18.7189 18.5262L28.0735 27.1529C28.5268 27.5709 28.2058 28.2857 27.5647 28.2857Z",
64
- fill: "white"
65
- }
66
- ), /* @__PURE__ */ import_react.default.createElement(
67
- import_react_native_svg.Path,
68
- {
69
- d: "M27.5647 7.71429H22.0443C21.8535 7.71429 21.6704 7.7842 21.5355 7.90865L13.9798 14.8764C13.6988 15.1355 13.6988 15.5557 13.9798 15.8149L15.7788 17.4738C15.9137 17.5983 16.0968 17.6682 16.2876 17.6682H18.21C18.4009 17.6682 18.5839 17.5983 18.7189 17.4738L28.0735 8.84711C28.5268 8.42907 28.2058 7.71429 27.5647 7.71429Z",
70
- fill: "white"
71
- }
72
- ), /* @__PURE__ */ import_react.default.createElement(
73
- import_react_native_svg.Path,
74
- {
75
- d: "M12.3916 7.71429H8.43388C8.03646 7.71429 7.71429 8.01139 7.71429 8.37788V13.08C7.71429 13.256 7.7901 13.4248 7.92505 13.5492L9.66229 15.1513C9.79724 15.2757 9.98027 15.3456 10.1711 15.3456H12.3916C12.789 15.3456 13.1112 15.0485 13.1112 14.682V8.37788C13.1112 8.01139 12.789 7.71429 12.3916 7.71429Z",
76
- fill: "white"
77
- }
78
- ));
79
- };
41
+ var import_react39 = __toESM(require("react"));
42
+ var import_react_native23 = require("react-native");
80
43
 
81
44
  // src/contexts/KryptosContext.tsx
82
- var import_react2 = __toESM(require("react"));
45
+ var import_react = __toESM(require("react"));
83
46
 
84
47
  // src/services/api.ts
85
48
  var import_axios = __toESM(require("axios"));
@@ -88,6 +51,11 @@ var import_axios = __toESM(require("axios"));
88
51
  var getBaseUrl = () => {
89
52
  return getGlobalBaseUrl() || "https://connect-api.kryptos.io/";
90
53
  };
54
+ var isSvgUrl = (url) => {
55
+ if (!url) return false;
56
+ const urlWithoutParams = url.split("?")[0].split("#")[0];
57
+ return /\.svg$/i.test(urlWithoutParams);
58
+ };
91
59
 
92
60
  // src/services/api.ts
93
61
  var api = import_axios.default.create({
@@ -143,7 +111,7 @@ async function createAnonymousUser(linkToken, clientId) {
143
111
  }
144
112
  }
145
113
  );
146
- return res.data;
114
+ return res.data?.data;
147
115
  }
148
116
  async function addUserIntegration(linkToken, integration) {
149
117
  const res = await api.post(
@@ -179,8 +147,8 @@ async function testCredentials(linkToken, data) {
179
147
  });
180
148
  return res.data?.data;
181
149
  }
182
- async function getSupportedProviders(linkToken) {
183
- const res = await api.get("/integrations/providers", {
150
+ async function getSupportedProviders(linkToken, id) {
151
+ const res = await api.get(`/integrations/providers${id ? `?id=${id}` : ""}`, {
184
152
  headers: {
185
153
  "X-LINK-TOKEN": linkToken
186
154
  }
@@ -226,23 +194,23 @@ async function getUserInfo(linkToken) {
226
194
  // src/contexts/KryptosContext.tsx
227
195
  var globalBaseUrl;
228
196
  var getGlobalBaseUrl = () => globalBaseUrl;
229
- var KryptosContext = import_react2.default.createContext(
197
+ var KryptosContext = import_react.default.createContext(
230
198
  void 0
231
199
  );
232
200
  var KryptosConnectProvider = ({ children, config }) => {
233
- const [isInitialized, setIsInitialized] = import_react2.default.useState(false);
234
- const [linkToken, setLinkToken] = import_react2.default.useState("");
235
- const [user, setUser] = import_react2.default.useState(null);
236
- const [email, setEmail] = import_react2.default.useState("");
237
- const [userConsent, setUserConsent] = import_react2.default.useState(
201
+ const [isInitialized, setIsInitialized] = import_react.default.useState(false);
202
+ const [linkToken, setLinkToken] = import_react.default.useState("");
203
+ const [user, setUser] = import_react.default.useState(null);
204
+ const [email, setEmail] = import_react.default.useState("");
205
+ const [userConsent, setUserConsent] = import_react.default.useState(
238
206
  null
239
207
  );
240
- const [isAuthorized, setIsAuthorized] = import_react2.default.useState(false);
241
- const [clientInfo, setClientInfo] = import_react2.default.useState(null);
242
- import_react2.default.useEffect(() => {
208
+ const [isAuthorized, setIsAuthorized] = import_react.default.useState(false);
209
+ const [clientInfo, setClientInfo] = import_react.default.useState(null);
210
+ import_react.default.useEffect(() => {
243
211
  globalBaseUrl = config.baseUrl;
244
212
  }, [config.baseUrl]);
245
- import_react2.default.useEffect(() => {
213
+ import_react.default.useEffect(() => {
246
214
  const fetchClientInfo = async () => {
247
215
  if (linkToken) {
248
216
  const res = await getClientInfo(linkToken);
@@ -251,7 +219,7 @@ var KryptosConnectProvider = ({ children, config }) => {
251
219
  };
252
220
  fetchClientInfo();
253
221
  }, [linkToken]);
254
- return /* @__PURE__ */ import_react2.default.createElement(
222
+ return /* @__PURE__ */ import_react.default.createElement(
255
223
  KryptosContext.Provider,
256
224
  {
257
225
  value: {
@@ -275,7 +243,7 @@ var KryptosConnectProvider = ({ children, config }) => {
275
243
  );
276
244
  };
277
245
  var useKryptosConnect = () => {
278
- const ctx = import_react2.default.useContext(KryptosContext);
246
+ const ctx = import_react.default.useContext(KryptosContext);
279
247
  if (!ctx)
280
248
  throw new Error(
281
249
  "useKryptosConnect must be used inside <KryptosConnectProvider>"
@@ -284,7 +252,7 @@ var useKryptosConnect = () => {
284
252
  };
285
253
 
286
254
  // src/hooks/useTheme.ts
287
- var import_react3 = __toESM(require("react"));
255
+ var import_react2 = __toESM(require("react"));
288
256
 
289
257
  // src/theme/index.ts
290
258
  var lightTheme = {
@@ -425,14 +393,14 @@ var getTheme = (isDark) => {
425
393
  // src/hooks/useTheme.ts
426
394
  var useTheme = () => {
427
395
  const { theme } = useKryptosConnect();
428
- const currentTheme = import_react3.default.useMemo(() => {
396
+ const currentTheme = import_react2.default.useMemo(() => {
429
397
  return getTheme(theme === "dark");
430
398
  }, [theme]);
431
399
  return currentTheme;
432
400
  };
433
401
 
434
402
  // src/components/Button.tsx
435
- var import_react4 = __toESM(require("react"));
403
+ var import_react3 = __toESM(require("react"));
436
404
  var import_react_native = require("react-native");
437
405
  var Button = ({
438
406
  variant = "primary",
@@ -545,7 +513,7 @@ var Button = ({
545
513
  }
546
514
  };
547
515
  const sizeStyles = getSizeStyles();
548
- return /* @__PURE__ */ import_react4.default.createElement(
516
+ return /* @__PURE__ */ import_react3.default.createElement(
549
517
  import_react_native.TouchableOpacity,
550
518
  {
551
519
  onPress,
@@ -559,7 +527,7 @@ var Button = ({
559
527
  style
560
528
  ]
561
529
  },
562
- loading ? /* @__PURE__ */ import_react4.default.createElement(import_react_native.ActivityIndicator, { size: "small", color: getTextColor() }) : typeof children === "string" ? /* @__PURE__ */ import_react4.default.createElement(
530
+ loading ? /* @__PURE__ */ import_react3.default.createElement(import_react_native.ActivityIndicator, { size: "small", color: getTextColor() }) : typeof children === "string" ? /* @__PURE__ */ import_react3.default.createElement(
563
531
  import_react_native.Text,
564
532
  {
565
533
  style: [
@@ -570,7 +538,7 @@ var Button = ({
570
538
  ]
571
539
  },
572
540
  children
573
- ) : /* @__PURE__ */ import_react4.default.createElement(import_react_native.View, { style: styles.contentContainer }, children)
541
+ ) : /* @__PURE__ */ import_react3.default.createElement(import_react_native.View, { style: styles.contentContainer }, children)
574
542
  );
575
543
  };
576
544
  var styles = import_react_native.StyleSheet.create({
@@ -595,7 +563,7 @@ var styles = import_react_native.StyleSheet.create({
595
563
  });
596
564
 
597
565
  // src/components/Input.tsx
598
- var import_react5 = __toESM(require("react"));
566
+ var import_react4 = __toESM(require("react"));
599
567
  var import_react_native2 = require("react-native");
600
568
  var Input = ({
601
569
  label,
@@ -619,7 +587,7 @@ var Input = ({
619
587
  return theme.colors.border;
620
588
  }
621
589
  };
622
- return /* @__PURE__ */ import_react5.default.createElement(import_react_native2.View, { style: [styles2.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react5.default.createElement(
590
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_native2.View, { style: [styles2.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react4.default.createElement(
623
591
  import_react_native2.Text,
624
592
  {
625
593
  style: [
@@ -629,7 +597,7 @@ var Input = ({
629
597
  ]
630
598
  },
631
599
  label
632
- ), /* @__PURE__ */ import_react5.default.createElement(
600
+ ), /* @__PURE__ */ import_react4.default.createElement(
633
601
  import_react_native2.TextInput,
634
602
  {
635
603
  placeholderTextColor: theme.colors.textTertiary,
@@ -648,7 +616,7 @@ var Input = ({
648
616
  ],
649
617
  ...props
650
618
  }
651
- ), error && /* @__PURE__ */ import_react5.default.createElement(
619
+ ), error && /* @__PURE__ */ import_react4.default.createElement(
652
620
  import_react_native2.Text,
653
621
  {
654
622
  style: [
@@ -657,7 +625,7 @@ var Input = ({
657
625
  ]
658
626
  },
659
627
  error
660
- ), helperText && !error && /* @__PURE__ */ import_react5.default.createElement(
628
+ ), helperText && !error && /* @__PURE__ */ import_react4.default.createElement(
661
629
  import_react_native2.Text,
662
630
  {
663
631
  style: [
@@ -696,7 +664,7 @@ var styles2 = import_react_native2.StyleSheet.create({
696
664
  });
697
665
 
698
666
  // src/components/Alert.tsx
699
- var import_react6 = __toESM(require("react"));
667
+ var import_react5 = __toESM(require("react"));
700
668
  var import_react_native3 = require("react-native");
701
669
  var Alert = ({
702
670
  variant = "default",
@@ -718,7 +686,7 @@ var Alert = ({
718
686
  };
719
687
  }
720
688
  };
721
- return /* @__PURE__ */ import_react6.default.createElement(
689
+ return /* @__PURE__ */ import_react5.default.createElement(
722
690
  import_react_native3.View,
723
691
  {
724
692
  style: [
@@ -734,12 +702,30 @@ var Alert = ({
734
702
  children
735
703
  );
736
704
  };
705
+ var AlertTitle = ({ children, style }) => {
706
+ const theme = useTheme();
707
+ return /* @__PURE__ */ import_react5.default.createElement(
708
+ import_react_native3.Text,
709
+ {
710
+ style: [
711
+ styles3.title,
712
+ {
713
+ color: theme.colors.text,
714
+ fontSize: theme.fontSize.md,
715
+ textAlign: "center"
716
+ },
717
+ style
718
+ ]
719
+ },
720
+ children
721
+ );
722
+ };
737
723
  var AlertDescription = ({
738
724
  children,
739
725
  style
740
726
  }) => {
741
727
  const theme = useTheme();
742
- return /* @__PURE__ */ import_react6.default.createElement(
728
+ return /* @__PURE__ */ import_react5.default.createElement(
743
729
  import_react_native3.Text,
744
730
  {
745
731
  style: [
@@ -772,18 +758,18 @@ var styles3 = import_react_native3.StyleSheet.create({
772
758
  });
773
759
 
774
760
  // src/components/Modal.tsx
775
- var import_react8 = __toESM(require("react"));
761
+ var import_react7 = __toESM(require("react"));
776
762
  var import_react_native4 = require("react-native");
777
763
 
778
764
  // src/assets/CloseIcon.tsx
779
- var import_react7 = __toESM(require("react"));
780
- var import_react_native_svg2 = __toESM(require("react-native-svg"));
765
+ var import_react6 = __toESM(require("react"));
766
+ var import_react_native_svg = __toESM(require("react-native-svg"));
781
767
  var CloseIcon = ({
782
768
  size = 20,
783
769
  color = "#000"
784
770
  }) => {
785
- return /* @__PURE__ */ import_react7.default.createElement(import_react_native_svg2.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none" }, /* @__PURE__ */ import_react7.default.createElement(
786
- import_react_native_svg2.Path,
771
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_native_svg.default, { width: size, height: size, viewBox: "0 0 20 20", fill: "none" }, /* @__PURE__ */ import_react6.default.createElement(
772
+ import_react_native_svg.Path,
787
773
  {
788
774
  d: "M15 5L5 15M5 5L15 15",
789
775
  stroke: color,
@@ -809,7 +795,7 @@ var Modal = ({
809
795
  const getSizeStyles = () => {
810
796
  switch (size) {
811
797
  case "xs":
812
- return { maxHeight: SCREEN_HEIGHT * 0.35 };
798
+ return { maxHeight: SCREEN_HEIGHT * 0.4 };
813
799
  case "sm":
814
800
  return { maxHeight: SCREEN_HEIGHT * 0.45 };
815
801
  case "md":
@@ -827,13 +813,13 @@ var Modal = ({
827
813
  const handleOverlayPress = () => {
828
814
  if (!disableClose && closeOnOverlayClick) onClose();
829
815
  };
830
- return /* @__PURE__ */ import_react8.default.createElement(
816
+ return /* @__PURE__ */ import_react7.default.createElement(
831
817
  import_react_native4.KeyboardAvoidingView,
832
818
  {
833
819
  behavior: import_react_native4.Platform.OS === "ios" ? "padding" : "height",
834
820
  style: styles4.keyboardView
835
821
  },
836
- /* @__PURE__ */ import_react8.default.createElement(
822
+ /* @__PURE__ */ import_react7.default.createElement(
837
823
  import_react_native4.Modal,
838
824
  {
839
825
  visible: isOpen,
@@ -842,14 +828,14 @@ var Modal = ({
842
828
  statusBarTranslucent: true,
843
829
  onRequestClose: disableClose ? void 0 : onClose
844
830
  },
845
- /* @__PURE__ */ import_react8.default.createElement(
831
+ /* @__PURE__ */ import_react7.default.createElement(
846
832
  import_react_native4.TouchableOpacity,
847
833
  {
848
834
  activeOpacity: 1,
849
835
  style: [styles4.overlay, { backgroundColor: theme.colors.overlay }],
850
836
  onPress: handleOverlayPress
851
837
  },
852
- /* @__PURE__ */ import_react8.default.createElement(
838
+ /* @__PURE__ */ import_react7.default.createElement(
853
839
  import_react_native4.View,
854
840
  {
855
841
  style: [
@@ -880,7 +866,7 @@ var ModalHeader = ({
880
866
  style
881
867
  }) => {
882
868
  const theme = useTheme();
883
- return /* @__PURE__ */ import_react8.default.createElement(
869
+ return /* @__PURE__ */ import_react7.default.createElement(
884
870
  import_react_native4.View,
885
871
  {
886
872
  style: [
@@ -893,7 +879,7 @@ var ModalHeader = ({
893
879
  style
894
880
  ]
895
881
  },
896
- /* @__PURE__ */ import_react8.default.createElement(import_react_native4.View, { style: styles4.headerContent }, typeof children === "string" ? /* @__PURE__ */ import_react8.default.createElement(
882
+ /* @__PURE__ */ import_react7.default.createElement(import_react_native4.View, { style: styles4.headerContent }, typeof children === "string" ? /* @__PURE__ */ import_react7.default.createElement(
897
883
  import_react_native4.Text,
898
884
  {
899
885
  style: [
@@ -903,7 +889,7 @@ var ModalHeader = ({
903
889
  },
904
890
  children
905
891
  ) : children),
906
- showCloseButton && onClose && /* @__PURE__ */ import_react8.default.createElement(
892
+ showCloseButton && onClose && /* @__PURE__ */ import_react7.default.createElement(
907
893
  import_react_native4.TouchableOpacity,
908
894
  {
909
895
  onPress: onClose,
@@ -913,7 +899,7 @@ var ModalHeader = ({
913
899
  { backgroundColor: theme.colors.surface }
914
900
  ]
915
901
  },
916
- /* @__PURE__ */ import_react8.default.createElement(CloseIcon, { color: theme.colors.text, size: 20 })
902
+ /* @__PURE__ */ import_react7.default.createElement(CloseIcon, { color: theme.colors.text, size: 20 })
917
903
  )
918
904
  );
919
905
  };
@@ -924,7 +910,7 @@ var ModalBody = ({
924
910
  }) => {
925
911
  const theme = useTheme();
926
912
  if (scrollable) {
927
- return /* @__PURE__ */ import_react8.default.createElement(
913
+ return /* @__PURE__ */ import_react7.default.createElement(
928
914
  import_react_native4.ScrollView,
929
915
  {
930
916
  style: styles4.bodyScroll,
@@ -939,14 +925,14 @@ var ModalBody = ({
939
925
  children
940
926
  );
941
927
  }
942
- return /* @__PURE__ */ import_react8.default.createElement(import_react_native4.View, { style: [styles4.body, { padding: theme.spacing.lg }, style] }, children);
928
+ return /* @__PURE__ */ import_react7.default.createElement(import_react_native4.View, { style: [styles4.body, { padding: theme.spacing.lg }, style] }, children);
943
929
  };
944
930
  var ModalFooter = ({
945
931
  children,
946
932
  style
947
933
  }) => {
948
934
  const theme = useTheme();
949
- return /* @__PURE__ */ import_react8.default.createElement(
935
+ return /* @__PURE__ */ import_react7.default.createElement(
950
936
  import_react_native4.View,
951
937
  {
952
938
  style: [
@@ -1015,13 +1001,12 @@ var styles4 = import_react_native4.StyleSheet.create({
1015
1001
  flex: 1
1016
1002
  },
1017
1003
  footer: {
1018
- borderTopWidth: 1,
1019
- marginBottom: 24
1004
+ borderTopWidth: 1
1020
1005
  }
1021
1006
  });
1022
1007
 
1023
1008
  // src/components/OTP.tsx
1024
- var import_react9 = __toESM(require("react"));
1009
+ var import_react8 = __toESM(require("react"));
1025
1010
  var import_react_native5 = require("react-native");
1026
1011
  var OTP = ({
1027
1012
  length = 6,
@@ -1037,11 +1022,11 @@ var OTP = ({
1037
1022
  }) => {
1038
1023
  const theme = useTheme();
1039
1024
  const AUTO_SUBMIT_DELAY = 500;
1040
- const [otp, setOtp] = import_react9.default.useState(
1025
+ const [otp, setOtp] = import_react8.default.useState(
1041
1026
  value.split("").concat(Array(length).fill("")).slice(0, length)
1042
1027
  );
1043
- const inputRefs = import_react9.default.useRef([]);
1044
- import_react9.default.useEffect(() => {
1028
+ const inputRefs = import_react8.default.useRef([]);
1029
+ import_react8.default.useEffect(() => {
1045
1030
  const isComplete = otp.every((digit) => digit !== "");
1046
1031
  let timer;
1047
1032
  if (isComplete && onComplete) {
@@ -1053,12 +1038,12 @@ var OTP = ({
1053
1038
  if (timer) clearTimeout(timer);
1054
1039
  };
1055
1040
  }, [otp, onComplete]);
1056
- import_react9.default.useEffect(() => {
1041
+ import_react8.default.useEffect(() => {
1057
1042
  setTimeout(() => {
1058
1043
  inputRefs.current[0]?.focus();
1059
1044
  }, 100);
1060
1045
  }, []);
1061
- const handleChange = import_react9.default.useCallback(
1046
+ const handleChange = import_react8.default.useCallback(
1062
1047
  (index, val) => {
1063
1048
  if (disabled) return;
1064
1049
  setErrorMessage("");
@@ -1081,7 +1066,7 @@ var OTP = ({
1081
1066
  },
1082
1067
  [otp, length, onChange, onComplete, disabled]
1083
1068
  );
1084
- const handleKeyPress = import_react9.default.useCallback(
1069
+ const handleKeyPress = import_react8.default.useCallback(
1085
1070
  (index, e) => {
1086
1071
  if (disabled) return;
1087
1072
  if (e.nativeEvent.key === "Backspace") {
@@ -1102,7 +1087,7 @@ var OTP = ({
1102
1087
  if (otp[index]) return theme.colors.success;
1103
1088
  return theme.colors.border;
1104
1089
  };
1105
- return /* @__PURE__ */ import_react9.default.createElement(import_react_native5.View, { style: [styles5.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react9.default.createElement(
1090
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_native5.View, { style: [styles5.wrapper, containerStyle] }, label && /* @__PURE__ */ import_react8.default.createElement(
1106
1091
  import_react_native5.Text,
1107
1092
  {
1108
1093
  style: [
@@ -1111,7 +1096,7 @@ var OTP = ({
1111
1096
  ]
1112
1097
  },
1113
1098
  label
1114
- ), /* @__PURE__ */ import_react9.default.createElement(import_react_native5.View, { style: styles5.container }, Array.from({ length }, (_, index) => /* @__PURE__ */ import_react9.default.createElement(
1099
+ ), /* @__PURE__ */ import_react8.default.createElement(import_react_native5.View, { style: styles5.container }, Array.from({ length }, (_, index) => /* @__PURE__ */ import_react8.default.createElement(
1115
1100
  import_react_native5.TextInput,
1116
1101
  {
1117
1102
  key: index,
@@ -1136,7 +1121,7 @@ var OTP = ({
1136
1121
  selectTextOnFocus: true,
1137
1122
  caretHidden: true
1138
1123
  }
1139
- ))), error && /* @__PURE__ */ import_react9.default.createElement(
1124
+ ))), error && /* @__PURE__ */ import_react8.default.createElement(
1140
1125
  import_react_native5.Text,
1141
1126
  {
1142
1127
  style: [
@@ -1179,11 +1164,11 @@ var styles5 = import_react_native5.StyleSheet.create({
1179
1164
  });
1180
1165
 
1181
1166
  // src/components/SkeletonItem.tsx
1182
- var import_react10 = __toESM(require("react"));
1167
+ var import_react9 = __toESM(require("react"));
1183
1168
  var import_react_native6 = require("react-native");
1184
1169
  var SkeletonItem = () => {
1185
- const opacity = (0, import_react10.useRef)(new import_react_native6.Animated.Value(0.3)).current;
1186
- (0, import_react10.useEffect)(() => {
1170
+ const opacity = (0, import_react9.useRef)(new import_react_native6.Animated.Value(0.3)).current;
1171
+ (0, import_react9.useEffect)(() => {
1187
1172
  import_react_native6.Animated.loop(
1188
1173
  import_react_native6.Animated.sequence([
1189
1174
  import_react_native6.Animated.timing(opacity, {
@@ -1199,7 +1184,7 @@ var SkeletonItem = () => {
1199
1184
  ])
1200
1185
  ).start();
1201
1186
  }, []);
1202
- return /* @__PURE__ */ import_react10.default.createElement(import_react_native6.Animated.View, { style: [styles6.row, { opacity }] }, /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.iconCircle }), /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.textBlock }, /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.lineLong }), /* @__PURE__ */ import_react10.default.createElement(import_react_native6.View, { style: styles6.lineShort })));
1187
+ return /* @__PURE__ */ import_react9.default.createElement(import_react_native6.Animated.View, { style: [styles6.row, { opacity }] }, /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.iconCircle }), /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.textBlock }, /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.lineLong }), /* @__PURE__ */ import_react9.default.createElement(import_react_native6.View, { style: styles6.lineShort })));
1203
1188
  };
1204
1189
  var styles6 = import_react_native6.StyleSheet.create({
1205
1190
  row: {
@@ -1234,14 +1219,14 @@ var styles6 = import_react_native6.StyleSheet.create({
1234
1219
  var SkeletonItem_default = SkeletonItem;
1235
1220
 
1236
1221
  // src/components/Mode.tsx
1237
- var import_react11 = __toESM(require("react"));
1222
+ var import_react10 = __toESM(require("react"));
1238
1223
  var import_react_native7 = require("react-native");
1239
1224
  var Mode = () => {
1240
1225
  const { clientInfo } = useKryptosConnect();
1241
1226
  const theme = useTheme();
1242
1227
  if (!clientInfo) return null;
1243
1228
  if (clientInfo?.project_stage === "production") return null;
1244
- return /* @__PURE__ */ import_react11.default.createElement(import_react_native7.View, { style: [styles7.container, { backgroundColor: theme.colors.warning }] }, /* @__PURE__ */ import_react11.default.createElement(import_react_native7.Text, { style: [styles7.text, { color: theme.colors.warningText }] }, "Sandbox Mode"));
1229
+ return /* @__PURE__ */ import_react10.default.createElement(import_react_native7.View, { style: [styles7.container, { backgroundColor: theme.colors.warning }] }, /* @__PURE__ */ import_react10.default.createElement(import_react_native7.Text, { style: [styles7.text, { color: theme.colors.warningText }] }, "Sandbox Mode"));
1245
1230
  };
1246
1231
  var styles7 = import_react_native7.StyleSheet.create({
1247
1232
  container: {
@@ -1264,6 +1249,45 @@ var import_react_native9 = require("react-native");
1264
1249
  // src/components/PoweredByKryptos.tsx
1265
1250
  var import_react12 = __toESM(require("react"));
1266
1251
  var import_react_native8 = require("react-native");
1252
+
1253
+ // src/assets/LogoIcon.tsx
1254
+ var import_react11 = __toESM(require("react"));
1255
+ var import_react_native_svg2 = __toESM(require("react-native-svg"));
1256
+ var LogoIcon = ({ size = 36 }) => {
1257
+ return /* @__PURE__ */ import_react11.default.createElement(import_react_native_svg2.default, { width: size, height: size, viewBox: "0 0 36 36", fill: "none" }, /* @__PURE__ */ import_react11.default.createElement(
1258
+ import_react_native_svg2.Path,
1259
+ {
1260
+ d: "M0 4.11429C0 1.84203 1.84203 0 4.11429 0H31.8857C34.158 0 36 1.84203 36 4.11429V31.8857C36 34.158 34.158 36 31.8857 36H4.11429C1.84203 36 0 34.158 0 31.8857V4.11429Z",
1261
+ fill: "#00C693"
1262
+ }
1263
+ ), /* @__PURE__ */ import_react11.default.createElement(
1264
+ import_react_native_svg2.Path,
1265
+ {
1266
+ d: "M12.3916 28.2857H8.43388C8.03646 28.2857 7.71429 27.9886 7.71429 27.6221V22.92C7.71429 22.744 7.7901 22.5752 7.92505 22.4508L9.66229 20.8487C9.79724 20.7243 9.98027 20.6544 10.1711 20.6544H12.3916C12.789 20.6544 13.1112 20.9515 13.1112 21.318V27.6221C13.1112 27.9886 12.789 28.2857 12.3916 28.2857Z",
1267
+ fill: "white"
1268
+ }
1269
+ ), /* @__PURE__ */ import_react11.default.createElement(
1270
+ import_react_native_svg2.Path,
1271
+ {
1272
+ d: "M27.5647 28.2857H22.0443C21.8535 28.2857 21.6704 28.2158 21.5355 28.0914L13.9798 21.1236C13.6988 20.8645 13.6988 20.4443 13.9798 20.1851L15.7788 18.5262C15.9137 18.4017 16.0968 18.3318 16.2876 18.3318H18.21C18.4009 18.3318 18.5839 18.4017 18.7189 18.5262L28.0735 27.1529C28.5268 27.5709 28.2058 28.2857 27.5647 28.2857Z",
1273
+ fill: "white"
1274
+ }
1275
+ ), /* @__PURE__ */ import_react11.default.createElement(
1276
+ import_react_native_svg2.Path,
1277
+ {
1278
+ d: "M27.5647 7.71429H22.0443C21.8535 7.71429 21.6704 7.7842 21.5355 7.90865L13.9798 14.8764C13.6988 15.1355 13.6988 15.5557 13.9798 15.8149L15.7788 17.4738C15.9137 17.5983 16.0968 17.6682 16.2876 17.6682H18.21C18.4009 17.6682 18.5839 17.5983 18.7189 17.4738L28.0735 8.84711C28.5268 8.42907 28.2058 7.71429 27.5647 7.71429Z",
1279
+ fill: "white"
1280
+ }
1281
+ ), /* @__PURE__ */ import_react11.default.createElement(
1282
+ import_react_native_svg2.Path,
1283
+ {
1284
+ d: "M12.3916 7.71429H8.43388C8.03646 7.71429 7.71429 8.01139 7.71429 8.37788V13.08C7.71429 13.256 7.7901 13.4248 7.92505 13.5492L9.66229 15.1513C9.79724 15.2757 9.98027 15.3456 10.1711 15.3456H12.3916C12.789 15.3456 13.1112 15.0485 13.1112 14.682V8.37788C13.1112 8.01139 12.789 7.71429 12.3916 7.71429Z",
1285
+ fill: "white"
1286
+ }
1287
+ ));
1288
+ };
1289
+
1290
+ // src/components/PoweredByKryptos.tsx
1267
1291
  var PoweredByKryptos = () => {
1268
1292
  const theme = useTheme();
1269
1293
  const handlePress = () => {
@@ -1308,8 +1332,8 @@ var styles9 = import_react_native9.StyleSheet.create({
1308
1332
  });
1309
1333
 
1310
1334
  // src/molecules/Auth.tsx
1311
- var import_react19 = __toESM(require("react"));
1312
- var import_react_native11 = require("react-native");
1335
+ var import_react20 = __toESM(require("react"));
1336
+ var import_react_native12 = require("react-native");
1313
1337
 
1314
1338
  // src/assets/LinkIcon.tsx
1315
1339
  var import_react14 = __toESM(require("react"));
@@ -1378,8 +1402,8 @@ var EyeIcon = ({
1378
1402
  };
1379
1403
 
1380
1404
  // src/molecules/ConnectLogo.tsx
1381
- var import_react18 = __toESM(require("react"));
1382
- var import_react_native10 = require("react-native");
1405
+ var import_react19 = __toESM(require("react"));
1406
+ var import_react_native11 = require("react-native");
1383
1407
 
1384
1408
  // src/assets/UnplugIcon.tsx
1385
1409
  var import_react17 = __toESM(require("react"));
@@ -1438,15 +1462,40 @@ var UnplugIcon = ({
1438
1462
  ));
1439
1463
  };
1440
1464
 
1465
+ // src/components/remote-svg.tsx
1466
+ var import_react18 = __toESM(require("react"));
1467
+ var import_react_native10 = require("react-native");
1468
+ var import_react_native_svg7 = require("react-native-svg");
1469
+ function RemoteSvg({
1470
+ uri,
1471
+ width = 32,
1472
+ height = 32
1473
+ }) {
1474
+ const [svgXml, setSvgXml] = (0, import_react18.useState)(null);
1475
+ (0, import_react18.useEffect)(() => {
1476
+ fetch(uri).then((res) => res.text()).then((text) => setSvgXml(text)).catch((err) => console.error("SVG load error:", err));
1477
+ }, [uri]);
1478
+ if (!svgXml) return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.ActivityIndicator, null);
1479
+ return /* @__PURE__ */ import_react18.default.createElement(
1480
+ import_react_native_svg7.SvgXml,
1481
+ {
1482
+ xml: svgXml,
1483
+ width,
1484
+ height,
1485
+ style: { borderRadius: 8 }
1486
+ }
1487
+ );
1488
+ }
1489
+
1441
1490
  // src/molecules/ConnectLogo.tsx
1442
1491
  var KryptosLogo = () => {
1443
1492
  const theme = useTheme();
1444
- return /* @__PURE__ */ import_react18.default.createElement(
1445
- import_react_native10.View,
1493
+ return /* @__PURE__ */ import_react19.default.createElement(
1494
+ import_react_native11.View,
1446
1495
  {
1447
1496
  style: [styles10.logoContainer, { backgroundColor: theme.colors.surface }]
1448
1497
  },
1449
- /* @__PURE__ */ import_react18.default.createElement(LogoIcon, { size: 36 })
1498
+ /* @__PURE__ */ import_react19.default.createElement(LogoIcon, { size: 36 })
1450
1499
  );
1451
1500
  };
1452
1501
  var ConnectLogo = () => {
@@ -1461,11 +1510,11 @@ var ConnectLogo = () => {
1461
1510
  }
1462
1511
  };
1463
1512
  const renderLogo = () => {
1464
- if ((0, import_react18.isValidElement)(appLogo)) {
1513
+ if ((0, import_react19.isValidElement)(appLogo)) {
1465
1514
  return appLogo;
1466
1515
  } else if (typeof appLogo === "string" && isValidUrl(appLogo)) {
1467
- return /* @__PURE__ */ import_react18.default.createElement(
1468
- import_react_native10.Image,
1516
+ return isSvgUrl(appLogo) ? /* @__PURE__ */ import_react19.default.createElement(RemoteSvg, { uri: appLogo }) : /* @__PURE__ */ import_react19.default.createElement(
1517
+ import_react_native11.Image,
1469
1518
  {
1470
1519
  source: { uri: appLogo },
1471
1520
  style: styles10.appLogoImage,
@@ -1473,8 +1522,8 @@ var ConnectLogo = () => {
1473
1522
  }
1474
1523
  );
1475
1524
  } else if (typeof appLogo === "number" || typeof appLogo === "object" && appLogo !== null) {
1476
- return /* @__PURE__ */ import_react18.default.createElement(
1477
- import_react_native10.Image,
1525
+ return /* @__PURE__ */ import_react19.default.createElement(
1526
+ import_react_native11.Image,
1478
1527
  {
1479
1528
  source: appLogo,
1480
1529
  style: styles10.appLogoImage,
@@ -1482,12 +1531,12 @@ var ConnectLogo = () => {
1482
1531
  }
1483
1532
  );
1484
1533
  } else if (appName) {
1485
- return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, appName.charAt(0).toUpperCase());
1534
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, appName.charAt(0).toUpperCase());
1486
1535
  }
1487
- return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, "?");
1536
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles10.appLogoText, { color: theme.colors.text }] }, "?");
1488
1537
  };
1489
- return /* @__PURE__ */ import_react18.default.createElement(import_react_native10.View, { style: styles10.container }, /* @__PURE__ */ import_react18.default.createElement(KryptosLogo, null), /* @__PURE__ */ import_react18.default.createElement(import_react_native10.View, { style: styles10.iconContainer }, /* @__PURE__ */ import_react18.default.createElement(UnplugIcon, { size: 24, color: theme.colors.textSecondary })), /* @__PURE__ */ import_react18.default.createElement(
1490
- import_react_native10.View,
1538
+ return /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles10.container }, /* @__PURE__ */ import_react19.default.createElement(KryptosLogo, null), /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles10.iconContainer }, /* @__PURE__ */ import_react19.default.createElement(UnplugIcon, { size: 24, color: theme.colors.textSecondary })), /* @__PURE__ */ import_react19.default.createElement(
1539
+ import_react_native11.View,
1491
1540
  {
1492
1541
  style: [
1493
1542
  styles10.logoContainer,
@@ -1497,7 +1546,7 @@ var ConnectLogo = () => {
1497
1546
  renderLogo()
1498
1547
  ));
1499
1548
  };
1500
- var styles10 = import_react_native10.StyleSheet.create({
1549
+ var styles10 = import_react_native11.StyleSheet.create({
1501
1550
  container: {
1502
1551
  flexDirection: "row",
1503
1552
  alignItems: "center",
@@ -1538,11 +1587,11 @@ var Auth = ({
1538
1587
  }) => {
1539
1588
  const { appName, linkToken, clientId, setUser, setEmail } = useKryptosConnect();
1540
1589
  const theme = useTheme();
1541
- const [isLoading, setIsLoading] = import_react19.default.useState(false);
1542
- const [errorMessage, setErrorMessage] = import_react19.default.useState("");
1543
- const [emailValue, setEmailValue] = import_react19.default.useState("");
1544
- const [emailError, setEmailError] = import_react19.default.useState("");
1545
- const [loadingType, setLoadingType] = import_react19.default.useState(null);
1590
+ const [isLoading, setIsLoading] = import_react20.default.useState(false);
1591
+ const [errorMessage, setErrorMessage] = import_react20.default.useState("");
1592
+ const [emailValue, setEmailValue] = import_react20.default.useState("");
1593
+ const [emailError, setEmailError] = import_react20.default.useState("");
1594
+ const [loadingType, setLoadingType] = import_react20.default.useState(null);
1546
1595
  const validateEmail = (email) => {
1547
1596
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
1548
1597
  if (!email) {
@@ -1604,29 +1653,29 @@ var Auth = ({
1604
1653
  };
1605
1654
  const infoSections = [
1606
1655
  {
1607
- icon: /* @__PURE__ */ import_react19.default.createElement(LinkIcon, { size: 20, color: theme.colors.primary }),
1656
+ icon: /* @__PURE__ */ import_react20.default.createElement(LinkIcon, { size: 20, color: theme.colors.primary }),
1608
1657
  title: "Simple and secure",
1609
1658
  text: "Link your accounts in just a few clicks"
1610
1659
  },
1611
1660
  {
1612
- icon: /* @__PURE__ */ import_react19.default.createElement(ShieldIcon, { size: 20, color: theme.colors.primary }),
1661
+ icon: /* @__PURE__ */ import_react20.default.createElement(ShieldIcon, { size: 20, color: theme.colors.primary }),
1613
1662
  title: "Control what you share",
1614
1663
  text: "We never share your data without your permission"
1615
1664
  },
1616
1665
  {
1617
- icon: /* @__PURE__ */ import_react19.default.createElement(EyeIcon, { size: 20, color: theme.colors.primary }),
1666
+ icon: /* @__PURE__ */ import_react20.default.createElement(EyeIcon, { size: 20, color: theme.colors.primary }),
1618
1667
  title: "View Only Access",
1619
1668
  text: "Kryptos retrieves view-only data and cannot perform any transactions on your behalf."
1620
1669
  }
1621
1670
  ];
1622
- return /* @__PURE__ */ import_react19.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react19.default.createElement(ModalHeader, { onClose: handleClose }, ""), /* @__PURE__ */ import_react19.default.createElement(ModalBody, null, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.container }, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.header }, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: [styles11.title, { color: theme.colors.text }] }, "Link your accounts to", " ", /* @__PURE__ */ import_react19.default.createElement(import_react_native11.Text, { style: { fontWeight: "700" } }, appName), " using Kryptos"), /* @__PURE__ */ import_react19.default.createElement(ConnectLogo, null), infoSections.map((section, index) => /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { key: `info-${index}`, style: styles11.infoSection }, /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.infoIcon }, section.icon), /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.infoContent }, /* @__PURE__ */ import_react19.default.createElement(
1623
- import_react_native11.Text,
1671
+ return /* @__PURE__ */ import_react20.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react20.default.createElement(ModalHeader, { onClose: handleClose }, ""), /* @__PURE__ */ import_react20.default.createElement(ModalBody, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.container }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.header }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: [styles11.title, { color: theme.colors.text }] }, "Link your accounts to", " ", /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: { fontWeight: "700" } }, appName), " using Kryptos"), /* @__PURE__ */ import_react20.default.createElement(ConnectLogo, null), infoSections.map((section, index) => /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { key: `info-${index}`, style: styles11.infoSection }, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.infoIcon }, section.icon), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.infoContent }, /* @__PURE__ */ import_react20.default.createElement(
1672
+ import_react_native12.Text,
1624
1673
  {
1625
1674
  style: [styles11.infoTitle, { color: theme.colors.text }]
1626
1675
  },
1627
1676
  section.title
1628
- ), /* @__PURE__ */ import_react19.default.createElement(
1629
- import_react_native11.Text,
1677
+ ), /* @__PURE__ */ import_react20.default.createElement(
1678
+ import_react_native12.Text,
1630
1679
  {
1631
1680
  style: [
1632
1681
  styles11.infoDescription,
@@ -1634,7 +1683,7 @@ var Auth = ({
1634
1683
  ]
1635
1684
  },
1636
1685
  section.text
1637
- )))), errorMessage ? /* @__PURE__ */ import_react19.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react19.default.createElement(AlertDescription, null, errorMessage)) : null), /* @__PURE__ */ import_react19.default.createElement(import_react_native11.View, { style: styles11.footer }, /* @__PURE__ */ import_react19.default.createElement(
1686
+ )))), errorMessage ? /* @__PURE__ */ import_react20.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react20.default.createElement(AlertDescription, null, errorMessage)) : null), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles11.footer }, /* @__PURE__ */ import_react20.default.createElement(
1638
1687
  Button,
1639
1688
  {
1640
1689
  variant: "outline",
@@ -1645,41 +1694,41 @@ var Auth = ({
1645
1694
  style: styles11.button
1646
1695
  },
1647
1696
  "Continue"
1648
- ), /* @__PURE__ */ import_react19.default.createElement(
1649
- import_react_native11.Text,
1697
+ ), /* @__PURE__ */ import_react20.default.createElement(
1698
+ import_react_native12.Text,
1650
1699
  {
1651
1700
  style: [styles11.footerText, { color: theme.colors.textSecondary }]
1652
1701
  },
1653
1702
  "By continuing, you agree to Kryptos",
1654
1703
  " ",
1655
- /* @__PURE__ */ import_react19.default.createElement(
1656
- import_react_native11.Text,
1704
+ /* @__PURE__ */ import_react20.default.createElement(
1705
+ import_react_native12.Text,
1657
1706
  {
1658
1707
  style: {
1659
1708
  color: theme.colors.primary,
1660
1709
  textDecorationLine: "underline"
1661
1710
  },
1662
- onPress: () => import_react_native11.Linking.openURL("https://kryptos.io/privacy-policy")
1711
+ onPress: () => import_react_native12.Linking.openURL("https://kryptos.io/privacy-policy")
1663
1712
  },
1664
1713
  "Privacy Policy"
1665
1714
  ),
1666
1715
  " ",
1667
1716
  "and",
1668
1717
  " ",
1669
- /* @__PURE__ */ import_react19.default.createElement(
1670
- import_react_native11.Text,
1718
+ /* @__PURE__ */ import_react20.default.createElement(
1719
+ import_react_native12.Text,
1671
1720
  {
1672
1721
  style: {
1673
1722
  color: theme.colors.primary,
1674
1723
  textDecorationLine: "underline"
1675
1724
  },
1676
- onPress: () => import_react_native11.Linking.openURL("https://kryptos.io/terms-of-services")
1725
+ onPress: () => import_react_native12.Linking.openURL("https://kryptos.io/terms-of-services")
1677
1726
  },
1678
1727
  "Terms of Service"
1679
1728
  )
1680
- )))), /* @__PURE__ */ import_react19.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react19.default.createElement(Footer, null)));
1729
+ )))), /* @__PURE__ */ import_react20.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react20.default.createElement(Footer, null)));
1681
1730
  };
1682
- var styles11 = import_react_native11.StyleSheet.create({
1731
+ var styles11 = import_react_native12.StyleSheet.create({
1683
1732
  container: {
1684
1733
  flex: 1,
1685
1734
  flexDirection: "column",
@@ -1743,9 +1792,101 @@ var styles11 = import_react_native11.StyleSheet.create({
1743
1792
  }
1744
1793
  });
1745
1794
 
1795
+ // src/molecules/EndModal.tsx
1796
+ var import_react22 = __toESM(require("react"));
1797
+ var import_react_native13 = require("react-native");
1798
+
1799
+ // src/assets/SuccessIcon.tsx
1800
+ var import_react21 = __toESM(require("react"));
1801
+ var import_react_native_svg8 = __toESM(require("react-native-svg"));
1802
+ var SuccessIcon = ({ size = 64 }) => {
1803
+ return /* @__PURE__ */ import_react21.default.createElement(import_react_native_svg8.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react21.default.createElement(
1804
+ import_react_native_svg8.Circle,
1805
+ {
1806
+ cx: 32,
1807
+ cy: 32,
1808
+ r: 30,
1809
+ fill: "#00C693",
1810
+ opacity: 0.1
1811
+ }
1812
+ ), /* @__PURE__ */ import_react21.default.createElement(
1813
+ import_react_native_svg8.Circle,
1814
+ {
1815
+ cx: 32,
1816
+ cy: 32,
1817
+ r: 24,
1818
+ fill: "#00C693"
1819
+ }
1820
+ ), /* @__PURE__ */ import_react21.default.createElement(
1821
+ import_react_native_svg8.Path,
1822
+ {
1823
+ d: "M24 32l6 6 12-12",
1824
+ stroke: "white",
1825
+ strokeWidth: 3,
1826
+ strokeLinecap: "round",
1827
+ strokeLinejoin: "round"
1828
+ }
1829
+ ));
1830
+ };
1831
+
1832
+ // src/molecules/EndModal.tsx
1833
+ var EndModal = ({ open, onClose }) => {
1834
+ const theme = useTheme();
1835
+ (0, import_react22.useEffect)(() => {
1836
+ if (!open) return;
1837
+ const timer = setTimeout(() => {
1838
+ onClose();
1839
+ }, 5e3);
1840
+ return () => clearTimeout(timer);
1841
+ }, []);
1842
+ return /* @__PURE__ */ import_react22.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react22.default.createElement(ModalHeader, { onClose }, ""), /* @__PURE__ */ import_react22.default.createElement(ModalBody, null, /* @__PURE__ */ import_react22.default.createElement(import_react_native13.View, { style: styles12.container }, /* @__PURE__ */ import_react22.default.createElement(
1843
+ import_react_native13.View,
1844
+ {
1845
+ style: [
1846
+ styles12.iconContainer,
1847
+ { backgroundColor: theme.colors.successLight }
1848
+ ]
1849
+ },
1850
+ /* @__PURE__ */ import_react22.default.createElement(SuccessIcon, { size: 80 })
1851
+ ), /* @__PURE__ */ import_react22.default.createElement(import_react_native13.Text, { style: [styles12.message, { color: theme.colors.text }] }, "All set! We're redirecting you back to the app. If it takes longer than expected, tap the button below to continue."), /* @__PURE__ */ import_react22.default.createElement(Alert, null, /* @__PURE__ */ import_react22.default.createElement(AlertTitle, null, "Sync in Progress"), /* @__PURE__ */ import_react22.default.createElement(AlertDescription, null, "The syncing process might take a moment. Please wait, and your data will be updated soon.")))), /* @__PURE__ */ import_react22.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react22.default.createElement(
1852
+ Button,
1853
+ {
1854
+ variant: "primary",
1855
+ size: "lg",
1856
+ onPress: onClose,
1857
+ style: styles12.button
1858
+ },
1859
+ "Continue to App"
1860
+ ), /* @__PURE__ */ import_react22.default.createElement(Footer, null)));
1861
+ };
1862
+ var styles12 = import_react_native13.StyleSheet.create({
1863
+ container: {
1864
+ alignItems: "center",
1865
+ paddingVertical: 20
1866
+ },
1867
+ iconContainer: {
1868
+ width: 80,
1869
+ height: 80,
1870
+ borderRadius: 40,
1871
+ alignItems: "center",
1872
+ justifyContent: "center",
1873
+ marginBottom: 20
1874
+ },
1875
+ message: {
1876
+ fontSize: 14,
1877
+ textAlign: "center",
1878
+ lineHeight: 20,
1879
+ marginBottom: 24,
1880
+ paddingHorizontal: 20
1881
+ },
1882
+ button: {
1883
+ width: "100%"
1884
+ }
1885
+ });
1886
+
1746
1887
  // src/molecules/Init.tsx
1747
- var import_react20 = __toESM(require("react"));
1748
- var import_react_native12 = require("react-native");
1888
+ var import_react23 = __toESM(require("react"));
1889
+ var import_react_native14 = require("react-native");
1749
1890
  var Init = ({
1750
1891
  open,
1751
1892
  onSuccess,
@@ -1760,9 +1901,9 @@ var Init = ({
1760
1901
  setUser
1761
1902
  } = useKryptosConnect();
1762
1903
  const theme = useTheme();
1763
- const [isFetching, setIsFetching] = import_react20.default.useState(false);
1764
- const [error, setError] = import_react20.default.useState(null);
1765
- const fetchLinkToken = import_react20.default.useCallback(async () => {
1904
+ const [isFetching, setIsFetching] = import_react23.default.useState(false);
1905
+ const [error, setError] = import_react23.default.useState(null);
1906
+ const fetchLinkToken = import_react23.default.useCallback(async () => {
1766
1907
  if (!open) return;
1767
1908
  setIsFetching(true);
1768
1909
  setError(null);
@@ -1789,28 +1930,28 @@ var Init = ({
1789
1930
  setIsFetching(false);
1790
1931
  }
1791
1932
  }, []);
1792
- import_react20.default.useEffect(() => {
1933
+ import_react23.default.useEffect(() => {
1793
1934
  fetchLinkToken();
1794
1935
  }, [fetchLinkToken]);
1795
- return /* @__PURE__ */ import_react20.default.createElement(Modal, { isOpen: open, onClose, size: "xs" }, /* @__PURE__ */ import_react20.default.createElement(ModalHeader, { onClose }, "Kryptos Connect"), /* @__PURE__ */ import_react20.default.createElement(ModalBody, null, /* @__PURE__ */ import_react20.default.createElement(import_react_native12.View, { style: styles12.container }, isFetching && /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement(
1796
- import_react_native12.ActivityIndicator,
1936
+ return /* @__PURE__ */ import_react23.default.createElement(Modal, { isOpen: open, onClose, size: "md" }, /* @__PURE__ */ import_react23.default.createElement(ModalHeader, { onClose }, "Kryptos Connect"), /* @__PURE__ */ import_react23.default.createElement(ModalBody, null, /* @__PURE__ */ import_react23.default.createElement(import_react_native14.View, { style: styles13.container }, isFetching && /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(
1937
+ import_react_native14.ActivityIndicator,
1797
1938
  {
1798
1939
  size: "large",
1799
1940
  color: theme.colors.primary,
1800
- style: styles12.spinner
1941
+ style: styles13.spinner
1801
1942
  }
1802
- ), /* @__PURE__ */ import_react20.default.createElement(import_react_native12.Text, { style: [styles12.message, { color: theme.colors.text }] }, isInitialized ? "Fetching link token..." : "Initializing...")), !isFetching && error && /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react20.default.createElement(AlertDescription, null, error)), /* @__PURE__ */ import_react20.default.createElement(
1943
+ ), /* @__PURE__ */ import_react23.default.createElement(import_react_native14.Text, { style: [styles13.message, { color: theme.colors.text }] }, isInitialized ? "Fetching link token..." : "Initializing...")), !isFetching && error && /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react23.default.createElement(AlertDescription, null, error)), /* @__PURE__ */ import_react23.default.createElement(
1803
1944
  Button,
1804
1945
  {
1805
1946
  variant: "primary",
1806
1947
  size: "lg",
1807
1948
  onPress: fetchLinkToken,
1808
- style: styles12.retryButton
1949
+ style: styles13.retryButton
1809
1950
  },
1810
1951
  "Retry"
1811
- )))), /* @__PURE__ */ import_react20.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react20.default.createElement(Footer, null)));
1952
+ )))), /* @__PURE__ */ import_react23.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react23.default.createElement(Footer, null)));
1812
1953
  };
1813
- var styles12 = import_react_native12.StyleSheet.create({
1954
+ var styles13 = import_react_native14.StyleSheet.create({
1814
1955
  container: {
1815
1956
  flex: 1,
1816
1957
  alignItems: "center",
@@ -1837,18 +1978,18 @@ var styles12 = import_react_native12.StyleSheet.create({
1837
1978
  });
1838
1979
 
1839
1980
  // src/molecules/Integration.tsx
1840
- var import_react31 = __toESM(require("react"));
1841
- var import_react_native16 = require("react-native");
1981
+ var import_react35 = __toESM(require("react"));
1982
+ var import_react_native19 = require("react-native");
1842
1983
 
1843
1984
  // src/assets/ArrowLeftIcon.tsx
1844
- var import_react21 = __toESM(require("react"));
1845
- var import_react_native_svg7 = __toESM(require("react-native-svg"));
1985
+ var import_react24 = __toESM(require("react"));
1986
+ var import_react_native_svg9 = __toESM(require("react-native-svg"));
1846
1987
  var ArrowLeftIcon = ({
1847
1988
  size = 20,
1848
1989
  color = "#000"
1849
1990
  }) => {
1850
- return /* @__PURE__ */ import_react21.default.createElement(import_react_native_svg7.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react21.default.createElement(
1851
- import_react_native_svg7.Path,
1991
+ return /* @__PURE__ */ import_react24.default.createElement(import_react_native_svg9.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react24.default.createElement(
1992
+ import_react_native_svg9.Path,
1852
1993
  {
1853
1994
  d: "M19 12H5M12 19l-7-7 7-7",
1854
1995
  stroke: color,
@@ -1860,14 +2001,14 @@ var ArrowLeftIcon = ({
1860
2001
  };
1861
2002
 
1862
2003
  // src/assets/CheckCircleIcon.tsx
1863
- var import_react22 = __toESM(require("react"));
1864
- var import_react_native_svg8 = __toESM(require("react-native-svg"));
2004
+ var import_react25 = __toESM(require("react"));
2005
+ var import_react_native_svg10 = __toESM(require("react-native-svg"));
1865
2006
  var CheckCircleIcon = ({
1866
2007
  size = 20,
1867
2008
  color = "#10B981"
1868
2009
  }) => {
1869
- return /* @__PURE__ */ import_react22.default.createElement(import_react_native_svg8.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react22.default.createElement(
1870
- import_react_native_svg8.Circle,
2010
+ return /* @__PURE__ */ import_react25.default.createElement(import_react_native_svg10.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react25.default.createElement(
2011
+ import_react_native_svg10.Circle,
1871
2012
  {
1872
2013
  cx: 12,
1873
2014
  cy: 12,
@@ -1875,8 +2016,8 @@ var CheckCircleIcon = ({
1875
2016
  stroke: color,
1876
2017
  strokeWidth: 2
1877
2018
  }
1878
- ), /* @__PURE__ */ import_react22.default.createElement(
1879
- import_react_native_svg8.Path,
2019
+ ), /* @__PURE__ */ import_react25.default.createElement(
2020
+ import_react_native_svg10.Path,
1880
2021
  {
1881
2022
  d: "m9 12 2 2 4-4",
1882
2023
  stroke: color,
@@ -1888,21 +2029,21 @@ var CheckCircleIcon = ({
1888
2029
  };
1889
2030
 
1890
2031
  // src/assets/LoaderIcon.tsx
1891
- var import_react23 = __toESM(require("react"));
1892
- var import_react_native13 = require("react-native");
1893
- var import_react_native_svg9 = __toESM(require("react-native-svg"));
1894
- var AnimatedSvg = import_react_native13.Animated.createAnimatedComponent(import_react_native_svg9.default);
2032
+ var import_react26 = __toESM(require("react"));
2033
+ var import_react_native15 = require("react-native");
2034
+ var import_react_native_svg11 = __toESM(require("react-native-svg"));
2035
+ var AnimatedSvg = import_react_native15.Animated.createAnimatedComponent(import_react_native_svg11.default);
1895
2036
  var LoaderIcon = ({
1896
2037
  size = 20,
1897
2038
  color = "#00C693"
1898
2039
  }) => {
1899
- const rotateAnim = import_react23.default.useRef(new import_react_native13.Animated.Value(0)).current;
1900
- import_react23.default.useEffect(() => {
1901
- import_react_native13.Animated.loop(
1902
- import_react_native13.Animated.timing(rotateAnim, {
2040
+ const rotateAnim = import_react26.default.useRef(new import_react_native15.Animated.Value(0)).current;
2041
+ import_react26.default.useEffect(() => {
2042
+ import_react_native15.Animated.loop(
2043
+ import_react_native15.Animated.timing(rotateAnim, {
1903
2044
  toValue: 1,
1904
2045
  duration: 1e3,
1905
- easing: import_react_native13.Easing.linear,
2046
+ easing: import_react_native15.Easing.linear,
1906
2047
  useNativeDriver: true
1907
2048
  })
1908
2049
  ).start();
@@ -1911,7 +2052,7 @@ var LoaderIcon = ({
1911
2052
  inputRange: [0, 1],
1912
2053
  outputRange: ["0deg", "360deg"]
1913
2054
  });
1914
- return /* @__PURE__ */ import_react23.default.createElement(
2055
+ return /* @__PURE__ */ import_react26.default.createElement(
1915
2056
  AnimatedSvg,
1916
2057
  {
1917
2058
  width: size,
@@ -1920,8 +2061,8 @@ var LoaderIcon = ({
1920
2061
  fill: "none",
1921
2062
  style: { transform: [{ rotate: spin }] }
1922
2063
  },
1923
- /* @__PURE__ */ import_react23.default.createElement(
1924
- import_react_native_svg9.Path,
2064
+ /* @__PURE__ */ import_react26.default.createElement(
2065
+ import_react_native_svg11.Path,
1925
2066
  {
1926
2067
  d: "M21 12a9 9 0 1 1-6.219-8.56",
1927
2068
  stroke: color,
@@ -1933,64 +2074,31 @@ var LoaderIcon = ({
1933
2074
  );
1934
2075
  };
1935
2076
 
1936
- // src/assets/SuccessIcon.tsx
1937
- var import_react24 = __toESM(require("react"));
1938
- var import_react_native_svg10 = __toESM(require("react-native-svg"));
1939
- var SuccessIcon = ({ size = 64 }) => {
1940
- return /* @__PURE__ */ import_react24.default.createElement(import_react_native_svg10.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react24.default.createElement(
1941
- import_react_native_svg10.Circle,
2077
+ // src/assets/ErrorIcon.tsx
2078
+ var import_react27 = __toESM(require("react"));
2079
+ var import_react_native_svg12 = __toESM(require("react-native-svg"));
2080
+ var ErrorIcon = ({ size = 64 }) => {
2081
+ return /* @__PURE__ */ import_react27.default.createElement(import_react_native_svg12.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react27.default.createElement(
2082
+ import_react_native_svg12.Circle,
1942
2083
  {
1943
2084
  cx: 32,
1944
2085
  cy: 32,
1945
2086
  r: 30,
1946
- fill: "#00C693",
2087
+ fill: "#EF4444",
1947
2088
  opacity: 0.1
1948
2089
  }
1949
- ), /* @__PURE__ */ import_react24.default.createElement(
1950
- import_react_native_svg10.Circle,
2090
+ ), /* @__PURE__ */ import_react27.default.createElement(
2091
+ import_react_native_svg12.Circle,
1951
2092
  {
1952
2093
  cx: 32,
1953
2094
  cy: 32,
1954
2095
  r: 24,
1955
- fill: "#00C693"
2096
+ fill: "#EF4444"
1956
2097
  }
1957
- ), /* @__PURE__ */ import_react24.default.createElement(
1958
- import_react_native_svg10.Path,
2098
+ ), /* @__PURE__ */ import_react27.default.createElement(
2099
+ import_react_native_svg12.Path,
1959
2100
  {
1960
- d: "M24 32l6 6 12-12",
1961
- stroke: "white",
1962
- strokeWidth: 3,
1963
- strokeLinecap: "round",
1964
- strokeLinejoin: "round"
1965
- }
1966
- ));
1967
- };
1968
-
1969
- // src/assets/ErrorIcon.tsx
1970
- var import_react25 = __toESM(require("react"));
1971
- var import_react_native_svg11 = __toESM(require("react-native-svg"));
1972
- var ErrorIcon = ({ size = 64 }) => {
1973
- return /* @__PURE__ */ import_react25.default.createElement(import_react_native_svg11.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react25.default.createElement(
1974
- import_react_native_svg11.Circle,
1975
- {
1976
- cx: 32,
1977
- cy: 32,
1978
- r: 30,
1979
- fill: "#EF4444",
1980
- opacity: 0.1
1981
- }
1982
- ), /* @__PURE__ */ import_react25.default.createElement(
1983
- import_react_native_svg11.Circle,
1984
- {
1985
- cx: 32,
1986
- cy: 32,
1987
- r: 24,
1988
- fill: "#EF4444"
1989
- }
1990
- ), /* @__PURE__ */ import_react25.default.createElement(
1991
- import_react_native_svg11.Path,
1992
- {
1993
- d: "M24 24l16 16M40 24l-16 16",
2101
+ d: "M24 24l16 16M40 24l-16 16",
1994
2102
  stroke: "white",
1995
2103
  strokeWidth: 3,
1996
2104
  strokeLinecap: "round",
@@ -2000,18 +2108,18 @@ var ErrorIcon = ({ size = 64 }) => {
2000
2108
  };
2001
2109
 
2002
2110
  // src/assets/SearchIcon.tsx
2003
- var import_react26 = __toESM(require("react"));
2004
- var import_react_native_svg12 = __toESM(require("react-native-svg"));
2111
+ var import_react28 = __toESM(require("react"));
2112
+ var import_react_native_svg13 = __toESM(require("react-native-svg"));
2005
2113
 
2006
2114
  // src/assets/PlusIcon.tsx
2007
- var import_react27 = __toESM(require("react"));
2008
- var import_react_native_svg13 = __toESM(require("react-native-svg"));
2115
+ var import_react29 = __toESM(require("react"));
2116
+ var import_react_native_svg14 = __toESM(require("react-native-svg"));
2009
2117
  var PlusIcon = ({
2010
2118
  size = 14,
2011
2119
  color = "#6B7280"
2012
2120
  }) => {
2013
- return /* @__PURE__ */ import_react27.default.createElement(import_react_native_svg13.default, { width: size, height: size, viewBox: "0 0 14 14", fill: "none" }, /* @__PURE__ */ import_react27.default.createElement(
2014
- import_react_native_svg13.Path,
2121
+ return /* @__PURE__ */ import_react29.default.createElement(import_react_native_svg14.default, { width: size, height: size, viewBox: "0 0 14 14", fill: "none" }, /* @__PURE__ */ import_react29.default.createElement(
2122
+ import_react_native_svg14.Path,
2015
2123
  {
2016
2124
  d: "M7 3.5v7M3.5 7h7",
2017
2125
  stroke: color,
@@ -2021,10 +2129,48 @@ var PlusIcon = ({
2021
2129
  ));
2022
2130
  };
2023
2131
 
2132
+ // src/assets/RedirectIcon.tsx
2133
+ var import_react30 = __toESM(require("react"));
2134
+ var import_react_native_svg15 = __toESM(require("react-native-svg"));
2135
+ var RedirectIcon = ({
2136
+ width = 20,
2137
+ height = 20,
2138
+ color = "currentColor"
2139
+ }) => {
2140
+ return /* @__PURE__ */ import_react30.default.createElement(import_react_native_svg15.default, { width, height, viewBox: "0 0 20 20", fill: "none" }, /* @__PURE__ */ import_react30.default.createElement(
2141
+ import_react_native_svg15.Path,
2142
+ {
2143
+ d: "M10.8333 9.16536L17.6666 2.33203",
2144
+ stroke: color,
2145
+ strokeWidth: 2,
2146
+ strokeLinecap: "round",
2147
+ strokeLinejoin: "round"
2148
+ }
2149
+ ), /* @__PURE__ */ import_react30.default.createElement(
2150
+ import_react_native_svg15.Path,
2151
+ {
2152
+ d: "M18.3333 5.66797V1.66797H14.3333",
2153
+ stroke: color,
2154
+ strokeWidth: 2,
2155
+ strokeLinecap: "round",
2156
+ strokeLinejoin: "round"
2157
+ }
2158
+ ), /* @__PURE__ */ import_react30.default.createElement(
2159
+ import_react_native_svg15.Path,
2160
+ {
2161
+ d: "M9.16669 1.66797H7.50002C3.33335 1.66797 1.66669 3.33464 1.66669 7.5013V12.5013C1.66669 16.668 3.33335 18.3346 7.50002 18.3346H12.5C16.6667 18.3346 18.3334 16.668 18.3334 12.5013V10.8346",
2162
+ stroke: color,
2163
+ strokeWidth: 2,
2164
+ strokeLinecap: "round",
2165
+ strokeLinejoin: "round"
2166
+ }
2167
+ ));
2168
+ };
2169
+
2024
2170
  // src/wallet-connect/index.tsx
2025
2171
  var import_appkit_react_native3 = require("@reown/appkit-react-native");
2026
- var import_react29 = __toESM(require("react"));
2027
- var import_react_native14 = require("react-native");
2172
+ var import_react32 = __toESM(require("react"));
2173
+ var import_react_native16 = require("react-native");
2028
2174
 
2029
2175
  // src/utils/uuid.ts
2030
2176
  function generateUUID() {
@@ -2036,7 +2182,7 @@ function generateUUID() {
2036
2182
  }
2037
2183
 
2038
2184
  // src/wallet-connect/wallet-connect.tsx
2039
- var import_react28 = __toESM(require("react"));
2185
+ var import_react31 = __toESM(require("react"));
2040
2186
  var import_appkit_react_native2 = require("@reown/appkit-react-native");
2041
2187
 
2042
2188
  // src/wallet-connect/AppKitConfig.ts
@@ -2135,7 +2281,7 @@ var createAppKitInstance = (projectId) => {
2135
2281
  // src/wallet-connect/wallet-connect.tsx
2136
2282
  var WalletConnectWrapper = ({ children }) => {
2137
2283
  const { walletConnectProjectId } = useKryptosConnect();
2138
- const appKit = import_react28.default.useMemo(() => {
2284
+ const appKit = import_react31.default.useMemo(() => {
2139
2285
  if (!walletConnectProjectId) {
2140
2286
  console.warn(
2141
2287
  "walletConnectProjectId is missing in KryptosConnectProvider config"
@@ -2145,9 +2291,9 @@ var WalletConnectWrapper = ({ children }) => {
2145
2291
  return createAppKitInstance(walletConnectProjectId);
2146
2292
  }, [walletConnectProjectId]);
2147
2293
  if (!appKit) {
2148
- return /* @__PURE__ */ import_react28.default.createElement(import_react28.default.Fragment, null, children);
2294
+ return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, children);
2149
2295
  }
2150
- return /* @__PURE__ */ import_react28.default.createElement(import_appkit_react_native2.AppKitProvider, { instance: appKit }, /* @__PURE__ */ import_react28.default.createElement(import_appkit_react_native2.AppKit, null), children);
2296
+ return /* @__PURE__ */ import_react31.default.createElement(import_appkit_react_native2.AppKitProvider, { instance: appKit }, /* @__PURE__ */ import_react31.default.createElement(import_appkit_react_native2.AppKit, null), children);
2151
2297
  };
2152
2298
  var wallet_connect_default = WalletConnectWrapper;
2153
2299
 
@@ -2159,47 +2305,48 @@ var WalletConnectComponent = ({
2159
2305
  handleClose,
2160
2306
  modalOpen,
2161
2307
  setAddIntegrationMode,
2162
- providersList
2308
+ providersList,
2309
+ errorMessage
2163
2310
  }) => {
2164
2311
  const { walletConnectProjectId } = useKryptosConnect();
2165
2312
  const theme = useTheme();
2166
2313
  if (!walletConnectProjectId) {
2167
- return /* @__PURE__ */ import_react29.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react29.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react29.default.createElement(
2168
- import_react_native14.TouchableOpacity,
2314
+ return /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.headerContent }, /* @__PURE__ */ import_react32.default.createElement(
2315
+ import_react_native16.TouchableOpacity,
2169
2316
  {
2170
2317
  onPress: () => {
2171
2318
  setAddIntegrationMode(null);
2172
2319
  },
2173
- style: styles13.backButton
2320
+ style: styles14.backButton
2174
2321
  },
2175
- /* @__PURE__ */ import_react29.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2176
- ), /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react29.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.emptyState }, /* @__PURE__ */ import_react29.default.createElement(
2177
- import_react_native14.Text,
2322
+ /* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2323
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, { scrollable: true, style: styles14.contentContainer }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.emptyState }, /* @__PURE__ */ import_react32.default.createElement(
2324
+ import_react_native16.Text,
2178
2325
  {
2179
- style: [styles13.emptyStateTitle, { color: theme.colors.text }]
2326
+ style: [styles14.emptyStateTitle, { color: theme.colors.text }]
2180
2327
  },
2181
2328
  "WalletConnect is not configured"
2182
- ), /* @__PURE__ */ import_react29.default.createElement(
2183
- import_react_native14.Text,
2329
+ ), /* @__PURE__ */ import_react32.default.createElement(
2330
+ import_react_native16.Text,
2184
2331
  {
2185
2332
  style: [
2186
- styles13.infoText,
2333
+ styles14.infoText,
2187
2334
  { color: theme.colors.textSecondary, textAlign: "center" }
2188
2335
  ]
2189
2336
  },
2190
2337
  "Please add a walletConnectProjectId to KryptosConnectProvider to enable wallet connections."
2191
- ), /* @__PURE__ */ import_react29.default.createElement(
2338
+ ), /* @__PURE__ */ import_react32.default.createElement(
2192
2339
  Button,
2193
2340
  {
2194
2341
  variant: "outline",
2195
2342
  size: "sm",
2196
2343
  onPress: () => setAddIntegrationMode(null),
2197
- style: styles13.emptyStateButton
2344
+ style: styles14.emptyStateButton
2198
2345
  },
2199
2346
  "Go back"
2200
2347
  ))));
2201
2348
  }
2202
- return /* @__PURE__ */ import_react29.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react29.default.createElement(
2349
+ return /* @__PURE__ */ import_react32.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react32.default.createElement(
2203
2350
  ConnectButton,
2204
2351
  {
2205
2352
  integration,
@@ -2208,7 +2355,8 @@ var WalletConnectComponent = ({
2208
2355
  handleClose,
2209
2356
  modalOpen,
2210
2357
  setAddIntegrationMode,
2211
- providersList
2358
+ providersList,
2359
+ errorMessage
2212
2360
  }
2213
2361
  ));
2214
2362
  };
@@ -2218,28 +2366,35 @@ function ConnectButton({
2218
2366
  handleClose,
2219
2367
  modalOpen,
2220
2368
  setAddIntegrationMode,
2221
- providersList
2369
+ providersList,
2370
+ errorMessage: errorMessageProp
2222
2371
  }) {
2223
2372
  const theme = useTheme();
2224
2373
  const { open, disconnect } = (0, import_appkit_react_native3.useAppKit)();
2225
2374
  const { address, isConnected } = (0, import_appkit_react_native3.useAccount)();
2226
2375
  const { linkToken, user, clientId } = useKryptosConnect();
2227
- const [selectedChains, setSelectedChains] = (0, import_react29.useState)(/* @__PURE__ */ new Set());
2228
- const [errorMessage, setErrorMessage] = (0, import_react29.useState)("");
2229
- const [chainErrors, setChainErrors] = (0, import_react29.useState)({});
2230
- const [isLoading, setIsLoading] = (0, import_react29.useState)(false);
2231
- const [userUsedChains, setUserUsedChains] = (0, import_react29.useState)([]);
2232
- const [isFetchingChains, setIsFetchingChains] = (0, import_react29.useState)(false);
2233
- const availableChains = (0, import_react29.useMemo)(() => {
2376
+ const [selectedChains, setSelectedChains] = (0, import_react32.useState)(/* @__PURE__ */ new Set());
2377
+ const [errorMessage, setErrorMessage] = (0, import_react32.useState)("");
2378
+ const [chainErrors, setChainErrors] = (0, import_react32.useState)({});
2379
+ const [isLoading, setIsLoading] = (0, import_react32.useState)(false);
2380
+ const [userUsedChains, setUserUsedChains] = (0, import_react32.useState)([]);
2381
+ const [isFetchingChains, setIsFetchingChains] = (0, import_react32.useState)(false);
2382
+ const availableChains = (0, import_react32.useMemo)(() => {
2234
2383
  if (userUsedChains.length > 0) {
2235
2384
  return userUsedChains;
2236
2385
  }
2237
2386
  if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2238
- return integration.walletSupportedChains;
2387
+ return integration.walletSupportedChains.filter((supportedChain) => {
2388
+ const provider = providersList.find(
2389
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2390
+ (p) => p.id === supportedChain.id
2391
+ );
2392
+ return provider && provider.is_working === true && provider.isEvmWallet === true;
2393
+ });
2239
2394
  }
2240
2395
  return [];
2241
- }, [userUsedChains, integration.walletSupportedChains]);
2242
- (0, import_react29.useEffect)(() => {
2396
+ }, [userUsedChains, integration.walletSupportedChains, providersList]);
2397
+ (0, import_react32.useEffect)(() => {
2243
2398
  if (!isConnected || !address || !address.trim()) {
2244
2399
  setUserUsedChains([]);
2245
2400
  setSelectedChains(/* @__PURE__ */ new Set());
@@ -2258,7 +2413,16 @@ function ConnectButton({
2258
2413
  }
2259
2414
  }
2260
2415
  if (chains.length === 0 && integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2261
- chains = integration.walletSupportedChains;
2416
+ chains = integration.walletSupportedChains.filter(
2417
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2418
+ (supportedChain) => {
2419
+ const provider = providersList.find(
2420
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2421
+ (p) => p.id === supportedChain.id
2422
+ );
2423
+ return provider && provider.is_working === true && provider.isEvmWallet === true;
2424
+ }
2425
+ );
2262
2426
  }
2263
2427
  if (chains.length > 0) {
2264
2428
  setUserUsedChains(chains);
@@ -2270,11 +2434,21 @@ function ConnectButton({
2270
2434
  } catch (error) {
2271
2435
  console.error("Failed to fetch user chains:", error);
2272
2436
  if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2273
- setUserUsedChains(integration.walletSupportedChains);
2437
+ const validChains = integration.walletSupportedChains.filter(
2438
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2439
+ (supportedChain) => {
2440
+ const provider = providersList.find(
2441
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2442
+ (p) => p.id === supportedChain.id
2443
+ );
2444
+ return provider && provider.is_working === true && provider.isEvmWallet === true;
2445
+ }
2446
+ );
2447
+ setUserUsedChains(validChains);
2274
2448
  setSelectedChains(
2275
2449
  new Set(
2276
2450
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2277
- integration.walletSupportedChains.map((chain) => chain.id)
2451
+ validChains.map((chain) => chain.id)
2278
2452
  )
2279
2453
  );
2280
2454
  } else {
@@ -2294,7 +2468,8 @@ function ConnectButton({
2294
2468
  address,
2295
2469
  isConnected,
2296
2470
  integration.isEvmWallet,
2297
- integration.walletSupportedChains
2471
+ integration.walletSupportedChains,
2472
+ providersList
2298
2473
  ]);
2299
2474
  const validateForm = () => {
2300
2475
  if (!address) {
@@ -2321,7 +2496,7 @@ function ConnectButton({
2321
2496
  const walletTestsPayload = chainsToProcess.map((chain) => {
2322
2497
  const walletId = generateUUID();
2323
2498
  const displaySuffix = address ? address?.length > 8 ? `${address.slice(0, 4)}...${address.slice(-4)}` : address : "";
2324
- const alias = `${chain.id} (${displaySuffix})`;
2499
+ const alias = `${integration.public_name} (${displaySuffix})`;
2325
2500
  const provider = providersList.find((p) => p.id === chain.id);
2326
2501
  return {
2327
2502
  chain,
@@ -2331,11 +2506,11 @@ function ConnectButton({
2331
2506
  source: provider?.id,
2332
2507
  credential: {
2333
2508
  address,
2334
- userId: user?.user_id || "0",
2509
+ userId: user?.user_id || "",
2335
2510
  projectId: provider?.projectId,
2336
- apiKey: "0",
2337
- secret: "0",
2338
- privateKey: "0",
2511
+ apiKey: "",
2512
+ secret: "",
2513
+ privateKey: "",
2339
2514
  alias,
2340
2515
  walletId,
2341
2516
  exchange: provider?.id
@@ -2369,14 +2544,14 @@ function ConnectButton({
2369
2544
  clientId,
2370
2545
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2371
2546
  },
2372
- metadata: {
2373
- environment: "sandbox"
2374
- },
2375
2547
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2376
- default_chain: provider.id,
2377
- default_chain_logo: null,
2378
- type: provider.type,
2379
- isNftSupported: provider.isEvmWallet || provider.nftSupport || false
2548
+ default_chain: integration?.id || "",
2549
+ default_chain_logo: integration?.logo || "",
2550
+ type: provider.type || "",
2551
+ isNftSupported: provider?.isEvmWallet || provider?.nftSupport || false,
2552
+ isCustomWallet: false,
2553
+ chainId: provider?.community_id,
2554
+ address: address?.trim()
2380
2555
  };
2381
2556
  integrationsToAdd.push(data);
2382
2557
  } else {
@@ -2395,7 +2570,10 @@ function ConnectButton({
2395
2570
  return;
2396
2571
  }
2397
2572
  if (integrationsToAdd.length > 0) {
2398
- onAddHandle(integrationsToAdd);
2573
+ await onAddHandle(integrationsToAdd);
2574
+ if (isConnected) {
2575
+ disconnect();
2576
+ }
2399
2577
  setChainErrors({});
2400
2578
  setErrorMessage("");
2401
2579
  } else {
@@ -2405,7 +2583,7 @@ function ConnectButton({
2405
2583
  const err = error;
2406
2584
  console.error(error);
2407
2585
  setErrorMessage(
2408
- err?.response?.data?.message || "Failed to add integration"
2586
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to add integrations"
2409
2587
  );
2410
2588
  } finally {
2411
2589
  setIsLoading(false);
@@ -2425,16 +2603,41 @@ function ConnectButton({
2425
2603
  setChainErrors(newErrors);
2426
2604
  }
2427
2605
  };
2428
- return /* @__PURE__ */ import_react29.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react29.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react29.default.createElement(
2429
- import_react_native14.TouchableOpacity,
2606
+ const onClose = () => {
2607
+ if (isConnected) {
2608
+ disconnect();
2609
+ }
2610
+ handleClose();
2611
+ };
2612
+ return /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: modalOpen, onClose, size: "full" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.headerContent }, /* @__PURE__ */ import_react32.default.createElement(
2613
+ import_react_native16.TouchableOpacity,
2430
2614
  {
2431
2615
  onPress: () => {
2432
2616
  setAddIntegrationMode(null);
2617
+ if (isConnected) {
2618
+ disconnect();
2619
+ }
2433
2620
  },
2434
- style: styles13.backButton
2621
+ style: styles14.backButton
2435
2622
  },
2436
- /* @__PURE__ */ import_react29.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2437
- ), /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react29.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, !isConnected ? /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, null, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.infoText, { color: theme.colors.text }] }, "Connect your wallet to continue"), /* @__PURE__ */ import_react29.default.createElement(
2623
+ /* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2624
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, { scrollable: true, style: styles14.contentContainer }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.header }, integration.logo ? isSvgUrl(integration.logo) ? /* @__PURE__ */ import_react32.default.createElement(RemoteSvg, { uri: integration.logo }) : /* @__PURE__ */ import_react32.default.createElement(
2625
+ import_react_native16.Image,
2626
+ {
2627
+ source: { uri: integration.logo },
2628
+ style: styles14.logo,
2629
+ resizeMode: "contain"
2630
+ }
2631
+ ) : /* @__PURE__ */ import_react32.default.createElement(
2632
+ import_react_native16.View,
2633
+ {
2634
+ style: [
2635
+ styles14.logoPlaceholder,
2636
+ { backgroundColor: theme.colors.surface }
2637
+ ]
2638
+ },
2639
+ /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: { color: theme.colors.text } }, integration.name?.charAt(0) || "?")
2640
+ ), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.name, { color: theme.colors.text }] }, integration.name)), !isConnected ? /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.infoText, { color: theme.colors.text }] }, "Connect your wallet to continue"), /* @__PURE__ */ import_react32.default.createElement(
2438
2641
  Button,
2439
2642
  {
2440
2643
  variant: "primary",
@@ -2442,111 +2645,132 @@ function ConnectButton({
2442
2645
  onPress: () => open({ view: "Connect" })
2443
2646
  },
2444
2647
  "Connect Wallet"
2445
- )) : /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.connectedContainer }, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.connectedHeader }, /* @__PURE__ */ import_react29.default.createElement(
2446
- import_react_native14.Text,
2648
+ )) : /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.connectedContainer }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.connectedHeader }, /* @__PURE__ */ import_react32.default.createElement(
2649
+ import_react_native16.Text,
2447
2650
  {
2448
- style: [styles13.connectedTitle, { color: theme.colors.text }]
2651
+ style: [styles14.connectedTitle, { color: theme.colors.text }]
2449
2652
  },
2450
2653
  "Wallet Connected"
2451
- ), /* @__PURE__ */ import_react29.default.createElement(
2452
- import_react_native14.Text,
2654
+ ), /* @__PURE__ */ import_react32.default.createElement(
2655
+ import_react_native16.Text,
2453
2656
  {
2454
- style: [styles13.connectedText, { color: theme.colors.text }]
2657
+ style: [styles14.connectedText, { color: theme.colors.text }]
2455
2658
  },
2456
2659
  "Address: ",
2457
2660
  address
2458
- ), /* @__PURE__ */ import_react29.default.createElement(Button, { variant: "ghost", size: "sm", onPress: () => disconnect() }, "Disconnect Wallet"), isFetchingChains ? /* @__PURE__ */ import_react29.default.createElement(
2459
- import_react_native14.Text,
2661
+ ), /* @__PURE__ */ import_react32.default.createElement(Button, { variant: "ghost", size: "sm", onPress: () => disconnect() }, "Disconnect Wallet"), isFetchingChains ? /* @__PURE__ */ import_react32.default.createElement(
2662
+ import_react_native16.Text,
2460
2663
  {
2461
- style: [styles13.fetchingText, { color: theme.colors.text }]
2664
+ style: [styles14.fetchingText, { color: theme.colors.text }]
2462
2665
  },
2463
2666
  "Fetching chains..."
2464
- ) : null), availableChains.length > 0 && address && /* @__PURE__ */ import_react29.default.createElement(
2465
- import_react_native14.ScrollView,
2466
- {
2467
- style: styles13.scrollView,
2468
- contentContainerStyle: styles13.scrollViewContent,
2469
- showsVerticalScrollIndicator: true,
2470
- nestedScrollEnabled: true
2471
- },
2472
- /* @__PURE__ */ import_react29.default.createElement(import_react_native14.Text, { style: [styles13.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"),
2473
- /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, null, /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.chainChips }, availableChains.map((chain) => {
2474
- const isSelected = selectedChains.has(chain.id);
2475
- const hasError = chainErrors[chain.id];
2476
- return /* @__PURE__ */ import_react29.default.createElement(
2477
- import_react_native14.TouchableOpacity,
2667
+ ) : null), availableChains.length > 0 && address && /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainListWrapper }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.Text, { style: [styles14.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainListContent }, /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainChips }, availableChains.map((chain) => {
2668
+ const isSelected = selectedChains.has(chain.id);
2669
+ const hasError = chainErrors[chain.id];
2670
+ return /* @__PURE__ */ import_react32.default.createElement(
2671
+ import_react_native16.TouchableOpacity,
2672
+ {
2673
+ onPress: () => toggleChainSelection(chain.id),
2674
+ style: styles14.chainButton,
2675
+ key: chain.id
2676
+ },
2677
+ /* @__PURE__ */ import_react32.default.createElement(
2678
+ import_react_native16.View,
2478
2679
  {
2479
- onPress: () => toggleChainSelection(chain.id),
2480
- style: styles13.chainButton,
2481
- key: chain.id
2680
+ style: [
2681
+ styles14.chainChip,
2682
+ {
2683
+ backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
2684
+ borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
2685
+ }
2686
+ ]
2482
2687
  },
2483
- /* @__PURE__ */ import_react29.default.createElement(
2484
- import_react_native14.View,
2688
+ /* @__PURE__ */ import_react32.default.createElement(
2689
+ import_react_native16.Text,
2485
2690
  {
2486
2691
  style: [
2487
- styles13.chainChip,
2692
+ styles14.chainName,
2488
2693
  {
2489
- backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
2490
- borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
2694
+ color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
2491
2695
  }
2492
2696
  ]
2493
2697
  },
2494
- /* @__PURE__ */ import_react29.default.createElement(
2495
- import_react_native14.Text,
2496
- {
2497
- style: [
2498
- styles13.chainName,
2499
- {
2500
- color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
2501
- }
2502
- ]
2503
- },
2504
- chain.id
2505
- ),
2506
- isSelected ? /* @__PURE__ */ import_react29.default.createElement(
2507
- CloseIcon,
2508
- {
2509
- size: 12,
2510
- color: hasError ? theme.colors.error : theme.colors.primary
2511
- }
2512
- ) : /* @__PURE__ */ import_react29.default.createElement(
2513
- PlusIcon,
2514
- {
2515
- size: 12,
2516
- color: theme.colors.textSecondary
2517
- }
2518
- )
2698
+ chain.name || chain?.id
2699
+ ),
2700
+ isSelected ? /* @__PURE__ */ import_react32.default.createElement(
2701
+ CloseIcon,
2702
+ {
2703
+ size: 12,
2704
+ color: hasError ? theme.colors.error : theme.colors.primary
2705
+ }
2706
+ ) : /* @__PURE__ */ import_react32.default.createElement(
2707
+ PlusIcon,
2708
+ {
2709
+ size: 12,
2710
+ color: theme.colors.textSecondary
2711
+ }
2519
2712
  )
2520
- );
2521
- })), errorMessage ? /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.errorMessageContainer }, /* @__PURE__ */ import_react29.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react29.default.createElement(AlertDescription, null, errorMessage))) : null, Object.keys(chainErrors || {}).length > 0 && /* @__PURE__ */ import_react29.default.createElement(import_react_native14.View, { style: styles13.chainErrorsContainer }, /* @__PURE__ */ import_react29.default.createElement(
2522
- import_react_native14.Text,
2713
+ )
2714
+ );
2715
+ })), selectedChains.size > 0 && availableChains.length > 0 && /* @__PURE__ */ import_react32.default.createElement(
2716
+ import_react_native16.TouchableOpacity,
2717
+ {
2718
+ onPress: () => setSelectedChains(/* @__PURE__ */ new Set()),
2719
+ style: styles14.chainButton,
2720
+ activeOpacity: 0.7
2721
+ },
2722
+ /* @__PURE__ */ import_react32.default.createElement(
2723
+ import_react_native16.View,
2523
2724
  {
2524
2725
  style: [
2525
- styles13.chainErrorsTitle,
2526
- { color: theme.colors.error }
2726
+ styles14.chainChip,
2727
+ styles14.chainChipRemoveAll,
2728
+ {
2729
+ borderWidth: 0,
2730
+ backgroundColor: "transparent"
2731
+ }
2527
2732
  ]
2528
2733
  },
2529
- "Errors:"
2530
- ), Object.entries(chainErrors).map(([chainId, error]) => {
2531
- const chain = availableChains.find(
2532
- (c) => c.id === chainId
2533
- );
2534
- return /* @__PURE__ */ import_react29.default.createElement(
2535
- import_react_native14.Text,
2734
+ /* @__PURE__ */ import_react32.default.createElement(
2735
+ import_react_native16.Text,
2536
2736
  {
2537
- key: chainId,
2538
2737
  style: [
2539
- styles13.chainErrorItem,
2540
- { color: theme.colors.error }
2738
+ styles14.chainName,
2739
+ { color: theme.colors.primary }
2541
2740
  ]
2542
2741
  },
2543
- "\u2022 ",
2544
- chain?.name ?? chainId,
2545
- ": ",
2546
- String(error)
2547
- );
2548
- })))
2549
- ))), availableChains.length > 0 && address && /* @__PURE__ */ import_react29.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react29.default.createElement(
2742
+ "Remove All Chains"
2743
+ ),
2744
+ /* @__PURE__ */ import_react32.default.createElement(CloseIcon, { size: 12, color: theme.colors.primary })
2745
+ )
2746
+ ), Object.keys(chainErrors || {}).length > 0 && /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.chainErrorsContainer }, /* @__PURE__ */ import_react32.default.createElement(
2747
+ import_react_native16.Text,
2748
+ {
2749
+ style: [
2750
+ styles14.chainErrorsTitle,
2751
+ { color: theme.colors.error }
2752
+ ]
2753
+ },
2754
+ "Errors:"
2755
+ ), Object.entries(chainErrors).map(([chainId, error]) => {
2756
+ const chain = availableChains.find(
2757
+ (c) => c.id === chainId
2758
+ );
2759
+ return /* @__PURE__ */ import_react32.default.createElement(
2760
+ import_react_native16.Text,
2761
+ {
2762
+ key: chainId,
2763
+ style: [
2764
+ styles14.chainErrorItem,
2765
+ { color: theme.colors.error }
2766
+ ]
2767
+ },
2768
+ "\u2022 ",
2769
+ chain?.name ?? chainId,
2770
+ ": ",
2771
+ String(error)
2772
+ );
2773
+ })))), errorMessage || errorMessageProp ? /* @__PURE__ */ import_react32.default.createElement(import_react_native16.View, { style: styles14.errorMessageContainer }, /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, errorMessage || errorMessageProp))) : null)), /* @__PURE__ */ import_react32.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, availableChains.length > 0 && address && /* @__PURE__ */ import_react32.default.createElement(
2550
2774
  Button,
2551
2775
  {
2552
2776
  variant: "outline",
@@ -2554,14 +2778,20 @@ function ConnectButton({
2554
2778
  onPress: onSubmitWalletConnect,
2555
2779
  loading: isLoading,
2556
2780
  disabled: isLoading || !!address && availableChains.length > 0 && selectedChains.size === 0,
2557
- style: styles13.button
2781
+ style: styles14.button
2558
2782
  },
2559
2783
  selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size > 1 ? "s" : ""}` : "Add Integration"
2560
- ), /* @__PURE__ */ import_react29.default.createElement(Footer, null)));
2784
+ ), /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
2561
2785
  }
2562
- var styles13 = import_react_native14.StyleSheet.create({
2786
+ var styles14 = import_react_native16.StyleSheet.create({
2563
2787
  connectedContainer: {
2564
- flex: 1
2788
+ flexShrink: 0
2789
+ },
2790
+ chainListWrapper: {
2791
+ marginTop: 8
2792
+ },
2793
+ chainListContent: {
2794
+ paddingBottom: 8
2565
2795
  },
2566
2796
  connectedHeader: {
2567
2797
  marginBottom: 8
@@ -2575,13 +2805,6 @@ var styles13 = import_react_native14.StyleSheet.create({
2575
2805
  marginBottom: 8,
2576
2806
  textAlign: "center"
2577
2807
  },
2578
- scrollView: {
2579
- flex: 1
2580
- },
2581
- scrollViewContent: {
2582
- paddingBottom: 40,
2583
- flexGrow: 1
2584
- },
2585
2808
  errorMessageContainer: {
2586
2809
  marginTop: 16
2587
2810
  },
@@ -2605,10 +2828,8 @@ var styles13 = import_react_native14.StyleSheet.create({
2605
2828
  // theme.spacing.xl
2606
2829
  paddingBottom: 20,
2607
2830
  width: "100%",
2608
- overflow: "hidden",
2609
2831
  alignSelf: "center",
2610
- flexDirection: "column",
2611
- flex: 1
2832
+ flexDirection: "column"
2612
2833
  },
2613
2834
  chainTitle: {
2614
2835
  fontSize: 14,
@@ -2623,93 +2844,404 @@ var styles13 = import_react_native14.StyleSheet.create({
2623
2844
  gap: 6
2624
2845
  // theme.spacing.sm
2625
2846
  },
2626
- chainChip: {
2847
+ chainChip: {
2848
+ flexDirection: "row",
2849
+ alignItems: "center",
2850
+ paddingHorizontal: 8,
2851
+ // theme.spacing.sm
2852
+ paddingVertical: 5,
2853
+ // theme.spacing.xs
2854
+ borderRadius: 12,
2855
+ // theme.borderRadius.md
2856
+ borderWidth: 1
2857
+ },
2858
+ chainChipRemoveAll: {
2859
+ marginTop: 6,
2860
+ // theme.spacing.sm - separate from chain list
2861
+ width: "auto"
2862
+ },
2863
+ chainName: {
2864
+ fontSize: 12,
2865
+ fontWeight: "500",
2866
+ marginRight: 6
2867
+ // theme.spacing.xs
2868
+ },
2869
+ chainButton: {
2870
+ padding: 2
2871
+ // theme.spacing.xs
2872
+ },
2873
+ chainErrorsContainer: {
2874
+ marginTop: 12
2875
+ // theme.spacing.md - consistent spacing
2876
+ },
2877
+ chainErrorsTitle: {
2878
+ fontSize: 13,
2879
+ fontWeight: "500",
2880
+ marginBottom: 4
2881
+ // theme.spacing.xs
2882
+ },
2883
+ chainErrorItem: {
2884
+ fontSize: 12,
2885
+ // theme.fontSize.sm
2886
+ marginBottom: 4
2887
+ // theme.spacing.xs
2888
+ },
2889
+ button: {
2890
+ width: "100%"
2891
+ },
2892
+ emptyState: {
2893
+ flex: 1,
2894
+ alignItems: "center",
2895
+ justifyContent: "center",
2896
+ gap: 12
2897
+ },
2898
+ emptyStateTitle: {
2899
+ fontSize: 18,
2900
+ fontWeight: "600"
2901
+ },
2902
+ emptyStateButton: {
2903
+ marginTop: 8
2904
+ },
2905
+ header: {
2906
+ flexDirection: "row",
2907
+ justifyContent: "center",
2908
+ alignItems: "center",
2909
+ marginBottom: 16
2910
+ // theme.spacing.lg
2911
+ },
2912
+ logo: {
2913
+ width: 32,
2914
+ height: 32,
2915
+ borderRadius: 8
2916
+ // theme.borderRadius.sm
2917
+ },
2918
+ logoPlaceholder: {
2919
+ width: 32,
2920
+ height: 32,
2921
+ borderRadius: 8,
2922
+ // theme.borderRadius.sm
2923
+ alignItems: "center",
2924
+ justifyContent: "center"
2925
+ },
2926
+ name: {
2927
+ fontSize: 16,
2928
+ // theme.fontSize.lg
2929
+ fontWeight: "600",
2930
+ marginLeft: 12,
2931
+ // theme.spacing.md
2932
+ textTransform: "capitalize"
2933
+ }
2934
+ });
2935
+
2936
+ // src/molecules/IntegrationForm.tsx
2937
+ var import_react34 = __toESM(require("react"));
2938
+ var import_react_native18 = require("react-native");
2939
+
2940
+ // src/molecules/IntegrationInfo.tsx
2941
+ var import_react33 = __toESM(require("react"));
2942
+ var import_react_native17 = require("react-native");
2943
+ var ChevronDown = ({ isOpen, color }) => /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.chevron, { color }] }, isOpen ? "\u25BC" : "\u25B6");
2944
+ var IntegrationInfo = ({
2945
+ content,
2946
+ type,
2947
+ import_guide
2948
+ }) => {
2949
+ const theme = useTheme();
2950
+ const instructionsData = (0, import_react33.useMemo)(
2951
+ () => content?.instructions?.[type] || null,
2952
+ [content, type]
2953
+ );
2954
+ const featuresData = (0, import_react33.useMemo)(
2955
+ () => content?.features?.[type] || [],
2956
+ [content, type]
2957
+ );
2958
+ const gtkData = (0, import_react33.useMemo)(() => content?.gtk?.[type] || [], [content, type]);
2959
+ const hasInstructions = instructionsData && (instructionsData?.content?.length ?? 0) > 0;
2960
+ const hasFeatures = (featuresData?.length ?? 0) > 0;
2961
+ const hasGtk = (gtkData?.length ?? 0) > 0;
2962
+ const defaultSection = hasInstructions ? "instructions" : hasGtk ? "good-to-know" : hasFeatures ? "supported-features" : null;
2963
+ const [openSection, setOpenSection] = (0, import_react33.useState)(defaultSection);
2964
+ const toggleSection = (value) => {
2965
+ setOpenSection((prev) => prev === value ? null : value);
2966
+ };
2967
+ const handleImportGuidePress = () => {
2968
+ if (import_guide) import_react_native17.Linking.openURL(import_guide);
2969
+ };
2970
+ if (!hasInstructions && !hasFeatures && !hasGtk && !import_guide) {
2971
+ return null;
2972
+ }
2973
+ return /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.container }, import_guide && /* @__PURE__ */ import_react33.default.createElement(
2974
+ import_react_native17.TouchableOpacity,
2975
+ {
2976
+ onPress: handleImportGuidePress,
2977
+ style: [styles15.importGuide, { borderColor: theme.colors.primary }],
2978
+ activeOpacity: 0.7
2979
+ },
2980
+ /* @__PURE__ */ import_react33.default.createElement(
2981
+ import_react_native17.Text,
2982
+ {
2983
+ style: [styles15.importGuideText, { color: theme.colors.primary }]
2984
+ },
2985
+ "Import Guide"
2986
+ ),
2987
+ /* @__PURE__ */ import_react33.default.createElement(RedirectIcon, { width: 14, height: 14, color: theme.colors.primary })
2988
+ ), hasInstructions && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
2989
+ import_react_native17.TouchableOpacity,
2990
+ {
2991
+ onPress: () => toggleSection("instructions"),
2992
+ style: [
2993
+ styles15.trigger,
2994
+ {
2995
+ borderBottomColor: theme.colors.border,
2996
+ backgroundColor: theme.colors.surface
2997
+ }
2998
+ ],
2999
+ activeOpacity: 0.7
3000
+ },
3001
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Instructions"),
3002
+ /* @__PURE__ */ import_react33.default.createElement(
3003
+ ChevronDown,
3004
+ {
3005
+ isOpen: openSection === "instructions",
3006
+ color: theme.colors.textSecondary
3007
+ }
3008
+ )
3009
+ ), openSection === "instructions" && /* @__PURE__ */ import_react33.default.createElement(
3010
+ import_react_native17.View,
3011
+ {
3012
+ style: [
3013
+ styles15.content,
3014
+ {
3015
+ backgroundColor: theme.colors.background,
3016
+ borderBottomColor: theme.colors.border
3017
+ }
3018
+ ]
3019
+ },
3020
+ instructionsData?.content && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, instructionsData.content.map(
3021
+ (step, index) => /* @__PURE__ */ import_react33.default.createElement(
3022
+ import_react_native17.Text,
3023
+ {
3024
+ key: index,
3025
+ style: [
3026
+ styles15.listItem,
3027
+ styles15.orderedItem,
3028
+ { color: theme.colors.textSecondary }
3029
+ ]
3030
+ },
3031
+ index + 1,
3032
+ ". ",
3033
+ step
3034
+ )
3035
+ )),
3036
+ instructionsData?.videoLink && /* @__PURE__ */ import_react33.default.createElement(
3037
+ import_react_native17.TouchableOpacity,
3038
+ {
3039
+ onPress: () => import_react_native17.Linking.openURL(instructionsData.videoLink),
3040
+ style: styles15.videoLink,
3041
+ activeOpacity: 0.7
3042
+ },
3043
+ /* @__PURE__ */ import_react33.default.createElement(
3044
+ import_react_native17.Text,
3045
+ {
3046
+ style: [
3047
+ styles15.videoLinkText,
3048
+ { color: theme.colors.primary }
3049
+ ]
3050
+ },
3051
+ "\u25B6 Watch Video Tutorial"
3052
+ )
3053
+ )
3054
+ )), hasGtk && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
3055
+ import_react_native17.TouchableOpacity,
3056
+ {
3057
+ onPress: () => toggleSection("good-to-know"),
3058
+ style: [
3059
+ styles15.trigger,
3060
+ {
3061
+ borderBottomColor: theme.colors.border,
3062
+ backgroundColor: theme.colors.surface
3063
+ }
3064
+ ],
3065
+ activeOpacity: 0.7
3066
+ },
3067
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Good to know"),
3068
+ /* @__PURE__ */ import_react33.default.createElement(
3069
+ ChevronDown,
3070
+ {
3071
+ isOpen: openSection === "good-to-know",
3072
+ color: theme.colors.textSecondary
3073
+ }
3074
+ )
3075
+ ), openSection === "good-to-know" && /* @__PURE__ */ import_react33.default.createElement(
3076
+ import_react_native17.View,
3077
+ {
3078
+ style: [
3079
+ styles15.content,
3080
+ {
3081
+ backgroundColor: theme.colors.background,
3082
+ borderBottomColor: theme.colors.border
3083
+ }
3084
+ ]
3085
+ },
3086
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, gtkData.map((item, index) => /* @__PURE__ */ import_react33.default.createElement(
3087
+ import_react_native17.Text,
3088
+ {
3089
+ key: index,
3090
+ style: [
3091
+ styles15.listItem,
3092
+ styles15.bulletItem,
3093
+ { color: theme.colors.textSecondary }
3094
+ ]
3095
+ },
3096
+ "\u2022 ",
3097
+ item
3098
+ )))
3099
+ )), hasFeatures && /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.accordionItem }, /* @__PURE__ */ import_react33.default.createElement(
3100
+ import_react_native17.TouchableOpacity,
3101
+ {
3102
+ onPress: () => toggleSection("supported-features"),
3103
+ style: [
3104
+ styles15.trigger,
3105
+ {
3106
+ borderBottomColor: theme.colors.border,
3107
+ backgroundColor: theme.colors.surface
3108
+ }
3109
+ ],
3110
+ activeOpacity: 0.7
3111
+ },
3112
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.Text, { style: [styles15.triggerText, { color: theme.colors.text }] }, "Supported Features"),
3113
+ /* @__PURE__ */ import_react33.default.createElement(
3114
+ ChevronDown,
3115
+ {
3116
+ isOpen: openSection === "supported-features",
3117
+ color: theme.colors.textSecondary
3118
+ }
3119
+ )
3120
+ ), openSection === "supported-features" && /* @__PURE__ */ import_react33.default.createElement(
3121
+ import_react_native17.View,
3122
+ {
3123
+ style: [
3124
+ styles15.content,
3125
+ {
3126
+ backgroundColor: theme.colors.background,
3127
+ borderBottomColor: theme.colors.border
3128
+ }
3129
+ ]
3130
+ },
3131
+ /* @__PURE__ */ import_react33.default.createElement(import_react_native17.View, { style: styles15.list }, featuresData.map((feature, index) => /* @__PURE__ */ import_react33.default.createElement(
3132
+ import_react_native17.Text,
3133
+ {
3134
+ key: index,
3135
+ style: [
3136
+ styles15.listItem,
3137
+ styles15.bulletItem,
3138
+ { color: theme.colors.textSecondary }
3139
+ ]
3140
+ },
3141
+ "\u2022 ",
3142
+ feature
3143
+ )))
3144
+ )));
3145
+ };
3146
+ var styles15 = import_react_native17.StyleSheet.create({
3147
+ container: {
3148
+ marginTop: 8
3149
+ },
3150
+ importGuide: {
3151
+ flexDirection: "row",
3152
+ alignItems: "center",
3153
+ alignSelf: "flex-end",
3154
+ gap: 4,
3155
+ paddingVertical: 6,
3156
+ paddingHorizontal: 8,
3157
+ marginBottom: 8
3158
+ },
3159
+ importGuideText: {
3160
+ fontSize: 14,
3161
+ fontWeight: "500"
3162
+ },
3163
+ accordionItem: {
3164
+ marginBottom: 4,
3165
+ borderRadius: 8,
3166
+ overflow: "hidden"
3167
+ },
3168
+ trigger: {
2627
3169
  flexDirection: "row",
2628
3170
  alignItems: "center",
2629
- paddingHorizontal: 8,
2630
- // theme.spacing.sm
2631
- paddingVertical: 5,
2632
- // theme.spacing.xs
2633
- borderRadius: 12,
2634
- // theme.borderRadius.md
2635
- borderWidth: 1
3171
+ justifyContent: "space-between",
3172
+ paddingVertical: 12,
3173
+ paddingHorizontal: 16,
3174
+ borderBottomWidth: 1
2636
3175
  },
2637
- chainName: {
2638
- fontSize: 12,
2639
- fontWeight: "500",
2640
- marginRight: 6
2641
- // theme.spacing.xs
3176
+ triggerText: {
3177
+ fontSize: 14,
3178
+ fontWeight: "600"
2642
3179
  },
2643
- chainButton: {
2644
- padding: 2
2645
- // theme.spacing.xs
3180
+ chevron: {
3181
+ fontSize: 12
2646
3182
  },
2647
- chainErrorsContainer: {
2648
- marginTop: 12
2649
- // theme.spacing.md - consistent spacing
3183
+ content: {
3184
+ paddingVertical: 12,
3185
+ paddingHorizontal: 16,
3186
+ borderBottomWidth: 1
2650
3187
  },
2651
- chainErrorsTitle: {
2652
- fontSize: 13,
2653
- fontWeight: "500",
2654
- marginBottom: 4
2655
- // theme.spacing.xs
3188
+ list: {
3189
+ paddingLeft: 4
2656
3190
  },
2657
- chainErrorItem: {
2658
- fontSize: 12,
2659
- // theme.fontSize.sm
2660
- marginBottom: 4
2661
- // theme.spacing.xs
3191
+ listItem: {
3192
+ fontSize: 13,
3193
+ lineHeight: 20,
3194
+ marginBottom: 6
2662
3195
  },
2663
- button: {
2664
- width: "100%"
3196
+ orderedItem: {
3197
+ marginLeft: 0
2665
3198
  },
2666
- emptyState: {
2667
- flex: 1,
2668
- alignItems: "center",
2669
- justifyContent: "center",
2670
- gap: 12
3199
+ bulletItem: {
3200
+ marginLeft: 0
2671
3201
  },
2672
- emptyStateTitle: {
2673
- fontSize: 18,
2674
- fontWeight: "600"
3202
+ videoLink: {
3203
+ marginTop: 8,
3204
+ paddingVertical: 8,
3205
+ paddingHorizontal: 12
2675
3206
  },
2676
- emptyStateButton: {
2677
- marginTop: 8
3207
+ videoLinkText: {
3208
+ fontSize: 13,
3209
+ fontWeight: "500"
2678
3210
  }
2679
3211
  });
2680
3212
 
2681
3213
  // src/molecules/IntegrationForm.tsx
2682
- var import_react30 = __toESM(require("react"));
2683
- var import_react_native15 = require("react-native");
2684
3214
  var IntegrationForm = ({
2685
3215
  metadata,
2686
3216
  onAddHandle,
2687
3217
  open,
2688
3218
  setAddIntegrationMode,
2689
3219
  handleClose,
2690
- providersList
3220
+ providersList,
3221
+ errorMessage: errorMessageProp,
3222
+ showBackButton = true
2691
3223
  }) => {
2692
3224
  const { clientId, linkToken, user } = useKryptosConnect();
2693
3225
  const theme = useTheme();
2694
- const [isLoading, setIsLoading] = import_react30.default.useState(false);
2695
- const [isFetchingChains, setIsFetchingChains] = import_react30.default.useState(false);
2696
- const [userUsedChains, setUserUsedChains] = import_react30.default.useState([]);
2697
- const [selectedChains, setSelectedChains] = import_react30.default.useState(
3226
+ const [isLoading, setIsLoading] = import_react34.default.useState(false);
3227
+ const [isFetchingChains, setIsFetchingChains] = import_react34.default.useState(false);
3228
+ const [userUsedChains, setUserUsedChains] = import_react34.default.useState([]);
3229
+ const [selectedChains, setSelectedChains] = import_react34.default.useState(
2698
3230
  /* @__PURE__ */ new Set()
2699
3231
  );
2700
- const [chainErrors, setChainErrors] = import_react30.default.useState(
3232
+ const [chainErrors, setChainErrors] = import_react34.default.useState(
2701
3233
  {}
2702
3234
  );
2703
- const [errorMessage, setErrorMessage] = import_react30.default.useState("");
2704
- const [formValues, setFormValues] = import_react30.default.useState({
3235
+ const [errorMessage, setErrorMessage] = import_react34.default.useState("");
3236
+ const [formValues, setFormValues] = import_react34.default.useState({
2705
3237
  address: "",
2706
3238
  account_name: "",
2707
3239
  api_key: "",
2708
3240
  secret_key: "",
2709
3241
  password: ""
2710
3242
  });
2711
- const [formErrors, setFormErrors] = import_react30.default.useState({});
2712
- import_react30.default.useEffect(() => {
3243
+ const [formErrors, setFormErrors] = import_react34.default.useState({});
3244
+ import_react34.default.useEffect(() => {
2713
3245
  if (!formValues.address || !formValues.address.trim()) {
2714
3246
  setUserUsedChains([]);
2715
3247
  setSelectedChains(/* @__PURE__ */ new Set());
@@ -2792,18 +3324,18 @@ var IntegrationForm = ({
2792
3324
  const credentialTestsData = chainsToProcess.map((chain) => {
2793
3325
  const walletId = generateUUID();
2794
3326
  const displaySuffix = primaryField.length >= 8 ? `${primaryField.slice(0, 4)}...${primaryField.slice(-4)}` : primaryField;
2795
- const alias = `${metadata.id} - ${chain.name} (${displaySuffix})`;
3327
+ const alias = `${metadata.id} - ${chain?.name || ""} (${displaySuffix})`;
2796
3328
  const credential = {
2797
3329
  source: metadata.id,
2798
3330
  credential: {
2799
- apiKey: formValues.api_key?.trim() || "0",
2800
- secret: formValues.secret_key?.trim() || "0",
2801
- accountName: formValues.account_name?.trim() || "0",
2802
- address: formValues.address?.trim() || "0",
2803
- password: formValues.password?.trim() || "0",
2804
- userId: user?.user_id || "0",
2805
- projectId: metadata?.projectId || "0",
2806
- privateKey: "0",
3331
+ apiKey: formValues.api_key?.trim() || "",
3332
+ secret: formValues.secret_key?.trim() || "",
3333
+ accountName: formValues.account_name?.trim() || "",
3334
+ address: formValues.address?.trim() || "",
3335
+ password: formValues.password?.trim() || "",
3336
+ userId: user?.user_id || "",
3337
+ projectId: metadata?.projectId || "",
3338
+ privateKey: "",
2807
3339
  alias,
2808
3340
  walletId,
2809
3341
  exchange: metadata.id
@@ -2835,16 +3367,14 @@ var IntegrationForm = ({
2835
3367
  clientId,
2836
3368
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2837
3369
  },
2838
- metadata: {
2839
- environment: "sandbox"
2840
- },
2841
3370
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2842
3371
  default_chain: chain.name,
2843
- default_chain_logo: chain.logo || null,
3372
+ default_chain_logo: "",
2844
3373
  type: metadata.type,
2845
3374
  isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
2846
3375
  chainId: chain?.community_id || "",
2847
- address: formValues.address
3376
+ address: formValues.address,
3377
+ isCustomWallet: false
2848
3378
  };
2849
3379
  if (formValues.account_name)
2850
3380
  data.accountName = formValues.account_name;
@@ -2854,10 +3384,9 @@ var IntegrationForm = ({
2854
3384
  integrationsToAdd.push(data);
2855
3385
  } else {
2856
3386
  if (result.status === "rejected") {
2857
- const reason = result.reason;
2858
- errors[chain.id] = reason?.response?.data?.message || "Failed to process chain";
3387
+ errors[chain.id] = result.reason?.response?.data?.message || "Failed to process chain";
2859
3388
  } else if (result.status === "fulfilled") {
2860
- errors[chain.id] = result.value?.value?.message || "Failed to verify chain";
3389
+ errors[chain.id] = result.value?.message || "Failed to verify chain";
2861
3390
  }
2862
3391
  }
2863
3392
  });
@@ -2875,14 +3404,14 @@ var IntegrationForm = ({
2875
3404
  const credential = {
2876
3405
  source: metadata.id,
2877
3406
  credential: {
2878
- apiKey: formValues.api_key?.trim() || "0",
2879
- secret: formValues.secret_key?.trim() || "0",
2880
- accountName: formValues.account_name?.trim() || "0",
2881
- address: formValues.address?.trim() || "0",
2882
- password: formValues.password?.trim() || "0",
2883
- userId: user?.user_id || "0",
2884
- projectId: metadata?.projectId || "0",
2885
- privateKey: "0",
3407
+ apiKey: formValues.api_key?.trim() || "",
3408
+ secret: formValues.secret_key?.trim() || "",
3409
+ accountName: formValues.account_name?.trim() || "",
3410
+ address: formValues.address?.trim() || "",
3411
+ password: formValues.password?.trim() || "",
3412
+ userId: user?.user_id || "",
3413
+ projectId: metadata?.projectId || "",
3414
+ privateKey: "",
2886
3415
  alias,
2887
3416
  walletId,
2888
3417
  exchange: metadata.id
@@ -2890,9 +3419,7 @@ var IntegrationForm = ({
2890
3419
  };
2891
3420
  const testResult = await testCredentials(linkToken, { ...credential });
2892
3421
  if (!testResult?.valid) {
2893
- setErrorMessage(
2894
- testResult?.value?.message || "Credentials are invalid"
2895
- );
3422
+ setErrorMessage(testResult?.message || "Credentials are invalid");
2896
3423
  return;
2897
3424
  }
2898
3425
  const data = {
@@ -2911,14 +3438,12 @@ var IntegrationForm = ({
2911
3438
  clientId,
2912
3439
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2913
3440
  },
2914
- metadata: {
2915
- environment: "sandbox"
2916
- },
2917
3441
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2918
3442
  default_chain: metadata.id,
2919
- default_chain_logo: null,
3443
+ default_chain_logo: "",
2920
3444
  type: metadata.type,
2921
- isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false
3445
+ isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
3446
+ isCustomWallet: false
2922
3447
  };
2923
3448
  if (metadata.community_id) {
2924
3449
  data.chainId = metadata.community_id;
@@ -2931,7 +3456,7 @@ var IntegrationForm = ({
2931
3456
  integrationsToAdd.push(data);
2932
3457
  }
2933
3458
  if (integrationsToAdd.length > 0) {
2934
- onAddHandle(integrationsToAdd);
3459
+ await onAddHandle(integrationsToAdd);
2935
3460
  setFormErrors({});
2936
3461
  setFormValues({
2937
3462
  address: "",
@@ -2945,10 +3470,9 @@ var IntegrationForm = ({
2945
3470
  setErrorMessage("No integrations could be added. Please try again.");
2946
3471
  }
2947
3472
  } catch (error) {
2948
- const err = error;
2949
3473
  console.error(error);
2950
3474
  setErrorMessage(
2951
- err?.response?.data?.message || "Failed to add integration"
3475
+ error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations"
2952
3476
  );
2953
3477
  } finally {
2954
3478
  setIsLoading(false);
@@ -2956,24 +3480,24 @@ var IntegrationForm = ({
2956
3480
  };
2957
3481
  const hasNoFields = !metadata.password && !metadata.secret_key && !metadata.api_key && !metadata.address && !metadata.account_name;
2958
3482
  const shouldShowFormFields = metadata.password || metadata.secret_key || metadata.api_key || metadata.address || metadata.account_name;
2959
- const renderLogo = () => metadata.logo ? /* @__PURE__ */ import_react30.default.createElement(
2960
- import_react_native15.Image,
3483
+ const renderLogo = () => metadata.logo ? isSvgUrl(metadata.logo) ? /* @__PURE__ */ import_react34.default.createElement(RemoteSvg, { uri: metadata.logo }) : /* @__PURE__ */ import_react34.default.createElement(
3484
+ import_react_native18.Image,
2961
3485
  {
2962
3486
  source: { uri: metadata.logo },
2963
- style: styles14.logo,
3487
+ style: styles16.logo,
2964
3488
  resizeMode: "contain"
2965
3489
  }
2966
- ) : /* @__PURE__ */ import_react30.default.createElement(
2967
- import_react_native15.View,
3490
+ ) : /* @__PURE__ */ import_react34.default.createElement(
3491
+ import_react_native18.View,
2968
3492
  {
2969
3493
  style: [
2970
- styles14.logoPlaceholder,
3494
+ styles16.logoPlaceholder,
2971
3495
  { backgroundColor: theme.colors.surface }
2972
3496
  ]
2973
3497
  },
2974
- /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
3498
+ /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: { color: theme.colors.text } }, metadata.name?.charAt(0) || "?")
2975
3499
  );
2976
- const renderInput = (key, props) => /* @__PURE__ */ import_react30.default.createElement(
3500
+ const renderInput = (key, props) => /* @__PURE__ */ import_react34.default.createElement(
2977
3501
  Input,
2978
3502
  {
2979
3503
  placeholder: props.placeholder,
@@ -2985,33 +3509,33 @@ var IntegrationForm = ({
2985
3509
  secureTextEntry: props.secureTextEntry
2986
3510
  }
2987
3511
  );
2988
- const renderErrorAlert = () => errorMessage ? /* @__PURE__ */ import_react30.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react30.default.createElement(AlertDescription, null, errorMessage)) : null;
2989
- const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.chainSelection }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles14.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.ScrollView, { contentContainerStyle: styles14.scrollViewContent }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.chainChips }, userUsedChains.map((chain) => {
3512
+ const renderErrorAlert = () => errorMessage || errorMessageProp ? /* @__PURE__ */ import_react34.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react34.default.createElement(AlertDescription, null, errorMessage || errorMessageProp)) : null;
3513
+ const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainSelection }, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: [styles16.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainListContent }, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainChips }, userUsedChains.map((chain) => {
2990
3514
  const isSelected = selectedChains.has(chain.id);
2991
3515
  const hasError = chainErrors[chain.id];
2992
- return /* @__PURE__ */ import_react30.default.createElement(
2993
- import_react_native15.TouchableOpacity,
3516
+ return /* @__PURE__ */ import_react34.default.createElement(
3517
+ import_react_native18.TouchableOpacity,
2994
3518
  {
2995
3519
  onPress: () => toggleChainSelection(chain.id),
2996
- style: styles14.chainButton,
3520
+ style: styles16.chainButton,
2997
3521
  key: chain.id
2998
3522
  },
2999
- /* @__PURE__ */ import_react30.default.createElement(
3000
- import_react_native15.View,
3523
+ /* @__PURE__ */ import_react34.default.createElement(
3524
+ import_react_native18.View,
3001
3525
  {
3002
3526
  style: [
3003
- styles14.chainChip,
3527
+ styles16.chainChip,
3004
3528
  {
3005
3529
  backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
3006
3530
  borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
3007
3531
  }
3008
3532
  ]
3009
3533
  },
3010
- /* @__PURE__ */ import_react30.default.createElement(
3011
- import_react_native15.Text,
3534
+ /* @__PURE__ */ import_react34.default.createElement(
3535
+ import_react_native18.Text,
3012
3536
  {
3013
3537
  style: [
3014
- styles14.chainName,
3538
+ styles16.chainName,
3015
3539
  {
3016
3540
  color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
3017
3541
  }
@@ -3019,28 +3543,55 @@ var IntegrationForm = ({
3019
3543
  },
3020
3544
  chain.name
3021
3545
  ),
3022
- isSelected ? /* @__PURE__ */ import_react30.default.createElement(
3546
+ isSelected ? /* @__PURE__ */ import_react34.default.createElement(
3023
3547
  CloseIcon,
3024
3548
  {
3025
3549
  size: 12,
3026
3550
  color: hasError ? theme.colors.error : theme.colors.primary
3027
3551
  }
3028
- ) : /* @__PURE__ */ import_react30.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
3552
+ ) : /* @__PURE__ */ import_react34.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
3029
3553
  )
3030
3554
  );
3031
- }))), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.chainErrorsContainer }, /* @__PURE__ */ import_react30.default.createElement(
3032
- import_react_native15.Text,
3555
+ })), selectedChains.size > 0 && userUsedChains.length > 0 && /* @__PURE__ */ import_react34.default.createElement(
3556
+ import_react_native18.TouchableOpacity,
3557
+ {
3558
+ onPress: () => setSelectedChains(/* @__PURE__ */ new Set()),
3559
+ style: styles16.chainButton,
3560
+ activeOpacity: 0.7
3561
+ },
3562
+ /* @__PURE__ */ import_react34.default.createElement(
3563
+ import_react_native18.View,
3564
+ {
3565
+ style: [
3566
+ styles16.chainChip,
3567
+ styles16.chainChipRemoveAll,
3568
+ {
3569
+ borderWidth: 0
3570
+ }
3571
+ ]
3572
+ },
3573
+ /* @__PURE__ */ import_react34.default.createElement(
3574
+ import_react_native18.Text,
3575
+ {
3576
+ style: [styles16.chainName, { color: theme.colors.primary }]
3577
+ },
3578
+ "Remove All Chains"
3579
+ ),
3580
+ /* @__PURE__ */ import_react34.default.createElement(CloseIcon, { size: 12, color: theme.colors.primary })
3581
+ )
3582
+ )), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.chainErrorsContainer }, /* @__PURE__ */ import_react34.default.createElement(
3583
+ import_react_native18.Text,
3033
3584
  {
3034
- style: [styles14.chainErrorsTitle, { color: theme.colors.error }]
3585
+ style: [styles16.chainErrorsTitle, { color: theme.colors.error }]
3035
3586
  },
3036
3587
  "Errors:"
3037
3588
  ), Object.entries(chainErrors).map(([chainId, error]) => {
3038
3589
  const chain = userUsedChains.find((c) => c.id === chainId);
3039
- return /* @__PURE__ */ import_react30.default.createElement(
3040
- import_react_native15.Text,
3590
+ return /* @__PURE__ */ import_react34.default.createElement(
3591
+ import_react_native18.Text,
3041
3592
  {
3042
3593
  key: chainId,
3043
- style: [styles14.chainErrorItem, { color: theme.colors.error }]
3594
+ style: [styles16.chainErrorItem, { color: theme.colors.error }]
3044
3595
  },
3045
3596
  "\u2022 ",
3046
3597
  chain?.name,
@@ -3048,7 +3599,7 @@ var IntegrationForm = ({
3048
3599
  error
3049
3600
  );
3050
3601
  })));
3051
- const renderFormBlock = () => /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.header }, renderLogo(), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles14.name, { color: theme.colors.text }] }, metadata.name)), renderErrorAlert(), shouldShowFormFields && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, metadata.address && /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, renderInput("address", {
3602
+ const renderFormBlock = () => /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.header }, renderLogo(), /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: [styles16.name, { color: theme.colors.text }] }, metadata.name)), shouldShowFormFields && /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, metadata.address && /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, renderInput("address", {
3052
3603
  placeholder: "Enter address",
3053
3604
  autoCapitalize: "none",
3054
3605
  autoCorrect: false
@@ -3064,16 +3615,23 @@ var IntegrationForm = ({
3064
3615
  }), metadata.password && renderInput("password", {
3065
3616
  placeholder: "Enter Password",
3066
3617
  secureTextEntry: true
3067
- })), hasNoFields && !metadata?.isWalletConnectSupported && /* @__PURE__ */ import_react30.default.createElement(Alert, { variant: "default", style: { marginTop: 12 } }, /* @__PURE__ */ import_react30.default.createElement(AlertDescription, null, "This integration is not supported here yet \u2014 try using it through our Kryptos Platform.")));
3618
+ })), hasNoFields && !metadata?.isWalletConnectSupported && /* @__PURE__ */ import_react34.default.createElement(Alert, { variant: "default", style: { marginTop: 12 } }, /* @__PURE__ */ import_react34.default.createElement(AlertDescription, null, "This integration is not supported here yet \u2014 try using it through our Kryptos Platform.")));
3068
3619
  const addIntegrationLabel = formValues.address && userUsedChains.length > 0 && selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size !== 1 ? "s" : ""}` : "Add Integration";
3069
- return /* @__PURE__ */ import_react30.default.createElement(import_react30.default.Fragment, null, !metadata?.isWalletConnectSupported ? /* @__PURE__ */ import_react30.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react30.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles14.headerContent }, /* @__PURE__ */ import_react30.default.createElement(
3070
- import_react_native15.TouchableOpacity,
3620
+ return /* @__PURE__ */ import_react34.default.createElement(import_react34.default.Fragment, null, !metadata?.isWalletConnectSupported ? /* @__PURE__ */ import_react34.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react34.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react34.default.createElement(import_react_native18.View, { style: styles16.headerContent }, showBackButton && /* @__PURE__ */ import_react34.default.createElement(
3621
+ import_react_native18.TouchableOpacity,
3071
3622
  {
3072
3623
  onPress: () => setAddIntegrationMode(null),
3073
- style: styles14.backButton
3624
+ style: styles16.backButton
3074
3625
  },
3075
- /* @__PURE__ */ import_react30.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3076
- ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react30.default.createElement(ModalBody, { scrollable: false, style: styles14.contentContainer }, renderFormBlock()), !hasNoFields && /* @__PURE__ */ import_react30.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react30.default.createElement(
3626
+ /* @__PURE__ */ import_react34.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3627
+ ), /* @__PURE__ */ import_react34.default.createElement(import_react_native18.Text, { style: [styles16.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react34.default.createElement(ModalBody, { scrollable: true, style: styles16.contentContainer }, renderFormBlock(), renderErrorAlert(), !metadata?.isWalletConnectSupported && metadata?.walletLimitations && /* @__PURE__ */ import_react34.default.createElement(
3628
+ IntegrationInfo,
3629
+ {
3630
+ content: metadata.walletLimitations,
3631
+ type: "api",
3632
+ import_guide: metadata.import_guide
3633
+ }
3634
+ )), !hasNoFields && /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
3077
3635
  Button,
3078
3636
  {
3079
3637
  variant: "outline",
@@ -3081,10 +3639,10 @@ var IntegrationForm = ({
3081
3639
  onPress: handleSubmit,
3082
3640
  loading: isLoading,
3083
3641
  disabled: isLoading || isFetchingChains || !!formValues.address && userUsedChains.length > 0 && selectedChains.size === 0,
3084
- style: styles14.button
3642
+ style: styles16.button
3085
3643
  },
3086
3644
  addIntegrationLabel
3087
- ), /* @__PURE__ */ import_react30.default.createElement(Footer, null))) : /* @__PURE__ */ import_react30.default.createElement(
3645
+ ), /* @__PURE__ */ import_react34.default.createElement(Footer, null))) : /* @__PURE__ */ import_react34.default.createElement(
3088
3646
  WalletConnectComponent,
3089
3647
  {
3090
3648
  integration: metadata,
@@ -3093,14 +3651,14 @@ var IntegrationForm = ({
3093
3651
  modalOpen: open,
3094
3652
  setAddIntegrationMode,
3095
3653
  handleClose,
3096
- providersList
3654
+ providersList,
3655
+ errorMessage: errorMessageProp
3097
3656
  }
3098
3657
  ));
3099
3658
  };
3100
- var styles14 = import_react_native15.StyleSheet.create({
3101
- scrollViewContent: {
3102
- flexGrow: 1,
3103
- paddingBottom: 100
3659
+ var styles16 = import_react_native18.StyleSheet.create({
3660
+ chainListContent: {
3661
+ paddingBottom: 8
3104
3662
  },
3105
3663
  headerContent: {
3106
3664
  flexDirection: "row",
@@ -3125,10 +3683,8 @@ var styles14 = import_react_native15.StyleSheet.create({
3125
3683
  // theme.spacing.xl
3126
3684
  paddingBottom: 40,
3127
3685
  width: "100%",
3128
- overflow: "hidden",
3129
3686
  alignSelf: "center",
3130
- flexDirection: "column",
3131
- flex: 1
3687
+ flexDirection: "column"
3132
3688
  },
3133
3689
  header: {
3134
3690
  flexDirection: "row",
@@ -3160,7 +3716,7 @@ var styles14 = import_react_native15.StyleSheet.create({
3160
3716
  textTransform: "capitalize"
3161
3717
  },
3162
3718
  chainSelection: {
3163
- marginBottom: 16
3719
+ marginBottom: 8
3164
3720
  // theme.spacing.lg
3165
3721
  },
3166
3722
  chainTitle: {
@@ -3187,6 +3743,11 @@ var styles14 = import_react_native15.StyleSheet.create({
3187
3743
  // theme.borderRadius.md
3188
3744
  borderWidth: 1
3189
3745
  },
3746
+ chainChipRemoveAll: {
3747
+ marginTop: 6,
3748
+ // theme.spacing.sm - separate from chain list
3749
+ width: "auto"
3750
+ },
3190
3751
  chainName: {
3191
3752
  fontSize: 12,
3192
3753
  fontWeight: "500",
@@ -3222,18 +3783,23 @@ var styles14 = import_react_native15.StyleSheet.create({
3222
3783
  var Integration = ({
3223
3784
  open,
3224
3785
  onSuccess,
3225
- onClose
3786
+ onClose,
3787
+ integrationDetails
3226
3788
  }) => {
3227
3789
  const { appName, linkToken } = useKryptosConnect();
3228
3790
  const theme = useTheme();
3229
- const [addIntegrationMode, setAddIntegrationMode] = import_react31.default.useState(null);
3230
- const [query, setQuery] = import_react31.default.useState("");
3231
- const [activeTab, setActiveTab] = import_react31.default.useState("all");
3232
- const [supportedProviders, setSupportedProviders] = import_react31.default.useState([]);
3233
- const [addedIntegrations, setAddedIntegrations] = import_react31.default.useState([]);
3234
- const [existingIntegrations, setExistingIntegrations] = import_react31.default.useState([]);
3235
- const [isLoading, setIsLoading] = import_react31.default.useState(false);
3236
- const [errorMessage, setErrorMessage] = import_react31.default.useState("");
3791
+ const [addIntegrationMode, setAddIntegrationMode] = import_react35.default.useState(integrationDetails || null);
3792
+ const [query, setQuery] = import_react35.default.useState("");
3793
+ const [activeTab, setActiveTab] = import_react35.default.useState("all");
3794
+ const [supportedProviders, setSupportedProviders] = import_react35.default.useState([]);
3795
+ const [existingIntegrations, setExistingIntegrations] = import_react35.default.useState([]);
3796
+ const [isLoading, setIsLoading] = import_react35.default.useState(false);
3797
+ const [errorMessage, setErrorMessage] = import_react35.default.useState("");
3798
+ import_react35.default.useEffect(() => {
3799
+ if (integrationDetails) {
3800
+ setAddIntegrationMode(integrationDetails);
3801
+ }
3802
+ }, [integrationDetails]);
3237
3803
  const handleClose = () => {
3238
3804
  onClose();
3239
3805
  };
@@ -3244,7 +3810,7 @@ var Integration = ({
3244
3810
  } catch (error) {
3245
3811
  const err = error;
3246
3812
  setErrorMessage(
3247
- err?.response?.data?.message || "Failed to fetch existing integrations"
3813
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch existing integrations"
3248
3814
  );
3249
3815
  console.error(error);
3250
3816
  }
@@ -3257,38 +3823,38 @@ var Integration = ({
3257
3823
  } catch (error) {
3258
3824
  const err = error;
3259
3825
  setErrorMessage(
3260
- err?.response?.data?.message || "Failed to fetch supported providers"
3826
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch supported providers"
3261
3827
  );
3262
3828
  console.error(error);
3263
3829
  } finally {
3264
3830
  setIsLoading(false);
3265
3831
  }
3266
3832
  };
3267
- import_react31.default.useEffect(() => {
3833
+ import_react35.default.useEffect(() => {
3268
3834
  if (linkToken) {
3269
3835
  fetchSupportedProviders();
3270
3836
  fetchExistingIntegrations();
3271
3837
  }
3272
3838
  }, [linkToken]);
3273
- const isIntegrationAdded = import_react31.default.useCallback(
3839
+ const isIntegrationAdded = (0, import_react35.useCallback)(
3274
3840
  (publicName) => {
3275
- const integrations = [...addedIntegrations, ...existingIntegrations];
3841
+ const integrations = [...existingIntegrations];
3276
3842
  return integrations.some(
3277
3843
  (integration) => integration.public_name === publicName
3278
3844
  );
3279
3845
  },
3280
- [addedIntegrations, existingIntegrations]
3846
+ [existingIntegrations]
3281
3847
  );
3282
- const getIntegrationCount = import_react31.default.useCallback(
3848
+ const getIntegrationCount = (0, import_react35.useCallback)(
3283
3849
  (publicName) => {
3284
- const integrations = [...addedIntegrations, ...existingIntegrations];
3850
+ const integrations = [...existingIntegrations];
3285
3851
  return integrations.filter(
3286
3852
  (integration) => integration.public_name === publicName
3287
3853
  ).length;
3288
3854
  },
3289
- [addedIntegrations, existingIntegrations]
3855
+ [existingIntegrations]
3290
3856
  );
3291
- const filteredResults = import_react31.default.useMemo(() => {
3857
+ const filteredResults = import_react35.default.useMemo(() => {
3292
3858
  let filtered = supportedProviders;
3293
3859
  if (activeTab !== "all") {
3294
3860
  filtered = filtered.filter((provider) => provider.type === activeTab);
@@ -3306,33 +3872,41 @@ var Integration = ({
3306
3872
  return (a.name ?? "").localeCompare(b.name ?? "");
3307
3873
  });
3308
3874
  }, [query, supportedProviders, getIntegrationCount, activeTab]);
3309
- const handleAddIntegration = async () => {
3875
+ const handleAddIntegration = async (integrationsList) => {
3310
3876
  try {
3311
3877
  setIsLoading(true);
3312
- const integrations = [...addedIntegrations, ...existingIntegrations];
3878
+ const integrations = integrationsList ? integrationsList : [...existingIntegrations];
3313
3879
  if (integrations.length === 0) {
3314
3880
  setErrorMessage("Please add at least one integration");
3315
- } else if (addedIntegrations.length === 0) {
3316
- onSuccess();
3317
3881
  } else {
3318
- await addUserIntegration(linkToken, addedIntegrations);
3319
- onSuccess();
3882
+ await addUserIntegration(linkToken, integrations);
3883
+ if (integrationDetails) {
3884
+ onSuccess();
3885
+ }
3320
3886
  }
3887
+ await fetchExistingIntegrations();
3888
+ setAddIntegrationMode(null);
3321
3889
  } catch (error) {
3322
- const err = error;
3323
- console.error(error);
3324
- setErrorMessage(
3325
- err?.response?.data?.message || "Failed to add integrations"
3326
- );
3890
+ const message = error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations";
3891
+ setErrorMessage(message);
3892
+ throw error;
3327
3893
  } finally {
3328
3894
  setIsLoading(false);
3329
3895
  }
3330
3896
  };
3331
- const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react31.default.createElement(
3332
- import_react_native16.TouchableOpacity,
3897
+ const handleContinue = () => {
3898
+ const integrations = [...existingIntegrations];
3899
+ if (integrations.length === 0) {
3900
+ setErrorMessage("Please add at least one integration");
3901
+ return;
3902
+ }
3903
+ onSuccess();
3904
+ };
3905
+ const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react35.default.createElement(
3906
+ import_react_native19.TouchableOpacity,
3333
3907
  {
3334
3908
  style: [
3335
- styles15.providerItem,
3909
+ styles17.providerItem,
3336
3910
  {
3337
3911
  backgroundColor: theme.colors.surface,
3338
3912
  borderColor: theme.colors.border
@@ -3341,44 +3915,98 @@ var Integration = ({
3341
3915
  onPress: () => setAddIntegrationMode(item),
3342
3916
  activeOpacity: 0.7
3343
3917
  },
3344
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.providerInfo }, item?.logo ? /* @__PURE__ */ import_react31.default.createElement(
3345
- import_react_native16.Image,
3918
+ /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.providerInfo }, item?.logo ? isSvgUrl(item?.logo) ? /* @__PURE__ */ import_react35.default.createElement(RemoteSvg, { uri: item?.logo }) : /* @__PURE__ */ import_react35.default.createElement(
3919
+ import_react_native19.Image,
3346
3920
  {
3347
3921
  source: { uri: item?.logo },
3348
- style: styles15.providerLogo,
3922
+ style: styles17.providerLogo,
3349
3923
  resizeMode: "contain"
3350
3924
  }
3351
- ) : /* @__PURE__ */ import_react31.default.createElement(
3352
- import_react_native16.View,
3925
+ ) : /* @__PURE__ */ import_react35.default.createElement(
3926
+ import_react_native19.View,
3353
3927
  {
3354
3928
  style: [
3355
- styles15.providerLogoPlaceholder,
3929
+ styles17.providerLogoPlaceholder,
3356
3930
  { backgroundColor: theme.colors.surfaceSecondary }
3357
3931
  ]
3358
3932
  },
3359
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: { color: theme.colors.text } }, item?.name?.charAt(0) || "?")
3360
- ), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles15.providerName, { color: theme.colors.text }] }, item?.name + "\u200B")),
3361
- isIntegrationAdded(item?.public_name) && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.providerStatus }, /* @__PURE__ */ import_react31.default.createElement(CheckCircleIcon, { size: 18, color: theme.colors.success }), /* @__PURE__ */ import_react31.default.createElement(
3362
- import_react_native16.Text,
3933
+ /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: { color: theme.colors.text } }, item?.name?.charAt(0) || "?")
3934
+ ), /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: [styles17.providerName, { color: theme.colors.text }] }, item?.name + "\u200B")),
3935
+ isIntegrationAdded(item?.public_name) && /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.providerStatus }, /* @__PURE__ */ import_react35.default.createElement(CheckCircleIcon, { size: 18, color: theme.colors.success }), /* @__PURE__ */ import_react35.default.createElement(
3936
+ import_react_native19.Text,
3363
3937
  {
3364
3938
  style: [
3365
- styles15.providerCount,
3939
+ styles17.providerCount,
3366
3940
  { color: theme.colors.textSecondary }
3367
3941
  ]
3368
3942
  },
3369
3943
  getIntegrationCount(item?.public_name)
3370
3944
  ))
3371
3945
  );
3372
- const renderSkeletonItem = () => /* @__PURE__ */ import_react31.default.createElement(SkeletonItem_default, null);
3373
- return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, !addIntegrationMode ? /* @__PURE__ */ import_react31.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react31.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.headerContent }, addIntegrationMode && /* @__PURE__ */ import_react31.default.createElement(
3374
- import_react_native16.TouchableOpacity,
3946
+ const renderSkeletonItem = () => /* @__PURE__ */ import_react35.default.createElement(SkeletonItem_default, null);
3947
+ return /* @__PURE__ */ import_react35.default.createElement(import_react35.default.Fragment, null, !addIntegrationMode ? /* @__PURE__ */ import_react35.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react35.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.headerContent }, addIntegrationMode && /* @__PURE__ */ import_react35.default.createElement(
3948
+ import_react_native19.TouchableOpacity,
3375
3949
  {
3376
3950
  onPress: () => setAddIntegrationMode(null),
3377
- style: styles15.backButton
3951
+ style: styles17.backButton
3952
+ },
3953
+ /* @__PURE__ */ import_react35.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3954
+ ), /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: [styles17.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react35.default.createElement(ModalBody, { scrollable: false, style: styles17.noPadding }, /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.container }, /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.headerSection }, /* @__PURE__ */ import_react35.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react35.default.createElement(import_react_native19.Text, { style: [styles17.title, { color: theme.colors.text }] }, "Select an account to link to ", appName)), /* @__PURE__ */ import_react35.default.createElement(
3955
+ import_react_native19.View,
3956
+ {
3957
+ style: {
3958
+ paddingHorizontal: theme.spacing.xl,
3959
+ paddingVertical: theme.spacing.sm + 2,
3960
+ backgroundColor: theme.colors.background,
3961
+ zIndex: 10
3962
+ }
3378
3963
  },
3379
- /* @__PURE__ */ import_react31.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3380
- ), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles15.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react31.default.createElement(ModalBody, { scrollable: false, style: styles15.noPadding }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.container }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.headerSection }, /* @__PURE__ */ import_react31.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles15.title, { color: theme.colors.text }] }, "Select an account to link to ", appName)), /* @__PURE__ */ import_react31.default.createElement(
3381
- import_react_native16.FlatList,
3964
+ /* @__PURE__ */ import_react35.default.createElement(
3965
+ Input,
3966
+ {
3967
+ value: query,
3968
+ onChangeText: setQuery,
3969
+ placeholder: "Search Integrations...",
3970
+ containerStyle: styles17.searchInput
3971
+ }
3972
+ ),
3973
+ /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.tabsContainer }, [
3974
+ { label: "All", value: "all" },
3975
+ { label: "Exchanges", value: "exchange" },
3976
+ { label: "Blockchains", value: "blockchain" },
3977
+ { label: "Wallets", value: "wallet" }
3978
+ ].map((tab) => /* @__PURE__ */ import_react35.default.createElement(
3979
+ import_react_native19.TouchableOpacity,
3980
+ {
3981
+ key: tab.value,
3982
+ style: [
3983
+ styles17.tab,
3984
+ {
3985
+ backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
3986
+ borderColor: theme.colors.border
3987
+ }
3988
+ ],
3989
+ onPress: () => {
3990
+ setActiveTab(
3991
+ tab.value
3992
+ );
3993
+ }
3994
+ },
3995
+ /* @__PURE__ */ import_react35.default.createElement(
3996
+ import_react_native19.Text,
3997
+ {
3998
+ style: [
3999
+ styles17.tabText,
4000
+ {
4001
+ color: activeTab === tab.value ? theme.colors.white : theme.colors.text
4002
+ }
4003
+ ]
4004
+ },
4005
+ tab.label
4006
+ )
4007
+ )))
4008
+ ), /* @__PURE__ */ import_react35.default.createElement(
4009
+ import_react_native19.FlatList,
3382
4010
  {
3383
4011
  data: isLoading ? Array.from({ length: 8 }, (_, i) => ({
3384
4012
  id: `skeleton-${i}`,
@@ -3388,104 +4016,53 @@ var Integration = ({
3388
4016
  })) : filteredResults,
3389
4017
  keyExtractor: (item, index) => isLoading ? item.id : `provider-${item.id}-${index}`,
3390
4018
  renderItem: isLoading ? renderSkeletonItem : renderProviderItem,
3391
- style: styles15.list,
4019
+ style: styles17.list,
3392
4020
  contentContainerStyle: [
3393
- styles15.listContent,
4021
+ styles17.listContent,
3394
4022
  { paddingHorizontal: theme.spacing.xl }
3395
4023
  ],
3396
4024
  showsVerticalScrollIndicator: false,
3397
- ListHeaderComponent: /* @__PURE__ */ import_react31.default.createElement(
3398
- import_react_native16.View,
3399
- {
3400
- style: {
3401
- paddingVertical: theme.spacing.sm + 2,
3402
- backgroundColor: theme.colors.background,
3403
- zIndex: 10
3404
- }
3405
- },
3406
- /* @__PURE__ */ import_react31.default.createElement(
3407
- Input,
3408
- {
3409
- value: query,
3410
- onChangeText: setQuery,
3411
- placeholder: "Search Integrations...",
3412
- containerStyle: styles15.searchInput
3413
- }
3414
- ),
3415
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.tabsContainer }, [
3416
- { label: "All", value: "all" },
3417
- { label: "Exchanges", value: "exchange" },
3418
- { label: "Blockchains", value: "blockchain" },
3419
- { label: "Wallets", value: "wallet" }
3420
- ].map((tab) => /* @__PURE__ */ import_react31.default.createElement(
3421
- import_react_native16.TouchableOpacity,
3422
- {
3423
- key: tab.value,
3424
- style: [
3425
- styles15.tab,
3426
- {
3427
- backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
3428
- borderColor: theme.colors.border
3429
- }
3430
- ],
3431
- onPress: () => setActiveTab(
3432
- tab.value
3433
- ),
3434
- activeOpacity: 0.7
3435
- },
3436
- /* @__PURE__ */ import_react31.default.createElement(
3437
- import_react_native16.Text,
3438
- {
3439
- style: [
3440
- styles15.tabText,
3441
- {
3442
- color: activeTab === tab.value ? theme.colors.white : theme.colors.text
3443
- }
3444
- ]
3445
- },
3446
- tab.label
3447
- )
3448
- )))
3449
- ),
3450
- stickyHeaderIndices: [0],
3451
- ListEmptyComponent: /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.emptyContainer }, !isLoading && /* @__PURE__ */ import_react31.default.createElement(
3452
- import_react_native16.Text,
4025
+ ListEmptyComponent: /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.emptyContainer }, !isLoading && /* @__PURE__ */ import_react35.default.createElement(
4026
+ import_react_native19.Text,
3453
4027
  {
3454
4028
  style: [
3455
- styles15.emptyText,
4029
+ styles17.emptyText,
3456
4030
  { color: theme.colors.textSecondary }
3457
4031
  ]
3458
4032
  },
3459
4033
  query ? "No search results found" : "No supported integrations found"
3460
- ))
4034
+ )),
4035
+ ListFooterComponent: errorMessage ? /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.errorContainer }, /* @__PURE__ */ import_react35.default.createElement(Alert, { variant: "destructive", style: styles17.errorAlert }, /* @__PURE__ */ import_react35.default.createElement(AlertDescription, null, errorMessage))) : null
3461
4036
  }
3462
- ), errorMessage && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles15.errorContainer }, /* @__PURE__ */ import_react31.default.createElement(Alert, { variant: "destructive", style: styles15.errorAlert }, /* @__PURE__ */ import_react31.default.createElement(AlertDescription, null, errorMessage))))), /* @__PURE__ */ import_react31.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react31.default.createElement(
4037
+ ))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, filteredResults && filteredResults.length > 0 && /* @__PURE__ */ import_react35.default.createElement(
3463
4038
  Button,
3464
4039
  {
3465
4040
  variant: "outline",
3466
4041
  size: "lg",
3467
- onPress: handleAddIntegration,
4042
+ onPress: handleContinue,
3468
4043
  loading: isLoading,
3469
4044
  disabled: isLoading,
3470
- style: styles15.continueButton
4045
+ style: styles17.continueButton
3471
4046
  },
3472
4047
  "Continue"
3473
- ), /* @__PURE__ */ import_react31.default.createElement(Footer, null))) : /* @__PURE__ */ import_react31.default.createElement(
4048
+ ), /* @__PURE__ */ import_react35.default.createElement(Footer, null))) : /* @__PURE__ */ import_react35.default.createElement(
3474
4049
  IntegrationForm,
3475
4050
  {
3476
4051
  metadata: addIntegrationMode,
3477
- onAddHandle: (integrations) => {
3478
- setAddedIntegrations((prev) => [...prev, ...integrations]);
3479
- setAddIntegrationMode(null);
4052
+ onAddHandle: async (int) => {
4053
+ const integrationsList = [...int];
4054
+ await handleAddIntegration(integrationsList);
3480
4055
  },
3481
4056
  open: !!addIntegrationMode,
3482
4057
  setAddIntegrationMode,
3483
4058
  handleClose,
3484
- providersList: supportedProviders
4059
+ providersList: supportedProviders,
4060
+ errorMessage,
4061
+ showBackButton: !integrationDetails
3485
4062
  }
3486
4063
  ));
3487
4064
  };
3488
- var styles15 = import_react_native16.StyleSheet.create({
4065
+ var styles17 = import_react_native19.StyleSheet.create({
3489
4066
  headerContent: {
3490
4067
  flexDirection: "row",
3491
4068
  alignItems: "center"
@@ -3534,7 +4111,9 @@ var styles15 = import_react_native16.StyleSheet.create({
3534
4111
  flexDirection: "row",
3535
4112
  alignItems: "center",
3536
4113
  justifyContent: "space-between",
3537
- padding: 12,
4114
+ paddingVertical: 8,
4115
+ // theme.spacing.md
4116
+ paddingHorizontal: 12,
3538
4117
  // theme.spacing.md
3539
4118
  borderRadius: 12,
3540
4119
  // theme.borderRadius.md
@@ -3594,53 +4173,53 @@ var styles15 = import_react_native16.StyleSheet.create({
3594
4173
  width: "100%"
3595
4174
  },
3596
4175
  errorContainer: {
3597
- paddingHorizontal: 20
4176
+ paddingHorizontal: 20,
3598
4177
  // theme.spacing.xl
4178
+ marginBottom: 12
3599
4179
  },
3600
4180
  errorAlert: {
3601
- marginTop: 16
3602
- // theme.spacing.lg - consistent alert spacing
4181
+ marginTop: 8
3603
4182
  },
3604
4183
  tabsContainer: {
3605
4184
  flexDirection: "row",
3606
- gap: 4,
4185
+ gap: 6,
3607
4186
  // theme.spacing.sm
3608
4187
  flexWrap: "wrap"
3609
4188
  },
3610
4189
  tab: {
3611
- paddingVertical: 8,
4190
+ paddingVertical: 4,
3612
4191
  // theme.spacing.sm
3613
- paddingHorizontal: 16,
4192
+ paddingHorizontal: 10,
3614
4193
  // theme.spacing.lg
3615
- borderRadius: 20,
4194
+ borderRadius: 8,
3616
4195
  // theme.borderRadius.full / 2
3617
4196
  borderWidth: 1,
3618
4197
  alignItems: "center",
3619
4198
  justifyContent: "center"
3620
4199
  },
3621
4200
  tabText: {
3622
- fontSize: 13,
4201
+ fontSize: 12,
3623
4202
  // theme.fontSize.sm
3624
4203
  fontWeight: "600"
3625
4204
  }
3626
4205
  });
3627
4206
 
3628
4207
  // src/molecules/OTPVerify.tsx
3629
- var import_react32 = __toESM(require("react"));
3630
- var import_react_native17 = require("react-native");
4208
+ var import_react36 = __toESM(require("react"));
4209
+ var import_react_native20 = require("react-native");
3631
4210
  var OTPVerify = ({
3632
4211
  open,
3633
4212
  onSuccess,
3634
4213
  onClose
3635
4214
  }) => {
3636
4215
  const theme = useTheme();
3637
- const [otp, setOtp] = import_react32.default.useState("");
4216
+ const [otp, setOtp] = import_react36.default.useState("");
3638
4217
  const { linkToken, clientId, email, setUser } = useKryptosConnect();
3639
- const [isLoading, setIsLoading] = import_react32.default.useState(false);
3640
- const [isResending, setIsResending] = import_react32.default.useState(false);
3641
- const [resendCooldown, setResendCooldown] = import_react32.default.useState(0);
3642
- const [errorMessage, setErrorMessage] = import_react32.default.useState("");
3643
- const [successMessage, setSuccessMessage] = import_react32.default.useState("");
4218
+ const [isLoading, setIsLoading] = import_react36.default.useState(false);
4219
+ const [isResending, setIsResending] = import_react36.default.useState(false);
4220
+ const [resendCooldown, setResendCooldown] = import_react36.default.useState(0);
4221
+ const [errorMessage, setErrorMessage] = import_react36.default.useState("");
4222
+ const [successMessage, setSuccessMessage] = import_react36.default.useState("");
3644
4223
  const handleSubmit = async () => {
3645
4224
  if (otp.length !== 6) return;
3646
4225
  setIsLoading(true);
@@ -3691,7 +4270,7 @@ var OTPVerify = ({
3691
4270
  setSuccessMessage("");
3692
4271
  setOtp("");
3693
4272
  };
3694
- import_react32.default.useEffect(() => {
4273
+ import_react36.default.useEffect(() => {
3695
4274
  if (resendCooldown > 0) {
3696
4275
  const timer = setTimeout(() => {
3697
4276
  setResendCooldown(resendCooldown - 1);
@@ -3700,20 +4279,20 @@ var OTPVerify = ({
3700
4279
  }
3701
4280
  return void 0;
3702
4281
  }, [resendCooldown]);
3703
- return /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "lg" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.headerContent }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles16.headerTitle, { color: theme.colors.text }] }, "OTP Verification"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, null, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.container }, /* @__PURE__ */ import_react32.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.emailInfo }, /* @__PURE__ */ import_react32.default.createElement(
3704
- import_react_native17.Text,
4282
+ return /* @__PURE__ */ import_react36.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "lg" }, /* @__PURE__ */ import_react36.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.headerContent }, /* @__PURE__ */ import_react36.default.createElement(import_react_native20.Text, { style: [styles18.headerTitle, { color: theme.colors.text }] }, "OTP Verification"))), /* @__PURE__ */ import_react36.default.createElement(ModalBody, null, /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.container }, /* @__PURE__ */ import_react36.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.emailInfo }, /* @__PURE__ */ import_react36.default.createElement(
4283
+ import_react_native20.Text,
3705
4284
  {
3706
- style: [styles16.infoText, { color: theme.colors.textSecondary }]
4285
+ style: [styles18.infoText, { color: theme.colors.textSecondary }]
3707
4286
  },
3708
4287
  "We have sent a verification code to"
3709
- ), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles16.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react32.default.createElement(
4288
+ ), /* @__PURE__ */ import_react36.default.createElement(import_react_native20.Text, { style: [styles18.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react36.default.createElement(
3710
4289
  OTP,
3711
4290
  {
3712
4291
  onComplete: handleOtpComplete,
3713
4292
  length: 6,
3714
4293
  setErrorMessage
3715
4294
  }
3716
- ), errorMessage ? /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, errorMessage)) : null, successMessage ? /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "default" }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, successMessage)) : null, /* @__PURE__ */ import_react32.default.createElement(
4295
+ ), errorMessage ? /* @__PURE__ */ import_react36.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react36.default.createElement(AlertDescription, null, errorMessage)) : null, successMessage ? /* @__PURE__ */ import_react36.default.createElement(Alert, { variant: "default" }, /* @__PURE__ */ import_react36.default.createElement(AlertDescription, null, successMessage)) : null, /* @__PURE__ */ import_react36.default.createElement(
3717
4296
  Button,
3718
4297
  {
3719
4298
  variant: "outline",
@@ -3721,44 +4300,44 @@ var OTPVerify = ({
3721
4300
  onPress: handleSubmit,
3722
4301
  loading: isLoading,
3723
4302
  disabled: otp.length !== 6 || isLoading,
3724
- style: styles16.button
4303
+ style: styles18.button
3725
4304
  },
3726
4305
  "Continue"
3727
- ), /* @__PURE__ */ import_react32.default.createElement(
3728
- import_react_native17.TouchableOpacity,
4306
+ ), /* @__PURE__ */ import_react36.default.createElement(
4307
+ import_react_native20.TouchableOpacity,
3729
4308
  {
3730
4309
  onPress: handleResendOtp,
3731
4310
  disabled: resendCooldown > 0 || isResending,
3732
- style: styles16.resendContainer
4311
+ style: styles18.resendContainer
3733
4312
  },
3734
- isResending ? /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles16.resendLoading }, /* @__PURE__ */ import_react32.default.createElement(LoaderIcon, { size: 16, color: theme.colors.primary }), /* @__PURE__ */ import_react32.default.createElement(
3735
- import_react_native17.Text,
4313
+ isResending ? /* @__PURE__ */ import_react36.default.createElement(import_react_native20.View, { style: styles18.resendLoading }, /* @__PURE__ */ import_react36.default.createElement(LoaderIcon, { size: 16, color: theme.colors.primary }), /* @__PURE__ */ import_react36.default.createElement(
4314
+ import_react_native20.Text,
3736
4315
  {
3737
- style: [styles16.resendText, { color: theme.colors.primary }]
4316
+ style: [styles18.resendText, { color: theme.colors.primary }]
3738
4317
  },
3739
4318
  " ",
3740
4319
  "Sending..."
3741
- )) : resendCooldown > 0 ? /* @__PURE__ */ import_react32.default.createElement(
3742
- import_react_native17.Text,
4320
+ )) : resendCooldown > 0 ? /* @__PURE__ */ import_react36.default.createElement(
4321
+ import_react_native20.Text,
3743
4322
  {
3744
4323
  style: [
3745
- styles16.resendText,
4324
+ styles18.resendText,
3746
4325
  { color: theme.colors.textSecondary }
3747
4326
  ]
3748
4327
  },
3749
4328
  "Resend OTP in ",
3750
4329
  resendCooldown,
3751
4330
  "s"
3752
- ) : /* @__PURE__ */ import_react32.default.createElement(
3753
- import_react_native17.Text,
4331
+ ) : /* @__PURE__ */ import_react36.default.createElement(
4332
+ import_react_native20.Text,
3754
4333
  {
3755
- style: [styles16.resendText, { color: theme.colors.primary }]
4334
+ style: [styles18.resendText, { color: theme.colors.primary }]
3756
4335
  },
3757
4336
  "Resend OTP"
3758
4337
  )
3759
- ))), /* @__PURE__ */ import_react32.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
4338
+ ))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
3760
4339
  };
3761
- var styles16 = import_react_native17.StyleSheet.create({
4340
+ var styles18 = import_react_native20.StyleSheet.create({
3762
4341
  headerContent: {
3763
4342
  flexDirection: "row",
3764
4343
  alignItems: "center"
@@ -3817,8 +4396,8 @@ var styles16 = import_react_native17.StyleSheet.create({
3817
4396
  });
3818
4397
 
3819
4398
  // src/molecules/Permissions.tsx
3820
- var import_react33 = __toESM(require("react"));
3821
- var import_react_native18 = require("react-native");
4399
+ var import_react37 = __toESM(require("react"));
4400
+ var import_react_native21 = require("react-native");
3822
4401
  var Permissions = ({
3823
4402
  open,
3824
4403
  onClose,
@@ -3826,8 +4405,8 @@ var Permissions = ({
3826
4405
  }) => {
3827
4406
  const { appName, linkToken, setUserConsent } = useKryptosConnect();
3828
4407
  const theme = useTheme();
3829
- const [isLoading, setIsLoading] = import_react33.default.useState(false);
3830
- const [errorMessage, setErrorMessage] = import_react33.default.useState("");
4408
+ const [isLoading, setIsLoading] = import_react37.default.useState(false);
4409
+ const [errorMessage, setErrorMessage] = import_react37.default.useState("");
3831
4410
  const handleConsentClick = async () => {
3832
4411
  try {
3833
4412
  setIsLoading(true);
@@ -3850,42 +4429,42 @@ var Permissions = ({
3850
4429
  "Access your transaction history and trading activity",
3851
4430
  "Keep this data updated and accessible when you're offline"
3852
4431
  ];
3853
- return /* @__PURE__ */ import_react33.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react33.default.createElement(ModalHeader, { onClose }, "Permissions"), /* @__PURE__ */ import_react33.default.createElement(ModalBody, null, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles17.container }, /* @__PURE__ */ import_react33.default.createElement(ConnectLogo, null), errorMessage ? /* @__PURE__ */ import_react33.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react33.default.createElement(AlertDescription, null, errorMessage)) : null, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles17.permissionsList }, /* @__PURE__ */ import_react33.default.createElement(
3854
- import_react_native18.Text,
4432
+ return /* @__PURE__ */ import_react37.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react37.default.createElement(ModalHeader, { onClose }, "Permissions"), /* @__PURE__ */ import_react37.default.createElement(ModalBody, null, /* @__PURE__ */ import_react37.default.createElement(import_react_native21.View, { style: styles19.container }, /* @__PURE__ */ import_react37.default.createElement(ConnectLogo, null), errorMessage ? /* @__PURE__ */ import_react37.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react37.default.createElement(AlertDescription, null, errorMessage)) : null, /* @__PURE__ */ import_react37.default.createElement(import_react_native21.View, { style: styles19.permissionsList }, /* @__PURE__ */ import_react37.default.createElement(
4433
+ import_react_native21.Text,
3855
4434
  {
3856
- style: [styles17.subtitle, { color: theme.colors.textSecondary }]
4435
+ style: [styles19.subtitle, { color: theme.colors.textSecondary }]
3857
4436
  },
3858
4437
  "Allow ",
3859
4438
  appName,
3860
4439
  " to:"
3861
- ), permissionItems.map((item, index) => /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { key: `permission-${index}`, style: styles17.permissionItem }, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: [styles17.bullet, { color: theme.colors.primary }] }, index + 1, "."), /* @__PURE__ */ import_react33.default.createElement(
3862
- import_react_native18.Text,
4440
+ ), permissionItems.map((item, index) => /* @__PURE__ */ import_react37.default.createElement(import_react_native21.View, { key: `permission-${index}`, style: styles19.permissionItem }, /* @__PURE__ */ import_react37.default.createElement(import_react_native21.Text, { style: [styles19.bullet, { color: theme.colors.primary }] }, index + 1, "."), /* @__PURE__ */ import_react37.default.createElement(
4441
+ import_react_native21.Text,
3863
4442
  {
3864
- style: [styles17.permissionText, { color: theme.colors.text }]
4443
+ style: [styles19.permissionText, { color: theme.colors.text }]
3865
4444
  },
3866
4445
  item
3867
- )))), /* @__PURE__ */ import_react33.default.createElement(
3868
- import_react_native18.View,
4446
+ )))), /* @__PURE__ */ import_react37.default.createElement(
4447
+ import_react_native21.View,
3869
4448
  {
3870
4449
  style: [
3871
- styles17.infoBox,
4450
+ styles19.infoBox,
3872
4451
  {
3873
4452
  backgroundColor: theme.colors.surface,
3874
4453
  borderColor: theme.colors.border
3875
4454
  }
3876
4455
  ]
3877
4456
  },
3878
- /* @__PURE__ */ import_react33.default.createElement(
3879
- import_react_native18.Text,
4457
+ /* @__PURE__ */ import_react37.default.createElement(
4458
+ import_react_native21.Text,
3880
4459
  {
3881
- style: [styles17.infoText, { color: theme.colors.textSecondary }]
4460
+ style: [styles19.infoText, { color: theme.colors.textSecondary }]
3882
4461
  },
3883
4462
  "By selecting",
3884
4463
  " ",
3885
- /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
4464
+ /* @__PURE__ */ import_react37.default.createElement(import_react_native21.Text, { style: { fontWeight: "600", color: theme.colors.text } }, "'Allow'"),
3886
4465
  ", you agree to share this information and keep it updated."
3887
4466
  )
3888
- ))), /* @__PURE__ */ import_react33.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react33.default.createElement(
4467
+ ))), /* @__PURE__ */ import_react37.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react37.default.createElement(
3889
4468
  Button,
3890
4469
  {
3891
4470
  variant: "outline",
@@ -3893,12 +4472,12 @@ var Permissions = ({
3893
4472
  onPress: handleConsentClick,
3894
4473
  loading: isLoading,
3895
4474
  disabled: isLoading,
3896
- style: styles17.button
4475
+ style: styles19.button
3897
4476
  },
3898
4477
  "Allow"
3899
- ), /* @__PURE__ */ import_react33.default.createElement(Footer, null)));
4478
+ ), /* @__PURE__ */ import_react37.default.createElement(Footer, null)));
3900
4479
  };
3901
- var styles17 = import_react_native18.StyleSheet.create({
4480
+ var styles19 = import_react_native21.StyleSheet.create({
3902
4481
  container: {
3903
4482
  flex: 1
3904
4483
  },
@@ -3956,8 +4535,8 @@ var styles17 = import_react_native18.StyleSheet.create({
3956
4535
  });
3957
4536
 
3958
4537
  // src/molecules/StatusModal.tsx
3959
- var import_react34 = __toESM(require("react"));
3960
- var import_react_native19 = require("react-native");
4538
+ var import_react38 = __toESM(require("react"));
4539
+ var import_react_native22 = require("react-native");
3961
4540
  var StatusModal = ({
3962
4541
  open,
3963
4542
  onClose,
@@ -3974,18 +4553,18 @@ var StatusModal = ({
3974
4553
  }
3975
4554
  onClose();
3976
4555
  };
3977
- return /* @__PURE__ */ import_react34.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "sm" }, /* @__PURE__ */ import_react34.default.createElement(ModalHeader, { showCloseButton: false, onClose: handleClose }, ""), /* @__PURE__ */ import_react34.default.createElement(ModalBody, null, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles18.container }, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles18.iconContainer }, status === "success" ? /* @__PURE__ */ import_react34.default.createElement(SuccessIcon, { size: 80 }) : /* @__PURE__ */ import_react34.default.createElement(ErrorIcon, { size: 80 })), /* @__PURE__ */ import_react34.default.createElement(import_react_native19.Text, { style: [styles18.message, { color: theme.colors.text }] }, status === "success" ? "Connection successful" : "Connection failed"))), /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
4556
+ return /* @__PURE__ */ import_react38.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "xl" }, /* @__PURE__ */ import_react38.default.createElement(ModalHeader, { showCloseButton: false, onClose: handleClose }, ""), /* @__PURE__ */ import_react38.default.createElement(ModalBody, null, /* @__PURE__ */ import_react38.default.createElement(import_react_native22.View, { style: styles20.container }, /* @__PURE__ */ import_react38.default.createElement(import_react_native22.View, { style: styles20.iconContainer }, status === "success" ? /* @__PURE__ */ import_react38.default.createElement(SuccessIcon, { size: 80 }) : /* @__PURE__ */ import_react38.default.createElement(ErrorIcon, { size: 80 })), /* @__PURE__ */ import_react38.default.createElement(import_react_native22.Text, { style: [styles20.message, { color: theme.colors.text }] }, status === "success" ? "Connection successful" : "Connection failed"), /* @__PURE__ */ import_react38.default.createElement(Alert, null, /* @__PURE__ */ import_react38.default.createElement(AlertTitle, null, "Sync in Progress"), /* @__PURE__ */ import_react38.default.createElement(AlertDescription, null, "The syncing process might take a moment. Please wait, and your data will be updated soon.")))), /* @__PURE__ */ import_react38.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react38.default.createElement(
3978
4557
  Button,
3979
4558
  {
3980
4559
  variant: "outline",
3981
4560
  size: "lg",
3982
4561
  onPress: status === "success" ? onSuccess : onError,
3983
- style: styles18.button
4562
+ style: styles20.button
3984
4563
  },
3985
4564
  status === "success" ? "Continue" : "Try again later"
3986
- ), /* @__PURE__ */ import_react34.default.createElement(Footer, null)));
4565
+ ), /* @__PURE__ */ import_react38.default.createElement(Footer, null)));
3987
4566
  };
3988
- var styles18 = import_react_native19.StyleSheet.create({
4567
+ var styles20 = import_react_native22.StyleSheet.create({
3989
4568
  container: {
3990
4569
  flex: 1,
3991
4570
  alignItems: "center",
@@ -4009,64 +4588,6 @@ var styles18 = import_react_native19.StyleSheet.create({
4009
4588
  }
4010
4589
  });
4011
4590
 
4012
- // src/molecules/EndModal.tsx
4013
- var import_react35 = __toESM(require("react"));
4014
- var import_react_native20 = require("react-native");
4015
- var EndModal = ({ open, onClose }) => {
4016
- const theme = useTheme();
4017
- (0, import_react35.useEffect)(() => {
4018
- if (!open) return;
4019
- const timer = setTimeout(() => {
4020
- onClose();
4021
- }, 5e3);
4022
- return () => clearTimeout(timer);
4023
- }, []);
4024
- return /* @__PURE__ */ import_react35.default.createElement(Modal, { isOpen: open, onClose, size: "md" }, /* @__PURE__ */ import_react35.default.createElement(ModalHeader, { onClose }, ""), /* @__PURE__ */ import_react35.default.createElement(ModalBody, null, /* @__PURE__ */ import_react35.default.createElement(import_react_native20.View, { style: styles19.container }, /* @__PURE__ */ import_react35.default.createElement(
4025
- import_react_native20.View,
4026
- {
4027
- style: [
4028
- styles19.iconContainer,
4029
- { backgroundColor: theme.colors.successLight }
4030
- ]
4031
- },
4032
- /* @__PURE__ */ import_react35.default.createElement(SuccessIcon, { size: 80 })
4033
- ), /* @__PURE__ */ import_react35.default.createElement(import_react_native20.Text, { style: [styles19.message, { color: theme.colors.text }] }, `All set! We're redirecting you back to the app. If it takes longer
4034
- than expected, tap the button below to continue.`))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react35.default.createElement(
4035
- Button,
4036
- {
4037
- variant: "primary",
4038
- size: "lg",
4039
- onPress: onClose,
4040
- style: styles19.button
4041
- },
4042
- "Continue to App"
4043
- ), /* @__PURE__ */ import_react35.default.createElement(Footer, null)));
4044
- };
4045
- var styles19 = import_react_native20.StyleSheet.create({
4046
- container: {
4047
- alignItems: "center",
4048
- paddingVertical: 20
4049
- },
4050
- iconContainer: {
4051
- width: 80,
4052
- height: 80,
4053
- borderRadius: 40,
4054
- alignItems: "center",
4055
- justifyContent: "center",
4056
- marginBottom: 20
4057
- },
4058
- message: {
4059
- fontSize: 14,
4060
- textAlign: "center",
4061
- lineHeight: 20,
4062
- marginBottom: 24,
4063
- paddingHorizontal: 20
4064
- },
4065
- button: {
4066
- width: "100%"
4067
- }
4068
- });
4069
-
4070
4591
  // src/KryptosConnectButton.tsx
4071
4592
  var KryptosConnectButton = ({
4072
4593
  children,
@@ -4074,17 +4595,18 @@ var KryptosConnectButton = ({
4074
4595
  onError,
4075
4596
  generateLinkToken,
4076
4597
  style,
4077
- textStyle
4598
+ textStyle,
4599
+ integrationName
4078
4600
  }) => {
4079
4601
  const { theme: themeName } = useKryptosConnect();
4080
- const [open, setOpen] = import_react36.default.useState(false);
4602
+ const [open, setOpen] = import_react39.default.useState(false);
4081
4603
  const theme = useTheme();
4082
- return /* @__PURE__ */ import_react36.default.createElement(import_react36.default.Fragment, null, children ? /* @__PURE__ */ import_react36.default.createElement(import_react_native21.TouchableOpacity, { onPress: () => setOpen(true), style }, children) : /* @__PURE__ */ import_react36.default.createElement(
4083
- import_react_native21.TouchableOpacity,
4604
+ return /* @__PURE__ */ import_react39.default.createElement(import_react39.default.Fragment, null, children ? /* @__PURE__ */ import_react39.default.createElement(import_react_native23.TouchableOpacity, { onPress: () => setOpen(true), style }, children) : /* @__PURE__ */ import_react39.default.createElement(
4605
+ import_react_native23.TouchableOpacity,
4084
4606
  {
4085
4607
  onPress: () => setOpen(true),
4086
4608
  style: [
4087
- styles20.defaultButton,
4609
+ styles21.defaultButton,
4088
4610
  themeName === "light" ? {
4089
4611
  backgroundColor: theme.colors.white,
4090
4612
  borderRadius: theme.borderRadius.md,
@@ -4098,11 +4620,11 @@ var KryptosConnectButton = ({
4098
4620
  ],
4099
4621
  activeOpacity: 0.8
4100
4622
  },
4101
- /* @__PURE__ */ import_react36.default.createElement(
4102
- import_react_native21.Text,
4623
+ /* @__PURE__ */ import_react39.default.createElement(
4624
+ import_react_native23.Text,
4103
4625
  {
4104
4626
  style: [
4105
- styles20.buttonText,
4627
+ styles21.buttonText,
4106
4628
  {
4107
4629
  color: themeName === "light" ? theme.colors.primary : theme.colors.white,
4108
4630
  fontSize: theme.fontSize.lg
@@ -4110,18 +4632,17 @@ var KryptosConnectButton = ({
4110
4632
  textStyle
4111
4633
  ]
4112
4634
  },
4113
- "Connect with",
4114
- " "
4115
- ),
4116
- /* @__PURE__ */ import_react36.default.createElement(LogoIcon, { size: 24 })
4117
- ), /* @__PURE__ */ import_react36.default.createElement(
4635
+ integrationName ? `Connect ${integrationName.charAt(0).toUpperCase() + integrationName.slice(1)} Account` : "Connect With Kryptos"
4636
+ )
4637
+ ), open && /* @__PURE__ */ import_react39.default.createElement(
4118
4638
  KryptosConnectModal,
4119
4639
  {
4120
4640
  open,
4121
4641
  setOpen,
4122
4642
  onSuccess,
4123
4643
  onError,
4124
- generateLinkToken
4644
+ generateLinkToken,
4645
+ integrationName
4125
4646
  }
4126
4647
  ));
4127
4648
  };
@@ -4130,7 +4651,8 @@ var KryptosConnectModal = ({
4130
4651
  setOpen,
4131
4652
  onSuccess,
4132
4653
  onError,
4133
- generateLinkToken
4654
+ generateLinkToken,
4655
+ integrationName
4134
4656
  }) => {
4135
4657
  const {
4136
4658
  setIsInitialized,
@@ -4142,7 +4664,20 @@ var KryptosConnectModal = ({
4142
4664
  isAuthorized,
4143
4665
  linkToken
4144
4666
  } = useKryptosConnect();
4145
- const [step, setStep] = import_react36.default.useState("INIT" /* INIT */);
4667
+ const [step, setStep] = import_react39.default.useState("INIT" /* INIT */);
4668
+ const [integrationDetails, setIntegrationDetails] = (0, import_react39.useState)(null);
4669
+ (0, import_react39.useEffect)(() => {
4670
+ if (integrationName && linkToken) {
4671
+ const fetchIntegrationDetails = async () => {
4672
+ const integrationDetails2 = await getSupportedProviders(
4673
+ linkToken,
4674
+ integrationName
4675
+ );
4676
+ setIntegrationDetails(integrationDetails2?.providers?.[0]);
4677
+ };
4678
+ fetchIntegrationDetails();
4679
+ }
4680
+ }, [integrationName, linkToken]);
4146
4681
  const handleClose = () => {
4147
4682
  setOpen(false);
4148
4683
  setIsInitialized(false);
@@ -4178,7 +4713,7 @@ var KryptosConnectModal = ({
4178
4713
  handleClose();
4179
4714
  };
4180
4715
  if (!open) return null;
4181
- return /* @__PURE__ */ import_react36.default.createElement(import_react_native21.View, { style: styles20.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react36.default.createElement(
4716
+ return /* @__PURE__ */ import_react39.default.createElement(import_react_native23.View, { style: styles21.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react39.default.createElement(
4182
4717
  Init,
4183
4718
  {
4184
4719
  open,
@@ -4192,7 +4727,7 @@ var KryptosConnectModal = ({
4192
4727
  },
4193
4728
  onClose: handleAbort
4194
4729
  }
4195
- ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react36.default.createElement(
4730
+ ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react39.default.createElement(
4196
4731
  Auth,
4197
4732
  {
4198
4733
  open,
@@ -4200,28 +4735,29 @@ var KryptosConnectModal = ({
4200
4735
  onGuestSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4201
4736
  onClose: handleAbort
4202
4737
  }
4203
- ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react36.default.createElement(
4738
+ ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react39.default.createElement(
4204
4739
  OTPVerify,
4205
4740
  {
4206
4741
  open,
4207
4742
  onSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4208
4743
  onClose: handleAbort
4209
4744
  }
4210
- ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react36.default.createElement(
4745
+ ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react39.default.createElement(
4211
4746
  Integration,
4212
4747
  {
4213
4748
  open,
4214
4749
  onSuccess: handleConsentClick,
4215
- onClose: handleAbort
4750
+ onClose: handleAbort,
4751
+ integrationDetails
4216
4752
  }
4217
- ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react36.default.createElement(
4753
+ ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react39.default.createElement(
4218
4754
  Permissions,
4219
4755
  {
4220
4756
  open,
4221
4757
  onClose: handleAbort,
4222
4758
  onSuccess: () => setStep("STATUS" /* STATUS */)
4223
4759
  }
4224
- ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react36.default.createElement(
4760
+ ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react39.default.createElement(
4225
4761
  StatusModal,
4226
4762
  {
4227
4763
  open,
@@ -4230,7 +4766,7 @@ var KryptosConnectModal = ({
4230
4766
  onError: handleError,
4231
4767
  status: userConsent?.public_token ? "success" : "error"
4232
4768
  }
4233
- ), step === "END" /* END */ && /* @__PURE__ */ import_react36.default.createElement(
4769
+ ), step === "END" /* END */ && /* @__PURE__ */ import_react39.default.createElement(
4234
4770
  EndModal,
4235
4771
  {
4236
4772
  open,
@@ -4242,7 +4778,7 @@ var KryptosConnectModal = ({
4242
4778
  }
4243
4779
  ));
4244
4780
  };
4245
- var styles20 = import_react_native21.StyleSheet.create({
4781
+ var styles21 = import_react_native23.StyleSheet.create({
4246
4782
  defaultButton: {
4247
4783
  flexDirection: "row",
4248
4784
  alignItems: "center",