@kryptos_connect/mobile-sdk 1.0.4 → 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_react37 = __toESM(require("react"));
42
- var import_react_native22 = 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"));
@@ -148,7 +111,7 @@ async function createAnonymousUser(linkToken, clientId) {
148
111
  }
149
112
  }
150
113
  );
151
- return res.data;
114
+ return res.data?.data;
152
115
  }
153
116
  async function addUserIntegration(linkToken, integration) {
154
117
  const res = await api.post(
@@ -184,8 +147,8 @@ async function testCredentials(linkToken, data) {
184
147
  });
185
148
  return res.data?.data;
186
149
  }
187
- async function getSupportedProviders(linkToken) {
188
- const res = await api.get("/integrations/providers", {
150
+ async function getSupportedProviders(linkToken, id) {
151
+ const res = await api.get(`/integrations/providers${id ? `?id=${id}` : ""}`, {
189
152
  headers: {
190
153
  "X-LINK-TOKEN": linkToken
191
154
  }
@@ -231,23 +194,23 @@ async function getUserInfo(linkToken) {
231
194
  // src/contexts/KryptosContext.tsx
232
195
  var globalBaseUrl;
233
196
  var getGlobalBaseUrl = () => globalBaseUrl;
234
- var KryptosContext = import_react2.default.createContext(
197
+ var KryptosContext = import_react.default.createContext(
235
198
  void 0
236
199
  );
237
200
  var KryptosConnectProvider = ({ children, config }) => {
238
- const [isInitialized, setIsInitialized] = import_react2.default.useState(false);
239
- const [linkToken, setLinkToken] = import_react2.default.useState("");
240
- const [user, setUser] = import_react2.default.useState(null);
241
- const [email, setEmail] = import_react2.default.useState("");
242
- 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(
243
206
  null
244
207
  );
245
- const [isAuthorized, setIsAuthorized] = import_react2.default.useState(false);
246
- const [clientInfo, setClientInfo] = import_react2.default.useState(null);
247
- 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(() => {
248
211
  globalBaseUrl = config.baseUrl;
249
212
  }, [config.baseUrl]);
250
- import_react2.default.useEffect(() => {
213
+ import_react.default.useEffect(() => {
251
214
  const fetchClientInfo = async () => {
252
215
  if (linkToken) {
253
216
  const res = await getClientInfo(linkToken);
@@ -256,7 +219,7 @@ var KryptosConnectProvider = ({ children, config }) => {
256
219
  };
257
220
  fetchClientInfo();
258
221
  }, [linkToken]);
259
- return /* @__PURE__ */ import_react2.default.createElement(
222
+ return /* @__PURE__ */ import_react.default.createElement(
260
223
  KryptosContext.Provider,
261
224
  {
262
225
  value: {
@@ -280,7 +243,7 @@ var KryptosConnectProvider = ({ children, config }) => {
280
243
  );
281
244
  };
282
245
  var useKryptosConnect = () => {
283
- const ctx = import_react2.default.useContext(KryptosContext);
246
+ const ctx = import_react.default.useContext(KryptosContext);
284
247
  if (!ctx)
285
248
  throw new Error(
286
249
  "useKryptosConnect must be used inside <KryptosConnectProvider>"
@@ -289,7 +252,7 @@ var useKryptosConnect = () => {
289
252
  };
290
253
 
291
254
  // src/hooks/useTheme.ts
292
- var import_react3 = __toESM(require("react"));
255
+ var import_react2 = __toESM(require("react"));
293
256
 
294
257
  // src/theme/index.ts
295
258
  var lightTheme = {
@@ -430,14 +393,14 @@ var getTheme = (isDark) => {
430
393
  // src/hooks/useTheme.ts
431
394
  var useTheme = () => {
432
395
  const { theme } = useKryptosConnect();
433
- const currentTheme = import_react3.default.useMemo(() => {
396
+ const currentTheme = import_react2.default.useMemo(() => {
434
397
  return getTheme(theme === "dark");
435
398
  }, [theme]);
436
399
  return currentTheme;
437
400
  };
438
401
 
439
402
  // src/components/Button.tsx
440
- var import_react4 = __toESM(require("react"));
403
+ var import_react3 = __toESM(require("react"));
441
404
  var import_react_native = require("react-native");
442
405
  var Button = ({
443
406
  variant = "primary",
@@ -550,7 +513,7 @@ var Button = ({
550
513
  }
551
514
  };
552
515
  const sizeStyles = getSizeStyles();
553
- return /* @__PURE__ */ import_react4.default.createElement(
516
+ return /* @__PURE__ */ import_react3.default.createElement(
554
517
  import_react_native.TouchableOpacity,
555
518
  {
556
519
  onPress,
@@ -564,7 +527,7 @@ var Button = ({
564
527
  style
565
528
  ]
566
529
  },
567
- 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(
568
531
  import_react_native.Text,
569
532
  {
570
533
  style: [
@@ -575,7 +538,7 @@ var Button = ({
575
538
  ]
576
539
  },
577
540
  children
578
- ) : /* @__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)
579
542
  );
580
543
  };
581
544
  var styles = import_react_native.StyleSheet.create({
@@ -600,7 +563,7 @@ var styles = import_react_native.StyleSheet.create({
600
563
  });
601
564
 
602
565
  // src/components/Input.tsx
603
- var import_react5 = __toESM(require("react"));
566
+ var import_react4 = __toESM(require("react"));
604
567
  var import_react_native2 = require("react-native");
605
568
  var Input = ({
606
569
  label,
@@ -624,7 +587,7 @@ var Input = ({
624
587
  return theme.colors.border;
625
588
  }
626
589
  };
627
- 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(
628
591
  import_react_native2.Text,
629
592
  {
630
593
  style: [
@@ -634,7 +597,7 @@ var Input = ({
634
597
  ]
635
598
  },
636
599
  label
637
- ), /* @__PURE__ */ import_react5.default.createElement(
600
+ ), /* @__PURE__ */ import_react4.default.createElement(
638
601
  import_react_native2.TextInput,
639
602
  {
640
603
  placeholderTextColor: theme.colors.textTertiary,
@@ -653,7 +616,7 @@ var Input = ({
653
616
  ],
654
617
  ...props
655
618
  }
656
- ), error && /* @__PURE__ */ import_react5.default.createElement(
619
+ ), error && /* @__PURE__ */ import_react4.default.createElement(
657
620
  import_react_native2.Text,
658
621
  {
659
622
  style: [
@@ -662,7 +625,7 @@ var Input = ({
662
625
  ]
663
626
  },
664
627
  error
665
- ), helperText && !error && /* @__PURE__ */ import_react5.default.createElement(
628
+ ), helperText && !error && /* @__PURE__ */ import_react4.default.createElement(
666
629
  import_react_native2.Text,
667
630
  {
668
631
  style: [
@@ -701,7 +664,7 @@ var styles2 = import_react_native2.StyleSheet.create({
701
664
  });
702
665
 
703
666
  // src/components/Alert.tsx
704
- var import_react6 = __toESM(require("react"));
667
+ var import_react5 = __toESM(require("react"));
705
668
  var import_react_native3 = require("react-native");
706
669
  var Alert = ({
707
670
  variant = "default",
@@ -723,7 +686,7 @@ var Alert = ({
723
686
  };
724
687
  }
725
688
  };
726
- return /* @__PURE__ */ import_react6.default.createElement(
689
+ return /* @__PURE__ */ import_react5.default.createElement(
727
690
  import_react_native3.View,
728
691
  {
729
692
  style: [
@@ -739,12 +702,30 @@ var Alert = ({
739
702
  children
740
703
  );
741
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
+ };
742
723
  var AlertDescription = ({
743
724
  children,
744
725
  style
745
726
  }) => {
746
727
  const theme = useTheme();
747
- return /* @__PURE__ */ import_react6.default.createElement(
728
+ return /* @__PURE__ */ import_react5.default.createElement(
748
729
  import_react_native3.Text,
749
730
  {
750
731
  style: [
@@ -777,18 +758,18 @@ var styles3 = import_react_native3.StyleSheet.create({
777
758
  });
778
759
 
779
760
  // src/components/Modal.tsx
780
- var import_react8 = __toESM(require("react"));
761
+ var import_react7 = __toESM(require("react"));
781
762
  var import_react_native4 = require("react-native");
782
763
 
783
764
  // src/assets/CloseIcon.tsx
784
- var import_react7 = __toESM(require("react"));
785
- 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"));
786
767
  var CloseIcon = ({
787
768
  size = 20,
788
769
  color = "#000"
789
770
  }) => {
790
- 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(
791
- 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,
792
773
  {
793
774
  d: "M15 5L5 15M5 5L15 15",
794
775
  stroke: color,
@@ -814,7 +795,7 @@ var Modal = ({
814
795
  const getSizeStyles = () => {
815
796
  switch (size) {
816
797
  case "xs":
817
- return { maxHeight: SCREEN_HEIGHT * 0.35 };
798
+ return { maxHeight: SCREEN_HEIGHT * 0.4 };
818
799
  case "sm":
819
800
  return { maxHeight: SCREEN_HEIGHT * 0.45 };
820
801
  case "md":
@@ -832,13 +813,13 @@ var Modal = ({
832
813
  const handleOverlayPress = () => {
833
814
  if (!disableClose && closeOnOverlayClick) onClose();
834
815
  };
835
- return /* @__PURE__ */ import_react8.default.createElement(
816
+ return /* @__PURE__ */ import_react7.default.createElement(
836
817
  import_react_native4.KeyboardAvoidingView,
837
818
  {
838
819
  behavior: import_react_native4.Platform.OS === "ios" ? "padding" : "height",
839
820
  style: styles4.keyboardView
840
821
  },
841
- /* @__PURE__ */ import_react8.default.createElement(
822
+ /* @__PURE__ */ import_react7.default.createElement(
842
823
  import_react_native4.Modal,
843
824
  {
844
825
  visible: isOpen,
@@ -847,14 +828,14 @@ var Modal = ({
847
828
  statusBarTranslucent: true,
848
829
  onRequestClose: disableClose ? void 0 : onClose
849
830
  },
850
- /* @__PURE__ */ import_react8.default.createElement(
831
+ /* @__PURE__ */ import_react7.default.createElement(
851
832
  import_react_native4.TouchableOpacity,
852
833
  {
853
834
  activeOpacity: 1,
854
835
  style: [styles4.overlay, { backgroundColor: theme.colors.overlay }],
855
836
  onPress: handleOverlayPress
856
837
  },
857
- /* @__PURE__ */ import_react8.default.createElement(
838
+ /* @__PURE__ */ import_react7.default.createElement(
858
839
  import_react_native4.View,
859
840
  {
860
841
  style: [
@@ -885,7 +866,7 @@ var ModalHeader = ({
885
866
  style
886
867
  }) => {
887
868
  const theme = useTheme();
888
- return /* @__PURE__ */ import_react8.default.createElement(
869
+ return /* @__PURE__ */ import_react7.default.createElement(
889
870
  import_react_native4.View,
890
871
  {
891
872
  style: [
@@ -898,7 +879,7 @@ var ModalHeader = ({
898
879
  style
899
880
  ]
900
881
  },
901
- /* @__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(
902
883
  import_react_native4.Text,
903
884
  {
904
885
  style: [
@@ -908,7 +889,7 @@ var ModalHeader = ({
908
889
  },
909
890
  children
910
891
  ) : children),
911
- showCloseButton && onClose && /* @__PURE__ */ import_react8.default.createElement(
892
+ showCloseButton && onClose && /* @__PURE__ */ import_react7.default.createElement(
912
893
  import_react_native4.TouchableOpacity,
913
894
  {
914
895
  onPress: onClose,
@@ -918,7 +899,7 @@ var ModalHeader = ({
918
899
  { backgroundColor: theme.colors.surface }
919
900
  ]
920
901
  },
921
- /* @__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 })
922
903
  )
923
904
  );
924
905
  };
@@ -929,7 +910,7 @@ var ModalBody = ({
929
910
  }) => {
930
911
  const theme = useTheme();
931
912
  if (scrollable) {
932
- return /* @__PURE__ */ import_react8.default.createElement(
913
+ return /* @__PURE__ */ import_react7.default.createElement(
933
914
  import_react_native4.ScrollView,
934
915
  {
935
916
  style: styles4.bodyScroll,
@@ -944,14 +925,14 @@ var ModalBody = ({
944
925
  children
945
926
  );
946
927
  }
947
- 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);
948
929
  };
949
930
  var ModalFooter = ({
950
931
  children,
951
932
  style
952
933
  }) => {
953
934
  const theme = useTheme();
954
- return /* @__PURE__ */ import_react8.default.createElement(
935
+ return /* @__PURE__ */ import_react7.default.createElement(
955
936
  import_react_native4.View,
956
937
  {
957
938
  style: [
@@ -1025,7 +1006,7 @@ var styles4 = import_react_native4.StyleSheet.create({
1025
1006
  });
1026
1007
 
1027
1008
  // src/components/OTP.tsx
1028
- var import_react9 = __toESM(require("react"));
1009
+ var import_react8 = __toESM(require("react"));
1029
1010
  var import_react_native5 = require("react-native");
1030
1011
  var OTP = ({
1031
1012
  length = 6,
@@ -1041,11 +1022,11 @@ var OTP = ({
1041
1022
  }) => {
1042
1023
  const theme = useTheme();
1043
1024
  const AUTO_SUBMIT_DELAY = 500;
1044
- const [otp, setOtp] = import_react9.default.useState(
1025
+ const [otp, setOtp] = import_react8.default.useState(
1045
1026
  value.split("").concat(Array(length).fill("")).slice(0, length)
1046
1027
  );
1047
- const inputRefs = import_react9.default.useRef([]);
1048
- import_react9.default.useEffect(() => {
1028
+ const inputRefs = import_react8.default.useRef([]);
1029
+ import_react8.default.useEffect(() => {
1049
1030
  const isComplete = otp.every((digit) => digit !== "");
1050
1031
  let timer;
1051
1032
  if (isComplete && onComplete) {
@@ -1057,12 +1038,12 @@ var OTP = ({
1057
1038
  if (timer) clearTimeout(timer);
1058
1039
  };
1059
1040
  }, [otp, onComplete]);
1060
- import_react9.default.useEffect(() => {
1041
+ import_react8.default.useEffect(() => {
1061
1042
  setTimeout(() => {
1062
1043
  inputRefs.current[0]?.focus();
1063
1044
  }, 100);
1064
1045
  }, []);
1065
- const handleChange = import_react9.default.useCallback(
1046
+ const handleChange = import_react8.default.useCallback(
1066
1047
  (index, val) => {
1067
1048
  if (disabled) return;
1068
1049
  setErrorMessage("");
@@ -1085,7 +1066,7 @@ var OTP = ({
1085
1066
  },
1086
1067
  [otp, length, onChange, onComplete, disabled]
1087
1068
  );
1088
- const handleKeyPress = import_react9.default.useCallback(
1069
+ const handleKeyPress = import_react8.default.useCallback(
1089
1070
  (index, e) => {
1090
1071
  if (disabled) return;
1091
1072
  if (e.nativeEvent.key === "Backspace") {
@@ -1106,7 +1087,7 @@ var OTP = ({
1106
1087
  if (otp[index]) return theme.colors.success;
1107
1088
  return theme.colors.border;
1108
1089
  };
1109
- 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(
1110
1091
  import_react_native5.Text,
1111
1092
  {
1112
1093
  style: [
@@ -1115,7 +1096,7 @@ var OTP = ({
1115
1096
  ]
1116
1097
  },
1117
1098
  label
1118
- ), /* @__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(
1119
1100
  import_react_native5.TextInput,
1120
1101
  {
1121
1102
  key: index,
@@ -1140,7 +1121,7 @@ var OTP = ({
1140
1121
  selectTextOnFocus: true,
1141
1122
  caretHidden: true
1142
1123
  }
1143
- ))), error && /* @__PURE__ */ import_react9.default.createElement(
1124
+ ))), error && /* @__PURE__ */ import_react8.default.createElement(
1144
1125
  import_react_native5.Text,
1145
1126
  {
1146
1127
  style: [
@@ -1183,11 +1164,11 @@ var styles5 = import_react_native5.StyleSheet.create({
1183
1164
  });
1184
1165
 
1185
1166
  // src/components/SkeletonItem.tsx
1186
- var import_react10 = __toESM(require("react"));
1167
+ var import_react9 = __toESM(require("react"));
1187
1168
  var import_react_native6 = require("react-native");
1188
1169
  var SkeletonItem = () => {
1189
- const opacity = (0, import_react10.useRef)(new import_react_native6.Animated.Value(0.3)).current;
1190
- (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)(() => {
1191
1172
  import_react_native6.Animated.loop(
1192
1173
  import_react_native6.Animated.sequence([
1193
1174
  import_react_native6.Animated.timing(opacity, {
@@ -1203,7 +1184,7 @@ var SkeletonItem = () => {
1203
1184
  ])
1204
1185
  ).start();
1205
1186
  }, []);
1206
- 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 })));
1207
1188
  };
1208
1189
  var styles6 = import_react_native6.StyleSheet.create({
1209
1190
  row: {
@@ -1238,14 +1219,14 @@ var styles6 = import_react_native6.StyleSheet.create({
1238
1219
  var SkeletonItem_default = SkeletonItem;
1239
1220
 
1240
1221
  // src/components/Mode.tsx
1241
- var import_react11 = __toESM(require("react"));
1222
+ var import_react10 = __toESM(require("react"));
1242
1223
  var import_react_native7 = require("react-native");
1243
1224
  var Mode = () => {
1244
1225
  const { clientInfo } = useKryptosConnect();
1245
1226
  const theme = useTheme();
1246
1227
  if (!clientInfo) return null;
1247
1228
  if (clientInfo?.project_stage === "production") return null;
1248
- 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"));
1249
1230
  };
1250
1231
  var styles7 = import_react_native7.StyleSheet.create({
1251
1232
  container: {
@@ -1268,6 +1249,45 @@ var import_react_native9 = require("react-native");
1268
1249
  // src/components/PoweredByKryptos.tsx
1269
1250
  var import_react12 = __toESM(require("react"));
1270
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
1271
1291
  var PoweredByKryptos = () => {
1272
1292
  const theme = useTheme();
1273
1293
  const handlePress = () => {
@@ -1772,9 +1792,101 @@ var styles11 = import_react_native12.StyleSheet.create({
1772
1792
  }
1773
1793
  });
1774
1794
 
1775
- // src/molecules/Init.tsx
1776
- var import_react21 = __toESM(require("react"));
1795
+ // src/molecules/EndModal.tsx
1796
+ var import_react22 = __toESM(require("react"));
1777
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
+
1887
+ // src/molecules/Init.tsx
1888
+ var import_react23 = __toESM(require("react"));
1889
+ var import_react_native14 = require("react-native");
1778
1890
  var Init = ({
1779
1891
  open,
1780
1892
  onSuccess,
@@ -1789,9 +1901,9 @@ var Init = ({
1789
1901
  setUser
1790
1902
  } = useKryptosConnect();
1791
1903
  const theme = useTheme();
1792
- const [isFetching, setIsFetching] = import_react21.default.useState(false);
1793
- const [error, setError] = import_react21.default.useState(null);
1794
- const fetchLinkToken = import_react21.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 () => {
1795
1907
  if (!open) return;
1796
1908
  setIsFetching(true);
1797
1909
  setError(null);
@@ -1818,28 +1930,28 @@ var Init = ({
1818
1930
  setIsFetching(false);
1819
1931
  }
1820
1932
  }, []);
1821
- import_react21.default.useEffect(() => {
1933
+ import_react23.default.useEffect(() => {
1822
1934
  fetchLinkToken();
1823
1935
  }, [fetchLinkToken]);
1824
- return /* @__PURE__ */ import_react21.default.createElement(Modal, { isOpen: open, onClose, size: "xs" }, /* @__PURE__ */ import_react21.default.createElement(ModalHeader, { onClose }, "Kryptos Connect"), /* @__PURE__ */ import_react21.default.createElement(ModalBody, null, /* @__PURE__ */ import_react21.default.createElement(import_react_native13.View, { style: styles12.container }, isFetching && /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement(
1825
- import_react_native13.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,
1826
1938
  {
1827
1939
  size: "large",
1828
1940
  color: theme.colors.primary,
1829
- style: styles12.spinner
1941
+ style: styles13.spinner
1830
1942
  }
1831
- ), /* @__PURE__ */ import_react21.default.createElement(import_react_native13.Text, { style: [styles12.message, { color: theme.colors.text }] }, isInitialized ? "Fetching link token..." : "Initializing...")), !isFetching && error && /* @__PURE__ */ import_react21.default.createElement(import_react21.default.Fragment, null, /* @__PURE__ */ import_react21.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react21.default.createElement(AlertDescription, null, error)), /* @__PURE__ */ import_react21.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(
1832
1944
  Button,
1833
1945
  {
1834
1946
  variant: "primary",
1835
1947
  size: "lg",
1836
1948
  onPress: fetchLinkToken,
1837
- style: styles12.retryButton
1949
+ style: styles13.retryButton
1838
1950
  },
1839
1951
  "Retry"
1840
- )))), /* @__PURE__ */ import_react21.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react21.default.createElement(Footer, null)));
1952
+ )))), /* @__PURE__ */ import_react23.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react23.default.createElement(Footer, null)));
1841
1953
  };
1842
- var styles12 = import_react_native13.StyleSheet.create({
1954
+ var styles13 = import_react_native14.StyleSheet.create({
1843
1955
  container: {
1844
1956
  flex: 1,
1845
1957
  alignItems: "center",
@@ -1866,18 +1978,18 @@ var styles12 = import_react_native13.StyleSheet.create({
1866
1978
  });
1867
1979
 
1868
1980
  // src/molecules/Integration.tsx
1869
- var import_react32 = __toESM(require("react"));
1870
- var import_react_native17 = require("react-native");
1981
+ var import_react35 = __toESM(require("react"));
1982
+ var import_react_native19 = require("react-native");
1871
1983
 
1872
1984
  // src/assets/ArrowLeftIcon.tsx
1873
- var import_react22 = __toESM(require("react"));
1874
- var import_react_native_svg8 = __toESM(require("react-native-svg"));
1985
+ var import_react24 = __toESM(require("react"));
1986
+ var import_react_native_svg9 = __toESM(require("react-native-svg"));
1875
1987
  var ArrowLeftIcon = ({
1876
1988
  size = 20,
1877
1989
  color = "#000"
1878
1990
  }) => {
1879
- 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(
1880
- import_react_native_svg8.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,
1881
1993
  {
1882
1994
  d: "M19 12H5M12 19l-7-7 7-7",
1883
1995
  stroke: color,
@@ -1889,14 +2001,14 @@ var ArrowLeftIcon = ({
1889
2001
  };
1890
2002
 
1891
2003
  // src/assets/CheckCircleIcon.tsx
1892
- var import_react23 = __toESM(require("react"));
1893
- var import_react_native_svg9 = __toESM(require("react-native-svg"));
2004
+ var import_react25 = __toESM(require("react"));
2005
+ var import_react_native_svg10 = __toESM(require("react-native-svg"));
1894
2006
  var CheckCircleIcon = ({
1895
2007
  size = 20,
1896
2008
  color = "#10B981"
1897
2009
  }) => {
1898
- return /* @__PURE__ */ import_react23.default.createElement(import_react_native_svg9.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none" }, /* @__PURE__ */ import_react23.default.createElement(
1899
- import_react_native_svg9.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,
1900
2012
  {
1901
2013
  cx: 12,
1902
2014
  cy: 12,
@@ -1904,8 +2016,8 @@ var CheckCircleIcon = ({
1904
2016
  stroke: color,
1905
2017
  strokeWidth: 2
1906
2018
  }
1907
- ), /* @__PURE__ */ import_react23.default.createElement(
1908
- import_react_native_svg9.Path,
2019
+ ), /* @__PURE__ */ import_react25.default.createElement(
2020
+ import_react_native_svg10.Path,
1909
2021
  {
1910
2022
  d: "m9 12 2 2 4-4",
1911
2023
  stroke: color,
@@ -1917,21 +2029,21 @@ var CheckCircleIcon = ({
1917
2029
  };
1918
2030
 
1919
2031
  // src/assets/LoaderIcon.tsx
1920
- var import_react24 = __toESM(require("react"));
1921
- var import_react_native14 = require("react-native");
1922
- var import_react_native_svg10 = __toESM(require("react-native-svg"));
1923
- var AnimatedSvg = import_react_native14.Animated.createAnimatedComponent(import_react_native_svg10.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);
1924
2036
  var LoaderIcon = ({
1925
2037
  size = 20,
1926
2038
  color = "#00C693"
1927
2039
  }) => {
1928
- const rotateAnim = import_react24.default.useRef(new import_react_native14.Animated.Value(0)).current;
1929
- import_react24.default.useEffect(() => {
1930
- import_react_native14.Animated.loop(
1931
- import_react_native14.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, {
1932
2044
  toValue: 1,
1933
2045
  duration: 1e3,
1934
- easing: import_react_native14.Easing.linear,
2046
+ easing: import_react_native15.Easing.linear,
1935
2047
  useNativeDriver: true
1936
2048
  })
1937
2049
  ).start();
@@ -1940,7 +2052,7 @@ var LoaderIcon = ({
1940
2052
  inputRange: [0, 1],
1941
2053
  outputRange: ["0deg", "360deg"]
1942
2054
  });
1943
- return /* @__PURE__ */ import_react24.default.createElement(
2055
+ return /* @__PURE__ */ import_react26.default.createElement(
1944
2056
  AnimatedSvg,
1945
2057
  {
1946
2058
  width: size,
@@ -1949,8 +2061,8 @@ var LoaderIcon = ({
1949
2061
  fill: "none",
1950
2062
  style: { transform: [{ rotate: spin }] }
1951
2063
  },
1952
- /* @__PURE__ */ import_react24.default.createElement(
1953
- import_react_native_svg10.Path,
2064
+ /* @__PURE__ */ import_react26.default.createElement(
2065
+ import_react_native_svg11.Path,
1954
2066
  {
1955
2067
  d: "M21 12a9 9 0 1 1-6.219-8.56",
1956
2068
  stroke: color,
@@ -1962,44 +2074,11 @@ var LoaderIcon = ({
1962
2074
  );
1963
2075
  };
1964
2076
 
1965
- // src/assets/SuccessIcon.tsx
1966
- var import_react25 = __toESM(require("react"));
1967
- var import_react_native_svg11 = __toESM(require("react-native-svg"));
1968
- var SuccessIcon = ({ size = 64 }) => {
1969
- 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(
1970
- import_react_native_svg11.Circle,
1971
- {
1972
- cx: 32,
1973
- cy: 32,
1974
- r: 30,
1975
- fill: "#00C693",
1976
- opacity: 0.1
1977
- }
1978
- ), /* @__PURE__ */ import_react25.default.createElement(
1979
- import_react_native_svg11.Circle,
1980
- {
1981
- cx: 32,
1982
- cy: 32,
1983
- r: 24,
1984
- fill: "#00C693"
1985
- }
1986
- ), /* @__PURE__ */ import_react25.default.createElement(
1987
- import_react_native_svg11.Path,
1988
- {
1989
- d: "M24 32l6 6 12-12",
1990
- stroke: "white",
1991
- strokeWidth: 3,
1992
- strokeLinecap: "round",
1993
- strokeLinejoin: "round"
1994
- }
1995
- ));
1996
- };
1997
-
1998
2077
  // src/assets/ErrorIcon.tsx
1999
- var import_react26 = __toESM(require("react"));
2078
+ var import_react27 = __toESM(require("react"));
2000
2079
  var import_react_native_svg12 = __toESM(require("react-native-svg"));
2001
2080
  var ErrorIcon = ({ size = 64 }) => {
2002
- return /* @__PURE__ */ import_react26.default.createElement(import_react_native_svg12.default, { width: size, height: size, viewBox: "0 0 64 64", fill: "none" }, /* @__PURE__ */ import_react26.default.createElement(
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(
2003
2082
  import_react_native_svg12.Circle,
2004
2083
  {
2005
2084
  cx: 32,
@@ -2008,7 +2087,7 @@ var ErrorIcon = ({ size = 64 }) => {
2008
2087
  fill: "#EF4444",
2009
2088
  opacity: 0.1
2010
2089
  }
2011
- ), /* @__PURE__ */ import_react26.default.createElement(
2090
+ ), /* @__PURE__ */ import_react27.default.createElement(
2012
2091
  import_react_native_svg12.Circle,
2013
2092
  {
2014
2093
  cx: 32,
@@ -2016,7 +2095,7 @@ var ErrorIcon = ({ size = 64 }) => {
2016
2095
  r: 24,
2017
2096
  fill: "#EF4444"
2018
2097
  }
2019
- ), /* @__PURE__ */ import_react26.default.createElement(
2098
+ ), /* @__PURE__ */ import_react27.default.createElement(
2020
2099
  import_react_native_svg12.Path,
2021
2100
  {
2022
2101
  d: "M24 24l16 16M40 24l-16 16",
@@ -2029,17 +2108,17 @@ var ErrorIcon = ({ size = 64 }) => {
2029
2108
  };
2030
2109
 
2031
2110
  // src/assets/SearchIcon.tsx
2032
- var import_react27 = __toESM(require("react"));
2111
+ var import_react28 = __toESM(require("react"));
2033
2112
  var import_react_native_svg13 = __toESM(require("react-native-svg"));
2034
2113
 
2035
2114
  // src/assets/PlusIcon.tsx
2036
- var import_react28 = __toESM(require("react"));
2115
+ var import_react29 = __toESM(require("react"));
2037
2116
  var import_react_native_svg14 = __toESM(require("react-native-svg"));
2038
2117
  var PlusIcon = ({
2039
2118
  size = 14,
2040
2119
  color = "#6B7280"
2041
2120
  }) => {
2042
- return /* @__PURE__ */ import_react28.default.createElement(import_react_native_svg14.default, { width: size, height: size, viewBox: "0 0 14 14", fill: "none" }, /* @__PURE__ */ import_react28.default.createElement(
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(
2043
2122
  import_react_native_svg14.Path,
2044
2123
  {
2045
2124
  d: "M7 3.5v7M3.5 7h7",
@@ -2050,14 +2129,52 @@ var PlusIcon = ({
2050
2129
  ));
2051
2130
  };
2052
2131
 
2053
- // src/wallet-connect/index.tsx
2054
- var import_appkit_react_native3 = require("@reown/appkit-react-native");
2132
+ // src/assets/RedirectIcon.tsx
2055
2133
  var import_react30 = __toESM(require("react"));
2056
- var import_react_native15 = require("react-native");
2057
-
2058
- // src/utils/uuid.ts
2059
- function generateUUID() {
2060
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
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
+
2170
+ // src/wallet-connect/index.tsx
2171
+ var import_appkit_react_native3 = require("@reown/appkit-react-native");
2172
+ var import_react32 = __toESM(require("react"));
2173
+ var import_react_native16 = require("react-native");
2174
+
2175
+ // src/utils/uuid.ts
2176
+ function generateUUID() {
2177
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
2061
2178
  const r = Math.random() * 16 | 0;
2062
2179
  const v = c === "x" ? r : r & 3 | 8;
2063
2180
  return v.toString(16);
@@ -2065,7 +2182,7 @@ function generateUUID() {
2065
2182
  }
2066
2183
 
2067
2184
  // src/wallet-connect/wallet-connect.tsx
2068
- var import_react29 = __toESM(require("react"));
2185
+ var import_react31 = __toESM(require("react"));
2069
2186
  var import_appkit_react_native2 = require("@reown/appkit-react-native");
2070
2187
 
2071
2188
  // src/wallet-connect/AppKitConfig.ts
@@ -2164,7 +2281,7 @@ var createAppKitInstance = (projectId) => {
2164
2281
  // src/wallet-connect/wallet-connect.tsx
2165
2282
  var WalletConnectWrapper = ({ children }) => {
2166
2283
  const { walletConnectProjectId } = useKryptosConnect();
2167
- const appKit = import_react29.default.useMemo(() => {
2284
+ const appKit = import_react31.default.useMemo(() => {
2168
2285
  if (!walletConnectProjectId) {
2169
2286
  console.warn(
2170
2287
  "walletConnectProjectId is missing in KryptosConnectProvider config"
@@ -2174,9 +2291,9 @@ var WalletConnectWrapper = ({ children }) => {
2174
2291
  return createAppKitInstance(walletConnectProjectId);
2175
2292
  }, [walletConnectProjectId]);
2176
2293
  if (!appKit) {
2177
- return /* @__PURE__ */ import_react29.default.createElement(import_react29.default.Fragment, null, children);
2294
+ return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, children);
2178
2295
  }
2179
- return /* @__PURE__ */ import_react29.default.createElement(import_appkit_react_native2.AppKitProvider, { instance: appKit }, /* @__PURE__ */ import_react29.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);
2180
2297
  };
2181
2298
  var wallet_connect_default = WalletConnectWrapper;
2182
2299
 
@@ -2188,47 +2305,48 @@ var WalletConnectComponent = ({
2188
2305
  handleClose,
2189
2306
  modalOpen,
2190
2307
  setAddIntegrationMode,
2191
- providersList
2308
+ providersList,
2309
+ errorMessage
2192
2310
  }) => {
2193
2311
  const { walletConnectProjectId } = useKryptosConnect();
2194
2312
  const theme = useTheme();
2195
2313
  if (!walletConnectProjectId) {
2196
- return /* @__PURE__ */ import_react30.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react30.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react30.default.createElement(
2197
- import_react_native15.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,
2198
2316
  {
2199
2317
  onPress: () => {
2200
2318
  setAddIntegrationMode(null);
2201
2319
  },
2202
- style: styles13.backButton
2320
+ style: styles14.backButton
2203
2321
  },
2204
- /* @__PURE__ */ import_react30.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2205
- ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react30.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.emptyState }, /* @__PURE__ */ import_react30.default.createElement(
2206
- import_react_native15.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,
2207
2325
  {
2208
- style: [styles13.emptyStateTitle, { color: theme.colors.text }]
2326
+ style: [styles14.emptyStateTitle, { color: theme.colors.text }]
2209
2327
  },
2210
2328
  "WalletConnect is not configured"
2211
- ), /* @__PURE__ */ import_react30.default.createElement(
2212
- import_react_native15.Text,
2329
+ ), /* @__PURE__ */ import_react32.default.createElement(
2330
+ import_react_native16.Text,
2213
2331
  {
2214
2332
  style: [
2215
- styles13.infoText,
2333
+ styles14.infoText,
2216
2334
  { color: theme.colors.textSecondary, textAlign: "center" }
2217
2335
  ]
2218
2336
  },
2219
2337
  "Please add a walletConnectProjectId to KryptosConnectProvider to enable wallet connections."
2220
- ), /* @__PURE__ */ import_react30.default.createElement(
2338
+ ), /* @__PURE__ */ import_react32.default.createElement(
2221
2339
  Button,
2222
2340
  {
2223
2341
  variant: "outline",
2224
2342
  size: "sm",
2225
2343
  onPress: () => setAddIntegrationMode(null),
2226
- style: styles13.emptyStateButton
2344
+ style: styles14.emptyStateButton
2227
2345
  },
2228
2346
  "Go back"
2229
2347
  ))));
2230
2348
  }
2231
- return /* @__PURE__ */ import_react30.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react30.default.createElement(
2349
+ return /* @__PURE__ */ import_react32.default.createElement(wallet_connect_default, null, /* @__PURE__ */ import_react32.default.createElement(
2232
2350
  ConnectButton,
2233
2351
  {
2234
2352
  integration,
@@ -2237,7 +2355,8 @@ var WalletConnectComponent = ({
2237
2355
  handleClose,
2238
2356
  modalOpen,
2239
2357
  setAddIntegrationMode,
2240
- providersList
2358
+ providersList,
2359
+ errorMessage
2241
2360
  }
2242
2361
  ));
2243
2362
  };
@@ -2247,28 +2366,35 @@ function ConnectButton({
2247
2366
  handleClose,
2248
2367
  modalOpen,
2249
2368
  setAddIntegrationMode,
2250
- providersList
2369
+ providersList,
2370
+ errorMessage: errorMessageProp
2251
2371
  }) {
2252
2372
  const theme = useTheme();
2253
2373
  const { open, disconnect } = (0, import_appkit_react_native3.useAppKit)();
2254
2374
  const { address, isConnected } = (0, import_appkit_react_native3.useAccount)();
2255
2375
  const { linkToken, user, clientId } = useKryptosConnect();
2256
- const [selectedChains, setSelectedChains] = (0, import_react30.useState)(/* @__PURE__ */ new Set());
2257
- const [errorMessage, setErrorMessage] = (0, import_react30.useState)("");
2258
- const [chainErrors, setChainErrors] = (0, import_react30.useState)({});
2259
- const [isLoading, setIsLoading] = (0, import_react30.useState)(false);
2260
- const [userUsedChains, setUserUsedChains] = (0, import_react30.useState)([]);
2261
- const [isFetchingChains, setIsFetchingChains] = (0, import_react30.useState)(false);
2262
- const availableChains = (0, import_react30.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)(() => {
2263
2383
  if (userUsedChains.length > 0) {
2264
2384
  return userUsedChains;
2265
2385
  }
2266
2386
  if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2267
- 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
+ });
2268
2394
  }
2269
2395
  return [];
2270
- }, [userUsedChains, integration.walletSupportedChains]);
2271
- (0, import_react30.useEffect)(() => {
2396
+ }, [userUsedChains, integration.walletSupportedChains, providersList]);
2397
+ (0, import_react32.useEffect)(() => {
2272
2398
  if (!isConnected || !address || !address.trim()) {
2273
2399
  setUserUsedChains([]);
2274
2400
  setSelectedChains(/* @__PURE__ */ new Set());
@@ -2287,7 +2413,16 @@ function ConnectButton({
2287
2413
  }
2288
2414
  }
2289
2415
  if (chains.length === 0 && integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2290
- 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
+ );
2291
2426
  }
2292
2427
  if (chains.length > 0) {
2293
2428
  setUserUsedChains(chains);
@@ -2299,11 +2434,21 @@ function ConnectButton({
2299
2434
  } catch (error) {
2300
2435
  console.error("Failed to fetch user chains:", error);
2301
2436
  if (integration.walletSupportedChains && integration.walletSupportedChains.length > 0) {
2302
- 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);
2303
2448
  setSelectedChains(
2304
2449
  new Set(
2305
2450
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2306
- integration.walletSupportedChains.map((chain) => chain.id)
2451
+ validChains.map((chain) => chain.id)
2307
2452
  )
2308
2453
  );
2309
2454
  } else {
@@ -2323,7 +2468,8 @@ function ConnectButton({
2323
2468
  address,
2324
2469
  isConnected,
2325
2470
  integration.isEvmWallet,
2326
- integration.walletSupportedChains
2471
+ integration.walletSupportedChains,
2472
+ providersList
2327
2473
  ]);
2328
2474
  const validateForm = () => {
2329
2475
  if (!address) {
@@ -2360,11 +2506,11 @@ function ConnectButton({
2360
2506
  source: provider?.id,
2361
2507
  credential: {
2362
2508
  address,
2363
- userId: user?.user_id || "0",
2509
+ userId: user?.user_id || "",
2364
2510
  projectId: provider?.projectId,
2365
- apiKey: "0",
2366
- secret: "0",
2367
- privateKey: "0",
2511
+ apiKey: "",
2512
+ secret: "",
2513
+ privateKey: "",
2368
2514
  alias,
2369
2515
  walletId,
2370
2516
  exchange: provider?.id
@@ -2403,10 +2549,9 @@ function ConnectButton({
2403
2549
  default_chain_logo: integration?.logo || "",
2404
2550
  type: provider.type || "",
2405
2551
  isNftSupported: provider?.isEvmWallet || provider?.nftSupport || false,
2552
+ isCustomWallet: false,
2406
2553
  chainId: provider?.community_id,
2407
- credsData: {
2408
- address
2409
- }
2554
+ address: address?.trim()
2410
2555
  };
2411
2556
  integrationsToAdd.push(data);
2412
2557
  } else {
@@ -2425,7 +2570,7 @@ function ConnectButton({
2425
2570
  return;
2426
2571
  }
2427
2572
  if (integrationsToAdd.length > 0) {
2428
- onAddHandle(integrationsToAdd);
2573
+ await onAddHandle(integrationsToAdd);
2429
2574
  if (isConnected) {
2430
2575
  disconnect();
2431
2576
  }
@@ -2438,7 +2583,7 @@ function ConnectButton({
2438
2583
  const err = error;
2439
2584
  console.error(error);
2440
2585
  setErrorMessage(
2441
- err?.response?.data?.message || "Failed to add integration"
2586
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to add integrations"
2442
2587
  );
2443
2588
  } finally {
2444
2589
  setIsLoading(false);
@@ -2458,8 +2603,14 @@ function ConnectButton({
2458
2603
  setChainErrors(newErrors);
2459
2604
  }
2460
2605
  };
2461
- return /* @__PURE__ */ import_react30.default.createElement(Modal, { isOpen: modalOpen, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react30.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.headerContent }, /* @__PURE__ */ import_react30.default.createElement(
2462
- import_react_native15.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,
2463
2614
  {
2464
2615
  onPress: () => {
2465
2616
  setAddIntegrationMode(null);
@@ -2467,26 +2618,26 @@ function ConnectButton({
2467
2618
  disconnect();
2468
2619
  }
2469
2620
  },
2470
- style: styles13.backButton
2621
+ style: styles14.backButton
2471
2622
  },
2472
- /* @__PURE__ */ import_react30.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
2473
- ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react30.default.createElement(ModalBody, { scrollable: false, style: styles13.contentContainer }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.header }, integration.logo ? isSvgUrl(integration.logo) ? /* @__PURE__ */ import_react30.default.createElement(RemoteSvg, { uri: integration.logo }) : /* @__PURE__ */ import_react30.default.createElement(
2474
- import_react_native15.Image,
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,
2475
2626
  {
2476
2627
  source: { uri: integration.logo },
2477
- style: styles13.logo,
2628
+ style: styles14.logo,
2478
2629
  resizeMode: "contain"
2479
2630
  }
2480
- ) : /* @__PURE__ */ import_react30.default.createElement(
2481
- import_react_native15.View,
2631
+ ) : /* @__PURE__ */ import_react32.default.createElement(
2632
+ import_react_native16.View,
2482
2633
  {
2483
2634
  style: [
2484
- styles13.logoPlaceholder,
2635
+ styles14.logoPlaceholder,
2485
2636
  { backgroundColor: theme.colors.surface }
2486
2637
  ]
2487
2638
  },
2488
- /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: { color: theme.colors.text } }, integration.name?.charAt(0) || "?")
2489
- ), /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.name, { color: theme.colors.text }] }, integration.name)), !isConnected ? /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.infoText, { color: theme.colors.text }] }, "Connect your wallet to continue"), /* @__PURE__ */ import_react30.default.createElement(
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(
2490
2641
  Button,
2491
2642
  {
2492
2643
  variant: "primary",
@@ -2494,111 +2645,132 @@ function ConnectButton({
2494
2645
  onPress: () => open({ view: "Connect" })
2495
2646
  },
2496
2647
  "Connect Wallet"
2497
- )) : /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.connectedContainer }, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.connectedHeader }, /* @__PURE__ */ import_react30.default.createElement(
2498
- import_react_native15.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,
2499
2650
  {
2500
- style: [styles13.connectedTitle, { color: theme.colors.text }]
2651
+ style: [styles14.connectedTitle, { color: theme.colors.text }]
2501
2652
  },
2502
2653
  "Wallet Connected"
2503
- ), /* @__PURE__ */ import_react30.default.createElement(
2504
- import_react_native15.Text,
2654
+ ), /* @__PURE__ */ import_react32.default.createElement(
2655
+ import_react_native16.Text,
2505
2656
  {
2506
- style: [styles13.connectedText, { color: theme.colors.text }]
2657
+ style: [styles14.connectedText, { color: theme.colors.text }]
2507
2658
  },
2508
2659
  "Address: ",
2509
2660
  address
2510
- ), /* @__PURE__ */ import_react30.default.createElement(Button, { variant: "ghost", size: "sm", onPress: () => disconnect() }, "Disconnect Wallet"), isFetchingChains ? /* @__PURE__ */ import_react30.default.createElement(
2511
- import_react_native15.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,
2512
2663
  {
2513
- style: [styles13.fetchingText, { color: theme.colors.text }]
2664
+ style: [styles14.fetchingText, { color: theme.colors.text }]
2514
2665
  },
2515
2666
  "Fetching chains..."
2516
- ) : null), availableChains.length > 0 && address && /* @__PURE__ */ import_react30.default.createElement(
2517
- import_react_native15.ScrollView,
2518
- {
2519
- style: styles13.scrollView,
2520
- contentContainerStyle: styles13.scrollViewContent,
2521
- showsVerticalScrollIndicator: true,
2522
- nestedScrollEnabled: true
2523
- },
2524
- /* @__PURE__ */ import_react30.default.createElement(import_react_native15.Text, { style: [styles13.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"),
2525
- /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, null, /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.chainChips }, availableChains.map((chain) => {
2526
- const isSelected = selectedChains.has(chain.id);
2527
- const hasError = chainErrors[chain.id];
2528
- return /* @__PURE__ */ import_react30.default.createElement(
2529
- import_react_native15.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,
2530
2679
  {
2531
- onPress: () => toggleChainSelection(chain.id),
2532
- style: styles13.chainButton,
2533
- 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
+ ]
2534
2687
  },
2535
- /* @__PURE__ */ import_react30.default.createElement(
2536
- import_react_native15.View,
2688
+ /* @__PURE__ */ import_react32.default.createElement(
2689
+ import_react_native16.Text,
2537
2690
  {
2538
2691
  style: [
2539
- styles13.chainChip,
2692
+ styles14.chainName,
2540
2693
  {
2541
- backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
2542
- 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
2543
2695
  }
2544
2696
  ]
2545
2697
  },
2546
- /* @__PURE__ */ import_react30.default.createElement(
2547
- import_react_native15.Text,
2548
- {
2549
- style: [
2550
- styles13.chainName,
2551
- {
2552
- color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
2553
- }
2554
- ]
2555
- },
2556
- chain.id
2557
- ),
2558
- isSelected ? /* @__PURE__ */ import_react30.default.createElement(
2559
- CloseIcon,
2560
- {
2561
- size: 12,
2562
- color: hasError ? theme.colors.error : theme.colors.primary
2563
- }
2564
- ) : /* @__PURE__ */ import_react30.default.createElement(
2565
- PlusIcon,
2566
- {
2567
- size: 12,
2568
- color: theme.colors.textSecondary
2569
- }
2570
- )
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
+ }
2571
2712
  )
2572
- );
2573
- })), errorMessage ? /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.errorMessageContainer }, /* @__PURE__ */ import_react30.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react30.default.createElement(AlertDescription, null, errorMessage))) : null, Object.keys(chainErrors || {}).length > 0 && /* @__PURE__ */ import_react30.default.createElement(import_react_native15.View, { style: styles13.chainErrorsContainer }, /* @__PURE__ */ import_react30.default.createElement(
2574
- import_react_native15.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,
2575
2724
  {
2576
2725
  style: [
2577
- styles13.chainErrorsTitle,
2578
- { color: theme.colors.error }
2726
+ styles14.chainChip,
2727
+ styles14.chainChipRemoveAll,
2728
+ {
2729
+ borderWidth: 0,
2730
+ backgroundColor: "transparent"
2731
+ }
2579
2732
  ]
2580
2733
  },
2581
- "Errors:"
2582
- ), Object.entries(chainErrors).map(([chainId, error]) => {
2583
- const chain = availableChains.find(
2584
- (c) => c.id === chainId
2585
- );
2586
- return /* @__PURE__ */ import_react30.default.createElement(
2587
- import_react_native15.Text,
2734
+ /* @__PURE__ */ import_react32.default.createElement(
2735
+ import_react_native16.Text,
2588
2736
  {
2589
- key: chainId,
2590
2737
  style: [
2591
- styles13.chainErrorItem,
2592
- { color: theme.colors.error }
2738
+ styles14.chainName,
2739
+ { color: theme.colors.primary }
2593
2740
  ]
2594
2741
  },
2595
- "\u2022 ",
2596
- chain?.name ?? chainId,
2597
- ": ",
2598
- String(error)
2599
- );
2600
- })))
2601
- ))), availableChains.length > 0 && address && /* @__PURE__ */ import_react30.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react30.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(
2602
2774
  Button,
2603
2775
  {
2604
2776
  variant: "outline",
@@ -2606,14 +2778,20 @@ function ConnectButton({
2606
2778
  onPress: onSubmitWalletConnect,
2607
2779
  loading: isLoading,
2608
2780
  disabled: isLoading || !!address && availableChains.length > 0 && selectedChains.size === 0,
2609
- style: styles13.button
2781
+ style: styles14.button
2610
2782
  },
2611
2783
  selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size > 1 ? "s" : ""}` : "Add Integration"
2612
- ), /* @__PURE__ */ import_react30.default.createElement(Footer, null)));
2784
+ ), /* @__PURE__ */ import_react32.default.createElement(Footer, null)));
2613
2785
  }
2614
- var styles13 = import_react_native15.StyleSheet.create({
2786
+ var styles14 = import_react_native16.StyleSheet.create({
2615
2787
  connectedContainer: {
2616
- flex: 1
2788
+ flexShrink: 0
2789
+ },
2790
+ chainListWrapper: {
2791
+ marginTop: 8
2792
+ },
2793
+ chainListContent: {
2794
+ paddingBottom: 8
2617
2795
  },
2618
2796
  connectedHeader: {
2619
2797
  marginBottom: 8
@@ -2627,13 +2805,6 @@ var styles13 = import_react_native15.StyleSheet.create({
2627
2805
  marginBottom: 8,
2628
2806
  textAlign: "center"
2629
2807
  },
2630
- scrollView: {
2631
- flex: 1
2632
- },
2633
- scrollViewContent: {
2634
- paddingBottom: 40,
2635
- flexGrow: 1
2636
- },
2637
2808
  errorMessageContainer: {
2638
2809
  marginTop: 16
2639
2810
  },
@@ -2657,10 +2828,8 @@ var styles13 = import_react_native15.StyleSheet.create({
2657
2828
  // theme.spacing.xl
2658
2829
  paddingBottom: 20,
2659
2830
  width: "100%",
2660
- overflow: "hidden",
2661
2831
  alignSelf: "center",
2662
- flexDirection: "column",
2663
- flex: 1
2832
+ flexDirection: "column"
2664
2833
  },
2665
2834
  chainTitle: {
2666
2835
  fontSize: 14,
@@ -2686,6 +2855,11 @@ var styles13 = import_react_native15.StyleSheet.create({
2686
2855
  // theme.borderRadius.md
2687
2856
  borderWidth: 1
2688
2857
  },
2858
+ chainChipRemoveAll: {
2859
+ marginTop: 6,
2860
+ // theme.spacing.sm - separate from chain list
2861
+ width: "auto"
2862
+ },
2689
2863
  chainName: {
2690
2864
  fontSize: 12,
2691
2865
  fontWeight: "500",
@@ -2760,37 +2934,314 @@ var styles13 = import_react_native15.StyleSheet.create({
2760
2934
  });
2761
2935
 
2762
2936
  // src/molecules/IntegrationForm.tsx
2763
- var import_react31 = __toESM(require("react"));
2764
- var import_react_native16 = require("react-native");
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: {
3169
+ flexDirection: "row",
3170
+ alignItems: "center",
3171
+ justifyContent: "space-between",
3172
+ paddingVertical: 12,
3173
+ paddingHorizontal: 16,
3174
+ borderBottomWidth: 1
3175
+ },
3176
+ triggerText: {
3177
+ fontSize: 14,
3178
+ fontWeight: "600"
3179
+ },
3180
+ chevron: {
3181
+ fontSize: 12
3182
+ },
3183
+ content: {
3184
+ paddingVertical: 12,
3185
+ paddingHorizontal: 16,
3186
+ borderBottomWidth: 1
3187
+ },
3188
+ list: {
3189
+ paddingLeft: 4
3190
+ },
3191
+ listItem: {
3192
+ fontSize: 13,
3193
+ lineHeight: 20,
3194
+ marginBottom: 6
3195
+ },
3196
+ orderedItem: {
3197
+ marginLeft: 0
3198
+ },
3199
+ bulletItem: {
3200
+ marginLeft: 0
3201
+ },
3202
+ videoLink: {
3203
+ marginTop: 8,
3204
+ paddingVertical: 8,
3205
+ paddingHorizontal: 12
3206
+ },
3207
+ videoLinkText: {
3208
+ fontSize: 13,
3209
+ fontWeight: "500"
3210
+ }
3211
+ });
3212
+
3213
+ // src/molecules/IntegrationForm.tsx
2765
3214
  var IntegrationForm = ({
2766
3215
  metadata,
2767
3216
  onAddHandle,
2768
3217
  open,
2769
3218
  setAddIntegrationMode,
2770
3219
  handleClose,
2771
- providersList
3220
+ providersList,
3221
+ errorMessage: errorMessageProp,
3222
+ showBackButton = true
2772
3223
  }) => {
2773
3224
  const { clientId, linkToken, user } = useKryptosConnect();
2774
3225
  const theme = useTheme();
2775
- const [isLoading, setIsLoading] = import_react31.default.useState(false);
2776
- const [isFetchingChains, setIsFetchingChains] = import_react31.default.useState(false);
2777
- const [userUsedChains, setUserUsedChains] = import_react31.default.useState([]);
2778
- const [selectedChains, setSelectedChains] = import_react31.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(
2779
3230
  /* @__PURE__ */ new Set()
2780
3231
  );
2781
- const [chainErrors, setChainErrors] = import_react31.default.useState(
3232
+ const [chainErrors, setChainErrors] = import_react34.default.useState(
2782
3233
  {}
2783
3234
  );
2784
- const [errorMessage, setErrorMessage] = import_react31.default.useState("");
2785
- const [formValues, setFormValues] = import_react31.default.useState({
3235
+ const [errorMessage, setErrorMessage] = import_react34.default.useState("");
3236
+ const [formValues, setFormValues] = import_react34.default.useState({
2786
3237
  address: "",
2787
3238
  account_name: "",
2788
3239
  api_key: "",
2789
3240
  secret_key: "",
2790
3241
  password: ""
2791
3242
  });
2792
- const [formErrors, setFormErrors] = import_react31.default.useState({});
2793
- import_react31.default.useEffect(() => {
3243
+ const [formErrors, setFormErrors] = import_react34.default.useState({});
3244
+ import_react34.default.useEffect(() => {
2794
3245
  if (!formValues.address || !formValues.address.trim()) {
2795
3246
  setUserUsedChains([]);
2796
3247
  setSelectedChains(/* @__PURE__ */ new Set());
@@ -2873,18 +3324,18 @@ var IntegrationForm = ({
2873
3324
  const credentialTestsData = chainsToProcess.map((chain) => {
2874
3325
  const walletId = generateUUID();
2875
3326
  const displaySuffix = primaryField.length >= 8 ? `${primaryField.slice(0, 4)}...${primaryField.slice(-4)}` : primaryField;
2876
- const alias = `${metadata.id} - ${chain.name} (${displaySuffix})`;
3327
+ const alias = `${metadata.id} - ${chain?.name || ""} (${displaySuffix})`;
2877
3328
  const credential = {
2878
3329
  source: metadata.id,
2879
3330
  credential: {
2880
- apiKey: formValues.api_key?.trim() || "0",
2881
- secret: formValues.secret_key?.trim() || "0",
2882
- accountName: formValues.account_name?.trim() || "0",
2883
- address: formValues.address?.trim() || "0",
2884
- password: formValues.password?.trim() || "0",
2885
- userId: user?.user_id || "0",
2886
- projectId: metadata?.projectId || "0",
2887
- 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: "",
2888
3339
  alias,
2889
3340
  walletId,
2890
3341
  exchange: metadata.id
@@ -2918,11 +3369,12 @@ var IntegrationForm = ({
2918
3369
  },
2919
3370
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2920
3371
  default_chain: chain.name,
2921
- default_chain_logo: chain.logo || null,
3372
+ default_chain_logo: "",
2922
3373
  type: metadata.type,
2923
3374
  isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
2924
3375
  chainId: chain?.community_id || "",
2925
- address: formValues.address
3376
+ address: formValues.address,
3377
+ isCustomWallet: false
2926
3378
  };
2927
3379
  if (formValues.account_name)
2928
3380
  data.accountName = formValues.account_name;
@@ -2932,10 +3384,9 @@ var IntegrationForm = ({
2932
3384
  integrationsToAdd.push(data);
2933
3385
  } else {
2934
3386
  if (result.status === "rejected") {
2935
- const reason = result.reason;
2936
- errors[chain.id] = reason?.response?.data?.message || "Failed to process chain";
3387
+ errors[chain.id] = result.reason?.response?.data?.message || "Failed to process chain";
2937
3388
  } else if (result.status === "fulfilled") {
2938
- errors[chain.id] = result.value?.value?.message || "Failed to verify chain";
3389
+ errors[chain.id] = result.value?.message || "Failed to verify chain";
2939
3390
  }
2940
3391
  }
2941
3392
  });
@@ -2953,14 +3404,14 @@ var IntegrationForm = ({
2953
3404
  const credential = {
2954
3405
  source: metadata.id,
2955
3406
  credential: {
2956
- apiKey: formValues.api_key?.trim() || "0",
2957
- secret: formValues.secret_key?.trim() || "0",
2958
- accountName: formValues.account_name?.trim() || "0",
2959
- address: formValues.address?.trim() || "0",
2960
- password: formValues.password?.trim() || "0",
2961
- userId: user?.user_id || "0",
2962
- projectId: metadata?.projectId || "0",
2963
- 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: "",
2964
3415
  alias,
2965
3416
  walletId,
2966
3417
  exchange: metadata.id
@@ -2968,9 +3419,7 @@ var IntegrationForm = ({
2968
3419
  };
2969
3420
  const testResult = await testCredentials(linkToken, { ...credential });
2970
3421
  if (!testResult?.valid) {
2971
- setErrorMessage(
2972
- testResult?.value?.message || "Credentials are invalid"
2973
- );
3422
+ setErrorMessage(testResult?.message || "Credentials are invalid");
2974
3423
  return;
2975
3424
  }
2976
3425
  const data = {
@@ -2989,14 +3438,12 @@ var IntegrationForm = ({
2989
3438
  clientId,
2990
3439
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
2991
3440
  },
2992
- metadata: {
2993
- environment: "sandbox"
2994
- },
2995
3441
  addedOn: (/* @__PURE__ */ new Date()).getTime(),
2996
3442
  default_chain: metadata.id,
2997
- default_chain_logo: null,
3443
+ default_chain_logo: "",
2998
3444
  type: metadata.type,
2999
- isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false
3445
+ isNftSupported: metadata.isEvmWallet || metadata.nftSupport || false,
3446
+ isCustomWallet: false
3000
3447
  };
3001
3448
  if (metadata.community_id) {
3002
3449
  data.chainId = metadata.community_id;
@@ -3009,7 +3456,7 @@ var IntegrationForm = ({
3009
3456
  integrationsToAdd.push(data);
3010
3457
  }
3011
3458
  if (integrationsToAdd.length > 0) {
3012
- onAddHandle(integrationsToAdd);
3459
+ await onAddHandle(integrationsToAdd);
3013
3460
  setFormErrors({});
3014
3461
  setFormValues({
3015
3462
  address: "",
@@ -3023,10 +3470,9 @@ var IntegrationForm = ({
3023
3470
  setErrorMessage("No integrations could be added. Please try again.");
3024
3471
  }
3025
3472
  } catch (error) {
3026
- const err = error;
3027
3473
  console.error(error);
3028
3474
  setErrorMessage(
3029
- err?.response?.data?.message || "Failed to add integration"
3475
+ error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations"
3030
3476
  );
3031
3477
  } finally {
3032
3478
  setIsLoading(false);
@@ -3034,24 +3480,24 @@ var IntegrationForm = ({
3034
3480
  };
3035
3481
  const hasNoFields = !metadata.password && !metadata.secret_key && !metadata.api_key && !metadata.address && !metadata.account_name;
3036
3482
  const shouldShowFormFields = metadata.password || metadata.secret_key || metadata.api_key || metadata.address || metadata.account_name;
3037
- const renderLogo = () => metadata.logo ? isSvgUrl(metadata.logo) ? /* @__PURE__ */ import_react31.default.createElement(RemoteSvg, { uri: metadata.logo }) : /* @__PURE__ */ import_react31.default.createElement(
3038
- import_react_native16.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,
3039
3485
  {
3040
3486
  source: { uri: metadata.logo },
3041
- style: styles14.logo,
3487
+ style: styles16.logo,
3042
3488
  resizeMode: "contain"
3043
3489
  }
3044
- ) : /* @__PURE__ */ import_react31.default.createElement(
3045
- import_react_native16.View,
3490
+ ) : /* @__PURE__ */ import_react34.default.createElement(
3491
+ import_react_native18.View,
3046
3492
  {
3047
3493
  style: [
3048
- styles14.logoPlaceholder,
3494
+ styles16.logoPlaceholder,
3049
3495
  { backgroundColor: theme.colors.surface }
3050
3496
  ]
3051
3497
  },
3052
- /* @__PURE__ */ import_react31.default.createElement(import_react_native16.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) || "?")
3053
3499
  );
3054
- const renderInput = (key, props) => /* @__PURE__ */ import_react31.default.createElement(
3500
+ const renderInput = (key, props) => /* @__PURE__ */ import_react34.default.createElement(
3055
3501
  Input,
3056
3502
  {
3057
3503
  placeholder: props.placeholder,
@@ -3063,33 +3509,33 @@ var IntegrationForm = ({
3063
3509
  secureTextEntry: props.secureTextEntry
3064
3510
  }
3065
3511
  );
3066
- const renderErrorAlert = () => errorMessage ? /* @__PURE__ */ import_react31.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react31.default.createElement(AlertDescription, null, errorMessage)) : null;
3067
- const renderChainSelection = () => userUsedChains.length > 0 && formValues.address && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.chainSelection }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles14.chainTitle, { color: theme.colors.text }] }, "Select Chains to Add:"), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.ScrollView, { contentContainerStyle: styles14.scrollViewContent }, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.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) => {
3068
3514
  const isSelected = selectedChains.has(chain.id);
3069
3515
  const hasError = chainErrors[chain.id];
3070
- return /* @__PURE__ */ import_react31.default.createElement(
3071
- import_react_native16.TouchableOpacity,
3516
+ return /* @__PURE__ */ import_react34.default.createElement(
3517
+ import_react_native18.TouchableOpacity,
3072
3518
  {
3073
3519
  onPress: () => toggleChainSelection(chain.id),
3074
- style: styles14.chainButton,
3520
+ style: styles16.chainButton,
3075
3521
  key: chain.id
3076
3522
  },
3077
- /* @__PURE__ */ import_react31.default.createElement(
3078
- import_react_native16.View,
3523
+ /* @__PURE__ */ import_react34.default.createElement(
3524
+ import_react_native18.View,
3079
3525
  {
3080
3526
  style: [
3081
- styles14.chainChip,
3527
+ styles16.chainChip,
3082
3528
  {
3083
3529
  backgroundColor: hasError ? theme.colors.errorLight : isSelected ? theme.colors.primary + "20" : theme.colors.surface,
3084
3530
  borderColor: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.border
3085
3531
  }
3086
3532
  ]
3087
3533
  },
3088
- /* @__PURE__ */ import_react31.default.createElement(
3089
- import_react_native16.Text,
3534
+ /* @__PURE__ */ import_react34.default.createElement(
3535
+ import_react_native18.Text,
3090
3536
  {
3091
3537
  style: [
3092
- styles14.chainName,
3538
+ styles16.chainName,
3093
3539
  {
3094
3540
  color: hasError ? theme.colors.error : isSelected ? theme.colors.primary : theme.colors.text
3095
3541
  }
@@ -3097,28 +3543,55 @@ var IntegrationForm = ({
3097
3543
  },
3098
3544
  chain.name
3099
3545
  ),
3100
- isSelected ? /* @__PURE__ */ import_react31.default.createElement(
3546
+ isSelected ? /* @__PURE__ */ import_react34.default.createElement(
3101
3547
  CloseIcon,
3102
3548
  {
3103
3549
  size: 12,
3104
3550
  color: hasError ? theme.colors.error : theme.colors.primary
3105
3551
  }
3106
- ) : /* @__PURE__ */ import_react31.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
3552
+ ) : /* @__PURE__ */ import_react34.default.createElement(PlusIcon, { size: 12, color: theme.colors.textSecondary })
3107
3553
  )
3108
3554
  );
3109
- }))), Object.keys(chainErrors).length > 0 && /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.chainErrorsContainer }, /* @__PURE__ */ import_react31.default.createElement(
3110
- import_react_native16.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,
3111
3584
  {
3112
- style: [styles14.chainErrorsTitle, { color: theme.colors.error }]
3585
+ style: [styles16.chainErrorsTitle, { color: theme.colors.error }]
3113
3586
  },
3114
3587
  "Errors:"
3115
3588
  ), Object.entries(chainErrors).map(([chainId, error]) => {
3116
3589
  const chain = userUsedChains.find((c) => c.id === chainId);
3117
- return /* @__PURE__ */ import_react31.default.createElement(
3118
- import_react_native16.Text,
3590
+ return /* @__PURE__ */ import_react34.default.createElement(
3591
+ import_react_native18.Text,
3119
3592
  {
3120
3593
  key: chainId,
3121
- style: [styles14.chainErrorItem, { color: theme.colors.error }]
3594
+ style: [styles16.chainErrorItem, { color: theme.colors.error }]
3122
3595
  },
3123
3596
  "\u2022 ",
3124
3597
  chain?.name,
@@ -3126,7 +3599,7 @@ var IntegrationForm = ({
3126
3599
  error
3127
3600
  );
3128
3601
  })));
3129
- const renderFormBlock = () => /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, /* @__PURE__ */ import_react31.default.createElement(import_react_native16.View, { style: styles14.header }, renderLogo(), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles14.name, { color: theme.colors.text }] }, metadata.name)), renderErrorAlert(), shouldShowFormFields && /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, metadata.address && /* @__PURE__ */ import_react31.default.createElement(import_react31.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", {
3130
3603
  placeholder: "Enter address",
3131
3604
  autoCapitalize: "none",
3132
3605
  autoCorrect: false
@@ -3142,16 +3615,23 @@ var IntegrationForm = ({
3142
3615
  }), metadata.password && renderInput("password", {
3143
3616
  placeholder: "Enter Password",
3144
3617
  secureTextEntry: true
3145
- })), hasNoFields && !metadata?.isWalletConnectSupported && /* @__PURE__ */ import_react31.default.createElement(Alert, { variant: "default", style: { marginTop: 12 } }, /* @__PURE__ */ import_react31.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.")));
3146
3619
  const addIntegrationLabel = formValues.address && userUsedChains.length > 0 && selectedChains.size > 0 ? `Add ${selectedChains.size} Chain${selectedChains.size !== 1 ? "s" : ""}` : "Add Integration";
3147
- return /* @__PURE__ */ import_react31.default.createElement(import_react31.default.Fragment, null, !metadata?.isWalletConnectSupported ? /* @__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: styles14.headerContent }, /* @__PURE__ */ import_react31.default.createElement(
3148
- import_react_native16.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,
3149
3622
  {
3150
3623
  onPress: () => setAddIntegrationMode(null),
3151
- style: styles14.backButton
3624
+ style: styles16.backButton
3152
3625
  },
3153
- /* @__PURE__ */ import_react31.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3154
- ), /* @__PURE__ */ import_react31.default.createElement(import_react_native16.Text, { style: [styles14.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react31.default.createElement(ModalBody, { scrollable: false, style: styles14.contentContainer }, renderFormBlock()), !hasNoFields && /* @__PURE__ */ import_react31.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react31.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(
3155
3635
  Button,
3156
3636
  {
3157
3637
  variant: "outline",
@@ -3159,10 +3639,10 @@ var IntegrationForm = ({
3159
3639
  onPress: handleSubmit,
3160
3640
  loading: isLoading,
3161
3641
  disabled: isLoading || isFetchingChains || !!formValues.address && userUsedChains.length > 0 && selectedChains.size === 0,
3162
- style: styles14.button
3642
+ style: styles16.button
3163
3643
  },
3164
3644
  addIntegrationLabel
3165
- ), /* @__PURE__ */ import_react31.default.createElement(Footer, null))) : /* @__PURE__ */ import_react31.default.createElement(
3645
+ ), /* @__PURE__ */ import_react34.default.createElement(Footer, null))) : /* @__PURE__ */ import_react34.default.createElement(
3166
3646
  WalletConnectComponent,
3167
3647
  {
3168
3648
  integration: metadata,
@@ -3171,14 +3651,14 @@ var IntegrationForm = ({
3171
3651
  modalOpen: open,
3172
3652
  setAddIntegrationMode,
3173
3653
  handleClose,
3174
- providersList
3654
+ providersList,
3655
+ errorMessage: errorMessageProp
3175
3656
  }
3176
3657
  ));
3177
3658
  };
3178
- var styles14 = import_react_native16.StyleSheet.create({
3179
- scrollViewContent: {
3180
- flexGrow: 1,
3181
- paddingBottom: 100
3659
+ var styles16 = import_react_native18.StyleSheet.create({
3660
+ chainListContent: {
3661
+ paddingBottom: 8
3182
3662
  },
3183
3663
  headerContent: {
3184
3664
  flexDirection: "row",
@@ -3203,10 +3683,8 @@ var styles14 = import_react_native16.StyleSheet.create({
3203
3683
  // theme.spacing.xl
3204
3684
  paddingBottom: 40,
3205
3685
  width: "100%",
3206
- overflow: "hidden",
3207
3686
  alignSelf: "center",
3208
- flexDirection: "column",
3209
- flex: 1
3687
+ flexDirection: "column"
3210
3688
  },
3211
3689
  header: {
3212
3690
  flexDirection: "row",
@@ -3238,7 +3716,7 @@ var styles14 = import_react_native16.StyleSheet.create({
3238
3716
  textTransform: "capitalize"
3239
3717
  },
3240
3718
  chainSelection: {
3241
- marginBottom: 16
3719
+ marginBottom: 8
3242
3720
  // theme.spacing.lg
3243
3721
  },
3244
3722
  chainTitle: {
@@ -3265,6 +3743,11 @@ var styles14 = import_react_native16.StyleSheet.create({
3265
3743
  // theme.borderRadius.md
3266
3744
  borderWidth: 1
3267
3745
  },
3746
+ chainChipRemoveAll: {
3747
+ marginTop: 6,
3748
+ // theme.spacing.sm - separate from chain list
3749
+ width: "auto"
3750
+ },
3268
3751
  chainName: {
3269
3752
  fontSize: 12,
3270
3753
  fontWeight: "500",
@@ -3300,18 +3783,23 @@ var styles14 = import_react_native16.StyleSheet.create({
3300
3783
  var Integration = ({
3301
3784
  open,
3302
3785
  onSuccess,
3303
- onClose
3786
+ onClose,
3787
+ integrationDetails
3304
3788
  }) => {
3305
3789
  const { appName, linkToken } = useKryptosConnect();
3306
3790
  const theme = useTheme();
3307
- const [addIntegrationMode, setAddIntegrationMode] = import_react32.default.useState(null);
3308
- const [query, setQuery] = import_react32.default.useState("");
3309
- const [activeTab, setActiveTab] = import_react32.default.useState("all");
3310
- const [supportedProviders, setSupportedProviders] = import_react32.default.useState([]);
3311
- const [addedIntegrations, setAddedIntegrations] = import_react32.default.useState([]);
3312
- const [existingIntegrations, setExistingIntegrations] = import_react32.default.useState([]);
3313
- const [isLoading, setIsLoading] = import_react32.default.useState(false);
3314
- const [errorMessage, setErrorMessage] = import_react32.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]);
3315
3803
  const handleClose = () => {
3316
3804
  onClose();
3317
3805
  };
@@ -3322,7 +3810,7 @@ var Integration = ({
3322
3810
  } catch (error) {
3323
3811
  const err = error;
3324
3812
  setErrorMessage(
3325
- err?.response?.data?.message || "Failed to fetch existing integrations"
3813
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch existing integrations"
3326
3814
  );
3327
3815
  console.error(error);
3328
3816
  }
@@ -3335,38 +3823,38 @@ var Integration = ({
3335
3823
  } catch (error) {
3336
3824
  const err = error;
3337
3825
  setErrorMessage(
3338
- err?.response?.data?.message || "Failed to fetch supported providers"
3826
+ err?.response?.data?.message || err?.response?.data?.error || "Failed to fetch supported providers"
3339
3827
  );
3340
3828
  console.error(error);
3341
3829
  } finally {
3342
3830
  setIsLoading(false);
3343
3831
  }
3344
3832
  };
3345
- import_react32.default.useEffect(() => {
3833
+ import_react35.default.useEffect(() => {
3346
3834
  if (linkToken) {
3347
3835
  fetchSupportedProviders();
3348
3836
  fetchExistingIntegrations();
3349
3837
  }
3350
3838
  }, [linkToken]);
3351
- const isIntegrationAdded = import_react32.default.useCallback(
3839
+ const isIntegrationAdded = (0, import_react35.useCallback)(
3352
3840
  (publicName) => {
3353
- const integrations = [...addedIntegrations, ...existingIntegrations];
3841
+ const integrations = [...existingIntegrations];
3354
3842
  return integrations.some(
3355
3843
  (integration) => integration.public_name === publicName
3356
3844
  );
3357
3845
  },
3358
- [addedIntegrations, existingIntegrations]
3846
+ [existingIntegrations]
3359
3847
  );
3360
- const getIntegrationCount = import_react32.default.useCallback(
3848
+ const getIntegrationCount = (0, import_react35.useCallback)(
3361
3849
  (publicName) => {
3362
- const integrations = [...addedIntegrations, ...existingIntegrations];
3850
+ const integrations = [...existingIntegrations];
3363
3851
  return integrations.filter(
3364
3852
  (integration) => integration.public_name === publicName
3365
3853
  ).length;
3366
3854
  },
3367
- [addedIntegrations, existingIntegrations]
3855
+ [existingIntegrations]
3368
3856
  );
3369
- const filteredResults = import_react32.default.useMemo(() => {
3857
+ const filteredResults = import_react35.default.useMemo(() => {
3370
3858
  let filtered = supportedProviders;
3371
3859
  if (activeTab !== "all") {
3372
3860
  filtered = filtered.filter((provider) => provider.type === activeTab);
@@ -3384,33 +3872,41 @@ var Integration = ({
3384
3872
  return (a.name ?? "").localeCompare(b.name ?? "");
3385
3873
  });
3386
3874
  }, [query, supportedProviders, getIntegrationCount, activeTab]);
3387
- const handleAddIntegration = async () => {
3875
+ const handleAddIntegration = async (integrationsList) => {
3388
3876
  try {
3389
3877
  setIsLoading(true);
3390
- const integrations = [...addedIntegrations, ...existingIntegrations];
3878
+ const integrations = integrationsList ? integrationsList : [...existingIntegrations];
3391
3879
  if (integrations.length === 0) {
3392
3880
  setErrorMessage("Please add at least one integration");
3393
- } else if (addedIntegrations.length === 0) {
3394
- onSuccess();
3395
3881
  } else {
3396
- await addUserIntegration(linkToken, addedIntegrations);
3397
- onSuccess();
3882
+ await addUserIntegration(linkToken, integrations);
3883
+ if (integrationDetails) {
3884
+ onSuccess();
3885
+ }
3398
3886
  }
3887
+ await fetchExistingIntegrations();
3888
+ setAddIntegrationMode(null);
3399
3889
  } catch (error) {
3400
- const err = error;
3401
- console.error(error);
3402
- setErrorMessage(
3403
- err?.response?.data?.message || "Failed to add integrations"
3404
- );
3890
+ const message = error?.response?.data?.message || error?.response?.data?.error || "Failed to add integrations";
3891
+ setErrorMessage(message);
3892
+ throw error;
3405
3893
  } finally {
3406
3894
  setIsLoading(false);
3407
3895
  }
3408
3896
  };
3409
- const renderProviderItem = ({ item }) => /* @__PURE__ */ import_react32.default.createElement(
3410
- import_react_native17.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,
3411
3907
  {
3412
3908
  style: [
3413
- styles15.providerItem,
3909
+ styles17.providerItem,
3414
3910
  {
3415
3911
  backgroundColor: theme.colors.surface,
3416
3912
  borderColor: theme.colors.border
@@ -3419,44 +3915,44 @@ var Integration = ({
3419
3915
  onPress: () => setAddIntegrationMode(item),
3420
3916
  activeOpacity: 0.7
3421
3917
  },
3422
- /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.providerInfo }, item?.logo ? isSvgUrl(item?.logo) ? /* @__PURE__ */ import_react32.default.createElement(RemoteSvg, { uri: item?.logo }) : /* @__PURE__ */ import_react32.default.createElement(
3423
- import_react_native17.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,
3424
3920
  {
3425
3921
  source: { uri: item?.logo },
3426
- style: styles15.providerLogo,
3922
+ style: styles17.providerLogo,
3427
3923
  resizeMode: "contain"
3428
3924
  }
3429
- ) : /* @__PURE__ */ import_react32.default.createElement(
3430
- import_react_native17.View,
3925
+ ) : /* @__PURE__ */ import_react35.default.createElement(
3926
+ import_react_native19.View,
3431
3927
  {
3432
3928
  style: [
3433
- styles15.providerLogoPlaceholder,
3929
+ styles17.providerLogoPlaceholder,
3434
3930
  { backgroundColor: theme.colors.surfaceSecondary }
3435
3931
  ]
3436
3932
  },
3437
- /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: { color: theme.colors.text } }, item?.name?.charAt(0) || "?")
3438
- ), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles15.providerName, { color: theme.colors.text }] }, item?.name + "\u200B")),
3439
- isIntegrationAdded(item?.public_name) && /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.providerStatus }, /* @__PURE__ */ import_react32.default.createElement(CheckCircleIcon, { size: 18, color: theme.colors.success }), /* @__PURE__ */ import_react32.default.createElement(
3440
- import_react_native17.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,
3441
3937
  {
3442
3938
  style: [
3443
- styles15.providerCount,
3939
+ styles17.providerCount,
3444
3940
  { color: theme.colors.textSecondary }
3445
3941
  ]
3446
3942
  },
3447
3943
  getIntegrationCount(item?.public_name)
3448
3944
  ))
3449
3945
  );
3450
- const renderSkeletonItem = () => /* @__PURE__ */ import_react32.default.createElement(SkeletonItem_default, null);
3451
- return /* @__PURE__ */ import_react32.default.createElement(import_react32.default.Fragment, null, !addIntegrationMode ? /* @__PURE__ */ import_react32.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "full" }, /* @__PURE__ */ import_react32.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.headerContent }, addIntegrationMode && /* @__PURE__ */ import_react32.default.createElement(
3452
- import_react_native17.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,
3453
3949
  {
3454
3950
  onPress: () => setAddIntegrationMode(null),
3455
- style: styles15.backButton
3951
+ style: styles17.backButton
3456
3952
  },
3457
- /* @__PURE__ */ import_react32.default.createElement(ArrowLeftIcon, { size: 20, color: theme.colors.text })
3458
- ), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles15.headerTitle, { color: theme.colors.text }] }, "Integration"))), /* @__PURE__ */ import_react32.default.createElement(ModalBody, { scrollable: false, style: styles15.noPadding }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.container }, /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.headerSection }, /* @__PURE__ */ import_react32.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react32.default.createElement(import_react_native17.Text, { style: [styles15.title, { color: theme.colors.text }] }, "Select an account to link to ", appName)), /* @__PURE__ */ import_react32.default.createElement(
3459
- import_react_native17.View,
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,
3460
3956
  {
3461
3957
  style: {
3462
3958
  paddingHorizontal: theme.spacing.xl,
@@ -3465,26 +3961,26 @@ var Integration = ({
3465
3961
  zIndex: 10
3466
3962
  }
3467
3963
  },
3468
- /* @__PURE__ */ import_react32.default.createElement(
3964
+ /* @__PURE__ */ import_react35.default.createElement(
3469
3965
  Input,
3470
3966
  {
3471
3967
  value: query,
3472
3968
  onChangeText: setQuery,
3473
3969
  placeholder: "Search Integrations...",
3474
- containerStyle: styles15.searchInput
3970
+ containerStyle: styles17.searchInput
3475
3971
  }
3476
3972
  ),
3477
- /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.tabsContainer }, [
3973
+ /* @__PURE__ */ import_react35.default.createElement(import_react_native19.View, { style: styles17.tabsContainer }, [
3478
3974
  { label: "All", value: "all" },
3479
3975
  { label: "Exchanges", value: "exchange" },
3480
3976
  { label: "Blockchains", value: "blockchain" },
3481
3977
  { label: "Wallets", value: "wallet" }
3482
- ].map((tab) => /* @__PURE__ */ import_react32.default.createElement(
3483
- import_react_native17.TouchableOpacity,
3978
+ ].map((tab) => /* @__PURE__ */ import_react35.default.createElement(
3979
+ import_react_native19.TouchableOpacity,
3484
3980
  {
3485
3981
  key: tab.value,
3486
3982
  style: [
3487
- styles15.tab,
3983
+ styles17.tab,
3488
3984
  {
3489
3985
  backgroundColor: activeTab === tab.value ? theme.colors.primary : theme.colors.surface,
3490
3986
  borderColor: theme.colors.border
@@ -3496,11 +3992,11 @@ var Integration = ({
3496
3992
  );
3497
3993
  }
3498
3994
  },
3499
- /* @__PURE__ */ import_react32.default.createElement(
3500
- import_react_native17.Text,
3995
+ /* @__PURE__ */ import_react35.default.createElement(
3996
+ import_react_native19.Text,
3501
3997
  {
3502
3998
  style: [
3503
- styles15.tabText,
3999
+ styles17.tabText,
3504
4000
  {
3505
4001
  color: activeTab === tab.value ? theme.colors.white : theme.colors.text
3506
4002
  }
@@ -3509,8 +4005,8 @@ var Integration = ({
3509
4005
  tab.label
3510
4006
  )
3511
4007
  )))
3512
- ), /* @__PURE__ */ import_react32.default.createElement(
3513
- import_react_native17.FlatList,
4008
+ ), /* @__PURE__ */ import_react35.default.createElement(
4009
+ import_react_native19.FlatList,
3514
4010
  {
3515
4011
  data: isLoading ? Array.from({ length: 8 }, (_, i) => ({
3516
4012
  id: `skeleton-${i}`,
@@ -3520,50 +4016,53 @@ var Integration = ({
3520
4016
  })) : filteredResults,
3521
4017
  keyExtractor: (item, index) => isLoading ? item.id : `provider-${item.id}-${index}`,
3522
4018
  renderItem: isLoading ? renderSkeletonItem : renderProviderItem,
3523
- style: styles15.list,
4019
+ style: styles17.list,
3524
4020
  contentContainerStyle: [
3525
- styles15.listContent,
4021
+ styles17.listContent,
3526
4022
  { paddingHorizontal: theme.spacing.xl }
3527
4023
  ],
3528
4024
  showsVerticalScrollIndicator: false,
3529
- ListEmptyComponent: /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.emptyContainer }, !isLoading && /* @__PURE__ */ import_react32.default.createElement(
3530
- import_react_native17.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,
3531
4027
  {
3532
4028
  style: [
3533
- styles15.emptyText,
4029
+ styles17.emptyText,
3534
4030
  { color: theme.colors.textSecondary }
3535
4031
  ]
3536
4032
  },
3537
4033
  query ? "No search results found" : "No supported integrations found"
3538
- ))
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
3539
4036
  }
3540
- ), errorMessage && /* @__PURE__ */ import_react32.default.createElement(import_react_native17.View, { style: styles15.errorContainer }, /* @__PURE__ */ import_react32.default.createElement(Alert, { variant: "destructive", style: styles15.errorAlert }, /* @__PURE__ */ import_react32.default.createElement(AlertDescription, null, errorMessage))))), /* @__PURE__ */ import_react32.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react32.default.createElement(
4037
+ ))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, filteredResults && filteredResults.length > 0 && /* @__PURE__ */ import_react35.default.createElement(
3541
4038
  Button,
3542
4039
  {
3543
4040
  variant: "outline",
3544
4041
  size: "lg",
3545
- onPress: handleAddIntegration,
4042
+ onPress: handleContinue,
3546
4043
  loading: isLoading,
3547
4044
  disabled: isLoading,
3548
- style: styles15.continueButton
4045
+ style: styles17.continueButton
3549
4046
  },
3550
4047
  "Continue"
3551
- ), /* @__PURE__ */ import_react32.default.createElement(Footer, null))) : /* @__PURE__ */ import_react32.default.createElement(
4048
+ ), /* @__PURE__ */ import_react35.default.createElement(Footer, null))) : /* @__PURE__ */ import_react35.default.createElement(
3552
4049
  IntegrationForm,
3553
4050
  {
3554
4051
  metadata: addIntegrationMode,
3555
- onAddHandle: (integrations) => {
3556
- setAddedIntegrations((prev) => [...prev, ...integrations]);
3557
- setAddIntegrationMode(null);
4052
+ onAddHandle: async (int) => {
4053
+ const integrationsList = [...int];
4054
+ await handleAddIntegration(integrationsList);
3558
4055
  },
3559
4056
  open: !!addIntegrationMode,
3560
4057
  setAddIntegrationMode,
3561
4058
  handleClose,
3562
- providersList: supportedProviders
4059
+ providersList: supportedProviders,
4060
+ errorMessage,
4061
+ showBackButton: !integrationDetails
3563
4062
  }
3564
4063
  ));
3565
4064
  };
3566
- var styles15 = import_react_native17.StyleSheet.create({
4065
+ var styles17 = import_react_native19.StyleSheet.create({
3567
4066
  headerContent: {
3568
4067
  flexDirection: "row",
3569
4068
  alignItems: "center"
@@ -3674,12 +4173,12 @@ var styles15 = import_react_native17.StyleSheet.create({
3674
4173
  width: "100%"
3675
4174
  },
3676
4175
  errorContainer: {
3677
- paddingHorizontal: 20
4176
+ paddingHorizontal: 20,
3678
4177
  // theme.spacing.xl
4178
+ marginBottom: 12
3679
4179
  },
3680
4180
  errorAlert: {
3681
- marginTop: 16
3682
- // theme.spacing.lg - consistent alert spacing
4181
+ marginTop: 8
3683
4182
  },
3684
4183
  tabsContainer: {
3685
4184
  flexDirection: "row",
@@ -3706,21 +4205,21 @@ var styles15 = import_react_native17.StyleSheet.create({
3706
4205
  });
3707
4206
 
3708
4207
  // src/molecules/OTPVerify.tsx
3709
- var import_react33 = __toESM(require("react"));
3710
- var import_react_native18 = require("react-native");
4208
+ var import_react36 = __toESM(require("react"));
4209
+ var import_react_native20 = require("react-native");
3711
4210
  var OTPVerify = ({
3712
4211
  open,
3713
4212
  onSuccess,
3714
4213
  onClose
3715
4214
  }) => {
3716
4215
  const theme = useTheme();
3717
- const [otp, setOtp] = import_react33.default.useState("");
4216
+ const [otp, setOtp] = import_react36.default.useState("");
3718
4217
  const { linkToken, clientId, email, setUser } = useKryptosConnect();
3719
- const [isLoading, setIsLoading] = import_react33.default.useState(false);
3720
- const [isResending, setIsResending] = import_react33.default.useState(false);
3721
- const [resendCooldown, setResendCooldown] = import_react33.default.useState(0);
3722
- const [errorMessage, setErrorMessage] = import_react33.default.useState("");
3723
- const [successMessage, setSuccessMessage] = import_react33.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("");
3724
4223
  const handleSubmit = async () => {
3725
4224
  if (otp.length !== 6) return;
3726
4225
  setIsLoading(true);
@@ -3771,7 +4270,7 @@ var OTPVerify = ({
3771
4270
  setSuccessMessage("");
3772
4271
  setOtp("");
3773
4272
  };
3774
- import_react33.default.useEffect(() => {
4273
+ import_react36.default.useEffect(() => {
3775
4274
  if (resendCooldown > 0) {
3776
4275
  const timer = setTimeout(() => {
3777
4276
  setResendCooldown(resendCooldown - 1);
@@ -3780,20 +4279,20 @@ var OTPVerify = ({
3780
4279
  }
3781
4280
  return void 0;
3782
4281
  }, [resendCooldown]);
3783
- return /* @__PURE__ */ import_react33.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "lg" }, /* @__PURE__ */ import_react33.default.createElement(ModalHeader, { onClose: handleClose }, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.headerContent }, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: [styles16.headerTitle, { color: theme.colors.text }] }, "OTP Verification"))), /* @__PURE__ */ import_react33.default.createElement(ModalBody, null, /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.container }, /* @__PURE__ */ import_react33.default.createElement(ConnectLogo, null), /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.emailInfo }, /* @__PURE__ */ import_react33.default.createElement(
3784
- import_react_native18.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,
3785
4284
  {
3786
- style: [styles16.infoText, { color: theme.colors.textSecondary }]
4285
+ style: [styles18.infoText, { color: theme.colors.textSecondary }]
3787
4286
  },
3788
4287
  "We have sent a verification code to"
3789
- ), /* @__PURE__ */ import_react33.default.createElement(import_react_native18.Text, { style: [styles16.emailText, { color: theme.colors.text }] }, email)), /* @__PURE__ */ import_react33.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(
3790
4289
  OTP,
3791
4290
  {
3792
4291
  onComplete: handleOtpComplete,
3793
4292
  length: 6,
3794
4293
  setErrorMessage
3795
4294
  }
3796
- ), errorMessage ? /* @__PURE__ */ import_react33.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react33.default.createElement(AlertDescription, null, errorMessage)) : null, successMessage ? /* @__PURE__ */ import_react33.default.createElement(Alert, { variant: "default" }, /* @__PURE__ */ import_react33.default.createElement(AlertDescription, null, successMessage)) : null, /* @__PURE__ */ import_react33.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(
3797
4296
  Button,
3798
4297
  {
3799
4298
  variant: "outline",
@@ -3801,44 +4300,44 @@ var OTPVerify = ({
3801
4300
  onPress: handleSubmit,
3802
4301
  loading: isLoading,
3803
4302
  disabled: otp.length !== 6 || isLoading,
3804
- style: styles16.button
4303
+ style: styles18.button
3805
4304
  },
3806
4305
  "Continue"
3807
- ), /* @__PURE__ */ import_react33.default.createElement(
3808
- import_react_native18.TouchableOpacity,
4306
+ ), /* @__PURE__ */ import_react36.default.createElement(
4307
+ import_react_native20.TouchableOpacity,
3809
4308
  {
3810
4309
  onPress: handleResendOtp,
3811
4310
  disabled: resendCooldown > 0 || isResending,
3812
- style: styles16.resendContainer
4311
+ style: styles18.resendContainer
3813
4312
  },
3814
- isResending ? /* @__PURE__ */ import_react33.default.createElement(import_react_native18.View, { style: styles16.resendLoading }, /* @__PURE__ */ import_react33.default.createElement(LoaderIcon, { size: 16, color: theme.colors.primary }), /* @__PURE__ */ import_react33.default.createElement(
3815
- import_react_native18.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,
3816
4315
  {
3817
- style: [styles16.resendText, { color: theme.colors.primary }]
4316
+ style: [styles18.resendText, { color: theme.colors.primary }]
3818
4317
  },
3819
4318
  " ",
3820
4319
  "Sending..."
3821
- )) : resendCooldown > 0 ? /* @__PURE__ */ import_react33.default.createElement(
3822
- import_react_native18.Text,
4320
+ )) : resendCooldown > 0 ? /* @__PURE__ */ import_react36.default.createElement(
4321
+ import_react_native20.Text,
3823
4322
  {
3824
4323
  style: [
3825
- styles16.resendText,
4324
+ styles18.resendText,
3826
4325
  { color: theme.colors.textSecondary }
3827
4326
  ]
3828
4327
  },
3829
4328
  "Resend OTP in ",
3830
4329
  resendCooldown,
3831
4330
  "s"
3832
- ) : /* @__PURE__ */ import_react33.default.createElement(
3833
- import_react_native18.Text,
4331
+ ) : /* @__PURE__ */ import_react36.default.createElement(
4332
+ import_react_native20.Text,
3834
4333
  {
3835
- style: [styles16.resendText, { color: theme.colors.primary }]
4334
+ style: [styles18.resendText, { color: theme.colors.primary }]
3836
4335
  },
3837
4336
  "Resend OTP"
3838
4337
  )
3839
- ))), /* @__PURE__ */ import_react33.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react33.default.createElement(Footer, null)));
4338
+ ))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 0 } }, /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
3840
4339
  };
3841
- var styles16 = import_react_native18.StyleSheet.create({
4340
+ var styles18 = import_react_native20.StyleSheet.create({
3842
4341
  headerContent: {
3843
4342
  flexDirection: "row",
3844
4343
  alignItems: "center"
@@ -3897,8 +4396,8 @@ var styles16 = import_react_native18.StyleSheet.create({
3897
4396
  });
3898
4397
 
3899
4398
  // src/molecules/Permissions.tsx
3900
- var import_react34 = __toESM(require("react"));
3901
- var import_react_native19 = require("react-native");
4399
+ var import_react37 = __toESM(require("react"));
4400
+ var import_react_native21 = require("react-native");
3902
4401
  var Permissions = ({
3903
4402
  open,
3904
4403
  onClose,
@@ -3906,8 +4405,8 @@ var Permissions = ({
3906
4405
  }) => {
3907
4406
  const { appName, linkToken, setUserConsent } = useKryptosConnect();
3908
4407
  const theme = useTheme();
3909
- const [isLoading, setIsLoading] = import_react34.default.useState(false);
3910
- const [errorMessage, setErrorMessage] = import_react34.default.useState("");
4408
+ const [isLoading, setIsLoading] = import_react37.default.useState(false);
4409
+ const [errorMessage, setErrorMessage] = import_react37.default.useState("");
3911
4410
  const handleConsentClick = async () => {
3912
4411
  try {
3913
4412
  setIsLoading(true);
@@ -3930,42 +4429,42 @@ var Permissions = ({
3930
4429
  "Access your transaction history and trading activity",
3931
4430
  "Keep this data updated and accessible when you're offline"
3932
4431
  ];
3933
- return /* @__PURE__ */ import_react34.default.createElement(Modal, { isOpen: open, onClose, size: "xl" }, /* @__PURE__ */ import_react34.default.createElement(ModalHeader, { onClose }, "Permissions"), /* @__PURE__ */ import_react34.default.createElement(ModalBody, null, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles17.container }, /* @__PURE__ */ import_react34.default.createElement(ConnectLogo, null), errorMessage ? /* @__PURE__ */ import_react34.default.createElement(Alert, { variant: "destructive" }, /* @__PURE__ */ import_react34.default.createElement(AlertDescription, null, errorMessage)) : null, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { style: styles17.permissionsList }, /* @__PURE__ */ import_react34.default.createElement(
3934
- import_react_native19.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,
3935
4434
  {
3936
- style: [styles17.subtitle, { color: theme.colors.textSecondary }]
4435
+ style: [styles19.subtitle, { color: theme.colors.textSecondary }]
3937
4436
  },
3938
4437
  "Allow ",
3939
4438
  appName,
3940
4439
  " to:"
3941
- ), permissionItems.map((item, index) => /* @__PURE__ */ import_react34.default.createElement(import_react_native19.View, { key: `permission-${index}`, style: styles17.permissionItem }, /* @__PURE__ */ import_react34.default.createElement(import_react_native19.Text, { style: [styles17.bullet, { color: theme.colors.primary }] }, index + 1, "."), /* @__PURE__ */ import_react34.default.createElement(
3942
- import_react_native19.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,
3943
4442
  {
3944
- style: [styles17.permissionText, { color: theme.colors.text }]
4443
+ style: [styles19.permissionText, { color: theme.colors.text }]
3945
4444
  },
3946
4445
  item
3947
- )))), /* @__PURE__ */ import_react34.default.createElement(
3948
- import_react_native19.View,
4446
+ )))), /* @__PURE__ */ import_react37.default.createElement(
4447
+ import_react_native21.View,
3949
4448
  {
3950
4449
  style: [
3951
- styles17.infoBox,
4450
+ styles19.infoBox,
3952
4451
  {
3953
4452
  backgroundColor: theme.colors.surface,
3954
4453
  borderColor: theme.colors.border
3955
4454
  }
3956
4455
  ]
3957
4456
  },
3958
- /* @__PURE__ */ import_react34.default.createElement(
3959
- import_react_native19.Text,
4457
+ /* @__PURE__ */ import_react37.default.createElement(
4458
+ import_react_native21.Text,
3960
4459
  {
3961
- style: [styles17.infoText, { color: theme.colors.textSecondary }]
4460
+ style: [styles19.infoText, { color: theme.colors.textSecondary }]
3962
4461
  },
3963
4462
  "By selecting",
3964
4463
  " ",
3965
- /* @__PURE__ */ import_react34.default.createElement(import_react_native19.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'"),
3966
4465
  ", you agree to share this information and keep it updated."
3967
4466
  )
3968
- ))), /* @__PURE__ */ import_react34.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react34.default.createElement(
4467
+ ))), /* @__PURE__ */ import_react37.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react37.default.createElement(
3969
4468
  Button,
3970
4469
  {
3971
4470
  variant: "outline",
@@ -3973,12 +4472,12 @@ var Permissions = ({
3973
4472
  onPress: handleConsentClick,
3974
4473
  loading: isLoading,
3975
4474
  disabled: isLoading,
3976
- style: styles17.button
4475
+ style: styles19.button
3977
4476
  },
3978
4477
  "Allow"
3979
- ), /* @__PURE__ */ import_react34.default.createElement(Footer, null)));
4478
+ ), /* @__PURE__ */ import_react37.default.createElement(Footer, null)));
3980
4479
  };
3981
- var styles17 = import_react_native19.StyleSheet.create({
4480
+ var styles19 = import_react_native21.StyleSheet.create({
3982
4481
  container: {
3983
4482
  flex: 1
3984
4483
  },
@@ -4036,8 +4535,8 @@ var styles17 = import_react_native19.StyleSheet.create({
4036
4535
  });
4037
4536
 
4038
4537
  // src/molecules/StatusModal.tsx
4039
- var import_react35 = __toESM(require("react"));
4040
- var import_react_native20 = require("react-native");
4538
+ var import_react38 = __toESM(require("react"));
4539
+ var import_react_native22 = require("react-native");
4041
4540
  var StatusModal = ({
4042
4541
  open,
4043
4542
  onClose,
@@ -4054,18 +4553,18 @@ var StatusModal = ({
4054
4553
  }
4055
4554
  onClose();
4056
4555
  };
4057
- return /* @__PURE__ */ import_react35.default.createElement(Modal, { isOpen: open, onClose: handleClose, size: "sm" }, /* @__PURE__ */ import_react35.default.createElement(ModalHeader, { showCloseButton: false, onClose: handleClose }, ""), /* @__PURE__ */ import_react35.default.createElement(ModalBody, null, /* @__PURE__ */ import_react35.default.createElement(import_react_native20.View, { style: styles18.container }, /* @__PURE__ */ import_react35.default.createElement(import_react_native20.View, { style: styles18.iconContainer }, status === "success" ? /* @__PURE__ */ import_react35.default.createElement(SuccessIcon, { size: 80 }) : /* @__PURE__ */ import_react35.default.createElement(ErrorIcon, { size: 80 })), /* @__PURE__ */ import_react35.default.createElement(import_react_native20.Text, { style: [styles18.message, { color: theme.colors.text }] }, status === "success" ? "Connection successful" : "Connection failed"))), /* @__PURE__ */ import_react35.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react35.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(
4058
4557
  Button,
4059
4558
  {
4060
4559
  variant: "outline",
4061
4560
  size: "lg",
4062
4561
  onPress: status === "success" ? onSuccess : onError,
4063
- style: styles18.button
4562
+ style: styles20.button
4064
4563
  },
4065
4564
  status === "success" ? "Continue" : "Try again later"
4066
- ), /* @__PURE__ */ import_react35.default.createElement(Footer, null)));
4565
+ ), /* @__PURE__ */ import_react38.default.createElement(Footer, null)));
4067
4566
  };
4068
- var styles18 = import_react_native20.StyleSheet.create({
4567
+ var styles20 = import_react_native22.StyleSheet.create({
4069
4568
  container: {
4070
4569
  flex: 1,
4071
4570
  alignItems: "center",
@@ -4089,64 +4588,6 @@ var styles18 = import_react_native20.StyleSheet.create({
4089
4588
  }
4090
4589
  });
4091
4590
 
4092
- // src/molecules/EndModal.tsx
4093
- var import_react36 = __toESM(require("react"));
4094
- var import_react_native21 = require("react-native");
4095
- var EndModal = ({ open, onClose }) => {
4096
- const theme = useTheme();
4097
- (0, import_react36.useEffect)(() => {
4098
- if (!open) return;
4099
- const timer = setTimeout(() => {
4100
- onClose();
4101
- }, 5e3);
4102
- return () => clearTimeout(timer);
4103
- }, []);
4104
- return /* @__PURE__ */ import_react36.default.createElement(Modal, { isOpen: open, onClose, size: "md" }, /* @__PURE__ */ import_react36.default.createElement(ModalHeader, { onClose }, ""), /* @__PURE__ */ import_react36.default.createElement(ModalBody, null, /* @__PURE__ */ import_react36.default.createElement(import_react_native21.View, { style: styles19.container }, /* @__PURE__ */ import_react36.default.createElement(
4105
- import_react_native21.View,
4106
- {
4107
- style: [
4108
- styles19.iconContainer,
4109
- { backgroundColor: theme.colors.successLight }
4110
- ]
4111
- },
4112
- /* @__PURE__ */ import_react36.default.createElement(SuccessIcon, { size: 80 })
4113
- ), /* @__PURE__ */ import_react36.default.createElement(import_react_native21.Text, { style: [styles19.message, { color: theme.colors.text }] }, `All set! We're redirecting you back to the app. If it takes longer
4114
- than expected, tap the button below to continue.`))), /* @__PURE__ */ import_react36.default.createElement(ModalFooter, { style: { paddingVertical: 8 } }, /* @__PURE__ */ import_react36.default.createElement(
4115
- Button,
4116
- {
4117
- variant: "primary",
4118
- size: "lg",
4119
- onPress: onClose,
4120
- style: styles19.button
4121
- },
4122
- "Continue to App"
4123
- ), /* @__PURE__ */ import_react36.default.createElement(Footer, null)));
4124
- };
4125
- var styles19 = import_react_native21.StyleSheet.create({
4126
- container: {
4127
- alignItems: "center",
4128
- paddingVertical: 20
4129
- },
4130
- iconContainer: {
4131
- width: 80,
4132
- height: 80,
4133
- borderRadius: 40,
4134
- alignItems: "center",
4135
- justifyContent: "center",
4136
- marginBottom: 20
4137
- },
4138
- message: {
4139
- fontSize: 14,
4140
- textAlign: "center",
4141
- lineHeight: 20,
4142
- marginBottom: 24,
4143
- paddingHorizontal: 20
4144
- },
4145
- button: {
4146
- width: "100%"
4147
- }
4148
- });
4149
-
4150
4591
  // src/KryptosConnectButton.tsx
4151
4592
  var KryptosConnectButton = ({
4152
4593
  children,
@@ -4154,17 +4595,18 @@ var KryptosConnectButton = ({
4154
4595
  onError,
4155
4596
  generateLinkToken,
4156
4597
  style,
4157
- textStyle
4598
+ textStyle,
4599
+ integrationName
4158
4600
  }) => {
4159
4601
  const { theme: themeName } = useKryptosConnect();
4160
- const [open, setOpen] = import_react37.default.useState(false);
4602
+ const [open, setOpen] = import_react39.default.useState(false);
4161
4603
  const theme = useTheme();
4162
- return /* @__PURE__ */ import_react37.default.createElement(import_react37.default.Fragment, null, children ? /* @__PURE__ */ import_react37.default.createElement(import_react_native22.TouchableOpacity, { onPress: () => setOpen(true), style }, children) : /* @__PURE__ */ import_react37.default.createElement(
4163
- import_react_native22.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,
4164
4606
  {
4165
4607
  onPress: () => setOpen(true),
4166
4608
  style: [
4167
- styles20.defaultButton,
4609
+ styles21.defaultButton,
4168
4610
  themeName === "light" ? {
4169
4611
  backgroundColor: theme.colors.white,
4170
4612
  borderRadius: theme.borderRadius.md,
@@ -4178,11 +4620,11 @@ var KryptosConnectButton = ({
4178
4620
  ],
4179
4621
  activeOpacity: 0.8
4180
4622
  },
4181
- /* @__PURE__ */ import_react37.default.createElement(
4182
- import_react_native22.Text,
4623
+ /* @__PURE__ */ import_react39.default.createElement(
4624
+ import_react_native23.Text,
4183
4625
  {
4184
4626
  style: [
4185
- styles20.buttonText,
4627
+ styles21.buttonText,
4186
4628
  {
4187
4629
  color: themeName === "light" ? theme.colors.primary : theme.colors.white,
4188
4630
  fontSize: theme.fontSize.lg
@@ -4190,18 +4632,17 @@ var KryptosConnectButton = ({
4190
4632
  textStyle
4191
4633
  ]
4192
4634
  },
4193
- "Connect with",
4194
- " "
4195
- ),
4196
- /* @__PURE__ */ import_react37.default.createElement(LogoIcon, { size: 24 })
4197
- ), /* @__PURE__ */ import_react37.default.createElement(
4635
+ integrationName ? `Connect ${integrationName.charAt(0).toUpperCase() + integrationName.slice(1)} Account` : "Connect With Kryptos"
4636
+ )
4637
+ ), open && /* @__PURE__ */ import_react39.default.createElement(
4198
4638
  KryptosConnectModal,
4199
4639
  {
4200
4640
  open,
4201
4641
  setOpen,
4202
4642
  onSuccess,
4203
4643
  onError,
4204
- generateLinkToken
4644
+ generateLinkToken,
4645
+ integrationName
4205
4646
  }
4206
4647
  ));
4207
4648
  };
@@ -4210,7 +4651,8 @@ var KryptosConnectModal = ({
4210
4651
  setOpen,
4211
4652
  onSuccess,
4212
4653
  onError,
4213
- generateLinkToken
4654
+ generateLinkToken,
4655
+ integrationName
4214
4656
  }) => {
4215
4657
  const {
4216
4658
  setIsInitialized,
@@ -4222,7 +4664,20 @@ var KryptosConnectModal = ({
4222
4664
  isAuthorized,
4223
4665
  linkToken
4224
4666
  } = useKryptosConnect();
4225
- const [step, setStep] = import_react37.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]);
4226
4681
  const handleClose = () => {
4227
4682
  setOpen(false);
4228
4683
  setIsInitialized(false);
@@ -4258,7 +4713,7 @@ var KryptosConnectModal = ({
4258
4713
  handleClose();
4259
4714
  };
4260
4715
  if (!open) return null;
4261
- return /* @__PURE__ */ import_react37.default.createElement(import_react_native22.View, { style: styles20.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react37.default.createElement(
4716
+ return /* @__PURE__ */ import_react39.default.createElement(import_react_native23.View, { style: styles21.container }, step === "INIT" /* INIT */ && /* @__PURE__ */ import_react39.default.createElement(
4262
4717
  Init,
4263
4718
  {
4264
4719
  open,
@@ -4272,7 +4727,7 @@ var KryptosConnectModal = ({
4272
4727
  },
4273
4728
  onClose: handleAbort
4274
4729
  }
4275
- ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react37.default.createElement(
4730
+ ), step === "AUTH" /* AUTH */ && /* @__PURE__ */ import_react39.default.createElement(
4276
4731
  Auth,
4277
4732
  {
4278
4733
  open,
@@ -4280,28 +4735,29 @@ var KryptosConnectModal = ({
4280
4735
  onGuestSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4281
4736
  onClose: handleAbort
4282
4737
  }
4283
- ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react37.default.createElement(
4738
+ ), step === "OTP" /* OTP */ && /* @__PURE__ */ import_react39.default.createElement(
4284
4739
  OTPVerify,
4285
4740
  {
4286
4741
  open,
4287
4742
  onSuccess: () => setStep("INTEGRATION" /* INTEGRATION */),
4288
4743
  onClose: handleAbort
4289
4744
  }
4290
- ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react37.default.createElement(
4745
+ ), step === "INTEGRATION" /* INTEGRATION */ && /* @__PURE__ */ import_react39.default.createElement(
4291
4746
  Integration,
4292
4747
  {
4293
4748
  open,
4294
4749
  onSuccess: handleConsentClick,
4295
- onClose: handleAbort
4750
+ onClose: handleAbort,
4751
+ integrationDetails
4296
4752
  }
4297
- ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react37.default.createElement(
4753
+ ), step === "PERMISSIONS" /* PERMISSIONS */ && /* @__PURE__ */ import_react39.default.createElement(
4298
4754
  Permissions,
4299
4755
  {
4300
4756
  open,
4301
4757
  onClose: handleAbort,
4302
4758
  onSuccess: () => setStep("STATUS" /* STATUS */)
4303
4759
  }
4304
- ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react37.default.createElement(
4760
+ ), step === "STATUS" /* STATUS */ && /* @__PURE__ */ import_react39.default.createElement(
4305
4761
  StatusModal,
4306
4762
  {
4307
4763
  open,
@@ -4310,7 +4766,7 @@ var KryptosConnectModal = ({
4310
4766
  onError: handleError,
4311
4767
  status: userConsent?.public_token ? "success" : "error"
4312
4768
  }
4313
- ), step === "END" /* END */ && /* @__PURE__ */ import_react37.default.createElement(
4769
+ ), step === "END" /* END */ && /* @__PURE__ */ import_react39.default.createElement(
4314
4770
  EndModal,
4315
4771
  {
4316
4772
  open,
@@ -4322,7 +4778,7 @@ var KryptosConnectModal = ({
4322
4778
  }
4323
4779
  ));
4324
4780
  };
4325
- var styles20 = import_react_native22.StyleSheet.create({
4781
+ var styles21 = import_react_native23.StyleSheet.create({
4326
4782
  defaultButton: {
4327
4783
  flexDirection: "row",
4328
4784
  alignItems: "center",