@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.mjs CHANGED
@@ -581,14 +581,6 @@ function detectCountryFromCurrency(currency) {
581
581
  };
582
582
  return currencyToCountry[currency.toUpperCase()] || "GH";
583
583
  }
584
- var pspNames = {
585
- hubtel: "Hubtel",
586
- paystack: "Paystack",
587
- flutterwave: "Flutterwave",
588
- monnify: "Monnify",
589
- mpesa: "M-Pesa",
590
- stripe: "Stripe"
591
- };
592
584
  var methodConfig = {
593
585
  card: {
594
586
  label: "Card",
@@ -611,28 +603,31 @@ function PaymentMethodSelector({
611
603
  selectedMethod,
612
604
  onSelect,
613
605
  disabled = false,
614
- provider
606
+ provider,
607
+ layout = "list",
608
+ showLabel = true
615
609
  }) {
616
610
  const getMethodLabel = (method, psp) => {
617
611
  const config = methodConfig[method];
618
- if (psp?.toLowerCase().includes("hubtel") && method === "mobile_money") {
619
- return `Pay with ${pspNames[psp.toLowerCase()] || "Hubtel"}`;
620
- }
621
612
  return config.label;
622
613
  };
623
614
  const getMethodDescription = (method, psp) => {
624
615
  const config = methodConfig[method];
625
616
  if (psp?.toLowerCase().includes("hubtel")) {
626
- return "Card, Mobile Money, and Bank Transfer";
617
+ return config.description;
627
618
  }
628
619
  return config.description;
629
620
  };
630
- return /* @__PURE__ */ jsxs("div", { className: "reevit-method-selector", children: [
631
- /* @__PURE__ */ jsx("div", { className: "reevit-method-selector__label", children: "Select payment method" }),
632
- /* @__PURE__ */ jsx("div", { className: "reevit-method-selector__options", children: methods.map((method) => {
621
+ const isGrid = layout === "grid";
622
+ return /* @__PURE__ */ jsxs("div", { className: cn("reevit-method-selector", isGrid && "reevit-method-selector--grid"), children: [
623
+ showLabel && /* @__PURE__ */ jsx("div", { className: "reevit-method-selector__label", children: "Select payment method" }),
624
+ /* @__PURE__ */ jsx("div", { className: cn(
625
+ "reevit-method-selector__options",
626
+ isGrid ? "reevit-method-selector__options--grid" : "reevit-method-selector__options--list"
627
+ ), children: methods.map((method, index) => {
633
628
  const config = methodConfig[method];
634
629
  const isSelected = selectedMethod === method;
635
- const methodLabel = getMethodLabel(method, provider);
630
+ const methodLabel = getMethodLabel(method);
636
631
  const methodDescription = getMethodDescription(method, provider);
637
632
  return /* @__PURE__ */ jsxs(
638
633
  "button",
@@ -640,28 +635,24 @@ function PaymentMethodSelector({
640
635
  type: "button",
641
636
  className: cn(
642
637
  "reevit-method-option",
638
+ isGrid ? "reevit-method-option--grid" : "reevit-method-option--list",
643
639
  isSelected && "reevit-method-option--selected",
644
640
  disabled && "reevit-method-option--disabled"
645
641
  ),
642
+ style: {
643
+ animationDelay: `${index * 0.05}s`
644
+ },
646
645
  onClick: () => onSelect(method),
647
646
  disabled,
648
647
  "aria-pressed": isSelected,
649
648
  children: [
650
- /* @__PURE__ */ jsx("span", { className: "reevit-method-option__icon", children: config.icon }),
649
+ /* @__PURE__ */ jsx("span", { className: "reevit-method-option__icon-wrapper", children: /* @__PURE__ */ jsx("span", { className: "reevit-method-option__icon", children: config.icon }) }),
651
650
  /* @__PURE__ */ jsxs("div", { className: "reevit-method-option__content", children: [
652
651
  /* @__PURE__ */ jsx("span", { className: "reevit-method-option__label", children: methodLabel }),
653
- /* @__PURE__ */ jsx("span", { className: "reevit-method-option__description", children: methodDescription })
652
+ !isGrid && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__description", children: methodDescription })
654
653
  ] }),
655
- isSelected && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__check", children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: /* @__PURE__ */ jsx(
656
- "path",
657
- {
658
- d: "M16.667 5L7.5 14.167 3.333 10",
659
- stroke: "currentColor",
660
- strokeWidth: "2",
661
- strokeLinecap: "round",
662
- strokeLinejoin: "round"
663
- }
664
- ) }) })
654
+ !isGrid && isSelected && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__check", children: /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "20 6 9 17 4 12" }) }) }),
655
+ !isGrid && !isSelected && /* @__PURE__ */ jsx("span", { className: "reevit-method-option__chevron", children: /* @__PURE__ */ jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("polyline", { points: "9 18 15 12 9 6" }) }) })
665
656
  ]
666
657
  },
667
658
  method
@@ -678,7 +669,8 @@ function MobileMoneyForm({
678
669
  onSubmit,
679
670
  onCancel,
680
671
  isLoading = false,
681
- initialPhone = ""
672
+ initialPhone = "",
673
+ hideCancel = false
682
674
  }) {
683
675
  const [phone, setPhone] = useState(initialPhone);
684
676
  const [network, setNetwork] = useState(null);
@@ -763,7 +755,7 @@ function MobileMoneyForm({
763
755
  )) })
764
756
  ] }),
765
757
  /* @__PURE__ */ jsxs("div", { className: "reevit-momo-form__actions", children: [
766
- /* @__PURE__ */ jsx(
758
+ !hideCancel && /* @__PURE__ */ jsx(
767
759
  "button",
768
760
  {
769
761
  type: "button",
@@ -805,11 +797,11 @@ var paystack_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAMOCA
805
797
  // src/assets/providers/stripe.png
806
798
  var stripe_default = "data:image/png;base64,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";
807
799
  var providerMeta = {
808
- paystack: { logo: paystack_default, hint: "Card & MoMo" },
800
+ paystack: { logo: paystack_default, hint: "Card & Mobile Money" },
809
801
  stripe: { logo: stripe_default, hint: "Card payments" },
810
802
  flutterwave: { logo: flutterwave_default, hint: "Global methods" },
811
- hubtel: { logo: hubtel_default, hint: "Mobile money" },
812
- monnify: { logo: monnify_default, hint: "Bank & card" },
803
+ hubtel: { logo: hubtel_default, hint: "Mobile Money & Card" },
804
+ monnify: { logo: monnify_default, hint: "Bank & Card" },
813
805
  mpesa: { logo: mpesa_default, hint: "M-Pesa" }
814
806
  };
815
807
  var methodLabels = {
@@ -819,54 +811,100 @@ var methodLabels = {
819
811
  };
820
812
  function formatMethods(methods) {
821
813
  if (!methods.length) return "Payment methods";
822
- return methods.map((method) => methodLabels[method]).join(" \u2022 ");
814
+ return methods.map((method) => methodLabels[method]).join(", ");
815
+ }
816
+ function sanitizeMethods(providerId, methods) {
817
+ if (providerId.toLowerCase().includes("hubtel")) {
818
+ return methods.filter((method) => method === "card" || method === "mobile_money");
819
+ }
820
+ return methods;
823
821
  }
824
822
  function ProviderSelector({
825
823
  providers,
826
824
  selectedProvider,
827
825
  onSelect,
828
- disabled = false
826
+ disabled = false,
827
+ theme,
828
+ selectedMethod,
829
+ onMethodSelect,
830
+ renderMethodContent
829
831
  }) {
832
+ const useBorder = theme?.pspSelectorUseBorder ?? false;
833
+ const bgColor = theme?.pspSelectorBgColor || "#0a0a0a";
834
+ const textColor = theme?.pspSelectorTextColor || "#ffffff";
835
+ const borderColor = theme?.pspSelectorBorderColor || "#374151";
836
+ const getOptionStyle = (isSelected) => {
837
+ if (useBorder) {
838
+ return {
839
+ backgroundColor: "transparent",
840
+ border: `2px solid ${isSelected ? borderColor : "#374151"}`,
841
+ color: isSelected ? textColor : "var(--reevit-text)"
842
+ };
843
+ }
844
+ return {
845
+ backgroundColor: isSelected ? bgColor : "transparent",
846
+ border: `2px solid ${isSelected ? bgColor : "#374151"}`,
847
+ color: isSelected ? textColor : "var(--reevit-text)"
848
+ };
849
+ };
830
850
  return /* @__PURE__ */ jsxs("div", { className: "reevit-psp-selector", children: [
831
- /* @__PURE__ */ jsx("div", { className: "reevit-psp-selector__label", children: "Choose your payment provider" }),
851
+ /* @__PURE__ */ jsx("div", { className: "reevit-psp-selector__label", children: "Select payment provider" }),
832
852
  /* @__PURE__ */ jsx("div", { className: "reevit-psp-selector__options", children: providers.map((provider) => {
833
853
  const meta = providerMeta[provider.provider] || {
834
854
  logo: void 0,
835
855
  hint: "Payment methods"
836
856
  };
857
+ const providerMethods = sanitizeMethods(provider.provider, provider.methods);
837
858
  const isSelected = selectedProvider === provider.provider;
838
859
  const fallbackInitial = provider.name.slice(0, 1).toUpperCase();
839
- return /* @__PURE__ */ jsxs(
840
- "button",
841
- {
842
- type: "button",
843
- className: cn(
844
- "reevit-psp-option",
845
- isSelected && "reevit-psp-option--selected",
846
- disabled && "reevit-psp-option--disabled"
847
- ),
848
- onClick: () => onSelect(provider.provider),
849
- disabled,
850
- "aria-pressed": isSelected,
851
- children: [
852
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo", "aria-hidden": "true", children: meta.logo ? /* @__PURE__ */ jsx(
853
- "img",
854
- {
855
- src: meta.logo,
856
- alt: "",
857
- className: "reevit-psp-option__logo-img",
858
- loading: "lazy"
859
- }
860
- ) : /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo-fallback", children: fallbackInitial }) }),
861
- /* @__PURE__ */ jsxs("div", { className: "reevit-psp-option__content", children: [
862
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__name", children: provider.name }),
863
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__methods", children: formatMethods(provider.methods) || meta.hint })
864
- ] }),
865
- /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__check", "aria-hidden": "true", children: isSelected ? "Selected" : "Select" })
866
- ]
867
- },
868
- provider.provider
869
- );
860
+ const optionStyle = getOptionStyle(isSelected);
861
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-psp-accordion", children: [
862
+ /* @__PURE__ */ jsxs(
863
+ "button",
864
+ {
865
+ type: "button",
866
+ className: cn(
867
+ "reevit-psp-option",
868
+ isSelected && "reevit-psp-option--selected",
869
+ disabled && "reevit-psp-option--disabled"
870
+ ),
871
+ style: optionStyle,
872
+ onClick: () => onSelect(provider.provider),
873
+ disabled,
874
+ "aria-expanded": isSelected,
875
+ children: [
876
+ /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo", "aria-hidden": "true", children: meta.logo ? /* @__PURE__ */ jsx(
877
+ "img",
878
+ {
879
+ src: meta.logo,
880
+ alt: "",
881
+ className: "reevit-psp-option__logo-img",
882
+ loading: "lazy"
883
+ }
884
+ ) : /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__logo-fallback", children: fallbackInitial }) }),
885
+ /* @__PURE__ */ jsxs("div", { className: "reevit-psp-option__content", children: [
886
+ /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__name", children: provider.name }),
887
+ /* @__PURE__ */ jsx("span", { className: "reevit-psp-option__methods", children: formatMethods(providerMethods) || meta.hint })
888
+ ] })
889
+ ]
890
+ }
891
+ ),
892
+ isSelected && onMethodSelect && /* @__PURE__ */ jsxs("div", { className: "reevit-psp-accordion__content", children: [
893
+ /* @__PURE__ */ jsx("div", { className: "reevit-psp-methods", children: /* @__PURE__ */ jsx(
894
+ PaymentMethodSelector,
895
+ {
896
+ methods: providerMethods,
897
+ selectedMethod: selectedMethod || null,
898
+ onSelect: onMethodSelect,
899
+ disabled,
900
+ provider: provider.provider,
901
+ layout: "list",
902
+ showLabel: false
903
+ }
904
+ ) }),
905
+ selectedMethod && renderMethodContent && /* @__PURE__ */ jsx("div", { className: "reevit-psp-accordion__method-content", children: renderMethodContent(provider.provider, selectedMethod) })
906
+ ] })
907
+ ] }, provider.provider);
870
908
  }) })
871
909
  ] });
872
910
  }
@@ -1000,6 +1038,7 @@ function HubtelBridge({
1000
1038
  callbackUrl,
1001
1039
  hubtelSessionToken,
1002
1040
  basicAuth,
1041
+ preferredMethod,
1003
1042
  onSuccess,
1004
1043
  onError,
1005
1044
  onClose,
@@ -1050,12 +1089,14 @@ function HubtelBridge({
1050
1089
  try {
1051
1090
  const checkout = new CheckoutSdk();
1052
1091
  checkoutRef.current = checkout;
1092
+ const methodPreference = preferredMethod === "mobile_money" ? "momo" : preferredMethod === "card" ? "card" : void 0;
1053
1093
  const purchaseInfo = {
1054
1094
  amount: amount / 100,
1055
1095
  // Convert from minor to major units
1056
1096
  purchaseDescription: description,
1057
1097
  customerPhoneNumber: phone || "",
1058
- clientReference: reference || `hubtel_${Date.now()}`
1098
+ clientReference: reference || `hubtel_${Date.now()}`,
1099
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1059
1100
  };
1060
1101
  const config = {
1061
1102
  branding: "enabled",
@@ -1063,7 +1104,8 @@ function HubtelBridge({
1063
1104
  merchantAccount: typeof merchantAccount === "string" ? parseInt(merchantAccount, 10) : merchantAccount,
1064
1105
  // Use session token or basicAuth for authentication
1065
1106
  // Session tokens are base64-encoded credentials fetched securely from the server
1066
- basicAuth: authValue || ""
1107
+ basicAuth: authValue || "",
1108
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1067
1109
  };
1068
1110
  checkout.openModal({
1069
1111
  purchaseInfo,
@@ -1107,7 +1149,7 @@ function HubtelBridge({
1107
1149
  };
1108
1150
  onError(error);
1109
1151
  }
1110
- }, [merchantAccount, amount, reference, phone, description, callbackUrl, authValue, isLoading, onSuccess, onError, onClose]);
1152
+ }, [merchantAccount, amount, reference, phone, description, callbackUrl, authValue, isLoading, preferredMethod, onSuccess, onError, onClose]);
1111
1153
  useEffect(() => {
1112
1154
  if (autoStart && !initialized.current && !isLoading && authValue) {
1113
1155
  initialized.current = true;
@@ -1121,17 +1163,20 @@ function HubtelBridge({
1121
1163
  }
1122
1164
  function openHubtelPopup(config) {
1123
1165
  const checkout = new CheckoutSdk();
1166
+ const methodPreference = config.preferredMethod === "mobile_money" ? "momo" : config.preferredMethod === "card" ? "card" : void 0;
1124
1167
  const purchaseInfo = {
1125
1168
  amount: config.amount,
1126
1169
  purchaseDescription: config.description,
1127
1170
  customerPhoneNumber: config.customerPhoneNumber || "",
1128
- clientReference: config.clientReference || `hubtel_${Date.now()}`
1171
+ clientReference: config.clientReference || `hubtel_${Date.now()}`,
1172
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1129
1173
  };
1130
1174
  const checkoutConfig = {
1131
1175
  branding: "enabled",
1132
1176
  callbackUrl: config.callbackUrl || window.location.href,
1133
1177
  merchantAccount: typeof config.merchantAccount === "string" ? parseInt(config.merchantAccount, 10) : config.merchantAccount,
1134
- basicAuth: config.basicAuth || ""
1178
+ basicAuth: config.basicAuth || "",
1179
+ ...methodPreference ? { paymentMethod: methodPreference } : {}
1135
1180
  };
1136
1181
  checkout.openModal({
1137
1182
  purchaseInfo,
@@ -1824,6 +1869,14 @@ function useReevitContext() {
1824
1869
  }
1825
1870
  return context;
1826
1871
  }
1872
+ var pspNames = {
1873
+ hubtel: "Hubtel",
1874
+ paystack: "Paystack",
1875
+ flutterwave: "Flutterwave",
1876
+ monnify: "Monnify",
1877
+ mpesa: "M-Pesa",
1878
+ stripe: "Stripe"
1879
+ };
1827
1880
  function ReevitCheckout({
1828
1881
  // Config
1829
1882
  publicKey,
@@ -1912,7 +1965,8 @@ function ReevitCheckout({
1912
1965
  const options = available.length > 0 ? available : fallbackProvider;
1913
1966
  return options.map((provider) => {
1914
1967
  const methods = provider.methods && provider.methods.length > 0 ? provider.methods : paymentMethods;
1915
- const filteredMethods = methods.filter((method) => paymentMethods.includes(method));
1968
+ const sanitizedMethods = provider.provider.toLowerCase().includes("hubtel") ? methods.filter((method) => method === "card" || method === "mobile_money") : methods;
1969
+ const filteredMethods = sanitizedMethods.filter((method) => paymentMethods.includes(method));
1916
1970
  return {
1917
1971
  ...provider,
1918
1972
  methods: filteredMethods
@@ -1933,10 +1987,10 @@ function ReevitCheckout({
1933
1987
  if (selectedProvider && providerOptions.some((provider) => provider.provider === selectedProvider)) {
1934
1988
  return;
1935
1989
  }
1936
- const recommended = paymentIntent?.recommendedPsp;
1937
- const resolved = providerOptions.find((provider) => provider.provider === recommended)?.provider || providerOptions[0].provider;
1938
- setSelectedProvider(resolved);
1939
- }, [paymentIntent?.recommendedPsp, providerOptions, selectedProvider]);
1990
+ if (providerOptions.length === 1) {
1991
+ setSelectedProvider(providerOptions[0].provider);
1992
+ }
1993
+ }, [providerOptions, selectedProvider]);
1940
1994
  useEffect(() => {
1941
1995
  if (!activeProvider || !selectedMethod) {
1942
1996
  return;
@@ -1947,13 +2001,17 @@ function ReevitCheckout({
1947
2001
  }, [activeProvider, selectedMethod, selectMethod]);
1948
2002
  useEffect(() => {
1949
2003
  if (isOpen && selectedMethod && paymentIntent && !showPSPBridge) {
2004
+ const psp = (selectedProvider || paymentIntent.recommendedPsp || "paystack").toLowerCase();
2005
+ const needsPhone = psp.includes("mpesa");
1950
2006
  if (selectedMethod === "card") {
1951
2007
  setShowPSPBridge(true);
1952
- } else if (selectedMethod === "mobile_money" && (momoData?.phone || phone)) {
1953
- setShowPSPBridge(true);
2008
+ } else if (selectedMethod === "mobile_money") {
2009
+ if (!needsPhone || (momoData?.phone || phone)) {
2010
+ setShowPSPBridge(true);
2011
+ }
1954
2012
  }
1955
2013
  }
1956
- }, [isOpen, selectedMethod, showPSPBridge, paymentIntent, momoData, phone]);
2014
+ }, [isOpen, selectedMethod, showPSPBridge, paymentIntent, momoData, phone, selectedProvider]);
1957
2015
  const handleOpen = useCallback(() => {
1958
2016
  if (controlledIsOpen !== void 0) return;
1959
2017
  setIsOpen(true);
@@ -1977,6 +2035,10 @@ function ReevitCheckout({
1977
2035
  const handleProviderSelect = useCallback(
1978
2036
  (provider) => {
1979
2037
  if (provider === selectedProvider) {
2038
+ setSelectedProvider(null);
2039
+ reset();
2040
+ setShowPSPBridge(false);
2041
+ setMomoData(null);
1980
2042
  return;
1981
2043
  }
1982
2044
  const providerMethods = providerOptions.find((option) => option.provider === provider)?.methods || paymentMethods;
@@ -1993,8 +2055,14 @@ function ReevitCheckout({
1993
2055
  if (!selectedMethod) return;
1994
2056
  if (selectedMethod === "card") {
1995
2057
  setShowPSPBridge(true);
2058
+ } else if (selectedMethod === "mobile_money") {
2059
+ const psp = (selectedProvider || paymentIntent?.recommendedPsp || "paystack").toLowerCase();
2060
+ const needsPhone = psp.includes("mpesa");
2061
+ if (!needsPhone || (momoData?.phone || phone)) {
2062
+ setShowPSPBridge(true);
2063
+ }
1996
2064
  }
1997
- }, [selectedMethod]);
2065
+ }, [selectedMethod, selectedProvider, paymentIntent, momoData, phone]);
1998
2066
  const handleMomoSubmit = useCallback(
1999
2067
  (data) => {
2000
2068
  setMomoData(data);
@@ -2051,13 +2119,13 @@ function ReevitCheckout({
2051
2119
  ] }) : null;
2052
2120
  const renderContent = () => {
2053
2121
  if (status === "loading" || status === "processing") {
2054
- return /* @__PURE__ */ jsxs("div", { className: "reevit-loading", children: [
2122
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-loading reevit-animate-fade-in", children: [
2055
2123
  /* @__PURE__ */ jsx("div", { className: "reevit-spinner" }),
2056
2124
  /* @__PURE__ */ jsx("p", { children: status === "loading" ? "Preparing checkout..." : "Processing payment..." })
2057
2125
  ] });
2058
2126
  }
2059
2127
  if (status === "success" && result) {
2060
- return /* @__PURE__ */ jsxs("div", { className: "reevit-success", children: [
2128
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-success reevit-animate-scale-in", children: [
2061
2129
  /* @__PURE__ */ jsx("div", { className: "reevit-success__icon", children: "\u2713" }),
2062
2130
  /* @__PURE__ */ jsx("h3", { children: "Payment Successful" }),
2063
2131
  /* @__PURE__ */ jsxs("p", { children: [
@@ -2067,7 +2135,7 @@ function ReevitCheckout({
2067
2135
  ] });
2068
2136
  }
2069
2137
  if (status === "failed" && error && !error.recoverable) {
2070
- return /* @__PURE__ */ jsxs("div", { className: "reevit-error", children: [
2138
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-error reevit-animate-fade-in", children: [
2071
2139
  /* @__PURE__ */ jsx("div", { className: "reevit-error__icon", children: "\u2715" }),
2072
2140
  /* @__PURE__ */ jsx("h3", { children: "Payment Failed" }),
2073
2141
  /* @__PURE__ */ jsx("p", { children: error.message }),
@@ -2075,17 +2143,16 @@ function ReevitCheckout({
2075
2143
  ] });
2076
2144
  }
2077
2145
  const psp = selectedProvider || paymentIntent?.recommendedPsp || "paystack";
2146
+ const pspLower = psp.toLowerCase();
2078
2147
  if (showPSPBridge) {
2079
2148
  const pspKey = paymentIntent?.pspPublicKey || publicKey;
2080
2149
  const bridgeMetadata = {
2081
2150
  ...metadata,
2082
- // Override with correct payment intent ID for webhook routing
2083
- // This ensures webhook includes the correct ID to find the payment
2084
2151
  payment_id: paymentIntent?.id,
2085
2152
  connection_id: paymentIntent?.connectionId ?? metadata?.connection_id,
2086
2153
  customer_phone: momoData?.phone || phone
2087
2154
  };
2088
- switch (psp) {
2155
+ switch (pspLower) {
2089
2156
  case "paystack":
2090
2157
  return /* @__PURE__ */ jsx(
2091
2158
  PaystackBridge,
@@ -2118,6 +2185,7 @@ function ReevitCheckout({
2118
2185
  phone: momoData?.phone || phone,
2119
2186
  description: `Payment ${paymentIntent?.reference || reference || ""}`,
2120
2187
  hubtelSessionToken: paymentIntent?.id ? paymentIntent.id : void 0,
2188
+ preferredMethod: selectedMethod || void 0,
2121
2189
  onSuccess: handlePSPSuccess,
2122
2190
  onError: (err) => handlePSPError(err),
2123
2191
  onClose: handlePSPClose
@@ -2135,7 +2203,7 @@ function ReevitCheckout({
2135
2203
  phone: momoData?.phone || phone,
2136
2204
  metadata: bridgeMetadata,
2137
2205
  onSuccess: handlePSPSuccess,
2138
- onError: (err) => handlePSPError(err),
2206
+ onError: handlePSPError,
2139
2207
  onClose: handlePSPClose
2140
2208
  }
2141
2209
  );
@@ -2152,21 +2220,8 @@ function ReevitCheckout({
2152
2220
  customerEmail: email,
2153
2221
  customerPhone: momoData?.phone || phone,
2154
2222
  metadata: bridgeMetadata,
2155
- onSuccess: (result2) => handlePSPSuccess({
2156
- paymentId: result2.transactionReference,
2157
- reference: result2.paymentReference,
2158
- amount: result2.amount,
2159
- currency: paymentIntent?.currency ?? currency,
2160
- paymentMethod: selectedMethod || "card",
2161
- psp: "monnify",
2162
- pspReference: result2.transactionReference,
2163
- status: "success"
2164
- }),
2165
- onError: (err) => handlePSPError({
2166
- code: err.code,
2167
- message: err.message,
2168
- recoverable: true
2169
- }),
2223
+ onSuccess: (res) => handlePSPSuccess({ ...res, psp: "monnify" }),
2224
+ onError: handlePSPError,
2170
2225
  onClose: handlePSPClose
2171
2226
  }
2172
2227
  );
@@ -2181,21 +2236,8 @@ function ReevitCheckout({
2181
2236
  reference: paymentIntent?.reference || reference || `mpesa_${Date.now()}`,
2182
2237
  description: `Payment ${paymentIntent?.reference || reference || ""}`,
2183
2238
  headers: { "x-reevit-public-key": publicKey },
2184
- onSuccess: (result2) => handlePSPSuccess({
2185
- paymentId: result2.transactionId,
2186
- reference: result2.reference,
2187
- amount: paymentIntent?.amount ?? amount,
2188
- currency: paymentIntent?.currency ?? currency,
2189
- paymentMethod: "mobile_money",
2190
- psp: "mpesa",
2191
- pspReference: result2.transactionId,
2192
- status: "success"
2193
- }),
2194
- onError: (err) => handlePSPError({
2195
- code: err.code,
2196
- message: err.message,
2197
- recoverable: true
2198
- })
2239
+ onSuccess: handlePSPSuccess,
2240
+ onError: handlePSPError
2199
2241
  }
2200
2242
  );
2201
2243
  case "stripe":
@@ -2206,58 +2248,60 @@ function ReevitCheckout({
2206
2248
  clientSecret: paymentIntent?.clientSecret || "",
2207
2249
  amount: paymentIntent?.amount ?? amount,
2208
2250
  currency: paymentIntent?.currency ?? currency,
2209
- onSuccess: (result2) => handlePSPSuccess({
2210
- paymentId: result2.paymentIntentId,
2211
- reference: paymentIntent?.reference || reference || result2.paymentIntentId,
2212
- amount: paymentIntent?.amount ?? amount,
2213
- currency: paymentIntent?.currency ?? currency,
2214
- paymentMethod: selectedMethod || "card",
2215
- psp: "stripe",
2216
- pspReference: result2.paymentIntentId,
2217
- status: result2.status === "succeeded" ? "success" : "pending"
2218
- }),
2219
- onError: (err) => handlePSPError({
2220
- code: err.code,
2221
- message: err.message,
2222
- recoverable: true
2223
- }),
2251
+ onSuccess: handlePSPSuccess,
2252
+ onError: handlePSPError,
2224
2253
  onCancel: handlePSPClose
2225
2254
  }
2226
2255
  );
2227
2256
  default:
2228
2257
  return /* @__PURE__ */ jsxs("div", { className: "reevit-error", children: [
2229
2258
  /* @__PURE__ */ jsx("div", { className: "reevit-error__icon", children: "\u26A0\uFE0F" }),
2230
- /* @__PURE__ */ jsx("h3", { children: "Payment Provider Not Supported" }),
2259
+ /* @__PURE__ */ jsx("h3", { children: "Provider Not Supported" }),
2231
2260
  /* @__PURE__ */ jsxs("p", { children: [
2232
- "The selected payment provider (",
2261
+ "Provider (",
2233
2262
  psp,
2234
- ") is not currently supported in this checkout."
2263
+ ") is not supported."
2235
2264
  ] }),
2236
2265
  /* @__PURE__ */ jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleBack, children: "Go Back" })
2237
2266
  ] });
2238
2267
  }
2239
2268
  }
2240
- if (selectedMethod === "mobile_money" && !showPSPBridge) {
2241
- return /* @__PURE__ */ jsx(
2242
- MobileMoneyForm,
2243
- {
2244
- onSubmit: handleMomoSubmit,
2245
- onCancel: handleBack,
2246
- isLoading,
2247
- initialPhone: phone
2269
+ const renderMethodContent = (provider, method) => {
2270
+ const pspLower2 = provider.toLowerCase();
2271
+ const needsPhone = pspLower2.includes("mpesa");
2272
+ if (method === "card") {
2273
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-inline-action reevit-animate-fade-in", children: [
2274
+ /* @__PURE__ */ jsx("p", { className: "reevit-inline-action__hint", children: "You'll be redirected to complete your card payment securely." }),
2275
+ /* @__PURE__ */ jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleContinue, disabled: isLoading, children: "Pay with Card" })
2276
+ ] });
2277
+ }
2278
+ if (method === "mobile_money") {
2279
+ if (needsPhone && !phone) {
2280
+ return /* @__PURE__ */ jsx("div", { className: "reevit-inline-action reevit-animate-fade-in", children: /* @__PURE__ */ jsx(MobileMoneyForm, { onSubmit: handleMomoSubmit, onCancel: handleBack, isLoading, initialPhone: phone, hideCancel: true }) });
2248
2281
  }
2249
- );
2250
- }
2251
- return /* @__PURE__ */ jsxs("div", { className: "reevit-method-step", children: [
2252
- providerOptions.length > 1 && /* @__PURE__ */ jsx(
2282
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-inline-action reevit-animate-fade-in", children: [
2283
+ /* @__PURE__ */ 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)}.` }),
2284
+ /* @__PURE__ */ jsx("button", { className: "reevit-btn reevit-btn--primary", onClick: handleContinue, disabled: isLoading, children: pspLower2.includes("hubtel") ? "Continue with Hubtel" : "Pay with Mobile Money" })
2285
+ ] });
2286
+ }
2287
+ return null;
2288
+ };
2289
+ if (providerOptions.length > 1) {
2290
+ return /* @__PURE__ */ jsx("div", { className: "reevit-method-step reevit-animate-slide-up", children: /* @__PURE__ */ jsx(
2253
2291
  ProviderSelector,
2254
2292
  {
2255
2293
  providers: providerOptions,
2256
2294
  selectedProvider,
2257
2295
  onSelect: handleProviderSelect,
2258
- disabled: isLoading
2296
+ disabled: isLoading,
2297
+ theme: resolvedTheme,
2298
+ selectedMethod,
2299
+ onMethodSelect: handleMethodSelect,
2300
+ renderMethodContent
2259
2301
  }
2260
- ),
2302
+ ) });
2303
+ }
2304
+ return /* @__PURE__ */ jsxs("div", { className: "reevit-method-step reevit-animate-slide-up", children: [
2261
2305
  /* @__PURE__ */ jsx(
2262
2306
  PaymentMethodSelector,
2263
2307
  {
@@ -2265,18 +2309,23 @@ function ReevitCheckout({
2265
2309
  selectedMethod,
2266
2310
  onSelect: handleMethodSelect,
2267
2311
  disabled: isLoading,
2268
- provider: activeProvider?.provider || psp
2312
+ provider: psp,
2313
+ layout: "list",
2314
+ showLabel: false
2269
2315
  }
2270
2316
  ),
2271
- selectedMethod && selectedMethod !== "mobile_money" && /* @__PURE__ */ jsx("div", { className: "reevit-method-step__actions", children: /* @__PURE__ */ jsx(
2272
- "button",
2273
- {
2274
- className: "reevit-btn reevit-btn--primary",
2275
- onClick: handleContinue,
2276
- disabled: isLoading,
2277
- children: "Continue"
2278
- }
2279
- ) })
2317
+ selectedMethod && /* @__PURE__ */ jsx("div", { className: "reevit-method-step__actions reevit-animate-slide-up", children: selectedMethod === "mobile_money" && pspLower.includes("mpesa") && !phone ? /* @__PURE__ */ jsx(MobileMoneyForm, { onSubmit: handleMomoSubmit, onCancel: () => selectMethod(null), isLoading, initialPhone: phone }) : /* @__PURE__ */ jsxs("div", { className: "reevit-card-info reevit-animate-fade-in", children: [
2318
+ /* @__PURE__ */ 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)}.` }),
2319
+ /* @__PURE__ */ jsx(
2320
+ "button",
2321
+ {
2322
+ className: "reevit-btn reevit-btn--primary",
2323
+ onClick: handleContinue,
2324
+ disabled: isLoading,
2325
+ children: selectedMethod === "card" ? "Pay with Card" : pspLower.includes("hubtel") ? "Continue with Hubtel" : "Pay with Mobile Money"
2326
+ }
2327
+ )
2328
+ ] }) })
2280
2329
  ] });
2281
2330
  };
2282
2331
  return /* @__PURE__ */ jsxs(ReevitContext.Provider, { value: { publicKey, amount, currency }, children: [
@@ -2292,23 +2341,8 @@ function ReevitCheckout({
2292
2341
  "aria-modal": "true",
2293
2342
  children: [
2294
2343
  /* @__PURE__ */ jsxs("div", { className: "reevit-modal__header", children: [
2295
- /* @__PURE__ */ jsx("div", { className: "reevit-modal__branding", children: /* @__PURE__ */ jsx(
2296
- "img",
2297
- {
2298
- src: "https://i.imgur.com/bzUR5Lm.png",
2299
- alt: "Reevit",
2300
- className: "reevit-modal__logo"
2301
- }
2302
- ) }),
2303
- /* @__PURE__ */ jsx(
2304
- "button",
2305
- {
2306
- className: "reevit-modal__close",
2307
- onClick: handleClose,
2308
- "aria-label": "Close",
2309
- children: "\u2715"
2310
- }
2311
- )
2344
+ /* @__PURE__ */ jsx("div", { className: "reevit-modal__branding", children: /* @__PURE__ */ jsx("img", { src: resolvedTheme?.logoUrl || "https://i.imgur.com/bzUR5Lm.png", alt: "Checkout", className: "reevit-modal__logo" }) }),
2345
+ /* @__PURE__ */ jsx("button", { className: "reevit-modal__close", onClick: handleClose, "aria-label": "Close", children: "\u2715" })
2312
2346
  ] }),
2313
2347
  /* @__PURE__ */ jsxs("div", { className: "reevit-modal__amount", children: [
2314
2348
  /* @__PURE__ */ jsx("span", { className: "reevit-modal__amount-label", children: "Amount" }),