@reevit/react 0.4.2 → 0.4.3

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
@@ -587,14 +587,6 @@ function detectCountryFromCurrency(currency) {
587
587
  };
588
588
  return currencyToCountry[currency.toUpperCase()] || "GH";
589
589
  }
590
- var pspNames = {
591
- hubtel: "Hubtel",
592
- paystack: "Paystack",
593
- flutterwave: "Flutterwave",
594
- monnify: "Monnify",
595
- mpesa: "M-Pesa",
596
- stripe: "Stripe"
597
- };
598
590
  var methodConfig = {
599
591
  card: {
600
592
  label: "Card",
@@ -617,28 +609,31 @@ function PaymentMethodSelector({
617
609
  selectedMethod,
618
610
  onSelect,
619
611
  disabled = false,
620
- provider
612
+ provider,
613
+ layout = "list",
614
+ showLabel = true
621
615
  }) {
622
616
  const getMethodLabel = (method, psp) => {
623
617
  const config = methodConfig[method];
624
- if (psp?.toLowerCase().includes("hubtel") && method === "mobile_money") {
625
- return `Pay with ${pspNames[psp.toLowerCase()] || "Hubtel"}`;
626
- }
627
618
  return config.label;
628
619
  };
629
620
  const getMethodDescription = (method, psp) => {
630
621
  const config = methodConfig[method];
631
622
  if (psp?.toLowerCase().includes("hubtel")) {
632
- return "Card, Mobile Money, and Bank Transfer";
623
+ return config.description;
633
624
  }
634
625
  return config.description;
635
626
  };
636
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-method-selector", children: [
637
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-method-selector__label", children: "Select payment method" }),
638
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-method-selector__options", children: methods.map((method) => {
627
+ const isGrid = layout === "grid";
628
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("reevit-method-selector", isGrid && "reevit-method-selector--grid"), children: [
629
+ showLabel && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-method-selector__label", children: "Select payment method" }),
630
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn(
631
+ "reevit-method-selector__options",
632
+ isGrid ? "reevit-method-selector__options--grid" : "reevit-method-selector__options--list"
633
+ ), children: methods.map((method, index) => {
639
634
  const config = methodConfig[method];
640
635
  const isSelected = selectedMethod === method;
641
- const methodLabel = getMethodLabel(method, provider);
636
+ const methodLabel = getMethodLabel(method);
642
637
  const methodDescription = getMethodDescription(method, provider);
643
638
  return /* @__PURE__ */ jsxRuntime.jsxs(
644
639
  "button",
@@ -646,28 +641,24 @@ function PaymentMethodSelector({
646
641
  type: "button",
647
642
  className: cn(
648
643
  "reevit-method-option",
644
+ isGrid ? "reevit-method-option--grid" : "reevit-method-option--list",
649
645
  isSelected && "reevit-method-option--selected",
650
646
  disabled && "reevit-method-option--disabled"
651
647
  ),
648
+ style: {
649
+ animationDelay: `${index * 0.05}s`
650
+ },
652
651
  onClick: () => onSelect(method),
653
652
  disabled,
654
653
  "aria-pressed": isSelected,
655
654
  children: [
656
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__icon", children: config.icon }),
655
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__icon-wrapper", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__icon", children: config.icon }) }),
657
656
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-method-option__content", children: [
658
657
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__label", children: methodLabel }),
659
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__description", children: methodDescription })
658
+ !isGrid && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__description", children: methodDescription })
660
659
  ] }),
661
- isSelected && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__check", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: /* @__PURE__ */ jsxRuntime.jsx(
662
- "path",
663
- {
664
- d: "M16.667 5L7.5 14.167 3.333 10",
665
- stroke: "currentColor",
666
- strokeWidth: "2",
667
- strokeLinecap: "round",
668
- strokeLinejoin: "round"
669
- }
670
- ) }) })
660
+ !isGrid && isSelected && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__check", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "20 6 9 17 4 12" }) }) }),
661
+ !isGrid && !isSelected && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-method-option__chevron", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "9 18 15 12 9 6" }) }) })
671
662
  ]
672
663
  },
673
664
  method
@@ -684,7 +675,8 @@ function MobileMoneyForm({
684
675
  onSubmit,
685
676
  onCancel,
686
677
  isLoading = false,
687
- initialPhone = ""
678
+ initialPhone = "",
679
+ hideCancel = false
688
680
  }) {
689
681
  const [phone, setPhone] = react.useState(initialPhone);
690
682
  const [network, setNetwork] = react.useState(null);
@@ -769,7 +761,7 @@ function MobileMoneyForm({
769
761
  )) })
770
762
  ] }),
771
763
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-momo-form__actions", children: [
772
- /* @__PURE__ */ jsxRuntime.jsx(
764
+ !hideCancel && /* @__PURE__ */ jsxRuntime.jsx(
773
765
  "button",
774
766
  {
775
767
  type: "button",
@@ -811,11 +803,11 @@ var paystack_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMOCA
811
803
  // src/assets/providers/stripe.png
812
804
  var stripe_default = "data:image/png;base64,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";
813
805
  var providerMeta = {
814
- paystack: { logo: paystack_default, hint: "Card & MoMo" },
806
+ paystack: { logo: paystack_default, hint: "Card & Mobile Money" },
815
807
  stripe: { logo: stripe_default, hint: "Card payments" },
816
808
  flutterwave: { logo: flutterwave_default, hint: "Global methods" },
817
- hubtel: { logo: hubtel_default, hint: "Mobile money" },
818
- monnify: { logo: monnify_default, hint: "Bank & card" },
809
+ hubtel: { logo: hubtel_default, hint: "Mobile Money & Card" },
810
+ monnify: { logo: monnify_default, hint: "Bank & Card" },
819
811
  mpesa: { logo: mpesa_default, hint: "M-Pesa" }
820
812
  };
821
813
  var methodLabels = {
@@ -825,54 +817,100 @@ var methodLabels = {
825
817
  };
826
818
  function formatMethods(methods) {
827
819
  if (!methods.length) return "Payment methods";
828
- return methods.map((method) => methodLabels[method]).join(" \u2022 ");
820
+ return methods.map((method) => methodLabels[method]).join(", ");
821
+ }
822
+ function sanitizeMethods(providerId, methods) {
823
+ if (providerId.toLowerCase().includes("hubtel")) {
824
+ return methods.filter((method) => method === "card" || method === "mobile_money");
825
+ }
826
+ return methods;
829
827
  }
830
828
  function ProviderSelector({
831
829
  providers,
832
830
  selectedProvider,
833
831
  onSelect,
834
- disabled = false
832
+ disabled = false,
833
+ theme,
834
+ selectedMethod,
835
+ onMethodSelect,
836
+ renderMethodContent
835
837
  }) {
838
+ const useBorder = theme?.pspSelectorUseBorder ?? false;
839
+ const bgColor = theme?.pspSelectorBgColor || "#0a0a0a";
840
+ const textColor = theme?.pspSelectorTextColor || "#ffffff";
841
+ const borderColor = theme?.pspSelectorBorderColor || "#374151";
842
+ const getOptionStyle = (isSelected) => {
843
+ if (useBorder) {
844
+ return {
845
+ backgroundColor: "transparent",
846
+ border: `2px solid ${isSelected ? borderColor : "#374151"}`,
847
+ color: isSelected ? textColor : "var(--reevit-text)"
848
+ };
849
+ }
850
+ return {
851
+ backgroundColor: isSelected ? bgColor : "transparent",
852
+ border: `2px solid ${isSelected ? bgColor : "#374151"}`,
853
+ color: isSelected ? textColor : "var(--reevit-text)"
854
+ };
855
+ };
836
856
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-psp-selector", children: [
837
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-psp-selector__label", children: "Choose your payment provider" }),
857
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-psp-selector__label", children: "Select payment provider" }),
838
858
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-psp-selector__options", children: providers.map((provider) => {
839
859
  const meta = providerMeta[provider.provider] || {
840
860
  logo: void 0,
841
861
  hint: "Payment methods"
842
862
  };
863
+ const providerMethods = sanitizeMethods(provider.provider, provider.methods);
843
864
  const isSelected = selectedProvider === provider.provider;
844
865
  const fallbackInitial = provider.name.slice(0, 1).toUpperCase();
845
- return /* @__PURE__ */ jsxRuntime.jsxs(
846
- "button",
847
- {
848
- type: "button",
849
- className: cn(
850
- "reevit-psp-option",
851
- isSelected && "reevit-psp-option--selected",
852
- disabled && "reevit-psp-option--disabled"
853
- ),
854
- onClick: () => onSelect(provider.provider),
855
- disabled,
856
- "aria-pressed": isSelected,
857
- children: [
858
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__logo", "aria-hidden": "true", children: meta.logo ? /* @__PURE__ */ jsxRuntime.jsx(
859
- "img",
860
- {
861
- src: meta.logo,
862
- alt: "",
863
- className: "reevit-psp-option__logo-img",
864
- loading: "lazy"
865
- }
866
- ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__logo-fallback", children: fallbackInitial }) }),
867
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-psp-option__content", children: [
868
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__name", children: provider.name }),
869
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__methods", children: formatMethods(provider.methods) || meta.hint })
870
- ] }),
871
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__check", "aria-hidden": "true", children: isSelected ? "Selected" : "Select" })
872
- ]
873
- },
874
- provider.provider
875
- );
866
+ const optionStyle = getOptionStyle(isSelected);
867
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-psp-accordion", children: [
868
+ /* @__PURE__ */ jsxRuntime.jsxs(
869
+ "button",
870
+ {
871
+ type: "button",
872
+ className: cn(
873
+ "reevit-psp-option",
874
+ isSelected && "reevit-psp-option--selected",
875
+ disabled && "reevit-psp-option--disabled"
876
+ ),
877
+ style: optionStyle,
878
+ onClick: () => onSelect(provider.provider),
879
+ disabled,
880
+ "aria-expanded": isSelected,
881
+ children: [
882
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__logo", "aria-hidden": "true", children: meta.logo ? /* @__PURE__ */ jsxRuntime.jsx(
883
+ "img",
884
+ {
885
+ src: meta.logo,
886
+ alt: "",
887
+ className: "reevit-psp-option__logo-img",
888
+ loading: "lazy"
889
+ }
890
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__logo-fallback", children: fallbackInitial }) }),
891
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-psp-option__content", children: [
892
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__name", children: provider.name }),
893
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-psp-option__methods", children: formatMethods(providerMethods) || meta.hint })
894
+ ] })
895
+ ]
896
+ }
897
+ ),
898
+ isSelected && onMethodSelect && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-psp-accordion__content", children: [
899
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-psp-methods", children: /* @__PURE__ */ jsxRuntime.jsx(
900
+ PaymentMethodSelector,
901
+ {
902
+ methods: providerMethods,
903
+ selectedMethod: selectedMethod || null,
904
+ onSelect: onMethodSelect,
905
+ disabled,
906
+ provider: provider.provider,
907
+ layout: "list",
908
+ showLabel: false
909
+ }
910
+ ) }),
911
+ selectedMethod && renderMethodContent && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-psp-accordion__method-content", children: renderMethodContent(provider.provider, selectedMethod) })
912
+ ] })
913
+ ] }, provider.provider);
876
914
  }) })
877
915
  ] });
878
916
  }
@@ -1006,6 +1044,7 @@ function HubtelBridge({
1006
1044
  callbackUrl,
1007
1045
  hubtelSessionToken,
1008
1046
  basicAuth,
1047
+ preferredMethod,
1009
1048
  onSuccess,
1010
1049
  onError,
1011
1050
  onClose,
@@ -1056,12 +1095,14 @@ function HubtelBridge({
1056
1095
  try {
1057
1096
  const checkout = new CheckoutSdk__default.default();
1058
1097
  checkoutRef.current = checkout;
1098
+ const methodPreference = preferredMethod === "mobile_money" ? "momo" : preferredMethod === "card" ? "card" : void 0;
1059
1099
  const purchaseInfo = {
1060
1100
  amount: amount / 100,
1061
1101
  // Convert from minor to major units
1062
1102
  purchaseDescription: description,
1063
1103
  customerPhoneNumber: phone || "",
1064
- clientReference: reference || `hubtel_${Date.now()}`
1104
+ clientReference: reference || `hubtel_${Date.now()}`,
1105
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1065
1106
  };
1066
1107
  const config = {
1067
1108
  branding: "enabled",
@@ -1069,7 +1110,8 @@ function HubtelBridge({
1069
1110
  merchantAccount: typeof merchantAccount === "string" ? parseInt(merchantAccount, 10) : merchantAccount,
1070
1111
  // Use session token or basicAuth for authentication
1071
1112
  // Session tokens are base64-encoded credentials fetched securely from the server
1072
- basicAuth: authValue || ""
1113
+ basicAuth: authValue || "",
1114
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1073
1115
  };
1074
1116
  checkout.openModal({
1075
1117
  purchaseInfo,
@@ -1113,7 +1155,7 @@ function HubtelBridge({
1113
1155
  };
1114
1156
  onError(error);
1115
1157
  }
1116
- }, [merchantAccount, amount, reference, phone, description, callbackUrl, authValue, isLoading, onSuccess, onError, onClose]);
1158
+ }, [merchantAccount, amount, reference, phone, description, callbackUrl, authValue, isLoading, preferredMethod, onSuccess, onError, onClose]);
1117
1159
  react.useEffect(() => {
1118
1160
  if (autoStart && !initialized.current && !isLoading && authValue) {
1119
1161
  initialized.current = true;
@@ -1127,17 +1169,20 @@ function HubtelBridge({
1127
1169
  }
1128
1170
  function openHubtelPopup(config) {
1129
1171
  const checkout = new CheckoutSdk__default.default();
1172
+ const methodPreference = config.preferredMethod === "mobile_money" ? "momo" : config.preferredMethod === "card" ? "card" : void 0;
1130
1173
  const purchaseInfo = {
1131
1174
  amount: config.amount,
1132
1175
  purchaseDescription: config.description,
1133
1176
  customerPhoneNumber: config.customerPhoneNumber || "",
1134
- clientReference: config.clientReference || `hubtel_${Date.now()}`
1177
+ clientReference: config.clientReference || `hubtel_${Date.now()}`,
1178
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1135
1179
  };
1136
1180
  const checkoutConfig = {
1137
1181
  branding: "enabled",
1138
1182
  callbackUrl: config.callbackUrl || window.location.href,
1139
1183
  merchantAccount: typeof config.merchantAccount === "string" ? parseInt(config.merchantAccount, 10) : config.merchantAccount,
1140
- basicAuth: config.basicAuth || ""
1184
+ basicAuth: config.basicAuth || "",
1185
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1141
1186
  };
1142
1187
  checkout.openModal({
1143
1188
  purchaseInfo,
@@ -1830,6 +1875,14 @@ function useReevitContext() {
1830
1875
  }
1831
1876
  return context;
1832
1877
  }
1878
+ var pspNames = {
1879
+ hubtel: "Hubtel",
1880
+ paystack: "Paystack",
1881
+ flutterwave: "Flutterwave",
1882
+ monnify: "Monnify",
1883
+ mpesa: "M-Pesa",
1884
+ stripe: "Stripe"
1885
+ };
1833
1886
  function ReevitCheckout({
1834
1887
  // Config
1835
1888
  publicKey,
@@ -1918,7 +1971,8 @@ function ReevitCheckout({
1918
1971
  const options = available.length > 0 ? available : fallbackProvider;
1919
1972
  return options.map((provider) => {
1920
1973
  const methods = provider.methods && provider.methods.length > 0 ? provider.methods : paymentMethods;
1921
- const filteredMethods = methods.filter((method) => paymentMethods.includes(method));
1974
+ const sanitizedMethods = provider.provider.toLowerCase().includes("hubtel") ? methods.filter((method) => method === "card" || method === "mobile_money") : methods;
1975
+ const filteredMethods = sanitizedMethods.filter((method) => paymentMethods.includes(method));
1922
1976
  return {
1923
1977
  ...provider,
1924
1978
  methods: filteredMethods
@@ -1939,10 +1993,10 @@ function ReevitCheckout({
1939
1993
  if (selectedProvider && providerOptions.some((provider) => provider.provider === selectedProvider)) {
1940
1994
  return;
1941
1995
  }
1942
- const recommended = paymentIntent?.recommendedPsp;
1943
- const resolved = providerOptions.find((provider) => provider.provider === recommended)?.provider || providerOptions[0].provider;
1944
- setSelectedProvider(resolved);
1945
- }, [paymentIntent?.recommendedPsp, providerOptions, selectedProvider]);
1996
+ if (providerOptions.length === 1) {
1997
+ setSelectedProvider(providerOptions[0].provider);
1998
+ }
1999
+ }, [providerOptions, selectedProvider]);
1946
2000
  react.useEffect(() => {
1947
2001
  if (!activeProvider || !selectedMethod) {
1948
2002
  return;
@@ -1953,13 +2007,17 @@ function ReevitCheckout({
1953
2007
  }, [activeProvider, selectedMethod, selectMethod]);
1954
2008
  react.useEffect(() => {
1955
2009
  if (isOpen && selectedMethod && paymentIntent && !showPSPBridge) {
2010
+ const psp = (selectedProvider || paymentIntent.recommendedPsp || "paystack").toLowerCase();
2011
+ const needsPhone = psp.includes("mpesa");
1956
2012
  if (selectedMethod === "card") {
1957
2013
  setShowPSPBridge(true);
1958
- } else if (selectedMethod === "mobile_money" && (momoData?.phone || phone)) {
1959
- setShowPSPBridge(true);
2014
+ } else if (selectedMethod === "mobile_money") {
2015
+ if (!needsPhone || (momoData?.phone || phone)) {
2016
+ setShowPSPBridge(true);
2017
+ }
1960
2018
  }
1961
2019
  }
1962
- }, [isOpen, selectedMethod, showPSPBridge, paymentIntent, momoData, phone]);
2020
+ }, [isOpen, selectedMethod, showPSPBridge, paymentIntent, momoData, phone, selectedProvider]);
1963
2021
  const handleOpen = react.useCallback(() => {
1964
2022
  if (controlledIsOpen !== void 0) return;
1965
2023
  setIsOpen(true);
@@ -1983,6 +2041,10 @@ function ReevitCheckout({
1983
2041
  const handleProviderSelect = react.useCallback(
1984
2042
  (provider) => {
1985
2043
  if (provider === selectedProvider) {
2044
+ setSelectedProvider(null);
2045
+ reset();
2046
+ setShowPSPBridge(false);
2047
+ setMomoData(null);
1986
2048
  return;
1987
2049
  }
1988
2050
  const providerMethods = providerOptions.find((option) => option.provider === provider)?.methods || paymentMethods;
@@ -1999,8 +2061,14 @@ function ReevitCheckout({
1999
2061
  if (!selectedMethod) return;
2000
2062
  if (selectedMethod === "card") {
2001
2063
  setShowPSPBridge(true);
2064
+ } else if (selectedMethod === "mobile_money") {
2065
+ const psp = (selectedProvider || paymentIntent?.recommendedPsp || "paystack").toLowerCase();
2066
+ const needsPhone = psp.includes("mpesa");
2067
+ if (!needsPhone || (momoData?.phone || phone)) {
2068
+ setShowPSPBridge(true);
2069
+ }
2002
2070
  }
2003
- }, [selectedMethod]);
2071
+ }, [selectedMethod, selectedProvider, paymentIntent, momoData, phone]);
2004
2072
  const handleMomoSubmit = react.useCallback(
2005
2073
  (data) => {
2006
2074
  setMomoData(data);
@@ -2057,13 +2125,13 @@ function ReevitCheckout({
2057
2125
  ] }) : null;
2058
2126
  const renderContent = () => {
2059
2127
  if (status === "loading" || status === "processing") {
2060
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-loading", children: [
2128
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-loading reevit-animate-fade-in", children: [
2061
2129
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-spinner" }),
2062
2130
  /* @__PURE__ */ jsxRuntime.jsx("p", { children: status === "loading" ? "Preparing checkout..." : "Processing payment..." })
2063
2131
  ] });
2064
2132
  }
2065
2133
  if (status === "success" && result) {
2066
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-success", children: [
2134
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-success reevit-animate-scale-in", children: [
2067
2135
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-success__icon", children: "\u2713" }),
2068
2136
  /* @__PURE__ */ jsxRuntime.jsx("h3", { children: "Payment Successful" }),
2069
2137
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
@@ -2073,7 +2141,7 @@ function ReevitCheckout({
2073
2141
  ] });
2074
2142
  }
2075
2143
  if (status === "failed" && error && !error.recoverable) {
2076
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-error", children: [
2144
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-error reevit-animate-fade-in", children: [
2077
2145
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-error__icon", children: "\u2715" }),
2078
2146
  /* @__PURE__ */ jsxRuntime.jsx("h3", { children: "Payment Failed" }),
2079
2147
  /* @__PURE__ */ jsxRuntime.jsx("p", { children: error.message }),
@@ -2081,17 +2149,16 @@ function ReevitCheckout({
2081
2149
  ] });
2082
2150
  }
2083
2151
  const psp = selectedProvider || paymentIntent?.recommendedPsp || "paystack";
2152
+ const pspLower = psp.toLowerCase();
2084
2153
  if (showPSPBridge) {
2085
2154
  const pspKey = paymentIntent?.pspPublicKey || publicKey;
2086
2155
  const bridgeMetadata = {
2087
2156
  ...metadata,
2088
- // Override with correct payment intent ID for webhook routing
2089
- // This ensures webhook includes the correct ID to find the payment
2090
2157
  payment_id: paymentIntent?.id,
2091
2158
  connection_id: paymentIntent?.connectionId ?? metadata?.connection_id,
2092
2159
  customer_phone: momoData?.phone || phone
2093
2160
  };
2094
- switch (psp) {
2161
+ switch (pspLower) {
2095
2162
  case "paystack":
2096
2163
  return /* @__PURE__ */ jsxRuntime.jsx(
2097
2164
  PaystackBridge,
@@ -2124,6 +2191,7 @@ function ReevitCheckout({
2124
2191
  phone: momoData?.phone || phone,
2125
2192
  description: `Payment ${paymentIntent?.reference || reference || ""}`,
2126
2193
  hubtelSessionToken: paymentIntent?.id ? paymentIntent.id : void 0,
2194
+ preferredMethod: selectedMethod || void 0,
2127
2195
  onSuccess: handlePSPSuccess,
2128
2196
  onError: (err) => handlePSPError(err),
2129
2197
  onClose: handlePSPClose
@@ -2141,7 +2209,7 @@ function ReevitCheckout({
2141
2209
  phone: momoData?.phone || phone,
2142
2210
  metadata: bridgeMetadata,
2143
2211
  onSuccess: handlePSPSuccess,
2144
- onError: (err) => handlePSPError(err),
2212
+ onError: handlePSPError,
2145
2213
  onClose: handlePSPClose
2146
2214
  }
2147
2215
  );
@@ -2158,21 +2226,8 @@ function ReevitCheckout({
2158
2226
  customerEmail: email,
2159
2227
  customerPhone: momoData?.phone || phone,
2160
2228
  metadata: bridgeMetadata,
2161
- onSuccess: (result2) => handlePSPSuccess({
2162
- paymentId: result2.transactionReference,
2163
- reference: result2.paymentReference,
2164
- amount: result2.amount,
2165
- currency: paymentIntent?.currency ?? currency,
2166
- paymentMethod: selectedMethod || "card",
2167
- psp: "monnify",
2168
- pspReference: result2.transactionReference,
2169
- status: "success"
2170
- }),
2171
- onError: (err) => handlePSPError({
2172
- code: err.code,
2173
- message: err.message,
2174
- recoverable: true
2175
- }),
2229
+ onSuccess: (res) => handlePSPSuccess({ ...res, psp: "monnify" }),
2230
+ onError: handlePSPError,
2176
2231
  onClose: handlePSPClose
2177
2232
  }
2178
2233
  );
@@ -2187,21 +2242,8 @@ function ReevitCheckout({
2187
2242
  reference: paymentIntent?.reference || reference || `mpesa_${Date.now()}`,
2188
2243
  description: `Payment ${paymentIntent?.reference || reference || ""}`,
2189
2244
  headers: { "x-reevit-public-key": publicKey },
2190
- onSuccess: (result2) => handlePSPSuccess({
2191
- paymentId: result2.transactionId,
2192
- reference: result2.reference,
2193
- amount: paymentIntent?.amount ?? amount,
2194
- currency: paymentIntent?.currency ?? currency,
2195
- paymentMethod: "mobile_money",
2196
- psp: "mpesa",
2197
- pspReference: result2.transactionId,
2198
- status: "success"
2199
- }),
2200
- onError: (err) => handlePSPError({
2201
- code: err.code,
2202
- message: err.message,
2203
- recoverable: true
2204
- })
2245
+ onSuccess: handlePSPSuccess,
2246
+ onError: handlePSPError
2205
2247
  }
2206
2248
  );
2207
2249
  case "stripe":
@@ -2212,58 +2254,60 @@ function ReevitCheckout({
2212
2254
  clientSecret: paymentIntent?.clientSecret || "",
2213
2255
  amount: paymentIntent?.amount ?? amount,
2214
2256
  currency: paymentIntent?.currency ?? currency,
2215
- onSuccess: (result2) => handlePSPSuccess({
2216
- paymentId: result2.paymentIntentId,
2217
- reference: paymentIntent?.reference || reference || result2.paymentIntentId,
2218
- amount: paymentIntent?.amount ?? amount,
2219
- currency: paymentIntent?.currency ?? currency,
2220
- paymentMethod: selectedMethod || "card",
2221
- psp: "stripe",
2222
- pspReference: result2.paymentIntentId,
2223
- status: result2.status === "succeeded" ? "success" : "pending"
2224
- }),
2225
- onError: (err) => handlePSPError({
2226
- code: err.code,
2227
- message: err.message,
2228
- recoverable: true
2229
- }),
2257
+ onSuccess: handlePSPSuccess,
2258
+ onError: handlePSPError,
2230
2259
  onCancel: handlePSPClose
2231
2260
  }
2232
2261
  );
2233
2262
  default:
2234
2263
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-error", children: [
2235
2264
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-error__icon", children: "\u26A0\uFE0F" }),
2236
- /* @__PURE__ */ jsxRuntime.jsx("h3", { children: "Payment Provider Not Supported" }),
2265
+ /* @__PURE__ */ jsxRuntime.jsx("h3", { children: "Provider Not Supported" }),
2237
2266
  /* @__PURE__ */ jsxRuntime.jsxs("p", { children: [
2238
- "The selected payment provider (",
2267
+ "Provider (",
2239
2268
  psp,
2240
- ") is not currently supported in this checkout."
2269
+ ") is not supported."
2241
2270
  ] }),
2242
2271
  /* @__PURE__ */ jsxRuntime.jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleBack, children: "Go Back" })
2243
2272
  ] });
2244
2273
  }
2245
2274
  }
2246
- if (selectedMethod === "mobile_money" && !showPSPBridge) {
2247
- return /* @__PURE__ */ jsxRuntime.jsx(
2248
- MobileMoneyForm,
2249
- {
2250
- onSubmit: handleMomoSubmit,
2251
- onCancel: handleBack,
2252
- isLoading,
2253
- initialPhone: phone
2275
+ const renderMethodContent = (provider, method) => {
2276
+ const pspLower2 = provider.toLowerCase();
2277
+ const needsPhone = pspLower2.includes("mpesa");
2278
+ if (method === "card") {
2279
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-inline-action reevit-animate-fade-in", children: [
2280
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "reevit-inline-action__hint", children: "You'll be redirected to complete your card payment securely." }),
2281
+ /* @__PURE__ */ jsxRuntime.jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleContinue, disabled: isLoading, children: "Pay with Card" })
2282
+ ] });
2283
+ }
2284
+ if (method === "mobile_money") {
2285
+ if (needsPhone && !phone) {
2286
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-inline-action reevit-animate-fade-in", children: /* @__PURE__ */ jsxRuntime.jsx(MobileMoneyForm, { onSubmit: handleMomoSubmit, onCancel: handleBack, isLoading, initialPhone: phone, hideCancel: true }) });
2254
2287
  }
2255
- );
2256
- }
2257
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-method-step", children: [
2258
- providerOptions.length > 1 && /* @__PURE__ */ jsxRuntime.jsx(
2288
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-inline-action reevit-animate-fade-in", children: [
2289
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "reevit-inline-action__hint", children: pspLower2.includes("hubtel") ? "Opens the Hubtel checkout with Mobile Money selected." : `Continue to pay securely with Mobile Money via ${pspNames[pspLower2] || pspLower2.charAt(0).toUpperCase() + pspLower2.slice(1)}.` }),
2290
+ /* @__PURE__ */ jsxRuntime.jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleContinue, disabled: isLoading, children: pspLower2.includes("hubtel") ? "Continue with Hubtel" : "Pay with Mobile Money" })
2291
+ ] });
2292
+ }
2293
+ return null;
2294
+ };
2295
+ if (providerOptions.length > 1) {
2296
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-method-step reevit-animate-slide-up", children: /* @__PURE__ */ jsxRuntime.jsx(
2259
2297
  ProviderSelector,
2260
2298
  {
2261
2299
  providers: providerOptions,
2262
2300
  selectedProvider,
2263
2301
  onSelect: handleProviderSelect,
2264
- disabled: isLoading
2302
+ disabled: isLoading,
2303
+ theme: resolvedTheme,
2304
+ selectedMethod,
2305
+ onMethodSelect: handleMethodSelect,
2306
+ renderMethodContent
2265
2307
  }
2266
- ),
2308
+ ) });
2309
+ }
2310
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-method-step reevit-animate-slide-up", children: [
2267
2311
  /* @__PURE__ */ jsxRuntime.jsx(
2268
2312
  PaymentMethodSelector,
2269
2313
  {
@@ -2271,18 +2315,23 @@ function ReevitCheckout({
2271
2315
  selectedMethod,
2272
2316
  onSelect: handleMethodSelect,
2273
2317
  disabled: isLoading,
2274
- provider: activeProvider?.provider || psp
2318
+ provider: psp,
2319
+ layout: "list",
2320
+ showLabel: false
2275
2321
  }
2276
2322
  ),
2277
- selectedMethod && selectedMethod !== "mobile_money" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-method-step__actions", children: /* @__PURE__ */ jsxRuntime.jsx(
2278
- "button",
2279
- {
2280
- className: "reevit-btn reevit-btn--primary",
2281
- onClick: handleContinue,
2282
- disabled: isLoading,
2283
- children: "Continue"
2284
- }
2285
- ) })
2323
+ selectedMethod && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-method-step__actions reevit-animate-slide-up", children: selectedMethod === "mobile_money" && pspLower.includes("mpesa") && !phone ? /* @__PURE__ */ jsxRuntime.jsx(MobileMoneyForm, { onSubmit: handleMomoSubmit, onCancel: () => selectMethod(null), isLoading, initialPhone: phone }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-card-info reevit-animate-fade-in", children: [
2324
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "reevit-info-text", children: selectedMethod === "card" ? "You will be redirected to complete your card payment securely." : pspLower.includes("hubtel") ? "Opens the Hubtel checkout with Mobile Money selected." : `Continue to pay securely via ${pspNames[pspLower] || pspLower.charAt(0).toUpperCase() + pspLower.slice(1)}.` }),
2325
+ /* @__PURE__ */ jsxRuntime.jsx(
2326
+ "button",
2327
+ {
2328
+ className: "reevit-btn reevit-btn--primary",
2329
+ onClick: handleContinue,
2330
+ disabled: isLoading,
2331
+ children: selectedMethod === "card" ? "Pay with Card" : pspLower.includes("hubtel") ? "Continue with Hubtel" : "Pay with Mobile Money"
2332
+ }
2333
+ )
2334
+ ] }) })
2286
2335
  ] });
2287
2336
  };
2288
2337
  return /* @__PURE__ */ jsxRuntime.jsxs(ReevitContext.Provider, { value: { publicKey, amount, currency }, children: [
@@ -2298,23 +2347,8 @@ function ReevitCheckout({
2298
2347
  "aria-modal": "true",
2299
2348
  children: [
2300
2349
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-modal__header", children: [
2301
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-modal__branding", children: /* @__PURE__ */ jsxRuntime.jsx(
2302
- "img",
2303
- {
2304
- src: "https://i.imgur.com/bzUR5Lm.png",
2305
- alt: "Reevit",
2306
- className: "reevit-modal__logo"
2307
- }
2308
- ) }),
2309
- /* @__PURE__ */ jsxRuntime.jsx(
2310
- "button",
2311
- {
2312
- className: "reevit-modal__close",
2313
- onClick: handleClose,
2314
- "aria-label": "Close",
2315
- children: "\u2715"
2316
- }
2317
- )
2350
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "reevit-modal__branding", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: resolvedTheme?.logoUrl || "https://i.imgur.com/bzUR5Lm.png", alt: "Checkout", className: "reevit-modal__logo" }) }),
2351
+ /* @__PURE__ */ jsxRuntime.jsx("button", { className: "reevit-modal__close", onClick: handleClose, "aria-label": "Close", children: "\u2715" })
2318
2352
  ] }),
2319
2353
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "reevit-modal__amount", children: [
2320
2354
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "reevit-modal__amount-label", children: "Amount" }),